@@ -110,6 +110,22 @@ jobs:
110110 artifact_label : windows-x86_64
111111 cuda : false
112112
113+ # ── Windows GPU ────────────────────────────────────────────────────
114+ # Moonshine on the GPU via ONNX Runtime's WebGPU execution provider —
115+ # Dawn over D3D12 on Windows, so NVIDIA, AMD and Intel alike, with no
116+ # vendor SDK at build time and nothing extra to ship.
117+ #
118+ # This accelerates Moonshine, not whisper.cpp: ggml's Vulkan backend
119+ # is the only GPU path whisper.cpp has here and it does not register
120+ # on Windows MSVC static builds (ggml-org/whisper.cpp#3750). Someone
121+ # reading "Windows GPU" should know which engine gets the GPU, which
122+ # is why the app reports the two separately.
123+ - name : windows-webgpu
124+ os : windows-2022
125+ features : " moonshine-webgpu"
126+ artifact_label : windows-x86_64-webgpu
127+ cuda : false
128+
113129 steps :
114130 - uses : actions/checkout@v4
115131
@@ -332,9 +348,15 @@ jobs:
332348 # the MSI is a secondary, unadvertised artifact. Call tauri directly so
333349 # `--bundles nsis` reaches tauri instead of cargo.
334350 - name : Build installer (Windows, CPU)
335- if : runner.os == 'Windows'
351+ if : runner.os == 'Windows' && matrix.features == ''
336352 run : npx tauri build --bundles nsis
337353
354+ # Split from the step above rather than interpolating a possibly-empty
355+ # `--features`, which passes tauri a bare flag and fails the build.
356+ - name : Build installer (Windows, GPU)
357+ if : runner.os == 'Windows' && matrix.features != ''
358+ run : npx tauri build --bundles nsis --features ${{ matrix.features }}
359+
338360 # ── Collect and rename Linux artifacts ──────────────────────────────────
339361 # Search the whole workspace so the path is correct regardless of whether
340362 # cargo uses a workspace-level or package-level target directory.
@@ -516,16 +538,26 @@ jobs:
516538 | Linux | `-linux-x86_64.AppImage` | None |
517539 | Linux (GPU) | `-linux-x86_64-vulkan.AppImage` | Any Vulkan GPU |
518540 | Windows | `-windows-x86_64.exe` | None |
541+ | Windows (GPU) | `-windows-x86_64-webgpu.exe` | Any Direct3D 12 GPU |
519542
520543 **The Vulkan AppImage** is a portable GPU build: it accelerates any
521544 NVIDIA/AMD/Intel GPU via the host Vulkan driver, and falls back to
522545 CPU when no GPU is present.
523546
524547 **CPU builds** run on any hardware, including AMD, Intel, and ARM.
525548
526- **The Windows build** is an NSIS installer and runs inference on the
527- CPU. It is not code-signed yet, so SmartScreen will warn that the
528- publisher is unknown: choose **More info → Run anyway**.
549+ **The Windows builds** are NSIS installers. Neither is code-signed
550+ yet, so SmartScreen will warn that the publisher is unknown: choose
551+ **More info → Run anyway**.
552+
553+ **The Windows GPU build** accelerates the **Moonshine** speech
554+ engine on any Direct3D 12 GPU — NVIDIA, AMD or Intel — through ONNX
555+ Runtime's WebGPU provider. Select Moonshine in **Settings → Engine**;
556+ the tab says which backend the build actually has. Whisper.cpp still
557+ runs on the CPU on Windows either way, because its only GPU path
558+ here is ggml's Vulkan backend, which does not register on Windows
559+ MSVC static builds. If your GPU is not usable the app says so in the
560+ log and falls back to the CPU rather than pretending.
529561
530562 ### Windows — first run
531563
0 commit comments