Skip to content

Audition a melody-free bed stem, and the full 8-bar Midnight Terminal theme #226

Description

@schmug

Task

Export two pieces of audio that the music integration was built to accept but that were never supplied, then audition each against a real episode. Both are explicitly deferred follow-ups from the original handoffs, not defects.

Context

render.py already supports both shapes — "mode": "bed" (a loopable theme ducked under the bookends) and "mode": "sting" (a short signature that never overlaps speech). See skills/daily-podcast/SKILL.md § Intro/outro music and skills/frontier-commits/SKILL.md § Intro/outro sting. No renderer change is needed for either item below; both are asset work plus a config change.

1. A melody-free bed stem for Pixel Window (daily show)

Today's daily mix retains the full melody under the intro and sign-off narration at duck_db: -18.0, because no bed-only stem was ever produced. The handoff was explicit about not claiming otherwise, and skills/daily-podcast/assets/music/PROVENANCE.json records it.

Export a stem from skills/daily-podcast/assets/music/pixel-window.strudel with the lead line removed (the square and sparkle triangle voices), keeping pads and bass. Audition it against a real episode and compare to the current mix.

2. The full 8-bar Midnight Terminal theme + its bed stem (Frontier Commits)

The bundled midnight-terminal.wav is one bar (2.307688 s), used as a sting. The full composition is 8 bars. Per skills/frontier-commits/assets/music/PROVENANCE.json:

  • Export cycles 0 through 8 from midnight-terminal.strudel with Multi Channel Orbits OFF; expected length 18.461538 s.
  • For the narration bed, set theme = 0 in that source and export the same range.

With both, Frontier Commits could move from sting to bed. Proposed (not approved) bed settings from the handoff: 104 BPM, one bar 2.307692 s, opening lead one bar, closing tail two bars (4.615385 s).

How to audition without shipping

Copy a past workdir, add the music block to its manifest, and dry-run — this is exactly how the current mixes were auditioned:

python3 skills/daily-podcast/render.py --manifest <workdir>/manifest.json --workdir <workdir> --dry-run

Use absolute paths (a relative --workdir breaks the ffmpeg concat list). If the workdir predates 2026-09-04, its TTS sidecars carry the pre-#206 cache key and will miss once — re-key them rather than paying for a fresh render.

Constraints

  • Do not change render.py's music layer; both modes already exist and are tested (tests/test_music.py).
  • Do not publish, and do not change either show's live music block until Cory has approved the new sound.
  • New assets go under the owning show's skills/<show>/assets/music/ with their hash and provenance recorded, and must clear the 2048 KB check-added-large-files hook.

Acceptance criteria

  • Each new stem is bundled with a PROVENANCE.json entry (hash, source, export settings).
  • Opening/closing previews produced from a real episode for each, for Cory to approve.
  • A recommendation on whether to switch either show, with the measured numbers behind it.

Out of scope

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions