50Queen · Ad research · Generation experiment

Replicating ChillFit's #6 ad, frame for frame — with Roxie in the chair

A shot-by-shot production plan for rebuilding ChillFit's rank-06 creative (Library ID 1585698999664983, 31.44 s, 360×640@30) with exactly one variable changed: the woman in pink becomes Roxie. Same set, same motion, same Dutch captions, same audio, same edit. The point of the experiment is to measure how close current video models get to a real, high-spend UGC ad. The W1 pilot is generated and approved (motion transfer won); this v2 plan scales that locked recipe to the whole video.

Source: 31.44s · 8 shots · 2 acts + UI tail Strategy: motion transfer (locked) Spent 56 cr · ~280 cr to finish Status: W1 approved · batch 1 pending

Overview — one variable, everything else pinned

A perfect replication is only meaningful if we change one thing. The controlled variable is the performer; every other element is either rebuilt to match the original exactly or reused verbatim from the source file.

ElementTreatment
PerformerSwapped → Roxie (charsheet: content/_character/roxie-charsheet-sage-gymwear-bilateral.png), in her canonical dark-sage seamless unitard + white crew socks. This is the experiment.
SetRebuilt to match: pale wooden spindle-back chair, white paneled double closet doors with black lever handle at frame right, light grey carpet, soft daylight from front-left.
CameraRebuilt to match: locked tripod, portrait 9:16, full body centred, chair mid-frame, slight eye-level. Zero camera motion in every shot.
Motion / choreographyRebuilt to match, shot by shot (specs in Acts A–B).
EditIdentical cut points, to the frame (timeline below).
Captions & overlaysRebuilt pixel-close: same Dutch copy, same font style, same colours, same muscle-diagram strip, same ChillFit watermark and icon bug.
AudioReused verbatim — demuxed from the source file (Dutch female VO 0.1–20.8 s + upbeat track). Keeps the comparison purely about video.
App-UI tail (20.7–31.4 s)Two options — reuse verbatim vs. rebuild with a "before" Roxie in the challenge cards. Decision point in Cost & approvals.
Roxie character sheet: six views of a woman in her fifties with long wavy blonde hair, wearing a dark sage-green seamless unitard and white crew socks
The swap-in: Roxie's bilateral charsheet. All six angles feed identity locking during start-frame generation.
Ground rule already in force: no image or video generation happens until the cost table at the bottom is explicitly approved. Every credit number in this plan comes from live higgsfield generate cost quotes (MiniMax H3: 24 cr / 6 s, 40 cr / 10 s; Nano Banana 2: 2 cr / image).

Source anatomy — the full timeline

Measured with scene detection (threshold sweep at 0.10/0.25) plus frame sampling at the boundaries, and an ElevenLabs transcription of the audio track (language: nld).

ShotIn → OutDurContentCaption on screen
A0.00 → 4.204.20s3×3 grid — nine simultaneous chair-exercise clips"Ik ben 65," → "ik doe deze workout elke dag."
W14.20 → 7.172.97sSingle: overhead claps, legs open–close wide"gewoon 7 minuten per dag,"
W27.17 → 10.733.56sSingle: cactus-arm pumps"en na één week zul je een verschil opmerken,"
W310.73 → 13.733.00sSingle: alternating arm raises"na twee weken zullen anderen het opmerken,"
W413.73 → 17.603.87sSingle: seated leg extension + cross-body arm swings"en na drie weken," → "al je vrienden zullen vragen hoe je het hebt gedaan."
W517.60 → 20.733.13sSingle: wide double-leg raise → settles, smiles; app icon pops over chest"het geheim?" → "download deze app"
C20.73 → ~28.3~7.6s28-day chair-yoga challenge card UI, finger taps DAG-1 then DAG-11Card copy (Dutch), stats bar
D~28.3 → 31.44~3.1sEnd card: 3 phone mockups, ChillFit logo, store badges"Planner voor thuistraining"
Ten reference frames from the source ad in chronological order: the 3-by-3 grid hook, five single workout shots with Dutch captions, the app icon reveal, and the challenge-card UI
Reference frames at t = 1.0, 5.0, 6.5, 9.0, 12.0, 15.5, 18.5, 19.5, 22.0, 27.0 s. Note the locked framing across every workout shot — only the pose changes.

