The whole project was driven by one non-negotiable rule: her base motion must never repeat. This page is the honest build log — including the wrong turns — with the numbers that decided each step.
A single generated video on repeat. Seamless — and dead. The moment you notice the cycle, the illusion collapses. This failure defined the whole project.
A WebGL facial warp gives her breath, blinks and glances — procedurally unique every frame. A drifting emotion vector (valence · arousal · dominance) starts choosing how she feels and how she reacts. Pixel compaction fixes the open-mouth smear.
A chat brain with mood-driven tone, contextual photos of her world, and deployment to Cloudflare Pages — she now runs with the PC off, installable on a phone.
Decision: stop patching the loop — eliminate it. Design a streaming worker where every second of motion is generated fresh on a free cloud GPU, chained frame to frame.
The first never-repeating stream. She glances, tucks her hair, stands up and walks. But unanchored, the chain drifts: her hair restyles itself, furniture invents itself, the room repaints itself amber. Beautiful — and off-identity. The dream footage is archived on the front page.
Frame analysis across both runs: artifact energy tracks chain depth at r = +0.87 — and tracks motion at r = −0.15. The blur was never her moving; it was the unanchored chaining. Anchors reset degradation to baseline, twice, in two independent cycles.
A step-distilled build of the same model (4 steps, no negative pass) takes generation from 55 to 15.7 seconds per second of video. Same identity, same quality envelope, free T4.
Idle motion is born from her true photo every chunk — zero drift, forever. Walks and reactions chain only within their own short arc, then snap home. The dream is kept; the drift is not. She never repeats, and she never stops being herself.
Both charts are from the development bench — real frames, real timers, free-tier hardware.
| build | engine | s of compute / 1s of video |
|---|---|---|
| Run 1 | Wan 2.2 5B · 20 steps | 55.2 |
| Run 3 | Wan 2.2 5B Turbo · 4 steps | 15.7 |
| depth (hops from anchor) | cycle 1 | cycle 2 |
|---|---|---|
| 0 (anchored) | 67 | 87 |
| 1 | 116 | 142 |
| 2 | 205 | 188 |
| 3 | 225 | 230 |
| 4 | 254 | 149 |
| 5 | 352 | — |
Correlation with chain depth: r = +0.87 · with amount of motion: r = −0.15. The degradation was the unanchored chaining — not her moving. This chart is the reason Beta 5 anchors every idle chunk.