Song — sources
Reference ads (paraphrased beat by beat; structure only, never copy lyrics or scripts)
- Our parent: exhibit A (sa-ontime-10-exhibita-a), 271.5 s, 684 words, $33.7 CPA, ROAS 2.48 on $292. Ex-husband uses the son's tardies as an exhibit in custody mediation → her mornings → a witness room → a nurse explains deep sleep → the band → the son clears her. Disney/Pixar-style 3D. Keep: the whole beat sheet (LOCKED). Change: one variable per song. Its R&B singer is NOT the voice (PB §3).
- Foreplay 12_musical — Resilia aged garlic, 7:25, 9:16, AI narrative VSL. Paraphrase: a man walks in on his wife with a trainer and she mocks how he's let himself go → he narrates three years of fatigue → an older, fit mentor confesses-listens → the mentor names a hidden cause (clogged arteries, 3D b-roll) → the product as the fix → a week-by-week transformation log with a doctor confirming → the ex tries to come back and he closes the door → he recommends it to a friend → "available on Amazon." Lip-sync on faces, cuts every 3-5 s. Keep: a humiliation hook from someone close, a mentor INSIDE the story who names the cause, proof before the payoff, the accuser witnessing the result. Change: our accuser blames her for the mornings (not her body); 3-5.5 min not 7:25; no lip-sync; no evangelist epilogue.
- Foreplay 13_suno — Smooche colour-changing foundation, 5:37, 9:16, Pixar-style musical. Paraphrase: a 63-year-old woman runs into her ex and his much younger partner in a store → flashback to the divorce and makeup that settled in wrinkles → a work trip abroad, a same-age colleague who looks decades younger explains why → product + mechanism visual → she tries it → back at the store the younger partner asks for her secret → an offer screen (units sold, discount) mid-roll → the ex texts, she ignores it. Lyrics carry the whole script; lip-sync on a few singing clips. Keep: first-person woman singing her own story, an explainer met inside the story, the rival/accuser asking for her secret (vindication), confirms ≥3 min works. Change: no on-camera singing; no mid-roll offer screen unless tested as its own cell with PDP-true claims only.
- davidaistar "Singing ads" tutorial (analysis/gemini_8NzJJ3e7uZ4.md; transcript file is empty, Gemini-only). 30-60 s 3D song for a mattress client: hook on a scary concrete object → agitation → pivot to a simple daily habit → rhymed 3-4 ingredient list → CTA; Suno FIRST as the clock; character sheet; 2x2 contact-sheet storyboards; H3 Max with panel + character ref + sliced audio; native audio muted, master laid back; hard headline + karaoke captions; 2-3 s hyper-motion product end card (optional,
--end-card; off by default per Fish 10-06). Claims 4.95x ROAS, $17.43 CPM. Keep: song = clock, sliced audio, master relaid (all already in our lane), the motion end card (endcard.py), caption placement above the name/description zone. Change: our spine is the accuser story, not the ingredient chant (mechanism-only songs never scaled); the chant lives inside beat 8 or the short cell. - davidaistar song + UGC lip-sync (analysis/gemini_PmXqgiFn9_Y.md). ~30 s Pixar anthropomorphic product rap, beats tagged Lip-sync or B-roll on 3-5 s slices, cheap "P-Video" model rerolled as a slot machine, Suno intro trimmed. Keep: trim to the first vocal (
--head 0.05). Don't adopt: character/brand-voice rap (SLOP SONG GOAT 0.72), no-ref B-roll models (identity drift), lip-sync (Fish 9-19; test cell only).
10-06 songs diff (~/research/davidaistar/analysis/diff_songs.md) — what this skill folds in
| Diff row | Gap | Where it lands here |
|---|---|---|
| 25 (P0) | Splitter _SYS has none of the song rules; check_plan.py checks only timing/caps; ~100 beats hand-fixed, ~11 lit-band regens on 10-04 |
SKILL §7 manual checklist; §12 "not built" line |
| 21 (P1) | One hook per $26-33 song | SKILL §11: hooksplice (built) + replace-section (not built) |
| 15 (P1, Fish call) | On-camera sung chorus untested; overrides 9-19 ruling | SKILL §11 test cell, needs Fish's go, not built |
| 3b / 22 (P1) | No short song; ≥3 min rule untested against 30-60 s | beat-sheet short cell; SKILL §11 |
| 18 (P1) | Captions at 68-74 % may sit in the Reels overlay zone | SKILL §10 safe-zone check |
| 20 (P1) | End card (optional, --end-card; off by default per Fish 10-06) spin wired (--clip, end_card_clip), asset missing |
SKILL §11 |
| 13 (P1) | FAL_PRICE inverted; ledger may understate H3 ~1.6× |
SKILL §9 cost caveat |
| 5 (P2) | No Suno persona/voice lock | not adopted yet; same style string is the current lock |
| 14, 17, 10, 11 (P2) | Song-aware H3 prompt, ≥0.95 slow-down, beat-grid snapping, "no extra in-between panel" canvas line | not built; out of scope for a format skill (code changes, Fish's go) |
| Don't-adopt list (diff §2): 6-panel canvases, 2 candidates per batch, single-take Suno, brand-voice/character rap, ingredient chant as spine, transcript captions, permanent header bar, no-ref B-roll models, text-prompt end cards, CapCut hand edits (core §2a: every edit is Remotion/ffmpeg via assemble.py). |
Our receipts
- MAP.md §2A/§3/§4: recipe A, accuser queue, song CPM/CTR/frequency; song losers (college 0.40/0.58, the-shirt 0 purchases, brand voice 0.72).
- 10-04 S1-S3 (RUN-LOG.md): takes 16/15/13 PASS 98.8-99.5 %; first vocal 0.06-0.08 s; 98/93/85 beats, 34/31/35 beats hand-edited; 10 lit-band clips; regens 8/11/6; $95.93 total on the price table; ENOSPC fixed with
REMOTION_CHUNK_FRAMES; in-assemble gemini returned no score on S2/S3. Live ad set 120250050707160232 (PB header). - 9-19 song lane (memory
project_song_lane_2026-09-19.md): Suno ~2.0 wps; Fish: no on-camera singing; hooksplice 3 hooks × 1 body (sl0919-h2 became the winner, $40 CPA at 159.8 s / 272 words); 9-26 replace-section (≥10 s window, whole song re-rendered ~30-60 s around it) and separate-vocals stem fix; 9-27 Suno pause fix (no blank lines, no beat switch); Suno outro 6-11 s. - 10-04 voice refs (
output/dawn-iterate-2026-10-04/video/song-voice-refs.md): Nashville storyteller mom, ~1.9 wps, style strings A/B + negatives.
starpop.ai articles by the same creator (10-06; ~/research/davidaistar/starpop/txt/<slug>.txt, paraphrased)
Read: how-to-make-ai-singing-ads-minimax-h3, how-to-make-ai-song-ads-with-suno, ai-song-ad-in-5-minutes, easy-ai-song-style-ads, ai-song-ad-examples, best-ai-song-ads-swipe-file, ai-song-ads-vs-ai-voiceover-ads, ai-singing-ad-mattress-case-study, brands-scaling-with-song-style-ads, song-ads-ingredient-list-crossover, how-to-edit-ai-song-ads-capcut, how-to-make-a-lyric-video-with-synced-subtitles.
- Adopted (SKILL §7, §8/§9/§10, §11): frame 0 must name the persona, header over a face (mattress-case-study: his dark-bedroom opener cost thumbstop; edit-capcut); keep the 3-5 s instrumental tail and size the end card (optional, --end-card; off by default per Fish 10-06) to it (singing-ads-minimax-h3, edit-capcut); judge songs on CPA + days live, not thumbstop (mattress-case-study retention curve, vs-voiceover).
- Already ours, confirmed: song before any visual; per-batch song slices with no gaps, instrumentals kept (storyboard.py raises on a non-contiguous song timeline; slices.py checks each slice == batch span); native clip audio muted under the one uncut song (run.py --song); captions typed from the lyric, not transcribed (lyric-video article: transcription mangles sung words and brand names); title hook on frame 0; persona-voice take over the nicer mix; measured song length over the asked length (his 30 s request came back 40 s = our receipt + --song-end).
- Not adopted: (1) a lip-synced singing shot per batch ("first shot sings, rest B-roll") because Fish ruled no on-camera singing 9-19 and h3.py has no lip-sync (test cell in SKILL §11 only). (2) 0.9× speed nudges in the editor when a slice lands early, because our song clips keep timing (assemble.fit_clip preserve_timing): a short clip is regenerated, never stretched. (3) Two candidates per batch: credit discipline, --candidates 1. (4) P-Video cheap drafts + Suno intro trim by hand, because no-ref models drift identity and --head 0.05 already trims to the first lyric. (5) Brand name printed on the character or a named competitor on screen (swipe file: RYZE chest print, Penrose competitor bottles), because of the no-readable-text and no-competitor-brand rules. (6) Sung ingredient list as the spine (ingredient-crossover), because mechanism-only songs never scaled for us; the 3-line "I'm X, I do Y, you get Z" shape lands in format-mascot-explainer instead. (7) Mid-ad genre switch (arcade level in the mechanism verse) and 9-minute runtimes: untested here, each would be its own one-variable cell.
- Claims are his: 4.95 ROAS / $2,239 / 20 purchases / $554 AOV / $17.43 CPM (mattress); RYZE ~4,700 live ads, song ads among the longest-running (Ad Library, his read); H3-max ~4× cheaper per second than Seedance 2.0 at Sept 2026 fal list prices (his). None verified by us.