Voiceover (full transcript, ends 20.8 s; music continues to 31.4 s)

"Ik ben 65. Ik doe deze work-out elke dag, gewoon 7 minuten per dag en na één week zul je een verschil opmerken. Na twee weken zullen anderen het opmerken en na drie weken zullen al je vrienden vragen hoe je het hebt gedaan. Het geheim? Download deze app."

Before assembly I'll re-run the transcription with --full to get word-level timestamps, and snap every caption in/out to the spoken word — the original's captions track the VO within ~0.1 s.

00.00 – 04.20Act A — the 3×3 grid hook

Nine simultaneous portrait panels, all the same set and framing, each a different chair move. Caption band sits between panel rows 1 and 2. This is the highest-effort shot to fake and the strongest test of character consistency: nine Roxies on screen at once.

Four frames of the source ad's opening 3-by-3 grid, showing nine simultaneous chair exercise panels with Dutch captions
Source grid at t = 0.0, 1.0, 2.0, 3.0 s. Every panel loops a distinct move; framing is identical across panels.
PanelMove (as observed)Sourced from
1 · top-leftArms clasp overhead in a diamond, then lower; knees open–close wideCrop of clip G1
2 · top-midBoth arms raised in cactus position, small pulsesCrop of W2 (offset start)
3 · top-rightAlternating single-arm raises, opposite arm restingCrop of W3 (offset start)
4 · mid-leftLateral arm sweeps crossing at the chestCrop of clip G2
5 · centreKnee hug — one foot lifts, hands pull the knee inCrop of clip G3
6 · mid-rightSeated single-leg extension with side arm reachCrop of W4 (offset start)
7 · bottom-leftArms open to a wide "W", chest opener pulsesCrop of clip G4
8 · bottom-midOverhead clap into torso side-bendCrop of W1 (offset start)
9 · bottom-rightStraight-leg raise with cross-body arm swingCrop of W4 (mirrored, different offset)

So the grid costs only four dedicated extra clips (G1–G4); five panels are centre-crops of the Act B masters at staggered start offsets (and one mirror) so no two panels read as the same footage. Each panel is a 1:1.78 portrait crop scaled to 120×213 in the 360×640 master — small enough to be forgiving of minor artifacts, which is why the grid clips are the right place to absorb the weaker takes.

04.20 – 20.73Act B — the workout montage, five locked shots

One camera setup, five jump cuts. Every clip below is generated at 6 s and trimmed to its slot; generating a hair long gives trim room to pick the cleanest motion cycle. Shared prompt preamble for all five (and G1–G4):

