Skip to content

1.9.0: advert suppression you can see, undo and teach — and faster - #10

Merged
antoine-debroye merged 1 commit into
mainfrom
ad/advert-suppression-redesign-e1b8a4
Sep 16, 2026
Merged

antoine-debroye merged 1 commit into
mainfrom
ad/advert-suppression-redesign-e1b8a4

Conversation

@antoine-debroye

Copy link
Copy Markdown
Collaborator

What

  • One Adverts page per show: totals, the rules in force (heard in N of M, Forget), and every episode as a bar of cuts with a reason and a ▶ that plays the original around the cut.
  • Undo: Restore here (one episode) and Restore everywhere and stop (the rule), applied in seconds without a pass.
  • Teaching: typed boundary words, and time ranges on an episode page (advert or station jingle). The original audio plays beside the published copy.
  • Automatic mode cuts a station jingle heard in every recent episode, shown with Forget.
  • Speed:
    • passes start on a scan that finds new files, and at boot;
    • unchanged files are not read;
    • the corpus searches run in a worker;
    • whisper gets 7 threads on an 8-core i7, at nice 10.
  • 1.9.0-cuda (experimental): a CUDA whisper build that is used only if whisper reports a GPU, otherwise the CPU build with a health warning.

Fixes

  • A read in more than 64 (words) or 32 (sound) episodes could never be found: the searches' key caps dropped it. The searches now run over a window below both caps.
  • A closing boundary matched at 0:00 on real RMC audio and asked to cut whole episodes.
  • A diff of any length was cut unasked in auto mode.
  • A file replaced mid-pass could be cut at stale frame positions.
  • Acceptance step 20 expected a 404 that 1.8.2 removed.

Tested

  • npm test: 1,301 passed, 0 failed.
  • test/acceptance/run.sh on a locally built image: 57 passed, 0 failed.
  • Six original RMC episodes (Simplecast): jingle found in 6/6; every new control driven in a browser and its effect checked through the API.
  • Not tested on a GPU: the CUDA image is first built by this CI.

Migration 011 is additive; 1.8.8 still runs against a migrated database.

🤖 Generated with Claude Code

…ter (1.9.0)

The Adverts page is one screen: totals, the rules in force, and every episode as a
bar of its cuts with a reason and a player. Restore here / Restore everywhere and
stop, typed boundaries, time-range teaching, and the original audio on the episode
page. Heard-once reads are no longer rows.

Underneath: a kind column (additive migration 011, 1.8.8 still runs on it),
per-episode restores keyed by time, passes triggered by scans and at boot, a stat
gate before hashing, corpus searches in a worker and windowed below their key caps
(a read in more than 32/64 episodes could never be found), decisions applied without
a pass, a per-episode trim lock with a digest check, whisper threads/nice settings,
and an experimental CUDA image with a GPU-first probe and CPU fallback.

Fixes found on real RMC audio: a closing boundary matched at 0:00 and asked to cut
whole episodes; the jingle's own sound was offered back beside its cut. Acceptance
step 20 no longer expects the 404 that 1.8.2 removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@antoine-debroye
antoine-debroye merged commit 0b2f7f0 into main Sep 16, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant