⏳ S42 CutFlow Temporal FX
Ghosts, trails, slit-scan, and strobe — effects that need more than one frame
- clip
- clip
- frame_count
- info
Most image filters look at one frame at a time. Temporal FX is the opposite: it looks at a window of frames and combines them across time, which is how you get effects that single-frame processing physically can't produce - ghostly echo trails behind moving subjects, accumulating motion streaks, the slit-scan "time displacement" look, dreamy long-exposure averages, and a strobe. It's one of the Filters in GeekyGhost's S42 CutFlow suite, and it's the node that makes AI-generated footage stop looking like a series of still images.
The five modes
- echo (default) - semi-transparent copies of past frames layered onto the current one. The ghosting every music video has used since the 80s. Good on dancers, cars, anything with clear motion.
- motion_trail - an accumulating trail behind moving objects, like a long-exposure speed streak. Related to echo but builds up rather than repeating at fixed intervals.
- time_displacement - the slit-scan: vertical rows of the image sample different time offsets, producing that warped, flowing look from 2001: A Space Odyssey. Weird, mesmerizing, and instantly recognizable.
- frame_average - averages N adjacent frames. Smooth, dreamy, long-exposure. This one is genuinely useful beyond art: it damps frame-to-frame flicker and jitter in AI output, which is why it pairs well with LTX/Wan footage.
- strobe - alternating frame holds for a strobe/flash effect. The music-video club light.
The inputs
mode picks the effect; then three knobs tune it:
- window (int, 2–30, default 5) - how many frames the effect sees. Bigger = more ghosting/trail/blur. This is the primary "how much effect" control.
- intensity (float, 0–1, default 0.5) - overall strength; 0 is passthrough, 1 is maximum.
- decay (float, 0.1–0.99, default 0.7) - how fast past frames fade. Higher = longer persistence (heavier ghosting); lower = snappier. Used by echo and motion_trail; the other modes ignore it.
The practical tuning loop: start with a modest window (5) and low-ish intensity (0.3), and raise decay only when you want the trails to linger. Everything runs as pure tensor operations on your IMAGE batch - CPU, fast, deterministic. Outputs: clip, frame_count, and info.
Installing it
Standard S42 CutFlow install:
cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt # Windows portable: python_embeded\python.exe -m pip
Or ComfyUI Manager → search S42 CutFlow → install → restart. It's under S42 CutFlow/Filters.
Gotchas
Temporal effects have real edge cases, and they're worth knowing before you queue a long render. First, the first N frames of the clip get short-changed - the window has nothing before it, so the effect ramps in. Feed it a clip with a little lead-in (or trim after the fact). Second, motion is the fuel: a static clip with echo or trails does nothing. Don't blame the node - give it movement. Third, frame_average at high window values makes motion turn to mush; if you're using it to de-jitter AI footage, keep the window at 3–5 and pair with a low strength. And the workflow tip the community would give you: this node is also how you fake motion blur on AI video - the KB notes that "no motion blur" is a top reason AI clips read as fake, and a light frame_average or echo pass is the cheapest fix for that tell.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Video clip for temporal effects. | |
| mode | COMBO | echo | 'echo' = semi-transparent copies of past frames layered on current. 'motion_trail' = accumulating trail from moving objects. 'time_displacement' = vertical pixel rows sample different time offsets. 'frame_average' = average N adjacent frames (smooth/ghostly). 'strobe' = alternating frame hold for strobe/flash effect. |
| window | INT | 52–30 | Number of frames in the temporal window. Larger = more ghosting/trail/blur. |
| intensity | FLOAT | 0.500–1 | Effect strength. 0 = passthrough, 1 = maximum effect. |
| decay | FLOAT | 0.700.1–0.99 | How quickly past frames fade. Higher = longer persistence. Used by echo and motion_trail. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| clip | IMAGE | — |
| frame_count | INT | — |
| info | STRING | — |