Locked-off tripod shot, vertical 9:16, no camera movement. A fit woman in her
fifties with long wavy blonde hair, wearing a dark sage-green seamless workout
unitard and white crew socks, sits centred on a light wooden spindle-back chair
in front of white paneled closet doors with a black lever handle, light grey
carpet. Soft even daylight. She smiles naturally while exercising. Amateur
iPhone footage look, slight compression, true-to-life motion, no slow motion.
04.20 → 07.17W1 — overhead claps + leg openers"gewoon 7 minuten per dag,"
Motion
Arms sweep from sides to clap fully overhead and back down, one clap per second; simultaneously knees swing open and closed in rhythm. Feet slide on carpet.
Prompt tail
"She raises both arms in a wide arc to clap above her head, lowers them, repeating rhythmically, while her knees open wide and close in the same rhythm."
Muscle strip
Inner thighs + shoulders highlighted.
07.17 → 10.73W2 — cactus-arm pumps"en na één week zul je een verschil opmerken,"
Motion
Both arms held at 90° "cactus" position, small upward pulses; on the third rep the palms press together overhead briefly. Feet planted hip-width.
Prompt tail
"Her arms are bent at right angles beside her head in a cactus position; she pulses them upward in small rhythmic reps, once pressing her palms together above her head."
Muscle strip
Calves + core highlighted.
Note
Pilot shot — both generation strategies race on this clip first (see Generation).
10.73 → 13.73W3 — alternating arm raises"na twee weken zullen anderen het opmerken,"
Motion
One arm raises high while the other lowers, alternating like a slow overhead march; light torso sway with each rep.
Prompt tail
"She alternates raising one arm high overhead while lowering the other, in a steady seated rhythm, torso swaying gently."
Muscle strip
Glutes + hamstrings highlighted.
13.73 → 17.60W4 — leg extension + arm swings"en na drie weken," → "al je vrienden zullen vragen…"
Motion
Right leg extends straight with foot flexed toward camera while arms swing across the body; leg lowers, swaps sides. The sole-of-foot-to-camera moment is the hardest frame — flag for extra retries.
Prompt tail
"She extends one leg straight out toward the camera with her foot flexed, swinging both arms across her body, then lowers it and switches legs."
Muscle strip
Quads + calves highlighted.
17.60 → 20.73W5 — wide leg raise → the reveal"het geheim?" → "download deze app"
Motion
Both legs lift wide off the floor holding the seat edges (17.6–19.0), then feet settle flat, she sits calm, hands on knees, big natural smile to camera (19.0–20.7). The app icon bug composites over her chest in post.
Prompt tail
"Gripping the seat, she raises both legs wide off the floor, holds briefly, lowers her feet flat, settles her hands on her knees and smiles warmly straight into the camera."
Muscle strip
None (strip drops out at 18.4 s in the source).

20.73 – 31.44Acts C–D — the app-UI tail

Act C · 28-day challenge cards (20.73 → ~28.3)

Parchment-textured page, header "28-DAAGSE STOELYOGA UITDAGING" in a heavy rounded serif (Cooper Black class), stats bar LENGTE 168CM · GEWICHT 100KG · DOEL 70KG (values red, goal green). Below, a 4×7 sketch calendar of seated exercises. A hand with red nail polish taps day 1 → the DAG-1 card zooms in: a live-action video of a heavier woman in a plum workout set doing seated knee lifts, three Dutch exercise lines, a cyan progress border animating around the card, four sketch thumbnails at the bottom. Back to the calendar, tap → DAG-11 card: the same woman visibly slimmer. The before/after arc lives inside these two card videos.

If rebuilt: the page is an HTML/CSS animation captured at 30 fps (parchment, calendar, zooms, cyan border), the tapping hand is a cut-out PNG animated in CSS, and the two inner card videos are generated — a softened, heavier "day-1 Roxie" variant and today's Roxie for day 11. That heavier variant is an identity edit of the charsheet (Nano Banana) used as the start frame.

Act D · End card (~28.3 → 31.44)

Magenta-to-pink gradient, three fanned iPhone mockups of the ChillFit app (plan list, workout player at 00:08, calories screen), ChillFit icon + script wordmark, "Planner voor thuistraining", App Store / Google Play badges. Contains no human.

Decision — tail treatment:

Recommendedreuse the source tail verbatim (20.73–31.44 s spliced from the original file). The experiment is about replicating human video; the UI tail is motion graphics we already know how to build and would dilute the credit budget. The remake then measures exactly the segment where generation is hard.

Alternative — full rebuild including both card videos with before/after Roxie (+48 cr generation, +~half a day of HTML animation work). Right choice later if this creative graduates from experiment to a runnable 50Queen ad, which would also mean swapping every ChillFit mark for 50Queen.

Graphics kit — rebuilding every overlay

