Build a creator

How building works

One command builds every model a creator needs, starting from a list of their YouTube videos. It takes one to two days, mostly unattended, and stops only when a person has to decide something.

./alive down                        # building needs the whole card
./alive build huberman --dry-run    # what would run next, in every stage
./alive build huberman              # do it; run the same command again after any stop
./alive build huberman --stage voice   # one stage only

Stages, in order: videos, answers, voice, clips, motion, render. The live app is not a build stage; it is a settings file (stage 6). It runs on the system python3 and picks each step's environment itself.

What needs what

Six stages. Each makes something the later ones read, which is why they run in this order.

videosYouTube → disk 1 answersreads the subtitles 2 voicereads the audio 3 face clipsreads the picture 4 voice → motiontheir face rig, anda motion model 5 motion → picturea renderer of theirface 6 live appthe resting pose tracked face clipsthe motion model, the cooked meshes the answer engine's indexthe voice model
Answers, voice and face clips only need the videos; they could run side by side, but the build runs them one after another so they never fight over the card.

What one build step looks like

For each stage, the build asks that recipe's status command what is next and runs it, until the recipe says it is done. When the next step is a decision only a person can make, it looks for a recorded answer.

ask the recipestatus: what is next? done?or a step next stagethis one is finished needs aperson? run itminutes to hours recorded increators/<id>/? STOPsays what to look at replay ituse the recorded answer donea stepnoyes noyes
Every step checks the disk first, so a step that already ran is skipped. After a STOP, record the decision and run ./alive build <creator> again; it carries on from there.

What a stop looks like, and how to clear it

STOPPED at a decision only a person can make:
  voice: choose the step to release from the sweep table (RECIPE.md), and record it
  as voice.release_step in build.json
Record it, then run the same command again; finished stages are skipped.

Every stop names the file to change. You edit it by hand; there is no separate tool. The stops, and the edit each one wants:

stop sayswhat to do
answers: no persona notewrite data/answers/<name>/creator.md (how)
voice: ... read it offread the speaker table the step printed; set SPK_THRESHOLD = 0.60 (your value) in the voice profile
voice: choose the step to releaseread the sweep table; set "release_step": 8000 under voice in build.json
clips: look at .../clusters_full/ and write verdicts.jsonlook at each group's sheet and write creators/<id>/build/clips/<take>/verdicts.json (format)
motion: look at the joins sheet / render: ...open the image it names; if the mouths line up, run the command it names with --ack "what you saw" (motion) or --yes (render). Or rerun the build with --trust-gates, which records that nobody looked
motion: read the sweep's validation rankingset "run": "<winner>" and "wrong": "what is still wrong" under motion in build.json

The creator's build file

creators/<creator>/build.json says which videos and which settings, and records the decisions that are one value. Larger decisions sit beside it in creators/<creator>/build/.

{
 "videos":  {"folder": "huberman", "ids": ["QmOF0crdyRU", "XeN6eGO6FVQ", ...],   ← YouTube ids
             "download": ["--full", "--no-video", "--a2f", "--subs"]},   ← whole video kept as a file; frames are
                                                                   cut later, only for the tracked one
 "answers": {"creator": "huberman"},
 "voice":   {"profile": "huberman", "release_step": 8000},                    ← which trained step to keep
 "clips":   {"profile": "huberman", "takes": ["vXTK0Ac9i1Q"]},                ← which of the ids above to track
 "motion":  {"profile": "huberman", "run": "huberman_S_seed0", "wrong": "..."}, ← which training run to keep
 "render":  {"profile": "huberman", "deployed": true, "wrong": "..."}
}

The stages at a glance

stagemakestimea person decides
1 · Answersan index of their words, and their persona noteminuteswhich 18 passages show how they talk
2 · Voicetheir cloned voice~1.5 hthe speaker-filter threshold; listening to the reference clip; which training step to keep
3 · Face clipsclean, tracked clips of their face10-20 h per videowhich shots really show them, framed as wanted
4 · Voice to face motiontheir face rig and a motion model~2 hlooking at their rig; the sound/face timing sheet; which run to keep
5 · Face motion to picturea renderer of their face~4 hthe camera/mesh sheet; what is still wrong with it
6 · Live appthe live settingsminutesthe resting pose
Rebuilding Dr K or HubermanEvery decision above is recorded for Dr K. For Huberman all are recorded except the two timing sheets, which nobody signed off when he was built; add --trust-gates to accept them, and the record will say nobody looked. The only inputs you supply are the licensed files from setup and the two persona notes, which quote the creators' own words and so are not in git.

A rebuild is close to ours, not identical: the GPU steps are not bit-exact (tracking fits agree to about 0.1 mm), and YouTube regenerates its automatic captions now and then, so the answer archive can differ by a few passages. A from-scratch Huberman rebuild on 2026-10-04 reproduced the voice to the same scores and every shot group exactly.