Nodes/IAMCCS-nodes/IAMCCS Cine Temporal Film Grain · 4K Scan
ComfyUI Node

IAMCCS Cine Temporal Film Grain · 4K Scan

The one IAMCCS node you can actually run standalone (and it looks great)

By IAMCCS·Created 11 months ago·Updated a day ago· 113
IAMCCS Cine Temporal Film Grain · 4K Scan
  • images
  • images
  • grain_map
  • report
preset65mm_4k_scan_subtle
blend_methoddensity_exposure
strength0.08
grain_size_4k_px0.58
temporal_persistence0.06
chroma_amount0.03
shadow_response0.48
midtone_response0.82
highlight_response0.24
seed1
frame_start0

Most of the pack around this node is buried in IAMCCS's MiniMax H3 shotboard pipeline, needs a cine_linx bus, and will not do anything without a whole ecosystem behind it. This one is the exception: feed it frames, get frames out. No cine_linx socket, no model download, no ControlNet aux dependency. If you want one taste of what IAMCCS does well without adopting the whole cinematic framework, this is it.

What it is

A finishing-pass film grain node aimed at video: animated, resolution-aware grain rendered in linear light, placed "after the final detail/upscale stage and before the encoder" - the author's own words, and the right placement. Grain is a deceptive amount of the reason real footage reads as film; the trick is doing it properly instead of stacking a static texture. This node generates a fresh stochastic grain field per frame, sizes it relative to a 4K-scan reference so the clumpiness stays correct whether your frames are 1080p or 8K, and correlates it gently across time so it shimmers like emulsion rather than flickering like mosquito noise.

It also processes in linear light with tone-dependent response - grain lands harder in shadows and midtones and lighter in highlights, which is where the "looks like a scan, not a filter" impression comes from. Overlaying noise in sRGB just makes everything look dirty.

Inputs that matter

  • preset - 65mm_4k_scan_subtle, 35mm_vision3_fine, 35mm_500t_texture, 16mm_fine_documentary, or custom_box_values. Important detail from the author: the preset only fills the box values in the UI. The box values are render truth. Change a number after picking a preset and you're on custom whether the dropdown says so or not.
  • strength - 0.08 default. On video, resist pushing this past ~0.15; grain reads much stronger in motion than in a single still.
  • temporal_persistence (0.06 default) - how much the grain field carries over between frames. Low = crisp near-independent grain per frame. Crank it toward 0.85 and you get the more "settled" correlated look, but too far and the grain stops animating and starts looking like a fixed overlay.
  • grain_size_4k_px (0.58) - grain scale in pixels, referenced to 4K; the node scales the noise field up/down to your actual resolution.
  • shadow_response / midtone_response / highlight_response - tone-dependent gain.
  • chroma_amount - colored grain. Keep this small (0.025 default); chroma grain at 4K scan levels is where the effect can go from tasteful to magenta-noise fast.
  • blend_method - density_exposure (default), linear_additive, or soft_light_luma.
  • seed and frame_start - anchor the grain sequence so you can re-run a segment and match grain from the previous render.

Outputs

  • images - the grained frames, ready for the encoder.
  • grain_map - a MASK of the exact grain applied, handy if you want to inspect or re-composite.
  • report - a string describing what ran.

Install

Part of IAMCCS-nodes. ComfyUI Manager → search IAMCCS, or:

cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git

Restart ComfyUI. Pure torch under the hood - this node pulls in no model files.

Where people get burned

  • Placing it before upscaling: grain gets upscaled into mush. After upscale, before encode, as designed.
  • Cranking temporal_persistence to remove flicker and ending up with a static grain that makes motion look like a live-action plate with a stuck scan. If frames look frozen, drop persistence, don't drop strength.
  • Forgetting that higher resolutions need the same grain_size_4k_px to look finer per pixel - that's normal, it's the resolution-aware part working.
CategoryIAMCCS/Cine Nodes/Film Delivery

Inputs (12)

NameTypeDefaultDescription
imagesIMAGE
presetCOMBO65mm_4k_scan_subtle5 options: 65mm_4k_scan_subtle, 35mm_vision3_fine, 35mm_500t_texture, 16mm_fine_documentary, custom_box_values
blend_methodCOMBOdensity_exposure3 options: density_exposure, linear_additive, soft_light_luma
strengthFLOAT0.080–1
grain_size_4k_pxFLOAT0.580.35–4
temporal_persistenceFLOAT0.060–0.85
chroma_amountFLOAT0.030–0.5
shadow_responseFLOAT0.480–2
midtone_responseFLOAT0.820–2
highlight_responseFLOAT0.240–2
seedINT10–9223372036854776000
frame_startINT00–2147483647

Outputs (3)

NameTypeDescription
imagesIMAGE
grain_mapMASK
reportSTRING