Process

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.

Position
59 competitors
Cast
3 ref sheets
Generate
Soul + Seedance
Hooks
100, rated
Assemble
one script
QC
frames, not meta
Ship
ramped
Funnelacquisition, comprehension, activation — what converts decides the next batch of hooks, and sometimes the position itself

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.

01Before any pixels

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.

Why this step earns its cost
Market count, book depth, per-trade fee, always-on availability. All felt like differentiators. All turned out to belong to the infrastructure underneath. Four of the six things the messaging led with were somebody else's work.
02The cast

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.

Three panel character reference sheet
Hair length, face shape and neck length drift hardest, so all three get bounded from both sides in writing.
Three-quarter location plate at night
The desk lamp is the only light source. The window grille places the city without a caption.
Overhead props plate
Props plate. Passed as a reference on any shot the character sheet alone cannot carry.
03Generation

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.

The two clauses doing most of the work
deep focus and no shallow depth of field. A blurred background is the strongest signal that an image is a portrait rather than a selfie. Phone cameras keep the room legible, and that legibility is what makes it feel real.
Why no start frame
A fixed first frame keeps a library identical, which suits a tripod character. It also propagates its own errors into every clip. One build inherited a plate with the wrong hair and neck, the identity pass preserved them by design, and all ten clips came out as a visibly different person.
Stage 1 · Soul 2.0 · selfie plate
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.
Stage 2 · Seedance 2.5 · expression clip
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.
Ten expression clips as a contact sheet
One expression library: ten clips, 720x1280, 24fps, 4.04s, no audio stream. Silent by design so any clip runs under any hook.
04Hooks at scale

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.

Hook rating rubric
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.
05Assembly

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.

music/pick.sh · register mapping
# 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
Frames from three finished reels
A silent presenter clip carrying the hook, then demo shots with secondary captions. A hundred built from one script.
06Quality control

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.

What QC is actually for
Finding out you were wrong. Scoring sixty finished reels returned a mean of 4.2 out of 10 and showed the newest batch scoring worse than the one before. That ruled out the hooks and pointed at the footage, not a conclusion anyone reaches by admiring their own work.
Reel review · stateless, one call per reel
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"}
07Distribution

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.

Before any of this runs

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.

Four environment stills from the character's feed
Interleaved stills. The character appears in none of them on purpose: the room, the light and the objects establish he exists without a post that says so.
08The funnel

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.

The uncomfortable part
Sometimes the content is fine and the product surface is the problem. On the last engagement the highest-leverage change available was a default route in the app, not anything I could fix in a video. Saying that out loud is part of the job.
Acquisition

Which hooks bring people who click, not just watch. High retention with no traffic is entertainment.

Comprehension

Can a stranger say what the product does after five seconds. Copy is rewritten against that, not taste.

Activation

Where people stop. The steepest drop gets the next fix, usually a product question in marketing costume.

Back into content

The objection that costs the most signups becomes the next hook.

Why this is hard

Anyone can generate a video.
The difficulty is everything around it.

Models lie about themselves

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.

Words lose to priors

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.

Errors compound silently

One wrong reference frame can poison an entire ten-clip library, and all of it passes metadata checks. Only frame-level reading catches it.

Consistency is a system

Character sheets, location plates, deterministic seeds and named registers exist so the hundredth video matches the first without anyone remembering how.

Compliance is a design constraint

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.

Taste has to survive scale

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.