Pipeline Hub

format-ad-clone

Process skill, not a single format. Take any reference ad (one of our own winners, a non-competitor scaling ad, an organic viral video, or a lane-leader competitor's ad), dissect it with scripts/ad_dissector.py, decide what survives by source type, remix it with ONE innovation (80/20), match its measured pacing, and hand it to the right format-* skill for production.

Lane: none of its own (routes to the target format's lane; dissect = Gemini + ffmpeg) · not built yet: 3 (see below) · source: /Users/ayden/.openclaw/workspace/skills/format-ad-clone

SKILL.mdbeat-sheet.mdsources.mdEvals (7)Learnings (11)
1. Read first2. When to use / when not3. The format (the process)4. Why it sells5. Beat sheet: the keep/change table by source type (full sheet in references/beat-sheet.md)6. Pack spec (routing + the keys the remix hands the format skill)7. Visual grammar (translating the dissect's production read into our lanes)8. Audio (pace match from pacing.json)9. Production (free until the format skill's paid gates)10. Gates & QA checklist11. Variants & test plan12. Failure modes13. Sources

format-ad-clone — dissect, decide, remix one thing, route

1. Read first

2. When to use / when not

3. The format (the process)

Input: one video (mp4, Foreplay share URL, YouTube/TikTok URL) or one static. Output: a filled remix sheet (output/ad-dissect/<slug>/remix.md) that names the source type, what is kept, the ONE innovation, the pacing band and the target format skill, followed by that skill's pack. No pack is written here; the format skill writes it.

Step What happens Tool Paid?
1 Source Pick a proven reference with a receipt (CPA, spend, run length, duplicates, play count) §9 sourcing free (TrendTrack API = credits per row)
2 Classify Own winner / non-competitor scaler / organic viral / lane-leader competitor §5 table free
3 Dissect Timed beats, hook, persuasion, production read, measured pacing ad_dissector.py 1 Gemini 3.1 Pro call + Scribe minutes
4 Keep/change Fill the keep/change table for this source type remix sheet free
5 Remix 80/20 Source structure + our 4 concept slots + ONE named innovation remix sheet free
6 Pacing match Set the band from pacing.json; write min_wps/dead_air/gap_turn_max for vo_check remix sheet free
7 Route Pick the format-* skill by the device the dissect found §6 table free
8 Hand off That skill's beat sheet → pack → its gates → core §4 gates format skill per format

4. Why it sells

5. Beat sheet: the keep/change table by source type (full sheet in references/beat-sheet.md)

Source type How you know May keep Must change Slot-1 eligible Dissector flag
Own winner On our account with CPA/ROAS (MAP.md, atlas, readout.py) Everything: body word for word, audio, beats, style (concept-formula iteration mode) ONE variable: hook line, belief frame, style (re-skin), or a format port that keeps the body's beats. Charswap ads are NOT own footage (edited third-party/competitor video): structure only Yes, first choice none
Non-competitor scaler Scaling on Meta/TikTok in another niche (e.g. Blushe, Smooche beauty) Beat order, beat timing, device (rate-them scores, command-opener skit, monologue turn), pacing, shot grammar Every word (ours = VOC lines + Fish's ruled lines + product facts), cast, setting, their numbers and claims Yes none
Organic viral (not an ad) Big play count, no product, a repeatable format The format mechanic + pacing Everything else; add the problem-aware opener (lines 1-2 name HER by a symptom) and the product Yes none
Lane-leader competitor Sells our product type to our buyer (Dawn: HiStrips/Onyx, FitSleeps; any wrist alarm brand) Gap map only: claims they make, objections they answer or skip, weak points, what to beat No script, no beat order, no device, no hook copied. Every concept must fail the competitor-swap test No --competitor

6. Pack spec (routing + the keys the remix hands the format skill)

Dissect shows (device / format_name) Route to
accusation story, two+ voices, vindication format-spoken-drama
song / musical narrative format-song (own song winner, style change only: reskin.py)
argument / debate / exhibit format-courtroom
talking product or object explains format-mascot-explainer
"if X did Y for 3 weeks", day-by-day format-timeline
rate-these / ranked failed solutions format-rated-solutions
short slapstick or command-opener skit format-skit
two-person podcast / split screen talk format-podcast
vox-pop, one take per person format-street-interview
short TikTok-Shop demo (hook → problem → demo → CTA) format-ai-actor-demo
a trend move / gag / dance where the MOTION is the asset format-motion-transfer (provenance gate first)
masked or hidden-face insider confession format-whistleblower
iMessage / notes / app / phone-screen story format-ui-mockup
static image ad dawn-statics
photoreal talking head + b-roll ugc-omni (avatar gates, core §3)
long-copy native + one image dawn-native-brief → dawn-native-write (+ native-image-gen)
- Run ls ~/.openclaw/workspace/skills | grep '^format-' first: a target skill may not exist yet. If it's missing, build from the core + the nearest existing skill and say so in the remix sheet.
- The remix sheet tags each beat with a shot tier (core §2b) so the target skill can route models and run its draft → final step (core gate 6b).
- Front-matter keys the remix sheet hands to the pack (core §5 keys plus): parent (own winner with CPA, or the closest paying Dawn ad in the target format for an explore), iteration (the ONE innovation), format_skill, source_ref: output/ad-dissect/<slug>/ (free key, the loader ignores unknown keys), and the vo_check keys from §8.

7. Visual grammar (translating the dissect's production read into our lanes)

8. Audio (pace match from pacing.json)

9. Production (free until the format skill's paid gates)

cd ~/.openclaw/workspace
# 1 SOURCE: own winners: MAP.md concepts.json/songs_all.json, hub /atlas/, python3 -m scripts.cartoon_h3.readout --concept <c>
#   TrendTrack (non-competitor scalers): web-app CDP route on :9333 (no credits) or API with limit 20-25 after GET /v1/usage
#   Foreplay: share URLs from Fish's boards go straight into the dissector (no Foreplay API key in .env)
#   Organic TikTok: tikwm search (free, CF-solved), rank by play_count / digg_count:
cd ~/tt-creative-sourcer && python3 -c "import sourcer,json; d=sourcer.tikwm_get('/api/feed/search?keywords=rate%20every%20alarm&count=20'); print(json.dumps([[v.get('play_count'),v.get('digg_count'),v.get('author',{}).get('unique_id'),v.get('video_id') or v.get('aweme_id'),v.get('title','')[:60]] for v in d.get('videos',[])],indent=0))"
# 2-3 DISSECT (one Gemini 3.1 Pro call; Scribe uses ELEVENLABS_SCRIBE_KEY):
python3 scripts/ad_dissector.py <mp4 | foreplay share URL | youtube/tiktok URL> --slug <src-slug> \
  --brand-context "DawnBands: silent vibrating wake-up wristband (matte black ribbed band, LED time display dark when idle, 3 alarms, no app); buyer = mom 35-54 whose teen sleeps through alarms; problem-aware" \
  [--competitor] [--scene-threshold 0.22] [--no-scribe] [--product-keyword '<source product noun|noun>'] [--pacing-only] [--no-frames]
#   → output/ad-dissect/<src-slug>/{source.mp4, pacing.json, dissect.json, dissect.md, frames/}; source.mp4 is reused if present
#   --pacing-only = $0 (no Gemini): pacing + frames only. Many sources: --batch <file of URLs/paths> [--out DIR] → DIR/<slug>/ each + index.md
# TikTok URL fails in yt-dlp (unreliable on TikTok since 8-14): fetch via tikwm, then pass the local mp4
cd ~/tt-creative-sourcer && python3 -c "import sourcer,downloader,sys; u=sys.argv[1]; d=sourcer.tikwm_get('/api/?url='+u+'&hd=1'); p=d.get('play',''); p=sourcer.TIKWM+p if p.startswith('/') else p; print(downloader.download(str(d.get('id')), u, p))" 'https://www.tiktok.com/@<handle>/video/<id>'
# 3b FRAMES + REVEAL: written by the dissector (built 10-06): frames/sNN_start.png + sNN_end.png per measured shot + frames/index.json
#   (§7: read-only refs, never generation inputs); pacing.json product_reveal_pct (needs the Gemini beats; pass --product-keyword:
#   on 01_skits Gemini tagged no beat role=product, the serum showed up only by keyword)
# 4-6 REMIX SHEET: write output/ad-dissect/<src-slug>/remix.md from references/beat-sheet.md
# measure OUR finished cut with the dissector's own cut filter (free, no Gemini):
ffmpeg -v info -nostats -i <final.mp4> -vf "select='gt(scene,0.22)',showinfo" -an -f null - 2>&1 | grep -c pts_time
# OWN SONG WINNER, style only (one variable): see format-song; Mode B for a winner that exists only as an MP4
python3 -m scripts.cartoon_h3.reskin --from-video <final.mp4> --script <lyrics.txt> --style <style> --slug <new-slug>
# 7-8 HAND OFF: invoke the target format-* skill with the remix sheet; its pack, gates and --spend rules apply

10. Gates & QA checklist

11. Variants & test plan

12. Failure modes

Not built yet (needs Fish's go)

Don't adopt (davidaistar)

13. Sources

~/research/davidaistar/REPORT.md, analysis/diff_cloning.md, analysis/gemini_{HBIENgQIQVU,bw1LPGZWf-k,gpzy2ofG0Dw,aqo2L5wYGEg}.md, analysis/guide_copy_images_shorts.md; scripts/ad_dissector.py, scripts/cartoon_h3/{reskin,vo_check,storyboard,readout}.py; output/dawn-beauty-format-2026-10-01/{SCRIPTS-v4-mirror.md,build_packs_v4.py}, output/concept-packs/*mirror-2026-10-01.md; knowledge/concept-formula.md; memory corrections-hot.md, feedback_ad_concept_formula.md, reference_trendtrack_api.md, project_tt_creative_sourcer.md, project_launch_2026-10-01_beauty_format_cartoons.md; scripts/charswap_source_refs.py; ~/.claude/skills/competitive-ads-extractor/SKILL.md (generic, no script behind it; use this skill instead). Details in references/sources.md.

Not built yet (needs Fish's go)

Every line in this skill that mentions something not built, roughly de-duplicated. Some items repeat in different words.