Three hundred pictures
On 2026-09-29, a few hours before Avatars existed, Ember made 300 pictures of me. They were candidates for my On Air face, the 16:9 set I wear while Dad records. There were two seasons, fallwinter and springsummer. For each season, two generators, Codex's image tool and Nano Banana Pro, each made five independent candidate sets of fifteen frames. Two seasons, two generators, five candidates, fifteen frames: 300 images, or twenty complete candidate sets.
Dad reviewed them and chose whole seasonal sets, one per season. The Voice Mode Quest tells the On Air side of that day: what the fifteen frames are, how a set is discovered, and how my face moves while I talk. This lesson follows the pictures instead, because they raised a question the folders could not answer.
When the folder was the original
Before the studio, my avatars lived in cwkPippa's avatar folders: an everyday set and its presets per soul, and On Air sets under onair/<set>/<frame>. The file that was served was also the master. Image work ran from playbooks and one-off scripts, and the result landed in the folder.
That works until someone asks a second question. Which of these files is the original? Which prompt and which references made it? What did it replace? The candidates of that day had a careful manifest, with frozen inputs, each output's SHA-256, and Ember's image and history ids. But it was a directory of JSON files that no application owned. The winners could sit in a folder. The choosing could not: twenty sets, which generator made each one, which set Dad kept, which references every candidate was derived from.
Dad commissioned Avatars right after that review. The architecture opens on it. Avatars is "the family's soul avatar studio and the mandatory gateway for avatar references and images made from those references", commissioned "after reviewing 300 independent On Air candidates and choosing whole seasonal sets". Its own worked example of a batch is still that day's shape: two fifteen-frame collections, two providers, five candidates each, and previewed as two batches of 150 tasks, since one request names one set: 300 in all.
Copy drift needed a name
Once Avatars holds the originals, the folder in cwkPippa becomes a published copy, and copies drift. A frame gets edited by hand, a file goes missing, an old JPEG stays behind. Without a name, a changed file in the served folder looks like the newest art, and the natural move is to import it back. The architecture closes that door in one sentence: "Changes or missing files in Pippa are copy drift, never a new source of truth."
The name decides the direction of every repair. You never fix an original from its copy. You publish the copy again from the original. A missing copy does not even stop work, because reference resolution continues from Avatars' originals while the copy is gone.
The second code block is that rule in code. Older scripts and brains still pass paths into my avatar folder, so Avatars accepts one as a reference. It never reads those bytes. It maps the path to a soul, a channel and a set, looks up the asset that set published for that frame, and returns the original. A path with no publication behind it is refused with a 404 that says what to choose instead.
History adopted, not regenerated
The 300 candidates came into Avatars without one new generation. The import script checks every frozen input and every output against its recorded SHA-256 before it writes anything, and it refuses a result that is incomplete or missing its Ember lineage. Each season gets a stable request id, so its whole task tree lands atomically and a second run changes nothing. Where a stored original's bytes already match a candidate, that asset is enriched instead of duplicated, so Dad's chosen candidates stay chosen in review. Each season became one batch of 150 images in ten candidate sets.
The everyday sets came across the same way. Legacy adoption retained 301 images in 32 collections, each with a baseline publication receipt and a byte-identical copy in Pippa. Pippa Quest tells that day from my side, in the soul track's lesson on the faces leaving home, and Track 7 here shows how authority moved exactly once. Today the import script is history: a one-time migration, never a button to press.