I went quiet to make a demo
Two months quiet · Part 1 of 4
I’ve been quiet for two months. That wasn’t the plan.
In July I told you what MoVox is. It reads, it speaks, and it cuts, and the pictures were still a gray rectangle. I also said the next posts would be about licenses, hardware, and the stack. I didn’t write any of them. I went to make a demo instead.
I wanted a clip I could put on the internet. Thirty seconds of a chapter: ink-wash on the screen, a voice reading, subtitles landing on the words. The homepage still has a box that says a short demo is coming soon, and I didn’t want to keep talking in front of that empty box.
What I didn’t expect was that getting a set of illustrations I’d actually sign off on would eat the rest of the summer.
This is the first of four notes from that stretch. The other three are about the book, the voice, and the fact that I now work across two computers. They don’t belong in one pile, so they’re separate posts. This one is the reason I went quiet.
The gray rectangle isn’t a rectangle anymore. It isn’t a demo either.
The Painter isn’t an empty room now. There’s a real image model in that seat. There’s a review page where I look at faces and props and say yes or no. There’s a pass that reads a chapter, decides who’s in each scene and where they’re standing, and asks the model for a keyframe. The Editor, which in July was laying voice and subtitles over a blank frame, now lays them over a picture.
So chapter one has pictures, all 72 scenes of it. Last week I sat down and went through every one of those frames by hand, and that’s how I found out I wouldn’t be posting any of them.
I flagged 29 of the 72. Two men who are supposed to be sworn brothers have the same face. Guan Yu’s famous blade comes out with a stubby little haft. A man speaking in one tent is, a few seconds later, speaking in a different tent, because a long speech got cut in half and each half got its own room. A scene that should have three people in it has one, looking slightly lost, as if the other two had stepped out.
None of that is “the model can’t do ink-wash.” The paintings are often beautiful. Beautiful and wrong is worse than a gray rectangle, because a gray rectangle doesn’t pretend.
I spent weeks tuning the thing that draws. A lot of the time it was being asked to draw the wrong thing.
That’s the sentence I wish I’d started with in August.
The general claim is too easy, so let’s take a concrete case. Chapter one, Lu Zhi is talking in his tent. One man, one tent, one speech, and the book doesn’t move him. The pipeline cut the speech into two scenes anyway, only because the audio for that stretch ran long, and each scene was asked to invent its setting from a blank page. So you get “a camp tent, deep night, a few oil lamps” and then “a low military tent, weak candlelight.” Same tent, two rooms, and he changes rooms mid-sentence. I flagged both frames, and for a while I thought the image model just didn’t understand Chinese. It wasn’t that. The step writing the picture prompt only ever saw the one scene in front of it. It was never shown the rest of the chapter. Continuity wasn’t weak. It was missing by design.
I fixed that one. A long speech can still be two shots, because the audio really is that long. It can’t be two paintings. One speaker, one place, one continuous thing he’s saying: both shots share one keyframe, and only the camera move changes. The timing cut stays. The second room doesn’t.
Here’s another. Liu Bei, Guan Yu, and Zhang Fei are the three sworn brothers. The book often just calls them 三人, “the three of them,” because a human reader makes the connection from the previous lines. The pipeline had a one-scene memory for who was allowed on screen. One innocent scene where only Liu Bei speaks, and that memory is wiped. The next scene says 三人, and the only name still allowed is Liu Bei. So the prompt’s opening line demands three brothers, and the reference handed to the model is one portrait.
I’d been treating “the brothers merge into each other” as a drawing problem. Masks, extra reference images, different ways of packing three faces into one generation. Some of that really is a drawing problem, and it’s still open. But when I finally went back and checked what the model was being asked for, 13 of the 72 scenes asked for people the cast list didn’t hold. The model was told to draw three men and handed one face. No better model was going to invent the other two out of a list it wasn’t allowed to use.
The fix was boring code, not a smarter prompt, which is how the good fixes in this project usually look. Remember the last five scenes, not one. If the text says three, never shrink the cast below three. If the book shortens names to one character each, like 关、张 for Guan Yu and Zhang Fei, that still counts. That took the 13 conflicting scenes down to 6. The other six are a different bug, and a worse one: the character table only holds people who speak. A man who gives orders, fights, and dies without ever getting a line of dialogue has no row, so there’s no face to hand the model at all. That one is still open.
Here’s the catch with the fix. Scenes with three or more people went from 15 to 24, and the chapter started looking worse, because a frame that used to cheat by drawing one man cleanly now actually tries to draw three. I’m taking that trade. A missing person can’t be recovered later. A duplicated face is a known problem. I mention it because if you only look at how many frames I flagged, the fix looks like a regression. The count is not the verdict.
A count is often not the verdict.
I built a second agent, running a vision model, whose job is to look at the finished frames and flag the bad ones, so I’m not opening 72 images a night with my eyes as the only instrument. It isn’t a new stage in the pipeline (the five seats on the homepage are still the five stages); it sits next to me at the review gate. Then I audited chapter one by hand, all 72, and compared.
I’d flagged 29. The review agent flagged 21. Those totals look close. They’re not. It missed 15 of my 29 defects and flagged 7 frames I’d passed. Recall was 48%. Precision was 67%. (Recall is how many of the real defects it caught; precision is how many of its flags were real.) The totals only looked fine because the two kinds of error cancelled out. Of the 36 frames either of us flagged, we agreed on 14. That’s 39%.
I still run the review agent. It’s a triage tool, not a measurement. The trouble is I’d already used its counts to call a couple of experiments won or lost, including one where the difference was 2 frames out of 38. Two frames is inside the noise. That experiment didn’t measure what I thought it measured, and I’m not going to pretend it did.
It’s the same mistake I made on the text side, which is the next note in this set, so I won’t steal its punchline. Short version: a number that looks healthy can hide a mess, and I’ve now watched that happen in two different seats of the same pipeline.
Some of what looks like a prompting problem isn’t a prompting problem.
Two that ate real weeks, kept short.
Zhang Fei’s serpent spear, the 丈八蛇矛. The description said the head was broad and three-edged, and the model drew exactly that, a barbed halberd, in every scene he was in. So I rewrote it as long and winding like a snake’s body. It drew a snake. An actual snake, coiled round the shaft. Weapon names in this book are metaphors, and the model paints the noun. “Not” works the same way: write “not X” in the positive prompt and you’ve just asked for X. It doesn’t hear the “not.” It hears the noun.
Guan Yu’s blade needed a longer haft and nothing else. I asked the image model to change the proportion. It won’t. An edit strong enough to stretch the haft also redraws the head. So I wrote a small pixel composite that slides the lower half down along the shaft, and the drawing stays exactly the same except for the length. Diffusion is the wrong tool for a ruler.
This is what “the demo is taking a while” actually looks like. Not one hard problem. A stack of problems that all show up as “the picture is wrong,” and only some of them live in the model that paints.
What’s left is the one I can’t fix with a rule yet.
Three similar men in one frame still render as fewer distinct men. Liu Bei, Guan Yu, Zhang Fei: same era, and in what the model already “knows” about this book, the same kind of face and the same kind of beard. Ink-wash doesn’t give you pores and a jawline to hang a face on. It gives you colour and a silhouette. Put all three in one shot and the image model starts averaging them.
The model only has three slots for reference images: approved pictures of a character, passed in so this frame stays that person. I was filling those slots by who’s most prominent across the whole novel. So the man actually leading a scene, if he’s a minor character overall, got no picture of himself and came back as a generic extra. Ranking the slots by who matters in this scene fixed that class of frame. It doesn’t fix the brothers. They’re all major, they all fit in three slots, and the third slot is the weak one. A recent render also showed a trap in the obvious patch: drop the third brother from the cast but leave the sentence saying “the three of them stand side by side,” and the model doesn’t rewrite the sentence. It abandons the staging and draws something else. A renderer can delete a clause. It can’t fix the prose around it.
The long-term way through doesn’t use a slot at all. It’s a character LoRA. LoRA is short for Low-Rank Adaptation: a small fine-tune that teaches an existing image model one specific face, which then rides along on every picture of that person without spending one of those three slots. I don’t have enough approved pictures of each brother to train one, so it’s parked. Naming the technique isn’t the same as shipping it.
What I’ve picked for now is shot design, not a model. No frame asks for more than two recognizable faces, and the two go to whoever’s talking. The scenes that truly need all three, like the oath in the peach garden, get shot from behind. It’s a workaround, and I know it. I’d rather ship an honest workaround than sit and wait for a dataset.
One more thing I owe you.
For weeks I kept making still frames better, and I never once watched a chapter end to end. When I finally stepped back and looked at the whole pipeline, the right order was obvious: get a chapter playing first, flaws and all, then decide what’s worth fixing by watching it, not by staring at a contact sheet. Chapter one now plays start to finish: pictures, voices, subtitles, and a slow camera move over each frame. I also tried the Animator’s model on a handful of keyframes. Faces and ink-wash survive the motion, except in one battle scene where everything moves at once.
So there’s a chapter that plays, and still no clip I’ll post. I won’t post one until I’d sign my name under the picture.
I still owe you the license post I promised in July. That hasn’t gone away. It’s just not the first honest thing to say after two months of silence.
The next note is about the book, and about why “the Reader works,” which is what I told you in July, turned out to mean 99.96%. That’s not the same thing as the book.