A walkthrough of the six-stage pipeline behind every US Fertility video — the
real commands, the real hard rules, and one real shot followed from script line to rendered clip.
Nothing here is a mockup.
6Pipeline stages
5Human approval gates
30Videos in the library
1Gold moment / video
330Reusable swipe assets
scroll
00THE SHAPE OF THE PIPELINE
Six stages. Five gates a human has to clear.
Every video moves through the same fixed chain, and every stage ends where a person
looks at something. A batch of 13 storyboard scenes doesn't become 26 animated clips until each of
those scenes is individually approved.
1
Script
Patient-consent script → scene breakdown, one image prompt per scene, gold assignment.
Composed 16:9 stills — headline, chips, hero graphic. GPT Image 2. This is the approval path.
usf-video run storyboard
GATE 1 — Daniel / Brittany approve the still. video-prompts/ stays LOCKED until this.
3
Parts
Approved still → its elements regenerated isolated on pure white. Each part is a mid frame.
usf-video run parts
GATE 2 — MF approved. From here the MF is never regenerated; a bad one goes back to stage 3.
4
Frames — FF / MF / LF
Build the first and last frame around the approved mid frame, with the MF itself as the reference.
usf-video run frames
GATE 3 — FF|MF|LF trios approved off the contact sheet. Kling path only.
5
Motion — MiniMax H3
One native 10s clip per shot, generated off the approved MID frame alone. No pair, no join. Legacy Kling path: two 5s clips, FF→MF and MF→LF.
usf-video run motion
GATE 4 — Daniel approves the clips. MANDATORY. Do not self-approve.
6
Wrap-up
Verify every shot, bundle the package, write the handoff for the After Effects editor.
usf-video run wrapup
GATE 5 — the assembled cut comes back from AE and is signed off in the browser.
◆ ONE COMMAND SURFACE
You never have to know which stage you're on. Ask.
The whole pipeline is one CLI. It holds the state for every video — which stage, which
gate, who owns it, who's holding the shared render account — so the operator's job is to
run the next legal action, not to remember the chain.
Nothing skips.next will refuse to name a stage whose gate
hasn't been cleared, and tell you what's blocking instead.
usf-video doctorVerify the machine, the reference pack, the credits, the lease. Every ✗ prints its own fix.usf-video statusEvery project: owner, stage, gates, counts, and what's next.usf-video next <id>The next legal action — or exactly what's blocking it.usf-video run <stage>script | vo | storyboard | parts | frames | motion | wrapupusf-video gate approveRecord that a named human cleared a gate.usf-video reviewPer-asset verdicts from the review UI: approvals, marks, comments.usf-video swipe searchCheck the 330-asset library before generating anything new.usf-video hf statusWho holds the one shared Higgsfield account, and how long they've had it.usf-video uiServe the review app on :3003 — every still, frame and clip, downloadable.
$ usf-video next B1-13
B1-13 Risks from Fertility Medication
stage storyboard → 16 stills on disk
BLOCKED gate 1 — 16 stills are waiting
for a human to approve
next: open https://ext-us-fertility2.exe.xyz/ui
then usf-video gate approve B1-13 1 --by ...
The five slash commands wrap all of it, so nobody has
to memorise a flag:
/usf-sopThe pipeline in one screen./usf-statusWhere everything stands, across all 30 videos./usf-new B1-14Start a video from its script./usf-continueDo the next thing. Safe to run repeatedly./usf-reviewPresent what needs a human, record the decision.
One shared render account. Higgsfield is a
single login, so a lease serialises it — if someone else has it you're told who and for
how long, and you wait rather than colliding mid-batch.
01STAGE 1 · SCRIPT free
The script decides the scenes. Nothing is invented after this.
A clinician-approved consent script comes in as a .docx. The stage
splits it into beats, and for each beat writes a source-of-truth prompt file: the VO line it
covers, the on-screen headline, the act tint, the chip copy, and whether this scene owns the
video's single gold moment.
Every downstream stage reads those files verbatim. The pipeline never rewrites patient
copy — the words on screen are the words a clinician signed off.
Split the script into beats → scene-breakdown.md.
Write one image prompt per scene, with its metadata table.
Claim the gold moment for exactly one beat — usf-video gold claim.
Set the Motion intent per scene, so stage 5 isn't improvising a move nine steps later.
Gold is spent exactly once per video. Assign it here — nobody can
reconstruct the budget later.
# B1-13 · S03 — A stronger response (OHSS)
| Beat | A stronger response |
| VO | "Stimulation encourages multiple
| follicles to grow. Occasionally the
| ovaries respond more strongly than
| expected — this is called OHSS." |
| Headline | A stronger response |
| Act tint | Pale Emerald #E7F0EE (procedure) |
| Chips | 1 LABEL chip — "OHSS" |
| Gold | No — gold is spent at S12 |
| Anchor | 01_cluster-clean.png (--image)
| + STYLE_LOCK_eggs |
The real metadata table for the scene we'll follow all
the way to a rendered clip.
02STAGE 2 · STORYBOARD ~7 cr / scene
The composed scene: hero graphic, headline, chips — one frame, spelling‑perfect.
This is what Daniel's and Brittany's teams actually approve. Every scene is a single 16:9
frame generated from that prompt file, with the full style lock injected into every
generation and every edit — even a one-element fix.
Then every frame is QA'd by eye against the checklist that lists the failure modes which
actually recur here: misspelled or invented on-screen words, two hero graphics, both chip
types in one frame, a gradient ground, gold spent twice, type under 14pt at delivery size.
A failed check is a regenerate, not a note for later.
GPT Image 2stills only — never Nano Banana, it goes 3D-glossy and miscounts subjects
1 of 5gates cleared here — and it locks the video prompts until it passes
Live production still · B1‑13 · S03 “A stronger response”
HERO GRAPHIC — held to the right, occupying roughly the right
third with generous white space: the four-follicle cluster wrapped
in a soft periwinkle #8598E3 membrane that reads as gently,
slightly enlarged — swollen a touch beyond calm, not distended,
not distressed. … a bare fine needle drawn as two simple
strokes and nothing more: one straight emerald #0E635D hairline
ending in a slim bevel tip … resting nearby and touching nothing.
Real excerpt from this scene's actual prompt file — the
level of literal, positive description every hero graphic is written at.
03STAGE 3 · PARTS 15–20 cr / part
One approved scene becomes N isolated, animation‑ready parts.
Nothing in the composed scene can move on its own — it's one flat image. This stage reads
the approved still and re-generates every element that needs independent motion, isolated on
pure #FFFFFF, so it keys cleanly in After Effects.
The anchor mechanism is the intellectual core of the chain. Pick the subject everything
keys off, and pass that exact render — not a text description of it — as the
reference image for every asset that reuses it. Scene 3's swollen cluster is chained off the
canonical cluster anchor, which is why it stays the same four follicles here and in every
other video that shows one.
In the 83-asset audit, referenced generations had zero drift. All drift came
from text-only renders of composed subjects.
And the part IS the mid frame. It isn't an intermediate export — it's
literally the middle instant of the 10-second shot that follows.
The anchor
→
Scene3_cluster-swollen_MF
Left: the canonical four-follicle cluster, shared across the
whole library. Right: scene 3's swollen state, generated with that anchor passed as
--image — same cluster, one changed property.
On the default H3 path this stage is skipped. H3 animates
off the MID frame alone, so there is no FF and no LF to build. Everything below describes the
legacy Kling path, where the pair of clips has to join on a shared frame.
The part is the MID frame. This stage reasons backward and forward from it:
what does the frame before this motion look like, and what does the frame after it
look like? Both are generated with the MF itself passed as the reference image, so only the state
changes — never the subject.
FF · calm, at rest
→
MF · the approved part
→
LF · fullest, at rest
The real trio, straight off disk. The state difference is
deliberately subtle — a gentle response, not a distended one; the QA note on this shot reads
“PASS — 4 follicles, pixel-stable, subtle state diff as expected.”
Two rendered clips come out of the trio: FF→MF
and MF→LF, 5 seconds each. Cut together they form one seamless 10-second shot, because
clip A ends on exactly the frame clip B starts on. That's why gate 2 exists and why the MF
is never regenerated once FF and LF are built around it — it would silently break the join.
A wrong MF goes back a stage; it is not patched here.
05STAGE 5 · MOTION 160 cr / 10s clip @768P
One prompt, one 10‑second clip, per shot.
Frontal locked camera. No rotate, tilt, pan, yaw, or zoom. Nothing snaps,
bounces, spins, or splashes — every motion in the library reads as slow, deliberate and
reassuring, on purpose, because this plays before a real medical consent decision.
Since 2026‑08‑11 the default engine is MiniMax H3, on kie.
It animates straight off the approved MID frame in one pass — there is no FF, no LF and no
join, so stage 4 and gate 3 are skipped on this path. The Kling walkthrough further down
is the legacy path, and every clip embedded on this page was rendered on it.
kie create --model minimax-h3/image-to-video \
--input image="<stem>_MF.png" \
--input prompt="<the locked template, one [[MOTION]] filled>" \
--input duration=10 --input resolution=768P
The motion prompt is a locked
template — you fill exactly one [[MOTION …]] bracket and
everything around it stays verbatim. animate_shots.sh refuses to render a
prompt that still contains [[. Free‑forming it measurably drops quality;
that finding is why the template exists.
kie is not under the Higgsfield lease.
The lease protects one shared browser account with one credit pool; kie is an API key with no such
constraint, so holding the lease for it would make the next operator wait for nothing. Check it with
kie doctor and kie credits, not
usf-video hf.
--mode std while
reviewing; approved shots are re-run at pro for the final pass. The
stage never picks the move itself — it fills in the motion intent authored back at stage 1.
MiniMax H3the default since 2026‑08‑11 — Kling 3.0 is the legacy path, Seedance is superseded
Clip A · FF → MF — legacy Kling render
Clip B · MF → LF — legacy Kling render
The same hero, all the way through:
anchored → isolated → bracketed → now in motion. One real shot, its actual two
rendered clips.
06STAGE 6 · WRAP-UP free
The last stage doesn't generate anything — it verifies and hands off.
Once every clip in a video is approved, this stage checks that every shot actually
has its frames, prompts and clips; writes a handoff document structured so an editor's own tooling
can parse exactly what was built and where; and zips the package. It never blocks on an optional
gap — only “zero rendered clips” stops it, everything else prints as a checklist
for a human to judge.
Verify — read only
Checks every shot for its frames, prompts and rendered clips, plus VO and approved stills. Prints a present/missing table. Nothing is written.
The only hard stop
It halts only if a video has zero rendered clips — nothing to hand off. Every other gap is reported, never silently dropped.
One handoff doc
A structured doc pointing at the exact path of everything created, so a downstream tool — or a person — can parse what was built and where.
Raw material, not the final cut
The zip is clips + frames + prompts + VO for the editor to assemble. It's upstream of the client deliverable, not the deliverable.
After Effects is where a human assembles it: duplicate the
Control template, composite the clips, re-set the text live. The render comes back into the
project's 07_final-video/ and shows up in the browser — which is
the one thing the older version of this pipeline had no answer for. “Is this video
finished?” now has a recorded answer, and it's gate 5.
◆ HOW A HUMAN ACTUALLY APPROVES SOMETHING
Two different things: the per-asset verdict, and the gate.
Reviewers work in the browser — approve a still, mark one for regeneration with
a comment. That's the verdict. The gate is the project-level unlock, and it's recorded on
the CLI against a named person, because a gate nobody signed is a gate that gets skipped.
1
The storyboard stills
Every composed 16:9 scene, reviewed frame by frame. video-prompts/ stays locked until it passes.
Daniel / Brittany usf-video gate approve <id> 1 --by "Daniel"
2
The mid frames
Each isolated part, on white. Load-bearing: after this the MF can never be regenerated without breaking the A/B join.
Read off the contact sheet, one row per shot — does the state actually change, and does the subject stay identical?
Reviewer usf-video gate approve <id> 3 --by "…"
4
The rendered clips
Mandatory. Do not self-approve. This is the last look before real money and an editor's time go downstream.
Daniel usf-video gate approve <id> 4 --by "Daniel"
5
The assembled cut
Back from After Effects. Three states — absent, awaiting, approved. A re-upload sends it back to awaiting.
Set in the browser :3003 → final-video tab
shortcut/usf-review <id> does the whole loop — presents what's waiting,
records the decision with the right attribution. The marks a reviewer leaves in the UI are then
actioned by /check-feedback, which reads them back, prices the redo,
confirms, runs it, and clears the marks.
◆ WHAT ACTUALLY MAKES THIS CONSISTENT
The style isn't a vibe. It's a fixed list of hard rules, injected verbatim, every time.
Consistency doesn't come from the model — it comes from re-stating the same
locks in every single prompt, plus a human catching what the lock alone doesn't prevent.
The look was set by the Control video and is closed: your job is adherence, not
interpretation. Where the design system and the process spec could disagree, precedence is
written down — and the approved artifact beats the document that describes it.
The one carved-out exception · care-team style
Everyday subjects are featureless periwinkle
silhouettes. The care-team illustration style is the single documented exception — simple,
warm, diverse faces, on purpose.
Gold, exactly once
#FFBB06 may appear in exactly one scene per video — the single emotional high point. It's claimed at stage 1 and every other scene is checked for stray gold.
Light grounds, always
Warm white or one pale act wash, flat and even. Never a gradient, vignette, or floor. Brand colors are ink and linework, never a full-bleed ground.
Eggs are rings, never dots
Small pale thin-outlined hollow rings. A solid dot reads as an eye — automatic reject.
Needle = suction, not stabbing
A straight fine hairline with a bevel tip that stops at the target's edge. Never an arrowhead, never a realistic barrel, never through to the far side.
Never red. Never a face.
No red, orange, beige or black. No blood, no babies, no identifiable patients or staff, no facial features — outside the care-team exception.
Describe positively, never negate
“No syringe” reliably draws a syringe. Nine separate rejects on one batch before this was understood.
Graphics lead, photography supports
One flat 2D schematic hero at 1/3–1/2 of the frame. Photography is a framed 40–60% inset — never a hero, never full-bleed, never stock.
Sentence case, two lines, no banned words
All text horizontal, nothing under 14pt at delivery size, no exclamation points. Banned: journey · path · next steps · every step of the way.
Frontal and calm by default
Camera locked, motion slow and eased, everything ends at rest — with rare, deliberately authored exceptions for one specific shot, never accidental.
◆ WHAT WE'D TELL A NEW TEAM RUNNING THIS
The things that actually cost time weren't the models. They were consistency.
Someone has to actually look
A mechanical palette check catches stray color. It doesn't catch text the model
invented in a frame that explicitly forbade text.
A real reject, still on disk
Rejected take
The prompt ended with “absolutely no text, letters, numbers,
captions, titles, labels, watermarks or logos anywhere in the frame.” Kling drew a
caption anyway — garbled, low-contrast, bottom-centre. The negative didn't stop it; a
person watching the clip did. It lives in _rejected/ named for
exactly what was wrong with it.
Reference the render, not the description
Chaining a shape off its own prior render holds it pixel-stable. Off a text
description, it drifts a little every time.
A chained pair, same subject
Anchor
Chained
Scene 3's swollen cluster used the anchor render itself as its reference
image — not a redescription of it. Four follicles, same geometry, one changed property.
Anchor leak is the #1 documented failure
The same mechanism that holds a subject stable will drag it into frames that
shouldn't contain it.
When to pass the anchor
follicle cluster is the subject → pass --image ovary bearing follicles → pass --image a funnel → do NOT a microscope → do NOT a calendar → do NOT
Pass the cluster anchor only when a cluster or a follicle-bearing ovary is
the actual subject. On anything else it drags the cluster into the frame — and it's on
the QA reject list by name.
Reuse beats regenerate
Cross-video consistency is worth more than a perfect per-scene fit — and
it's free.
Search before you spend
$ usf-video swipe search needle
ico_needle-bare_MF.png approved used by B1-01, B1-05, B1-13 ico_needle-suction_MF.png approved
2 hits — use, don't generate
111 stills and 219 clips already exist in the shared swipe library. A hit
copies byte-identically into the scene for 0 credits. It also means a client rejection can
be applied library-wide in one command, instead of hunting 30 folders.
And one that's structural: a fix has
to reach every copy of a rule. Corrections used to live in three separate places — a style-lock
file, a reference image, and a fallback string in a script — so fixing the obvious one let the
old version quietly resurface. That's why the design system now declares a written precedence
order, and why the reference pack ships as versioned files with a
doctor command that verifies all 97 of them are present.
◆ WHERE THE LIBRARY STANDS TODAY
30 videos in flight. The bottleneck is a person, not a model.
The generation side is not what's slow. Five videos have already been carried all the
way through motion and have real rendered clips sitting on disk — behind a gate 1 nobody has
signed.
Waiting on a human
12
All parked at gate 1 — storyboard stills awaiting approval
B1-13, B1-09, B1-11, B1-12, B1-10 have completed frames and clips downstream of it
Reviewing those five first unblocks the most finished work
Ready to move
18
Next action is stage 1 — the script has never been broken into scenes
Stills exist on disk but aren't attached to any beat
Free, no credits, no lease needed
Signed off
0
No video has cleared any gate yet
Every project is unowned — no named reviewer on any gate
That, not throughput, is what's holding the slate
Figures from usf-video status,
2026-08-11; engine and gate notes updated 2026-08-12. The same picture with the actual frames and clips is at
ext-us-fertility2.exe.xyz/ui.
◆WHERE TO START
Three commands and you're inside the pipeline.
$ usf-video doctor # every ✗ prints its own fix$ usf-video status # what everyone has going$ usf-video ui # the same thing, with pictures
Every stage is a versioned skill with its own
hard rules, QA checklist and do-not-touch list — not a one-off prompt. Ask about any of it.