A hundred reels that
don't look like a hundred reels.
The whole pipeline, in the order it runs. Every prompt on this page is the real one, unedited.
The last row is the part most people skip. What actually converted decides what gets made next, and occasionally it sends you back to re-examine step one.
Position the product, then write hooks.
A hook written without a position is a guess.
I list every alternative a customer would actually use if the product vanished, not the rivals the founder names at conferences. Last engagement: 59 competitors, and one column where every single one scored no. That column became the position.
Three sheets before a single frame.
Skip one and the character drifts across the library.
The character sheet is the single source of truth for the person. Every later prompt is written by reading off it, never from memory.
The location sheet is a three-quarter plate of the room, empty of people. It exists because text cannot hold a room. Describe a set in words and the model rebuilds it from scratch every time, moving the window between shots.
The props sheet bans more than it includes. No logos, no wall of monitors, no screen showing a gain. A picture cannot be caveated, so anything that reads as a performance claim is designed out here rather than argued about at review.



Two stages, and never a start frame.
Scene and identity are made by different models at different times.
Stage one builds the plate, text only, no reference attached. Attaching a face here is a trap: the model treats it as a composition template and returns copies of the reference's framing with a different invented person each time.
Stage two animates it, with the character sheet and location sheet as references and no start frame at all.
A vertical selfie taken on a phone's FRONT CAMERA at night in a lived-in one-bedroom rental flat in Bangalore. THE MAN: a 25-year-old Indian man with VERY SHORT BLACK HAIR in a neat short back-and-sides crop, the hair sitting ENTIRELY ABOVE HIS EARS so BOTH EARS ARE FULLY VISIBLE. NOT long, NOT curly, NOT voluminous. ROUND SOFT FACE with full cheeks. SHORT ORDINARY NECK, crew neck collar sitting high. Light patchy stubble. Warm mid-brown skin, real visible texture, matte non-shiny finish. Tired dark brown eyes. No glasses. CRITICAL, NO HANDS: absolutely no hand, arm, fingers or thumb anywhere in the frame, not at any edge and not in front of his body. CRITICAL FRAMING: far enough back that his whole head, both shoulders and upper chest sit in frame with a large amount of empty space below his chin. His head occupies only the upper third. Behind him a warm off-white wall, a desk with one monitor and an open laptop, a warm desk lamp that is the only light in the room, and a window with a metal safety grille showing a dark night with scattered lit windows. Front-facing phone camera at night: mild wide-lens barrel distortion, deep focus so the room stays legible, slightly soft detail, visible sensor noise. No ring light, no beauty filter, no skin smoothing, no shallow depth of field.
A vertical selfie video filmed on a phone's front camera, held in one hand at arm's length, with a constant small natural handheld tremor throughout. No zoom, no pan, no cuts. THE MAN is the man in the FIRST reference image, exactly as he appears there: SHORT BLACK HAIR sitting entirely ABOVE HIS EARS, a round soft face with full cheeks, a SHORT ORDINARY NECK with the collar sitting high. His hair is not long, not curly and does not touch his ears or collar. THE ROOM is the room in the SECOND reference image: the desk with a monitor and open laptop, the warm desk lamp which is the only light source, the window with the metal safety grille, the dark night beyond it. THE BEAT: he raises one hand into frame and counts two points off on his fingers, first one then two, his eyebrows lifting slightly as he makes each point, then turns the palm open toward the lens. The hand is anatomically correct with exactly five fingers. He does not speak and his lips stay together. The warm desk lamp stays the only light. Deep focus so the room stays legible, slightly soft, visible sensor noise. No ring light, no beauty filter, no skin smoothing.

