skills/showtime/references/music.mdMusic: choosing, composing and syncing it to picture
Read this when you pick or compose music for a video: a produced track from the catalog, a composed
bed or none; which suits the tone, tempo and key; how to line sections up with the edit; and how to
end. The commands are in audio.md.
0. Produced track, composed bed, or none#
| The video | Music | How |
|---|---|---|
| launch, trailer, keynote opener, story, mission, thank-you, recap | a produced catalog track (a real recording) | showtime audio music pick --for launch --dur <len>, then {"kind": "music", "catalog": "<id>", "fit": true} in audio/mix.json |
| explainer, tutorial, data story, report, math | a restrained underscore: --for explainer / --for data (no vocals, low energy), a composed underscore, or none |
same, ducked under the voice |
| picture that must land on exact beats, a sting on a given frame, stems, an exact length with sections on cuts | the composer | showtime audio compose (sections 2-4) |
--foris one of launch, trailer, keynote, story, emotional, promo, social, product-demo, tech, explainer, tutorial, data, documentary, problem, background (audio music presets). Add--mood,--energy 0.2-0.5or words (audio music search hopeful piano). In a series, vary with--n 1,--n 2.- You cannot listen, so read
audio music info <id>: moods, energy, vocals,ending(clean = ends on a hit and a ring-out; soft = a fade or a quiet outro; cut = still loud at the end), the length, a long quiet intro and the highlight. Every catalog track passed a measured quality gate (no muffled old recordings, hiss, crackle, clipping or dead gaps) and its energy and shelf were checked against the audio. For a video much shorter than a slow-building track, start at its peak:{"kind": "music", "catalog": "<id>", "offset": "highlight", "fit": true}. When the user dislikes a track,audio music veto <id> --reason "..."and pick again. - A track is downloaded from its creator's site the first time it is used ("fetching X (N MB) for Y"), checked against its pinned sha256 and cached; cached tracks work offline.
- Credits are automatic: the mix records them, and
showtime renderwritescredits.txt, a "Credits (keep in the video description)" block inshare.txtand an optional end-card line, and prints a note for Scott Buckley tracks (his Smart Content ID claims YouTube videos whose description lacks the credit). Write the post copy above that block and never delete it. - More than the catalog:
audio music openverse <words>searches CC BY / CC0 audio on Freesound and Wikimedia Commons live (not curated, so preview first);--fetch <id> -o <project>/audiosaves it with a.license.json, so it is credited. Jamendo is excluded by default (--source jamendoto ask): its own terms add conditions to commercial use and its licensing program can claim videos. - Never use files from Pixabay, Mixkit, Uppbeat, Bensound or the YouTube Audio Library, or anything NC or ND: their licenses forbid this use.
1. Decide the job of the music first#
| The music's job | Choose | Level in the mix |
|---|---|---|
| Bed under voice-over (explainer, tutorial, data story, report) | underscore (or minimal-pulse for tech), steady, no melody |
ducked 12 dB under speech (default; sound-design.md) |
| Air under silent visuals (a no-voice explainer, math, chart story) | underscore, ambient-pad or piano-emotional; or no music at all |
the only sound: keep it slow, dark and sparse |
| Driver (launch reel, hype cut, no voice) | a produced track (--for launch / trailer), or a clear composed pulse with sections that match the edit |
the loudest element: -14 LUFS master, music ≈ everything |
| Emotional carrier (story, testimonial) | a produced piano or strings track (--for story), slow harmonic motion |
under voice, swell in the gaps |
| Punctuation (logo sting, transition, bumper) | a stinger, a jingle, or a composed 3–6 s piece | a short peak at the moment |
Taste rule: restraint reads as premium. A viewer forgives no music; they do not forgive cheap
music. Explainers, data stories, reports, math and anything sent to a team or a boss get a
restrained bed (underscore, minimal-pulse, ambient-pad, piano-emotional) or none.
"Voice + two or three soft effects, no music" is a real option: say it in the opening line when
the piece is short, serious or already dense with narration. Restrained styles never add crashes,
drum fills, snare rolls, risers or reverse cymbals on their own.
What not to pick unless the user asks for it (these are what make a video sound like a cat clip, a kids' game or a DIY stock-music video):
- bright plucked or mallet leads: glockenspiel, marimba, ukulele, pizzicato, whistles
(
playful-pizzicato,retro-8bit) for anything serious, technical or data-driven; - major-key bounce with claps and a shaker at 110+ bpm (
corporate-minimal,acoustic-folk) under a data story, a report or a proof; - a
build→dropsection map under charts or equations: the snare roll and crash announce a climax the picture doesn't have. Calm pieces useintro,verse,break,outro; - a busy melody under narration, or a different music gesture on every scene change;
- stacking pops, dings and chimes on a bed that already moves.
| Content | First choice | Also fine | Avoid |
|---|---|---|---|
| explainer or how-it-works, with voice | underscore |
minimal-pulse, none |
corporate-minimal, playful-pizzicato |
| data story, chart, report (HTML or MP4) | underscore |
minimal-pulse, ambient-pad, none |
anything with a drop |
| math, proof, science | underscore or ambient-pad at a low bpm |
piano-emotional, none |
pizzicato, 8-bit, claps |
| dev tool or technical walkthrough | minimal-pulse |
lofi-chill (casual), none |
retro-8bit unless the brand is retro |
| launch or promo with no voice | a catalog track (music pick --for launch) |
upbeat-tech, cinematic-build, minimal-pulse (premium) when cuts must hit exact beats |
corporate-minimal |
| company intro, upbeat feature tour | corporate-minimal |
acoustic-folk, minimal-pulse |
|
| kids, comedy, deliberately silly | playful-pizzicato |
retro-8bit, acoustic-folk |
2. Style catalog (showtime audio styles)#
| Style | Default bpm / key | Feel | Good for | Bpm range that still works |
|---|---|---|---|---|
| underscore | 76 / Dm | documentary: strings, contrabass, soft piano pulse, no drums, no melody | explainers, data, reports, math (the default) | 64–88 |
| minimal-pulse | 92 / Am | modern: warm pad, sub bass, muted pluck ostinato, soft kick | tech and data explainers, walkthroughs | 84–104 |
| upbeat-tech | 124 / C | bright, modern, four-on-the-floor | launches, feature reels, SaaS | 110–128 |
| corporate-minimal | 104 / G | bright, positive, piano and strings, shaker | upbeat company intros | 96–112 |
| cinematic-build | 90 / Dm | orchestral build, toms, impact | reveals, keynote openers | 80–100 |
| epic-trailer | 84 / Cm | taiko, brass, choir, braams | trailers, big announcements | 70–95 |
| lofi-chill | 78 / F | swung boom-bap, Rhodes, crackle | study or dev vibes, relaxed tours | 70–90 |
| synthwave | 100 / Am | 80s arps, gated drums | retro tech, gaming, night | 90–118 |
| ambient-pad | 70 / E | drumless, spacious | beauty shots, meditative intros, math | any (no pulse) |
| playful-pizzicato | 116 / D | quirky, light, comic | comedy, kids (on request) | 100–130 |
| deep-house | 122 / Am | smooth minor 7ths, sub bass | lifestyle, fashion, recaps | 118–126 |
| hip-hop-beat | 90 / Cm | heavy kick and snare, 808 bass | bold social, creator content | 80–100 |
| acoustic-folk | 100 / G | strummed guitar, warm, human | small business, travel, craft | 88–116 |
| piano-emotional | 72 / C | tender, hopeful | testimonials, mission, thanks | 60–84 |
| dark-tension | 80 / Dm | pulsing strings, drone, heartbeat | problem statements, security, mystery | 70–90 |
| retro-8bit | 140 / C | chiptune | games, dev humour (on request) | 120–160 |
| news-bumper | 120 / D | urgent pulses, brass stabs | announcements, changelogs, weekly recaps | 110–130 |
| lounge-jazz | 112 / F | swing ride, walking bass, vibes | hospitality, laid-back tours | 100–130 |
Tone to style, as a first guess:
- polished / premium / serious: underscore, minimal-pulse, ambient-pad, piano-emotional
- default / technical: minimal-pulse, upbeat-tech (launch energy)
- playful / light (asked for): playful-pizzicato, retro-8bit, acoustic-folk
- cinematic / epic: cinematic-build, epic-trailer
- urgent / news: news-bumper
- cozy / dev: lofi-chill
- emotional: piano-emotional
- dark / problem: dark-tension, then switch style (or key: minor to major) for the solution
Sections for calm beds: intro, verse, break, outro (energy follows the scenes without a
climax). Keep build and drop for pieces whose picture really builds and lands.
Keys:
- Minor keys read darker. Relative-major pairs (Am/C, Em/G, Dm/F) let a problem→solution video move from minor to major with the same notes.
- Keep effects in the music's key: pass the same
--keyto tonal SFX.
Tempo:
- 60–80 bpm is calm or emotional, 90–110 is confident and conversational, 110–130 is energetic, above 130 is hyper.
- Busy visuals want a slower bed. Sparse visuals can take a faster one.
Catalog, composer or library?
- Catalog (produced recordings, section 0) when the music should sound produced and human, which
is most launches, trailers and emotional pieces.
"fit": trueloops or trims it on bar lines; cut the picture to its beats (the mix report listsdownbeatsandend_hit). - Compose when the edit has fixed beats that the music must hit (section changes, a logo at a time, an exact length) or you need stems. Structure is exact, sound is good but synthetic.
- Both: a catalog bed with composed or procedural stingers and risers in the same key.
- The installed library (
audio lib search --kind music) is mostly light Kevin MacLeod pieces and CC0 game music: for serious work search calm, ambient, cinematic or piano moods, read the title and tags, and skip anything quirky, funny, ukulele, whistle, circus or kids.
3. Sync music to the edit#
A produced track under a short film (launch, promo, trailer, recap): let the music set the cuts.
showtime audio cuts [id|file] --for launch --dur 30 --scenes 5 analyses the track once (beats, bars,
4-bar phrases, loudness every 0.5 s, the lifts where it steps up), picks the excerpt that starts calm,
has somewhere to go and swells where the end card starts, and puts each scene change on a phrase
start (else a half-phrase or a bar line). It prints the plan: the excerpt, the scene starts, how many
changes sit on phrases or swells, the dynamics. --apply <project> also moves the scenes there
(retime --cuts) and writes the excerpt as the project's music track (offset, dur, fades);
--offset keeps an excerpt you chose; --end-card and --hook set those lengths. Premium launch
beds sit quiet with swells (the excerpt's 10th-90th percentile spread of 5-10 dB); qa warns when the
master moves less than 3 dB.
Composed music or a fixed edit:
- Decide the section map from the storyboard: where the hook lands, where the demo builds, where the reveal drops, where the call to action sits.
- Compose with those times as
--sections. Every marker is a downbeat, so the section change, the riser landing and the impact all land on your cut. - Read
bed.beats.json:downbeatsare where hard cuts can go.beatsare for text pops (60–70 % on the grid feels musical; 100 % feels mechanical).eventsgives riser_end, impact and end_hit times.
- Cut picture 1–2 frames before the beat (33–66 ms at 30 fps). Sound slightly after picture feels tight. Sound before picture feels wrong.
- The cutting rate follows the energy:
- calm sections: a cut every 2 bars
- builds: every bar
- drops: every beat or half beat, for a short burst only
- For library music, run
audio beats.- When
pacingisphrase_flow, don't hard-cut on the grid: cut on energy changes (moments) and phrase starts. - When
bpm_confidenceis low, snap only the 1–3 biggest moments.
- When
- If the music is fixed (for example a licensed track), move the cuts instead: snap each scene boundary to the nearest downbeat within half a beat.
4. Endings#
- End on a button: a final hit on the logo, then 1–3 s of ring-out. Composed music does this
by construction:
end_hitis the time of the hit. Put the logo reveal exactly there, or on the downbeat before it. - Library music:
audio fit --dur Dloops on bar lines to stretch, or trims to end after a downbeat with a short decay. It prints the bar it ends on and says "ends mid-phrase" when the cut is not on a 4-bar boundary.--ending songkeeps the track's own ending instead: its last two bars (the cadence and the final hit) are spliced in at a downbeat, so a 110 s track cut to 45 s still ends on its real cadence (end_hitin the JSON output is where the final hit lands).- To end on a precise hit, fit the bed a little short, then add a stinger (
--kind stinger), oraudio sfx logo-sting --key <key>withalign: hiton the logo time. Library tracks rarely have a button ending; a synthesizedlogo-stingin the bed's key (from itsbeats.jsonkey) is the reliable one:showtime audio lib search --kind stinger --key Cfor library stings. audio fit --from 42starts inside the track (the chorus, the loud part) on the nearest downbeat. In a mix, afit: truetrack honoursoffsetthe same way: the fit and its downbeat grid start at the offset.
- Never fade out in the middle of a phrase because the video ran out. Change the edit or the music length instead.
- A 0.25–0.5 s near-silence before the final hit (a pre-drop gap) makes the logo land harder. Composed builds already include one for most styles.
5. Iterate cheaply#
- Compose drafts at the real length but listen to the stems when something is off:
bed.stems/lead.wavtoo busy under voice? Re-seed (--seed 2), change the style, or remove the drop (fewer sections with a lead). - Loudness is always -14 LUFS after mastering. Judge balance and arrangement, not volume.
- Keep the chosen style, bpm, key, sections and seed in the project notes, so a later edit can regenerate exactly the same music at a new length.