Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
00e0f25
Add rust-tts-wrapper integration plan
willwade Jul 7, 2026
5cb8a78
Phase 1: rust-tts-wrapper integration layer + cloud engine support
willwade Jul 7, 2026
33a7590
Phase 1 verified: RustTts integration working with cloud engines
willwade Jul 7, 2026
461d2b8
Phases 2-4: Edge, Azure SSML, and SherpaOnnx via RustTts
willwade Jul 7, 2026
a326807
Clean up: route ALL engines through RustTts, remove parallel paths
willwade Jul 8, 2026
28848db
Fix: Sherpa C++ fallback speak path + engine presence check
willwade Jul 8, 2026
5d29efa
Remove dead C++ engine code, keep only RustTts + SherpaOnnx fallback
willwade Jul 8, 2026
20da5ac
Fix: SherpaOnnx via Rust working for Kokoro + Piper, MMS falls back t…
willwade Jul 8, 2026
65da6f4
All voices working through RustTts with 0.3.2
willwade Jul 8, 2026
128ea98
Add rust_tts_wrapper.dll to MSI payload + create local release
willwade Jul 8, 2026
ffeeece
Remove SherpaOnnx C++ fallback + wire up on_error callback
willwade Jul 8, 2026
a713860
Fix: preview errors, uninstall DLL unregister, cleanup script
willwade Jul 8, 2026
c3939ee
Edge voices now use SSML path + improved preview error reporting
willwade Jul 8, 2026
dd83fed
Remove DotNetTtsWrapper dependency entirely — use RustTtsWrapper for …
willwade Jul 8, 2026
7b6106b
Fix: preview audio format + language search for cloud voices
willwade Jul 8, 2026
04ba6c7
Update to RustTtsWrapper.Bindings 0.3.3 + remove language mapping
willwade Jul 8, 2026
49e17a1
Fix: voice search by language name (temporary workaround)
willwade Jul 8, 2026
1a90bb7
Update to RustTtsWrapper.Bindings 0.3.4 — proper language display names
willwade Jul 8, 2026
e1f1063
Fix: word boundary crash + test script
willwade Jul 8, 2026
7a2d658
Fix: Azure word boundaries — bypass MapTextOffset for plain text path
willwade Jul 8, 2026
9d22267
Word boundary events: async synthesis + immediate event delivery
willwade Jul 8, 2026
1f105d6
Update to RustTtsWrapper.Bindings 0.3.6 — Azure word offsets fixed
willwade Jul 8, 2026
701e7db
Dead code cleanup + CI fix
willwade Jul 8, 2026
2d11867
Remove branding.json — hardcode all values
willwade Jul 8, 2026
84717bb
Fix CI: correct YAML indentation in build-setup job
willwade Jul 8, 2026
df0b32d
Remove Narrator voice support — broken hack, not viable
willwade Jul 8, 2026
ed378fb
Add privacy-friendly PostHog analytics (opt-in)
willwade Jul 8, 2026
474b21f
Add first-run analytics consent dialog
willwade Jul 8, 2026
080bf67
Fix: MSI now auto-registers COM DLL on install
willwade Jul 8, 2026
5f12af8
Fix: MSI uninstall removes voice tokens + cleanup
willwade Jul 8, 2026
d933618
Fix: MSI auto-registers DLL on install — WiX immediate action
willwade Jul 8, 2026
b48e330
Fix: Grid3 crash — synchronous Speak + skip invalid boundaries
willwade Jul 8, 2026
5503d39
Disable boundary events — prevents Grid3 System.Speech crash
willwade Jul 8, 2026
0bdb368
Re-enable boundary events with offset mapping + async speak
willwade Jul 8, 2026
655a5c9
Repo cleanup: remove archive, stale files, update .gitignore
willwade Jul 9, 2026
7ae2c39
Update README for rust-tts-wrapper architecture
willwade Jul 9, 2026
bfd60df
Apply VoiceGarden website design system to Avalonia UI
willwade Jul 9, 2026
8908f34
Add app icon — taskbar, title bar, Start Menu
willwade Jul 9, 2026
e00eea5
Fix crash: AvaloniaResource for app.ico + remove broken image refs
willwade Jul 9, 2026
330c0e4
Add 32-bit rust_tts_wrapper.dll — full x86 support
willwade Jul 9, 2026
fbc3dcf
Add 3-page onboarding wizard (welcome, how-to, privacy)
willwade Jul 9, 2026
4e6f93e
Version-gated onboarding — shows on fresh install and version bumps
willwade Jul 9, 2026
4dc13c2
Remove DotNetTtsWrapper — delete .NET adapter + EngineConfig, bump to…
willwade Jul 9, 2026
f8f4869
Fix critical stability and performance issues from comprehensive code…
willwade Jul 9, 2026
b4a3ac5
Fix compilation errors in thread safety improvements
willwade Jul 9, 2026
e1c79d6
Update RustTtsWrapper.Bindings from 0.3.7 to 0.3.8
willwade Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 21 additions & 79 deletions .github/workflows/msbuild.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,6 @@ jobs:
sherpa-config/SherpaOnnxConfig.exe
sherpa-config/merged_models.json

