09 · Grain

Put the film texture back

Counterintuitively, after working so hard to remove grain, the last step adds a little back. Fully denoised footage looks waxy and digital, uncanny for old film.

Fixes: the "plastic" look Tool: FFmpeg noise (temporal) grain.py

The whole secret is that the grain must be temporal, a fresh, independent pattern every frame, exactly like real film. A single frozen pattern would look like dirt stuck on your screen. Watch both panels below: same grain strength, but one is frozen and one refreshes each frame.

Left: static grain, the same speckles every frame, so it reads as dirt on the lens. Right: temporal grain, refreshed each frame, so it reads as living film texture. Same strength; completely different feel.

It's applied mostly to luma with only a third as much on chroma, so it reads as neutral film grain rather than colored speckle. And it runs dead last, after interpolation, so it's crisp on every final frame and doesn't get smeared by the interpolator.

Yossi's dials: strength: 7 (subtle), temporal + uniform, chroma at ⅓ of luma.