Releases: GKartist75/wan2gp-desktop
Release list
Wan2GP Desktop Launcher v3.0.9
Wan2GP Desktop Launcher v3.0.9
Install-location hardening
- Bare drive roots rejected (C:/D:/E:…). Picking a root now shows a confirm dialog offering
<drive>:\Wan2GP; installing straight onto a root is blocked (fixes the EPERMmkdir 'D:\'crash). - Same guard now applies to migration ("Move & restart") and the data-dir pencil.
Co-located uv wheel cache
UV_CACHE_DIRset to<install>/.uv-cachefor both install and in-app update. Cache and venv share a drive → hardlinks work, no "Failed to hardlink files; falling back to full copy" warning (verified on C: and D:).- Manage → General → uv Wheel Cache: live size/status, Purge (
uv cache prune) and Remove (delete the folder) controls.
Bug fixes from first test pass
uv cache prunecallback-type error fixed; Remove no longer freezes the UI (async delete).- uv binary detection covers
%LOCALAPPDATA%\uv\uv.exe+where uv.exeso prune works regardless of how uv was installed.
Verification
npm run test: 130/130 passing.- Clean installs on C:\Wan2GP and D:\Wan2GP (no hardlink warning; SageAttention post4→post6 safe swap; GGUF 1.0.8→1.0.11; bitsandbytes 0.49.2).
⚠ Unsigned build (no code-signing token configured): Windows shows an "unknown publisher" SmartScreen warning — consistent with prior releases. Install anyway / run anyway to proceed.
Wan2GP Desktop Launcher v3.0.8
v3.0.8 — Cross-drive install cleanup hardened (#76 / #73)
A maintenance fix for the initial-install clone path used when the install location is on a different drive than %TEMP%.
Background (honest)
The original EXDEV abort reported in #76 / #73 (install failing entirely when the target is on another drive) was already fixed in v3.0.7 — mergeDir → moveDirAtomic does rename first and falls back to a copy on EXDEV. The user-facing symptom from those issues is resolved from 3.0.7 onward.
What v3.0.8 actually fixes
moveDirAtomic's post-copy cleanup in 3.0.7 gated fs.rmSync(src) on readdirSync(src) to "verify parity". readdirSync throws on a plain file path, so after a cross-drive copy of a file (e.g. wgp.py) the cleanup was skipped and the source file leaked (it was only swept later by the caller at main.js:1211). v3.0.8 removes the source unconditionally after a successful cpSync (which handles both files and directories), so:
- no source-file leak on cross-drive installs,
- no
readdirSync-on-file crash risk, - the temp clone is cleanly emptied.
Tests
- Added a regression test that extracts
moveDirAtomic+mergeDirfrommain.js, simulatesEXDEVon everyrename, and asserts the clone merges cross-drive with no throw and a fully emptied source. - 124 tests pass (was 123 in 3.0.7).
Migration / config
No migration, config, or UX behavior changed. Install over any 3.0.x — non-disruptive.
Wan2GP Desktop Launcher v3.0.7
Wan2GP Desktop Launcher v3.0.7
Test build for #74 (migrate-to-C:\Wan2GP-Models not actually migrating) and #76 (cross-drive clone EXDEV crash), plus the migration UX fixes found during testing.
What's fixed
- #74 / Bug1 — config paths not rewritten: migrating the model folders now rewrites
wgp_config.jsonso Wan2GP reads checkpoints/loras/outputs from the new location (with a safe copy fallback, never half-migrated). - #74 / Bug2 — Installer Model-Folders UI was dead: the settings Model Folders panel is now wired to
wgp_config.jsonand reflects live state. - #76 — EXDEV on cross-drive clone: the clone path now uses a copy + verify + remove fallback, so moving across drives works.
UX (driven by testing)
- No stray
C:\Wan2GPcreated on launch. - Chosen drive is respected (no forced C: relocation).
- Model-folder pencil now opens and relocates; context-aware text (AppData only when actually roaming).
.gittravels with a moved install; old.electron/boot.logruntime is cleaned up.- "Check Desktop Updates" button shows a persistent dot when an update is available.
⚠️ Important
Migration is still experimental — for v3.x the recommended upgrade path is a clean reinstall. This build is non-disruptive to existing 3.0.6 installs: nothing auto-migrates unless you click the migrate button/pencil.
Upgrade from 3.0.6
Install over your existing 3.0.6 — your location pin is honored, no migration is forced.
Wan2GP Desktop Launcher v3.0.6
v3.0.6 — setup_config.json is the base; Sage correction covers RTX 30/40/50
What changed
setup_config.jsonis now the explicit base. The launcher installs exactly what deepbeepmeep'ssetup_config.jsondeclares (python / torch / triton / kernels / sage per GPU profile) — no more parallel hand-copied wheel list. Matchesdocs/INSTALLATION.md.- The one necessary correction:
sage.v220_cu13(cu130torch2.9.0andhigher.post4, the broken fp8 wheel that corrupts the CUDA context → false OOM / GPU hang / black MiniMax H3) is substituted with the cu130-native, fp8-fixedcu130torch2.10.0andhigher.post6wheel (abi3 → installs on Python 3.11, cu130-linked → no DLL load crash, out-of-bounds fixed per SageAttention #98). - Now covers RTX 30/40/50.
setup_config.jsondeclares the broken wheel for all three; previously only RTX 40/50 were self-healed, so RTX 30 was missed. Both the Sync Kernels button and Launch now self-heal it. - Launch self-heal retained (from 3.0.5): updating the launcher alone fixes the wheel on next Launch — no manual Sync Kernels required.
- GGUF → 1.0.11 and bitsandbytes 0.49.2 still applied as documented corrections (per INSTALLATION.md).
Upgrade
Install v3.0.6 (auto-updater offers it to 3.0.5 users). RTX 30/40/50: next Launch or Sync Kernels self-heals SageAttention to cu130.post6. RTX 20: Sage 1.0.6, untouched. GTX 10: no sage, untouched.
Full write-up: CHANGELOG-v3.0.6.md
Wan2GP Desktop Launcher v3.0.4
v3.0.4 — SageAttention swap fix (RTX 40/50): DLL import crash resolved
Hotfix for the v3.0.3 SageAttention swap. v3.0.3 installed a CUDA-12.8 SageAttention wheel that failed to import in the launcher's CUDA-13.0 / torch 2.10 environment:
ImportError: DLL load failed while importing _fused: The specified module could not be found.
Root cause
The launcher installs torch 2.10 + CUDA 13.0 (cu130). A cu128 SageAttention wheel's compiled _fused.pyd links against CUDA 12.8 runtime DLLs that are absent under cu130 → the module cannot load. The swap was pip-successful but runtime-broken.
Fix
The swap now targets the CUDA-13.0-native, fp8-fixed wheel:
sageattention-2.2.0+cu130torch2.10.0andhigher.post6-cp310-abi3-win_amd64.whl
cu130→ matches the env's CUDA 13.0 runtimes, so_fused.pydloads.cp310-abi3→ installs on Python 3.11 (the launcher's Python), no pip rejection..post6→ the build where the fp8 out-of-bounds bug (black/noise outputs on RTX 40/50) is fixed (SageAttention #98).
All wheel URLs the launcher can emit were verified live (HTTP 200) — no broken links.
Upgrade
Install v3.0.4 (auto-updater offers it to 3.0.2 / 3.0.3 users). RTX 40/50: after updating, click Sync Kernels once (or run one Update) to land on the stable cu130.post6 wheel. RTX 30/20/older: no action needed (swap only fires on RTX 40/50 + torch ≥ 2.10).
Full write-up: CHANGELOG-v3.0.4.md
Wan2GP Desktop Launcher v3.0.3
v3.0.3 — SageAttention swap hotfix (RTX 40/50)
Critical fix for the v3.0.2 SageAttention swap, which made Sync Kernels fail on RTX 40/50. Version bumped to 3.0.3 so the auto-updater offers it to everyone still on the broken 3.0.2 (a same-version re-upload would not trigger an update).
🐞 What was broken
undefinedsageattention-…whl— the wheel-URL prefixSAGE_CU128_BASEwas defined but not exported fromservices/kernel-resolver.js, so the URL was built asundefined+ filename. (fixed: added to module.exports)- pip-rejected wheel — the swap target was a Python-3.10-only wheel (
cp310-cp310), but the launcher provisions Python 3.11.14, so pip refused it. (fixed: nowcu128torch2.8.0-cp311-cp311, verified downloadable — HTTP 200)
✅ Result
RTX 40/50 users who update to 3.0.3 and click Sync Kernels (or run one Update) get the stable, fp8-safe SageAttention2++ build — full speed, no CUDA-context corruption / false OOM / black H3.
Notes
- RTX 30/20/older: no action needed (different, safe kernel paths; the swap only fires on RTX 40/50 + torch ≥ 2.10).
- The RTX 3080
accelerate/z-image fix, install progress heartbeat, and SAGE banner are unchanged and already correct. - Unsigned build (SignPath token not configured) — the "unknown publisher" warning is expected.
Full write-up: CHANGELOG-v3.0.3.md
Wan2GP Desktop Launcher v3.0.2
v3.0.2 — SageAttention RTX 40/50 fix, RTX 3080 accelerate fix, install progress
🐞 RTX 40/50: SageAttention cu130torch2.9.0andhigher wheel corrupts the CUDA context
Under torch 2.10 on sm89/sm120 (RTX 40/50), its fp8 PV CUDA kernel caused false out-of-memory errors, GPU hangs, and black MiniMax H3 frames. setSageAttentionSafe() now swaps it for the stable cu128torch2.8.0-cp311-cp311 build (the cu128 fp8-safe SageAttention2++, Python 3.11) on install / update / Kernel sync — full speed preserved, no downgrade to flash. A red SAGE banner tells affected users to click Sync Kernels (one click). Note: the swap only fires on RTX 40/50 + torch ≥ 2.10; RTX 30/20 stay on their correct, safe kernel paths.
🐞 RTX 3080 / all GPUs: missing accelerate skipped the z-image VAE fix
[bootstrap] z-image VAE dtype fix skipped: ModuleNotFoundError("No module named 'accelerate'"). The bootstrap is now deferred so a missing accelerate can't abort it, and ensureAccelerate() installs it when absent.
✨ Installer progress is now visible
A 15s activity heartbeat keeps the console alive during silent setup.py stretches, so the installer never looks frozen.
Verification
npm test→ 118 pass.node --checkon all sources OK.- Confirmed in a real RTX 3080 install:
z-image VAE dtype fix deferred,accelerate: present — ok., GGUF 1.0.8→1.0.11,Installation complete!. - SageAttention swap verified against the live cu128
cp311wheel (HTTP 200).
Upgrade
Install v3.0.2. RTX 40/50 users: click Sync Kernels once (or run one Update). RTX 30/20/older: no action needed (different, safe kernel paths).
Full write-up: CHANGELOG-v3.0.2.md
Wan2GP Desktop Launcher v3.0.1 — legacy launch fix + safe migration
Wan2GP Desktop Launcher v3.0.1
Bug-fix release — fixes the v3.0.0 launch failure for users coming from an old
roaming AppData install, and makes migration + updates safe and opt-in.
🐞 What was broken (v3.0.0)
Some users upgrading from an older install whose data lived in the roaming AppData
profile (%APPDATA%\wan2gp-desktop) reported that v3.0.0 showed no window at
all — only deleting Roaming\wan2gp-desktop and reinstalling helped.
Root cause: v3.0.0 ran the data-dir migration synchronously, before the first
window paint. On a roaming-source install that move could stall (AV scanning a
large AppData tree, locked files handled late), blocking the pre-paint path so the
renderer never got its first frame. Removing the roaming folder fixed it because the
migration became a no-op.
✅ What's fixed (v3.0.1)
- Migration is now deferred + opt-in. The app starts first, then offers a
"Migrate to new location" dialog (startup prompt, dashboardMODELSbanner,
or Manage). Legacy roaming users always get a window now. - You choose where data goes. The dialog lets you pick the data dir,
checkpoints, LoRAs, and outputs — preferred defaults pre-filled
(C:\Wan2GP+C:\Wan2GP-Models), all editable. Nothing is hard-coded. - Clean move. Flattens the repo (no
C:\Wan2GP\Wan2GPdoubling), rewrites
wgp_config.jsonmodel paths to the chosen locations, removes the now-empty
roaming wrapper. Locked files are skipped, not fatal. - Progress feedback. Live progress bar on the slow copy-fallback path (big
model folders never look frozen). - Auto-update is now manual-only. The Manage toggle is renamed
"Check for updates on launch" and defaults OFF.autoDownloadand
autoInstallOnAppQuitare forced off in code, so closing the app never
installs an update — only the explicit Check for updates → Download → Install
& Restart flow does.
📦 Per-hardware GPU kernel wheels (auto-installed, same set as v3.0.0)
The installer detects your GPU and pulls the exact wheels it needs, re-synced on
every update. v3.0.1 pins:
| Wheel | Version |
|---|---|
| Python (uv) | 3.11.14 (RTX 20–50) / 3.10.9 (GTX 10) |
| PyTorch + CUDA | 2.10.0 + CUDA 13.0 |
| Triton | latest (~3.7.1) |
| SageAttention | 1.0.6 (RTX 20) / 2.2.0 (RTX 30–50) |
| Sparge Attention | 0.1.0 |
| Flash-Attention | 2.8.3 |
| Nunchaku | 1.2.1 |
| GGUF llama.cpp CUDA | 1.0.11 |
| Lightx2v | 0.0.2 (RTX 50 FP4 only) |
| bitsandbytes | 0.49.2 (NF4) |
RTX 20 → Sage 1.0.6 + Flash + Nunchaku + GGUF. RTX 30/40 → add Sparge + Sage 2.2.0.
RTX 50 → add Lightx2v. GTX 10/16 stay on the legacy CUDA 12.8 stack.
🔄 How to upgrade
- From v3.0.0: install v3.0.1 over it. No automatic data move — use the in-app
Migrate to new location if you still keep models in AppData. - From an old roaming install (the v3.0.0-stuck case): install v3.0.1. It now
opens normally; then run Migrate to new location (or uninstall → close →
deleteRoaming\wan2gp-desktop→ reinstall).
⚠️ Notes
- Unsigned installer — the "unknown publisher" warning is normal for open-source
software without a code-signing certificate. Local builds are unsigned; signing
only happens on CI with the SignPath secrets. - Full change log: CHANGELOG-v3.0.1.md
Credits
- DeepBeepMeep — creator of Wan2GP.
- Tophness / Steve Jabz — original Wan2GP install scripts the launcher's
pipeline is built on. - All Wan2GP Desktop Launcher users — thank you for the bug reports that
surfaced the v3.0.0 launch failure.
v3.0.0 — self-contained install layout (C:\Wan2GP + C:\Wan2GP-Models)
Wan2GP Desktop Launcher v3.0.0
📁 BREAKING: install folders moved
Wan2GP now installs to a dedicated C:\Wan2GP (repo + venv + config) and keeps
model checkpoints/LoRAs on a separate C:\Wan2GP-Models (ckpts = C:\Wan2GP-Models\ckpts)
— out of roaming AppData for good. This kills the old Wan2GP\Wan2GP doubling and keeps
tens–hundreds of GB of models off your roaming profile.
How to upgrade: uninstall (keep/delete old models) → close launcher → run the new .exe
→ point models at C:\Wan2GP-Models\ckpts. (In-place update also works — it auto-migrates
your old AppData data into C:\Wan2GP on first launch, rollback-safe.)
⚙️ Latest GPU kernels — installed per hardware (v3.0.0 versions)
The installer reads Wan2GP's setup_config.json, shows exactly what it will install, and
re-syncs these on every update:
| Wheel | Version (v3.0.0) |
|---|---|
| Python (uv) | 3.11.14 (RTX 20–50) / 3.10.9 (GTX 10) |
| PyTorch + CUDA | 2.10.0 + CUDA 13.0 |
| Triton | latest (3.7.1 on this build) |
| SageAttention | 1.0.6 (RTX 20) / 2.2.0 (RTX 30–50) |
| Sparge Attention | 0.1.0 |
| Flash-Attention | 2.8.3 |
| Nunchaku | 1.2.1 |
| GGUF llama.cpp CUDA | 1.0.11 |
| Lightx2v (FP4) | 0.0.2 — RTX 50xx / sm120+ only |
| bitsandbytes (NF4) | 0.49.2 |
Per-hardware set: RTX 20 → Sage 1.0.6 + Flash 2.8.3 + Nunchaku + GGUF 1.0.11 · RTX 30/40 →
add Sparge 0.1.0 + Sage 2.2.0 · RTX 50 → add Lightx2v 0.0.2. All profiles also get bitsandbytes 0.49.2.
What's new in v3.0.0
- Self-contained default data dir
C:\Wan2GP(AppData fallback only whenC:\not writable) + one-time migration. - Separate
C:\Wan2GP-Models\ckpts(loras/outputs); legacy repo-relative model paths upgraded. - EPERM-on-reinstall fixed — clone uses temp dir +
mergeDir(), never renames the live data dir. - 3-layer warnings (install note, model-folder ⚠, dashboard
MODELSbanner). - README + infographic document the GPU kernel wheels (with versions) and map the 1-click installer to Wan2GP's manual
INSTALLATION.md. - Credits: DeepBeepMeep (Wan2GP), Tophness / Steve Jabz (original install scripts), and all users.
Also included (from 2.6 – 2.8.7, none regressed)
- No more black/blank screen — nested-
.screenDOM regression fixed (2.8.7), GPU-compositor override (2.8.2/2.8.3), update-app.asarblank (2.8.5). - Cleaner HTML structure (
#installer/#dashboardsiblings under#app,.screen{position:absolute;inset:0}). - GPU kernel-wheel sync (GGUF/Nunchaku/Flash/Sage/Sparge/bitsandbytes) on every install/update.
- Clean Desktop ↔ Dashboard switching — embedded view no longer reloads on restore, so in-page input is never dropped.
⚠️ Unsigned build (SignPath token not configured). Windows SmartScreen may warn on first run — that's expected.
v2.8.8 — fix #56 (no auto-reload on window focus)
v2.8.8 — fix #56 (no auto-reload on window focus)
Resolves issue #56: the embedded Wan2GP view is no longer reloaded when the
launcher window is restored after being hidden/covered/minimized while a
generation was running. That reload discarded all in-page input (prompt,
reference media, settings).
The v2.8.0 backgroundThrottling:false fix already keeps the queue panel live
while hidden, so the re-sync was redundant — only its data-loss downside
remained. The crash-watchdog reload is retained (fires only on an actual
renderer crash, where there is nothing to lose).
Verification
node --check main.js/preload.js→ OKnpm run test→ 82/82 pass- Built
Wan2GP-Desktop-Launcher-2.8.8-win-x64.exe(unsigned — no SignPath token in local build) - User confirmed: window no longer reloads on focus after generation, inputs preserved.
Note: the published artifact is unsigned. Code signing (SignPath) is applied
automatically on CI releases where the SIGNPATH_* secrets are configured.