build-engine-config:
name: Build EngineConfig
runs-on: windows-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4

- name: Build EngineConfig (self-contained, x64)
run: dotnet publish EngineConfig\EngineConfig.csproj -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -o engine-config

- uses: actions/upload-artifact@v4
with:
name: engine-config
path: engine-config/EngineConfig.exe

build-voice-garden-ui:
name: Build VoiceGarden.UI
runs-on: windows-2022
Expand All @@ -71,11 +55,11 @@ jobs:
run: |
dotnet publish VoiceGarden.UI\VoiceGarden.UI.csproj -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -p:PublishReadyToRun=false -o ${{github.workspace}}\ui-publish

- name: Copy branding.json
- name: Copy
shell: pwsh
run: |
if (Test-Path config\branding.json) {
Copy-Item config\branding.json ui-publish\ -Force
if (Test-Path config\) {
Copy-Item config\ ui-publish\ -Force
}

- uses: actions/upload-artifact@v4
Expand All @@ -86,7 +70,7 @@ jobs:
build-utilities:
name: Build submodules
runs-on: windows-2022
needs: [build-sherpa-config, build-engine-config]
needs: [build-sherpa-config]
permissions:
contents: read
strategy:
Expand Down Expand Up @@ -128,13 +112,6 @@ jobs:
name: sherpa-onnx-config
path: ${{github.workspace}}\out\

- name: Download EngineConfig and copy to utilities output
if: matrix.platform == 'x86' || matrix.platform == 'x64'
uses: actions/download-artifact@v4
with:
name: engine-config
path: ${{github.workspace}}\out\

- name: Download Sherpa model metadata for ARM64 utilities
if: matrix.platform == 'ARM64'
uses: actions/download-artifact@v4
Expand All @@ -147,12 +124,12 @@ jobs:
shell: pwsh
run: Remove-Item out\SherpaOnnxConfig.exe -ErrorAction SilentlyContinue

- name: Copy branding.json to output
- name: Copy to output
if: matrix.platform == 'x86'
shell: pwsh
run: |
if (Test-Path .\config\branding.json) {
Copy-Item -Path .\config\branding.json -Destination out\branding.json -Force
if (Test-Path .\config\) {
Copy-Item -Path .\config\ -Destination out\ -Force
}

- uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -218,41 +195,10 @@ jobs:
name: main-${{matrix.platform}}
path: out

build-dotnet-adapter:
name: Build .NET TTS Adapter
runs-on: windows-2022
permissions:
contents: read
strategy:
matrix:
platform: [x86, x64]
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Publish .NET adapter
shell: pwsh
run: |
$rid = "${{matrix.platform}}" -eq "x86" ? "win-x86" : "win-x64"
dotnet publish VoiceGardenSAPIAdapter.Net\VoiceGardenSAPIAdapter.Net.csproj `
-c ${{env.BUILD_CONFIGURATION}} `
-r $rid `
--self-contained false `
-o ${{github.workspace}}\out

- uses: actions/upload-artifact@v4
with:
name: dotnet-adapter-${{matrix.platform}}
path: out

build-setup:
name: Build MSI setup
runs-on: windows-2022
needs: [build-sherpa-config, build-engine-config, build-voice-garden-ui, build-utilities, build-main, build-dotnet-adapter]
needs: [build-sherpa-config, build-voice-garden-ui, build-utilities, build-main]
permissions:
contents: read
steps:
Expand All @@ -279,21 +225,17 @@ jobs:
Copy-Item artifacts\utilities-ARM64\* payload\ARM64\ -Recurse -Force
Copy-Item artifacts\main-ARM64\* payload\ARM64\ -Recurse -Force

# .NET adapter files (but preserve C++ adapter's native SherpaOnnx DLLs)
$nativeDlls = @("sherpa-onnx-c-api.dll", "sherpa-onnx.dll", "onnxruntime.dll", "onnxruntime_providers_shared.dll")
Get-ChildItem artifacts\dotnet-adapter-x86 -File | Where-Object { $_.Name -notin $nativeDlls } | ForEach-Object { Copy-Item $_.FullName payload\x86\ -Force }
Get-ChildItem artifacts\dotnet-adapter-x86 -Directory | ForEach-Object { Copy-Item $_.FullName payload\x86\ -Recurse -Force }
Get-ChildItem artifacts\dotnet-adapter-x64 -File | Where-Object { $_.Name -notin $nativeDlls } | ForEach-Object { Copy-Item $_.FullName payload\x64\ -Force }
Get-ChildItem artifacts\dotnet-adapter-x64 -Directory | ForEach-Object { Copy-Item $_.FullName payload\x64\ -Recurse -Force }

# VoiceGarden.UI.exe (the main configuration app)
Copy-Item artifacts\voice-garden-ui\VoiceGarden.UI.exe payload\ -Force

# Branding
if (Test-Path payload\x86\branding.json) {
Copy-Item payload\x86\branding.json payload\branding.json -Force
} elseif (Test-Path .\config\branding.json) {
Copy-Item .\config\branding.json payload\branding.json -Force
# Rust TTS wrapper native DLL (from NuGet package)
dotnet restore VoiceGarden.UI\VoiceGarden.UI.csproj
$rustDll = Get-ChildItem "$env:USERPROFILE\.nuget\packages\rustttswrapper.bindings" -Recurse -Filter "rust_tts_wrapper.dll" | Select-Object -First 1
if ($rustDll) {
Copy-Item $rustDll.FullName payload\x64\ -Force
Write-Host "Copied rust_tts_wrapper.dll to payload\x64\"
} else {
Write-Host "WARNING: rust_tts_wrapper.dll not found in NuGet cache"
}

- name: Build MSI
Expand All @@ -319,7 +261,6 @@ jobs:
path: |
installer-output/setup.exe
installer-output/VoiceGardenSAPIAdapter.msi
installer-output/branding.json

release:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -356,7 +297,7 @@ jobs:
# MSI + setup.exe
cp setup-msi/VoiceGardenSAPIAdapter.msi . 2>/dev/null || true
cp setup-exe/setup.exe . 2>/dev/null || true
cp setup-exe/branding.json . 2>/dev/null || true
cp setup-exe/ . 2>/dev/null || true

# Debug symbols
zip -r debug_symbols.zip x86 x64 ARM64 -i "*.pdb"
Expand All @@ -367,8 +308,7 @@ jobs:

# Full release layout (everything)
zip -r VoiceGardenSAPIAdapter_${ver}_release-layout.zip \
x86 x64 ARM64 VoiceGarden.UI.exe setup.exe VoiceGardenSAPIAdapter.msi \
branding.json \
x86 x64 ARM64 VoiceGarden.UI.exe setup.exe VoiceGardenSAPIAdapter.msi \ \
-i "*.exe" "*.dll" "*.json" "*.msi"

- name: Create release
Expand All @@ -391,6 +331,8 @@ jobs:
${{github.workspace}}/artifacts/x64/**
${{github.workspace}}/artifacts/ARM64/**
${{github.workspace}}/artifacts/VoiceGarden.UI.exe
${{github.workspace}}/artifacts/branding.json
${{github.workspace}}/artifacts/
${{github.workspace}}/artifacts/VoiceGardenSAPIAdapter.msi
${{github.workspace}}/artifacts/setup.exe


7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -403,3 +403,10 @@ engine-config/


vg_promote_output.txt

# Old archived code
archive/

out-full/
out-rust-tts/
payload/
16 changes: 0 additions & 16 deletions EngineConfig/EngineConfig.csproj

This file was deleted.

Loading
Loading