139 Commits
Author SHA1 Message Date
branderson 99c62822b4 feat: expose a job's inputs for prefilling the rebuild form 2026-07-27 01:53:54 -07:00
branderson fd0ea79a28 feat: rerun a finished job as a linked new job 2026-07-27 01:49:29 -07:00
branderson a646685c61 fix: wrap unlink in try/except to never raise from cleanup 2026-07-27 01:44:57 -07:00
branderson 96a5ad2e60 fix: keep uploads a rerun still needs 2026-07-27 01:40:40 -07:00
branderson 6536496a12 feat: map input changes to the pipeline stage they invalidate 2026-07-27 01:35:51 -07:00
branderson d65e55b137 Merge pull request 'Web UI: Spotify-style theming, first-class warnings, and live stage track' (#1) from webui-theming into main
Reviewed-on: branderson/karaoke-maker#1
2026-07-26 22:11:18 -07:00
branderson 3d36216769 fix: working clipboard on http, stale detail race, queued rail, idle label, empty-state copy
Final whole-branch review fix wave (5 items):
- copyPath: fall back to execCommand("copy") via an off-screen textarea,
  then to selecting the path text, since navigator.clipboard is undefined
  outside secure contexts (i.e. this app's normal http:// deployment)
- refreshDetail: snapshot selectedId before fetching and discard the
  response if selection changed while in flight, so a slow response can no
  longer permanently mis-pair the review panel with the wrong job now that
  polling stops when idle
- .st-queued: give the sidebar rail a colour that clears 3:1 against --panel
- now-bar: #now-label reflects running/idle state instead of always reading
  "NOW RUNNING"
- empty-state copy: distinguish a failed job from "nothing to review", fix
  the queue-empty messages to not ask the user to select something that
  doesn't exist, and normalise voice to lowercase/unpunctuated
2026-07-26 21:09:56 -07:00
branderson df5eff8c20 fix: pin the focus guards with mutation tests, keep #copy-path focusable, state not by colour alone 2026-07-26 20:27:23 -07:00
branderson 439f6f75b8 feat: live stage track, form polish, and idle-aware polling 2026-07-26 20:01:04 -07:00
branderson 9e01f0b204 feat: surface low-confidence warnings as first-class review rows 2026-07-26 19:45:03 -07:00
branderson cf48324f17 fix: strengthen xss guard, 3:1 field borders, clean disclosure names, centre main 2026-07-26 19:31:42 -07:00
branderson 8675d5594b feat: themed spotify-style shell for the web ui 2026-07-26 19:09:36 -07:00
branderson ca6006023d feat: vendor chakra petch display font and serve static assets 2026-07-26 18:50:41 -07:00
branderson 69810f584d feat: expose stage order and track cached stages in the web api 2026-07-26 18:44:46 -07:00
branderson 232f0354fc feat: record job timestamps in the web api 2026-07-26 18:41:02 -07:00
branderson d2ad3d1c90 fix: honest package-stage caching, safe cover fallback, unified language codes, upload cleanup
- package stage: cache off a package.done sentinel written only after every
  sub-step succeeds, instead of the txt/mp3 files that land first. A partial
  failure (e.g. ffprobe/PIL error after txt+mp3 are written) no longer looks
  cached, so a retry actually finishes the folder instead of being skipped.
- package stage: a corrupt/non-image cover file now degrades to the existing
  no-cover path (drop #COVER header) instead of raising UnidentifiedImageError.
- consolidate the three independent language-code tables (lyrics._LANG_MAP,
  notes._PYPHEN, whisper_client._ISO) into languages.LANGUAGES so a language
  known to one call site can't be silently mishandled by another (e.g.
  Japanese reaching Whisper correctly but syllabifying with English rules).
- web.py: remove a job's uploads/<job_id> dir once it reaches a terminal
  state; safe because acquire copies the upload into the per-song work dir
  and package reads cover_path directly, both inside the synchronous
  runner() call that precedes cleanup.
2026-07-25 21:59:45 -07:00
branderson ce57680a6a feat: docker packaging and readme
python:3.11-slim base relies on pip torch wheels bundling CUDA runtime libs,
with the host NVIDIA driver passed through via the nvidia container runtime
(compose GPU reservation); TORCH_HOME and XDG_CACHE_HOME point into the
mounted /data volume so Demucs/wav2vec2 weights survive container
recreation.

Docker was not installed in the implementation sandbox, so the image was
not built or run and remains untested. PyYAML was also unavailable, so
docker-compose.yml was not parse-checked programmatically — only hand
reviewed.
2026-07-25 21:38:24 -07:00
branderson 465d420b11 fix: harden web UI against XSS, stream uploads, and fix worker races 2026-07-25 21:24:43 -07:00
branderson 76075baf93 feat: minimal web ui with job queue 2026-07-25 21:15:34 -07:00
branderson 19d8ed6d7f fix: report bad lyrics file and content-dependent grid failures cleanly
- cli.py: guard --lyrics read against missing/unreadable/undecodable
  files, matching the file's existing error-reporting conventions
- stages/grid.py: route ValueError from scale_bpm/to_ultrastar through
  PipelineError with a user-facing message; use bpm_override is not None
  instead of truthiness so an explicit 0 override isn't silently ignored
2026-07-25 21:08:41 -07:00
branderson e093d8afd4 feat: cli make command and opt-in e2e test 2026-07-25 21:02:12 -07:00
branderson a349d697e4 feat: package stage producing final song folder 2026-07-25 20:56:34 -07:00
branderson 0f09e6702b fix: guard unusable bpm and empty notes, pin line-break tie ordering 2026-07-25 20:51:19 -07:00
branderson ba78587a54 feat: beat grid and ultrastar txt assembly 2026-07-25 20:42:08 -07:00
branderson b3a89b2f37 fix: guarantee non-overlapping notes with strictly increasing starts 2026-07-25 20:26:57 -07:00
branderson 7f1911642b feat: note generation from alignment + pitch 2026-07-25 20:08:55 -07:00
branderson bdde0af312 feat: torchcrepe pitch tracking stage 2026-07-25 20:00:24 -07:00
branderson f75686b736 fix: correct vocal section merging for out-of-order segments 2026-07-25 19:55:22 -07:00
branderson 19990d6883 feat: forced-alignment stage with lyrics sanity check 2026-07-25 19:46:32 -07:00
branderson c9d633eaf6 feat: whisper client and transcribe stage with section/similarity helpers 2026-07-25 19:38:51 -07:00
branderson ef1ac6e59c feat: demucs separation stage 2026-07-25 19:34:42 -07:00
branderson e5f1a17e0f fix: deterministic video/thumbnail classification in acquire stage 2026-07-25 19:31:34 -07:00
branderson d9dbfbfffa feat: acquire stage (yt-dlp / local file) and ffmpeg helpers 2026-07-25 19:26:48 -07:00
branderson 988970676a feat: pipeline framework with stage caching and force-from 2026-07-25 19:23:15 -07:00
branderson f3bd496461 fix: alignment_token whitespace consistency and typographic apostrophes 2026-07-25 19:21:07 -07:00
branderson ca42a6bad8 feat: reference lyrics normalization 2026-07-25 19:16:41 -07:00
branderson 2ad77775ef feat: config loading from toml 2026-07-25 19:14:15 -07:00
branderson d24d44582e feat: ultrastar txt parser/serializer with fixture round-trip 2026-07-25 19:09:49 -07:00
branderson 7448c97e20 chore: scaffold karaoke-maker package 2026-07-25 19:05:10 -07:00