I tried to make an AI generate four hours of a hospital room. It made ninety seconds, then quietly lost the patient.
What actually breaks when you push a video model past its horizon — measured, on one small computer.
Joe Cox
I wanted synthetic footage of a hospital room. Hours of it. Realistic dust, realistic light through the blinds, a patient asleep in the bed — the kind of thing you need to test a monitoring system when you cannot, for obvious reasons, record real patients.
Modern video models make beautiful five-second clips. I needed fourteen hundred of them in a row, and I needed the room to still be the same room at the end.
It is not.
What breaks
Generate a chunk, use its last frame to seed the next, repeat. This is the obvious approach and it works fine for about ninety seconds. Then the drift starts.
By chunk 140 — roughly five minutes in — the wood cabinets had gone grey, the green chair had gone grey, every colour had drained toward a washed-out cyan, and the woman asleep in the bed had dissolved into a smear of pixels. The bed was still there. The window was still there. The patient was gone.
Nothing errored. The pipeline reported success for every single chunk.
Four ways it fails, and they are not the same failure
I ran four conditioning strategies against each other, same seed, same prompt, same everything, 160 chunks each, and measured the drift instead of eyeballing it.
Nothing — generate each chunk independently. Almost no drift, because there's nothing to accumulate. But every chunk boundary is a jump cut: 136 discontinuities per thousand frames. Unwatchable in a different way.
Chain on the previous frame — smooth, the best continuity of anything I tried, and it wanders relentlessly. This is the one that loses the patient.
Chain, plus always re-show the original frame — doesn't wander as fast, but degenerates into flat posterized cartoon colour, like someone turned the saturation to maximum and the detail to zero.
My clever idea — anchor on many past frames at once, spaced out over time, so the model can see one second ago and one minute ago simultaneously. This collapsed to a solid green rectangle by chunk 40. Worse than every baseline I was trying to beat.
That last one deserves explanation, because the failure is instructive. Each anchor has a "strength." I stacked thirteen of them and the strengths summed to 2.53. Above 1.0 you are pushing the model's internal state outside the range it can represent, and it detonates. Worse: the more history accumulated, the more anchors piled on, so it degraded precisely as the method did more of what it existed to do.
The thing I actually learned
There is no fix here. There is a dial.
Re-anchor to the original often, and you get low drift with visible seams. Never re-anchor, and you get a seamless video of a room that slowly becomes a different room. Every strategy in between inherits some of both. You don't solve the tradeoff; you pick where on it you want to live, based on whether your application can tolerate wandering or cuts.
For simulation footage — where you need a consistent, identifiable room and nobody cares about invisible edits — you want the low-drift end. That's a useful thing to know before you spend a week of compute finding out.
One genuinely good idea, half of which worked
Facts about a scene have different lifespans. "This is a patient room" is true forever. "The light is coming from the left" is true for hours. "The blanket just shifted" is true for a second.
The models give you several channels to assert things through, and those channels have wildly different failure characteristics. Text prompts cannot drift — a sentence saying "static camera, no pan" is exactly as true at chunk 200 as at chunk 1, and costs nothing. Image anchors can drift, because every one is decoded and re-encoded, losing a little each time.
So: put the permanent facts in the channel that can't degrade, and spend your image anchors only on what text cannot express.
It half worked. The layout held perfectly — bed centre-right, window left, camera fixed, all still true hundreds of chunks later. But it posterized anyway, despite "posterized, flat colours, cartoon, illustration" sitting right there in the negative prompt.
Which taught me the sharper version of the idea: text carries what is true. Images carry how it looks. You cannot describe your way out of style drift.
The part that cost me the most
Three separate times, a pipeline ran perfectly and produced garbage.
Correct exit codes. Plausible timings. Files written to disk. Reasonable-looking image statistics — mean brightness, standard deviation, colour spread, all within normal range. Every automated signal I had said success.
The output was coloured noise. Once it was pure static; once it was a green rectangle.
The only thing that ever caught it was opening a JPEG and looking at it.
One of those failures was entirely self-inflicted, and it's the one I think about. I hit an error where the scheduler demanded a parameter the pipeline never supplied. I made the error go away by switching off the mechanism that required it. The error disappeared. The run went green. It generated ninety-eight frames of beautiful, fast, meaningless noise, because I had handed the model a noise schedule it was never trained on. I hadn't fixed anything. I'd removed a component and mistaken the silence for success.
If you build anything that generates unattended for days, put a human-visible sample check in the loop. Your monitoring will not save you. Exit codes do not look at pictures.
Everything is public
The measurement harness, the four-arm comparison, the metrics, and all the negative results are here: huggingface.co/resoajoe/loglens-longvideo-drift. It runs on one small computer and works with any seed photo — point it at your own room.
I did not get four hours. I got a measured map of exactly how and why it falls apart, which is the more useful thing to have before attempt number two.