Nodes/radiance/◎ Radiance Temporal Smooth
ComfyUI Node

◎ Radiance Temporal Smooth

Kill the flicker that makes AI video look fake

By fxtdstudios·Created 7 months ago·Updated 9 days ago· 242
◎ Radiance Temporal Smooth
  • images
  • images
  • stats
alpha0.50
motion_awaretrue
motion_threshold0.050
warmup_frames0

AI video has a tell: frames shimmer. Grain, textures, and fine detail pulse and crawl between frames even when the subject is static, because the sampler denoises every frame independently. It's the single biggest thing that makes generated video read as "AI" instead of "footage." ◎ Radiance Temporal Smooth is the cheap, targeted fix: it averages each frame with the one before it, per pixel, so static areas calm down while genuine motion stays sharp.

This is the mechanical half of the "make it look real" argument the KB's post-processing essay keeps making - grain and flicker are added to break the AI look, and flicker is exactly what this node removes. It's the Radiance suite's answer to the temporal stabilization you'd otherwise reach for in a compositor.

How it works

It's a per-pixel exponential moving average across your batch of frames: out[t] = α × in[t] + (1 − α) × out[t−1]. The alpha slider is the memory dial - 1.0 is no smoothing (passthrough), 0.2 is heavy smoothing that will flatten fine grain almost entirely. Each output frame is a blend of the current frame and the accumulated history, so flicker averages out over a few frames.

The clever part is motion_aware (on by default). A naive EMA would ghost moving subjects - the "trail" artifact. So the node computes the per-pixel difference between the current frame and the running average, and anywhere that difference exceeds motion_threshold, it boosts alpha to 1.0, meaning no blending: moving pixels pass through untouched while static grain gets smoothed. That's how you can hammer alpha down to 0.3 and still get crisp motion.

Frames are processed in temporal order (your batch must already be in playback order), the first frame passes through as the EMA seed, and warmup_frames (0–16) lets you keep the first N frames untouched so the filter doesn't start from an under-populated average - that's the "faded first frames" fix.

The inputs that matter

  • images - your frame batch, (B, H, W, C), in temporal order. A single frame passes through untouched.
  • alpha (0.01–1) - smoothing strength. Start at 0.5; go to ~0.3 for grainier sources.
  • motion_aware - keep it on unless you specifically want trails.
  • motion_threshold (default 0.05) - what counts as "motion." Lower it if fast motion is still getting blurred, raise it if you want more aggressive smoothing of subtle movement.
  • warmup_frames - for the first-frame fade issue.

Outputs: images (the smoothed batch) and stats (a JSON string with per-frame average delta before/after and a flicker_reduction_pct - wire it to Radiance Show Text to see the numbers).

How to install it

In the radiance pack. ComfyUI Manager → "Radiance", or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements_windows.txt

Restart, and it's under FXTD Studios/Radiance/Video.

Common issues

The traps are classic temporal-filter traps. First, input order: if your batch isn't in temporal order, this node silently produces garbage - there's no sort, it trusts you. Second, the smoothing-vs-detail tradeoff is real: crank alpha low and you'll see static detail soften even with motion awareness on, because slow motion below motion_threshold gets blended. If your shot has slow camera drift, raise the threshold a bit. And this is a post-pass, not a magic bullet - heavy grain reduction at low alpha can introduce banding in smooth gradients, so if you're going hard, run it before any banding-sensitive grade rather than after. Check stats for the actual reduction % rather than trusting your eyes.

It won't fix temporal coherence where the subject warps between frames - that's a generation problem. But for grain and flicker, it's the fastest fix in the pack, and it runs in seconds.

CategoryFXTD Studios/Radiance/Video

Inputs (5)

NameTypeDefaultDescription
imagesIMAGEBatch of frames (B, H, W, C). Must be in temporal order.
alphaFLOAT0.500.01–1EMA weight for current frame. 1.0 = no smoothing. 0.2 = heaviest smoothing.
motion_awareBOOLEANtrueBoost α to 1.0 (no blend) on pixels that change more than motion_threshold — preserves sharp motion while smoothing grain.
motion_thresholdFLOAT0.0500.001–1Per-pixel delta magnitude above which motion is detected.
warmup_framesoptINT00–16Number of initial frames to pass through unchanged while the EMA 'warms up'. Prevents faded first frames.

Outputs (2)

NameTypeDescription
imagesIMAGETemporally smoothed image batch.
statsSTRINGJSON stats: avg delta before/after smoothing per frame.