Files
Tha.Les bf561a6c81 Lead/backing vocal split, stems relocation fixes, eager model pre-download (#406)
* Add on-demand lead/backing vocal split, fix stems relocation bugs, and eager model pre-download (#275, #403)

Lead/backing vocal split:
- New on-demand POST /api/jobs/{id}/vocal-split endpoint, running UVR-MDX-NET
  Karaoke 2 (audio-separator) as a second pass over Demucs's vocals.wav
- Desktop and mobile UI toggle to request the split, auto-chained once the
  base separation finishes, for both foreground and background jobs
- Mixer shows Lead Vocals / Backing Vocals lanes in place of Vocals once split

Stems relocation fixes (#403):
- user-data.json (library metadata) now lives inside the jobs folder so it
  follows a Settings relocation instead of staying behind in Documents
- The relocation endpoint's settings persist step was silently swallowing
  write failures and reporting false success; it now reports persisted:
  false and the Settings UI shows a clear warning instead

Desktop setup wizard:
- Demucs, beat-this, and the karaoke model now download eagerly during
  first-boot setup instead of lazily on first use

Also:
- Credit audio-separator / Ultimate Vocal Remover in the README per its
  license's attribution requirement, plus a license audit in docs/models.md
- Add models/ to .gitignore

* ci: install build-essential so diffq (audio-separator's dependency) can compile

diffq has no prebuilt wheel for Python 3.11+ on Linux, its last release only
ever shipped cp310 wheels, so uv sync must compile it from source, which
needs gcc. Docker and the Linux desktop release build already install
build-essential for the same reason; the plain lint/test CI container never
needed it before audio-separator (#275) pulled diffq in.

* chore: pin Unraid template to 0.12.0

This PR ships as v0.12.0, per the user's decision given it introduces the
new lead/backing vocal split feature.

---------

Co-authored-by: Thales <>
2026-08-21 17:43:03 +01:00

92 lines
1.3 KiB
Plaintext

# Python bytecode / native artifacts
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
# Python environments and package caches
.venv/
venv/
env/
.uv-cache/
pip-wheel-metadata/
# Python build outputs
dist/
*.egg-info/
*.egg
.eggs/
# Version is git-derived (hatch-vcs); these are generated artifacts, never committed.
app/_version.py
static/version.json
# Desktop dependencies and build outputs
desktop/node_modules/
node_modules/
# Playwright browser-test output (tests/e2e)
test-results/
playwright-report/
blob-report/
desktop/src-tauri/target/
desktop/src-tauri/gen/
# Test, coverage, and type-check caches
.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
.coverage.*
htmlcov/
.tox/
# Runtime job artifacts and local build scratch
data/
jobs/
cache/
models/
settings.json
.run/
.build
# Local environment and secrets
.env
.env.*
!.env.example
# Logs
*.log
logs/
# Local dev scripts
.local/
# Local notes and agent/tool state
.docs
.issues_docs
.claude/
.playwright-mcp/
# Codex: keep repo guidance, ignore local state/cache
.codex/*
.codex/AGENTS.md
.codex/skills/
.codex/skills/**
.codex/cache/
.codex/logs/
.codex/tmp/
# Editors and OS metadata
.idea/
.vscode/
.DS_Store
Thumbs.db
# Tool versions
.python-version
# Imported design references (kept local, not shipped)
design/