Field Notes

Film Grain

Why AI video reads digital, and what it actually takes to put real 35mm grain back on it.

People ask why AI video looks fake and you get a long list back. Lighting, motion, hands, the dead eyes. Most of it comes down to one thing though. The image is too clean.

That should stop you for a second. We spent a hundred years chasing clean. Sharper lenses, finer stock, more resolution, scrub the noise, fix it in post. The whole trade pointed one direction, toward the perfect clean frame. Now we've got a machine that hands us exactly that, clean with no effort at all, and it reads as fake every time. The thing we called realistic turned out to be the tell.

Here's why. Real footage carries grain. A perfectly clean frame reads as a screen instead of a window. So grain is half the fix.

The trouble is almost nobody lays it down the way film does. A filter drops one flat gray layer over the whole frame and calls it done. That isn't what film is. Real 35mm isn't flat and it isn't gray. It lives in three layers of the stock, so it carries a faint color. It's crisp, not soft. It's heaviest in the midtones and it never fully leaves the shadows or the highlights. It's baked into the image, not a sheet laid on top. And it's alive, a fresh layer every frame, the way the stock ran through the gate.

Here's a clean frame, and the same frame once it believes it was shot on film.

The same frame carrying real 35mm grain, reading like captured film.
A clean generated frame with no grain, reading flat and digital.
Clean Film
Drag to compare

Get every one of those right and the eye stops arguing. Miss a single one and it's noise sitting on a screen.

ComfyUI gives you an open graph and a deep kit of nodes, a whole pipeline you wire by hand with every step on the table. What it won't give you is real grain. The stock nodes hand you grain that sits there dead, or grain that boils. The film look is in the middle, and the middle is real work. So I built my own node for it with Claude Code, and it drops straight into the same graph. Load the clip, grain it, save it. Three boxes.

A node graph with three boxes: load the clip, grain it, save it.
The node

There's a second node beside it for halation, the warm glow film blooms around a hot highlight. It runs first, because that's the order light and film actually happen in.

The full node chain: load the clip, halation, grain, then save. Halation sits first.
The chain

That's the honest shape of the work now. You take the free path as far as it goes, you hit a real wall, and a small tool you build yourself is how you get over it. The wall didn't move. What changed is the cost of crossing it.

But notice what the grain is actually doing, because it isn't hiding a flaw. It lays down a field. Inside that field the image stops being something you inspect and turns into something you believe. A dream is never realistic, and you don't doubt it for a second.

Which is the part worth sitting with. Feeling real and being realistic are not the same thing. They pull in opposite directions. The clean perfect frame is realistic and it's dead, and chasing it is the death of cinema.

Want to talk shop?

Get in touch →