AssetSpecBuild method
Captions (video)Chunky rounded sans (Baloo 2 / Fredoka SemiBold class), white fill, soft dark outline, centred ~62% down-frame; key tokens "65" and "7" in hot magenta (~#E93FD5) with white stroke. Grid captions invert: near-black fill, white stroke.ASS subtitle track (libass): outline+shadow per style, word-timed from the --full transcript.
Muscle stripThree semi-transparent white line-art female anatomy figures (front/back) across the lower quarter; the working muscle groups fill solid white per shot (mapping in Act B).One SVG base drawn once (traced from a source frame's geometry), per-shot fills toggled, exported as transparent PNGs, overlay enable='between(t,…)'.
Watermark"ChillFit" in a pink script face, ~25% opacity, two instances mid-frame, present on all live-action shots.Text-on-transparent PNG, static overlay.
App icon bugRounded-square magenta→violet gradient icon, white script "ChillFit", pops over the chest at 19.0 s with a quick scale-in.SVG → PNG, ffmpeg overlay with a 6-frame scale ease.
Grid frame3×3 layout, hairline white gutters (~2 px at 360w), panels flush to frame edges.ffmpeg xstack over a white base.

Every overlay is rebuilt at 720×1280 (2× the source) so the master looks clean, then the delivery encode downsamples to the source's exact 360×640 for honest A/B comparison.

Audio — English VO in Roxie's voice over the source music bed

Revised 2026-08-28. The original scope reused the Dutch track verbatim, but the direction has shifted toward a usable 50Queen asset: captions are now English and the ChillFit watermark is dropped, so a Dutch VO no longer fits. The new audio recipe:

  1. VO — Roxie's own voice. Her character sheet defines a Higgsfield TTS preset (qwen_audio_tts, preset "Roxie", f6448975…, English, "cheerful upbeat morning coach"). Script = the English translation of the Dutch VO, one line per caption: "I'm 65. I do this workout every day — just 7 minutes a day, and after one week you'll notice a difference. After two weeks others will notice, and after three weeks all your friends will ask how you did it. The secret? Download this app." Generated per-line so each line can be nudged to fit its shot's slot.
  2. Music bed. The source track has VO and music mixed; run source separation (demucs, local, free) on the 31.44 s track to recover the instrumental, and lay the new VO over it. Fallback if separation artifacts: any upbeat library track at the same BPM — the music is generic.
  3. Caption timing. Captions word-time to the new English VO (ElevenLabs transcription of our own track), replacing the plan's earlier snap-to-Dutch rule.

Purist fallback, still one command away: mux the untouched Dutch track for a strict A/B-comparison cut. Both cuts can share all video.

Generation plan — models, strategies, pilot

Model & constraints

2026-08-28 — strategy locked: motion transfer (S1). The W1 pilot ran both arms (raced on W1, not W2); Eugene picked S1 on 2026-08-26 and confirmed on the evidence page that the result holds up. Every remaining clip uses the S1 recipe: --video-references = the exact source segment for that shot, --image-references = Roxie charsheet + the approved cand2 set still. The still is the pilot's one fix — S1 ran charsheet-only and drifted (face thinner, flatter expression); S2 proved a pinned frame holds the face. Adding cand2 to the reference set is the best-of-both, and it also anchors the chair, whose hoop-back drifted in the W1 output. Two more prompt-level fixes ride along: "smiling warmly throughout" (S1's expression went neutral) and an explicit cadence cue per shot ("claps once per second" — S1 ran ~30% slow).

The locked recipe, per clip

higgsfield generate create minimax_h3 \
  --prompt "Replicate the reference video exactly: same locked camera framing, same
  rhythm, same choreography of <shot motion, with cadence> — performed by the woman
  from the reference images: early fifties, long wavy blonde hair, dark sage-green
  seamless workout unitard, white crew socks, smiling warmly throughout. Same room:
  white paneled closet doors, black lever handle, light wooden spindle-back chair,
  grey carpet. Amateur iPhone look. No text, no captions, no watermarks." \
  --video-references <source segment upload> \
  --image-references <charsheet> --image-references <cand2 still> \
  --duration 6 --aspect-ratio 9:16

Full-run clip manifest (motion transfer throughout)

ClipVideo reference (source cut)FeedsCredits
W1 (done)4.20 → 7.17Act B slot 1 + grid panel 8 · optional 24 cr redo with the three fixes0 (spent)
W27.17 → 10.73Act B slot 2 + grid panel 224
W310.73 → 13.73Act B slot 3 + grid panel 324
W413.73 → 17.60Act B slot 4 + grid panels 6, 9 (mirrored)24
W517.60 → 20.73Act B slot 5 + the reveal24
G1–G4Upscaled crops of grid panels 1, 4, 5, 7 (0.00 → 4.20)Grid-only moves (overhead clasp, chest crosses, knee hug, W-openers)96

Grid-clip caveat: G1–G4's video references are 120×213 panel crops upscaled 4× — much weaker motion signal than the full-frame W refs. If transfer degrades, the fallback is prompted motion (S2-style) for those four: the panels render at 120×213 in the final grid, small enough to forgive tamer motion. Decide per clip at review, not up front.

Assembly pipeline

  1. Normalize — every generated clip → 720×1280, 30 fps, trimmed to its slot (best motion cycle chosen by eye).
  2. Grid — 9 panel crops → xstack layout=3x3 on white, 4.20 s.
  3. Body concat — A + W1…W5 cut at exactly 4.20 / 7.17 / 10.73 / 13.73 / 17.60 / 20.73 s.
  4. Overlays — watermark PNG → muscle-strip PNGs (per-shot enable windows) → icon bug at 19.0 s → ASS captions burned last so outlines sit above everything.
  5. Tail — splice source 20.73–31.44 s (re-encoded to match the master's encode so the joint is invisible), or the rebuilt Act C/D if that option is chosen.
  6. Audio — mux the untouched source track; hard-trim master to 31.44 s.
  7. Deliverablesremake_720.mp4 (master), remake_360.mp4 (source-matched), sxs_compare.mp4 (original | remake hstacked, shared audio).

Verification — how we score "perfect"

Cost & approvals — full run (v2, 2026-08-28)

Spent so far: 56 cr (4 stills + the two-arm W1 pilot). Settled along the way: strategy = motion transfer, wardrobe = sage unitard, no ChillFit watermark, captions English. Remaining spend to a finished human section:

ItemModelQtyCredits
Main clips W2–W5 (locked recipe)MiniMax H3 · 6s496
Grid clips G1–G4MiniMax H3 · 6s496
Optional W1 redo (smile + cadence + chair fixes)MiniMax H3 · 6s124
VO — Roxie TTS preset, ~9 lines + retakesQwen Audio TTS~10
Retry allowance (~25%)~55
Total — full run, tail spliced from source~280
Later, only on graduation to a runnable 50Queen ad: tail rebuild with 50Queen UI + before/after card videosH3 + NB2 + HTML+~130

Run order

  1. Batch 1 — W2–W5 (96 cr): four motion-transfer clips off the locked recipe, reviewed as side-by-sides against their source segments before the grid spends anything.
  2. Batch 2 — G1–G4 + W1 redo (~120 cr): grid clips (with the upscaled-crop caveat checked clip by clip) plus the W1 redo if batch 1's fixes prove out.
  3. Finish pass (no video credits): per-shot muscle strips via the extraction recipe, English captions, VO + demucs music bed, grid xstack, body concat at the source cut points, tail splice, 360×640 delivery encode + side-by-side master.

Open decisions

1 · VO language

Recommended — English VO in Roxie's own TTS voice over a demucs-separated music bed (rationale in Audio). Fallback cut with the original Dutch track costs one extra mux for a strict replication A/B.

2 · Tail treatment (decided 2026-08-28)

Split. The end card (28.3→31.44s) is rebuilt for 50Queen — done: three fanned device frames carrying real product screens (session player · Today · live quiz), the icon + Instrument Serif wordmark, "Fifteen minutes, three days a week.", and the real CTA pill "Get my plan now · 50queen.com" (web-only product; the repo's tests forbid store badges). Rendered frame-by-frame in PIL at 720×1280·30fps mirroring the source's scale-in → fan → lockup timing; zero generation credits. Asset: endcard/endcard_50queen.mp4. The challenge-card section (20.7→28.3s) stays spliced from the source until graduation — it needs real card videos, not just graphics.

Standing rule: approval is per-batch. Batch 1 (96 cr) needs its own go-ahead; batch 2 gets one after batch 1's review.