Write a hundred, then kill your own work.
Volume alone is a content farm. Volume plus a rating loop that deletes the bottom is a system.
Hooks get scored by two independent models that have not seen each other's answers, against a rubric written to be hostile. Five means average and forgettable.
Jargon dies here. The review proved that taker, order book, liquidation price and spread each measurably lost ordinary viewers, so they were banned from the character's vocabulary permanently. Bottom-rated hooks get rewritten and re-scored, not shipped.
You are an ordinary person scrolling Instagram. You are NOT a trader and you have never heard of this company or product. Score 1 to 10. Be harsh. A 5 means average and forgettable. Reserve 9 and 10 for genuinely excellent. Most should land between 4 and 7. - comprehension: after reading once, does a stranger understand what is being talked about - hook_strength: does it make you want to keep watching rather than scroll past - relatability: is this a problem you recognise from your own life - language: is it plain, or does it need a trading background to parse - completeness: is it a complete sentence, not a broken fragment Then: what_i_think_it_sells, makes_sense, biggest_problem, verdict (keep / fix / kill). Respond ONLY with strict JSON.
One script builds the reel, deterministically.
Same inputs, same output. That property is what makes QC mean anything.
Two details stop a hundred videos reading as one. Reels sharing a demo set would cut identical footage, the clearest content-farm tell, so each in-point is nudged by reel id. And music is picked by hashing that id, so a rebuild never silently changes a reel's audio.
Music is generated with ElevenLabs and filed by emotional register, and the register names match the expression clip names, so the hook, the face and the music all agree on the emotion instead of being chosen separately.
# register -> candidate pool. registers match the expression clip names, so the # hook, the face and the music all agree on the emotion. case "$REGISTER" in deadpan|flat) POOL="s-boombap s-lofi-melodic" ;; wry|skeptical|selfdep) POOL="s-funk s-garage" ;; frustration|exasperation) POOL="s-techhouse s-garage" ;; weary|tired) POOL="s-lofi-melodic s-neosoul" ;; esac

Verify by frames, never by metadata.
A file can be the right resolution, the right duration, and completely broken.
Frame extraction first: contact sheets pulled from every clip and read. That is what catches a face leaving frame, a hand with six fingers, or a bad reference poisoning ten videos at once.
Then machine review, one stateless call per reel so no read is biased by the last one. Then measured checks: loudness, first-two-seconds versus full-file mean so a fade-in never eats the hook, and a byte check that the right file reached the CDN.
Watch it as the scroller, not as a marketer. Judge what actually reaches
someone who knows nothing and is half paying attention.
- comprehension: after watching once with no sound, does a stranger understand
- hook_strength: does the opening caption stop the scroll
- demo_supports_hook: do the screen shots back up the claim, or could they
belong to any video
- footage_legibility: can you actually read what is on the screen
Respond ONLY with strict JSON:
{"comprehension":0,"hook_strength":0,"demo_supports_hook":0,
"footage_legibility":0,"overall":0,"what_i_think_it_sells":"",
"makes_sense":true,"biggest_problem":"","verdict":"keep"}Ramp the schedule, then let the data pick the winners.
Posting a hundred videos on day one tells you nothing.
One post the first week, then two a day, then three. Ramping tells you what is working while there is still inventory left to change.
After that, performance picks the next batch, ranked by retention and engagement, not by which ones I liked.
A brand new account that starts publishing on day one gets its reach suppressed, and it is silent. The queue does not switch on until the account has been warmed up for a week. The warm-up protocol, with the research behind it.

The video is one step, not the whole job.
A reel that stops the scroll and hands off to a page nobody understands has converted nothing.
Every step gets measured on its own rather than as a single conversion number, and the objection that kills the most signups becomes the next hook. That loop is the part most people never close.
Which hooks bring people who click, not just watch. High retention with no traffic is entertainment.
Can a stranger say what the product does after five seconds. Copy is rewritten against that, not taste.
Where people stop. The steepest drop gets the next fix, usually a product question in marketing costume.
The objection that costs the most signups becomes the next hook.
Anyone can generate a video.
The difficulty is everything around it.
Requesting one model can silently run a cheaper one. Catalogs change under you. Every claim in this pipeline is verified from the job response, not the docs.
Writing an instruction does not mean the model follows it. When a prior is strong enough you stop asking and put the real pixels in the reference instead.
One wrong reference frame can poison an entire ten-clip library, and all of it passes metadata checks. Only frame-level reading catches it.
Character sheets, location plates, deterministic seeds and named registers exist so the hundredth video matches the first without anyone remembering how.
In regulated categories a shot showing a gain is a claim you cannot caveat. That gets designed out at the props sheet, not argued about at review.
The failure mode of volume is sameness. Nudged in-points, varied registers and a rating loop that kills my own work are what keep a hundred videos from reading as one.
Want this run on your product?
The pipeline is product-agnostic. What changes per engagement is the positioning work at the front and the compliance constraints baked into the sheets. Everything downstream of that is the same machine.