← LVGenStudio

Build log · LVGenStudio

The model that could not hold a face, and the pivot to something it could

Product architecture, orchestrated with Claude Code

I gave the model a single reference image — a face — and a prompt asking it to hold that face through motion: turn the head, blink, smile, push hair back. Nothing else in the frame to distract it.

Seven frames from a generated clip, a woman's face turning and smiling, the same identity held consistently across every frame
The face-hold test. Same person, every frame, through a head turn, a blink, a smile.
The actual clip. Given one job — hold the face — it did the one job.

It held. That was the first time a model had done that cleanly on this project, and it mattered enough that I wanted to push it immediately: not just holding still, but holding while doing something.

So I gave it the same kind of reference and asked for more — the character walking toward something, a scene with somewhere to go. That is where it broke, and not in the way the first post's face-melting did. It did not distort the face. It replaced it.

Eight frames of a full-body 3D character walking, a different face and hairstyle than the reference that was given
Same setup, one prompt further. A different person, consistently, for the entire clip — just not the one I gave it.
The identity-swap clip. Confident, coherent, consistent — and not who I asked for.

The reference image was still attached. The model still produced a stable, consistent character for the full clip. It just was not building toward the face I had given it — it had written its own character sheet somewhere in the process and committed to that instead. A version of the same scene, run as a full text brief rather than a single-image prompt, did the same thing:

The longer version of the same test, described entirely in words this time. Same result — a confident, consistent character that is not the one described.

The part I missed at the time: the model was actually generating video, character consistency aside — and it was doing it at a 30 GB peak. I did not catch that then.

One more thing worth turning the sound on for: these clips have real audio in them, generated by the model, not added after. That is not nothing — the model I would end up on a few days later cannot do this at all.

That distinction mattered to me more than the failure itself. A model that corrupts a face is obviously broken — you can see the seam. A model that swaps in a different, equally coherent face is a harder problem, because nothing about the output looks wrong on its own. You only catch it by knowing exactly who you asked for and checking.

The second attempt, with nothing to anchor it

A little later, I tried the opposite setup — no reference image at all. Just a written character description and a scene, asking the model to invent everything from text alone.

Second iteration, no reference image this time — a character and scene built entirely from a text description.

It held together for the whole clip, which sounds like a win written down like that. It was not one. Compared to the first face-hold test — the actual person I gave it, actually preserved, actually moving — this was a consolation prize. A consistent character is not the same thing as my character, and by the third attempt of the day I was not interested in a model that could invent someone convincingly. I needed one that could keep the person I already had.

So, hmm. Turns out it is not as easy as I thought — download a well-built model, point it at a face, get a video back. Three tests in and I still did not have that. Lucky for this project, I seem to be cursed with enough patience to keep researching and keep building instead of walking away from it.

Did the day end. Yes — about six hours ago. It's 6 am now. Time to sleep. Hehe :)

Next Getting a much bigger model running, and the number that never moved

This is a running log of building LVGenStudio, a local video generation studio for Mac. Written as I go, including the parts that didn't work. Everything here is dated, and anything I later find out was wrong gets a retraction rather than a quiet edit.