The live app
Nothing is trained here. The app wires the five models together for one creator, and needs one settings file and one decision: what the creator does while waiting.
The settings file
Every creator has creators/<id>/live.env. Nothing in the code names a person; this file does.
FACE_BODY="random:<recording>", so the resting loop
and the answers come from the same room and the background does not jump.What the viewer does between answers
Picking the resting pose (a person, or Claude, looks)
Raised hands, a lean or a look away read as the creator doing something, not waiting. A stillness scan cannot tell a hand held up and still from a hand at rest, so the scan proposes and someone chooses by looking.
./alive up <id>, then ask the face server for the six stillest 4-second windows:
curl 'http://127.0.0.1:8730/calm?seconds=4&k=6'
Each result has aclip(a chunk name) and astartframe, not seconds. Every window is already front-facing.- Draw each one as a sheet of 8 frames and look at all of them:
curl -o c.jpg 'http://127.0.0.1:8730/calm_sheet?clip=<clip>&start=<start>&seconds=4' - Choose the one that reads as listening: hands down or out of frame, upright, facing camera, nothing moving but breathing. The mouth does not matter; it is replaced. Rule out burned-in text.
- Write
REST="<chunk>@<start frame>"inlive.env, with the reason and the runner-up in a comment../alive restart app. - If none qualifies, pick a single front-facing, hands-down frame and set
REST_HOLD=1: the body holds still and only the face moves. Dr K needed this: all 26 candidate windows had him gesturing. - Look at the built loop at
http://127.0.0.1:8800/idlebefore calling it done.
Claude Code can do this step: it can fetch the sheets, view them, and write the choice. That is how both creators' poses were picked.
Until REST is set, the app uses the stillest window it finds, so ./alive check and
./alive up both work without it.
Where the decisions are kept
| decision | stored in |
|---|---|
| everything on this page | creators/<id>/live.env, with the reason in a comment beside each choice |
The AI-generated label
The page always marks the picture AI-generated, and says under it: "The face, the voice and the answer are made by models from <name>'s public videos. <name> did not say this." Keep it. Someone who sees a clip of this cannot otherwise tell.
Speed
| part | typical | note |
|---|---|---|
| writing the answer | 20-80 s | the LLM; most of the wait |
| first sound | ~1 s after the answer | the voice streams |
| first frame | ~10 s after the answer | the face waits for the whole voice, then starts in about 3 s |
| frames | about 2.7× faster than real time | on one RTX 5080, head on real body |
The bar under the picture shows these for every question.