
Audio Highlight Reel
Cut a long recording (podcast, interview, talk, stream) down to a short highlight reel of its best moments, delivered as a single stitched audio clip plus a cue sheet of the segments used. Locks selection criteria and target length FIRST, selects the strongest timestamped segments against those criteria, then assembles them into one clean reel with smooth joins. Defining 'what makes a highlight' and the runtime budget before cutting is what keeps the reel tight and on-theme instead of a random montage.
Steps
Entry step: criteria. Each step names the specialist role it wants; the full working prompt is expandable.
- Selection criteriaplannerentry
what counts as a highlight, target length, ordering
Show working prompt
Decide what to keep BEFORE cutting. Step 1: record the source (path, duration, transcript if available). Step 2: define the target reel length (e.g. 90-120s) and segment count/length bounds (e.g. 4-8 clips, each 8-25s). Step 3: write concrete selection criteria — what makes a moment a highlight here (a strong quote, a laugh, a key insight, an emotional beat, a clear answer) — so selection is judgeable, not vibes. Step 4: decide ordering (chronological, or hook-first) and whether to add short fades/gaps between clips. Step 5: decide intro/outro handling. Write an acceptance-criteria checklist (reel within ±15% of target length, N segments within bounds, each chosen segment matches a stated criterion, joins are clean with no mid-word cuts, a cue sheet lists each segment's source in/out) and decisions to `notes/criteria.md` via write_task_note AND the produces path.
- Select segmentsdeveloper
score candidates, pick segments with in/out timestamps
Show working prompt
Choose the segments against the criteria. Step 1: scan the transcript/audio and identify candidate moments, each with a precise in/out timestamp and the criterion it satisfies. Step 2: score/rank candidates and pick the set that fits the target length and segment bounds, trimming each in/out to natural pauses so no clip cuts a word in half. Step 3: order them per the scope (hook-first or chronological). Step 4: write the chosen segments to `notes/segments.json` (each: source in, out, criterion, one-line why) via write_task_note AND the produces path. Do not exceed the segment count or length budget. On a loop-back, swap only the flagged segments.
- Assemble the reeldeveloper
cut + stitch segments into one audio file + cue sheet
Show working prompt
Build the reel from the selected segments. Step 1: cut each segment from the source at its in/out, apply short fade-in/out at joins (and gaps if scoped) so transitions are smooth. Step 2: concatenate in the chosen order into one audio file `reel.mp3` (or the source format). Step 3: normalize loudness so clips don't jump in volume. Step 4: write a human-readable cue sheet `reel-cues.md` listing each segment: reel timecode, source in/out, and the highlight reason. Step 5: confirm the reel's total duration is within the target window. write_task_note the reel path, the cue sheet path, and the final duration. On a loop-back, re-cut only the flagged joins/segments.
- Evaluatereviewer
Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.
Show working prompt
Listen to and measure the reel. Step 1: confirm `reel.mp3` exists, is non-silent, and its duration is within ±15% of the target (PASS/FAIL). Step 2: confirm the cue sheet lists each segment with reel timecode + source in/out + reason, and the count is within bounds. Step 3: sample-listen (if an audio capability exists) for clean joins — no mid-word cuts, no volume jumps. Step 4: confirm each kept segment maps to a stated highlight criterion. Step 5: confirm ordering matches the scope. Write PASS/FAIL per criterion. Then route — this is the whole point of the loop: - **Every criterion PASSES →** call `advance_task_step({ ref, stepId: "evaluate", next: "finish" })`. - **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: "evaluate", next: "assemble" })` to loop back. The builder fixes exactly those gaps. Never route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in. - Finishdeveloper
All acceptance criteria met. Stamp a short summary and report DONE.
Show working prompt
Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.
Triggers
Phrases that suggest this craftbook to a crew.
- highlight reel from audio
- cut the best moments
- make a teaser clip
- shorten this recording to highlights
- audio sizzle reel
Source
View this craftbook on GitHub · MIT license