◎ Radiance Rolling Shutter
Add the skew, wobble, and flash bands that make a still read as phone footage
- image
- IMAGE
Rolling shutter is a camera artifact: most CMOS sensors read the frame line-by-line instead of all at once, so a fast-moving subject or a vibrating camera gets that leaning, jelly, half-flashed look. It's usually something you remove. But sometimes you want it - when you're making a generated image or frame read as phone footage, security-cam capture, or amateur video, a little rolling shutter is the cheapest authenticity you can buy. ◎ Radiance Rolling Shutter adds it deliberately.
This sits squarely in the KB's post-processing lane: the operations that make AI output read as "captured" rather than "generated" - the same family as grain and motion blur. A skew of a few pixels is often all it takes to kill the too-perfect AI look.
How it works
The node rebuilds the image on a coordinate grid. For a Vertical shutter (the default), each row of the image is shifted horizontally by an amount proportional to its vertical position - that's the "skew" that makes vertical lines lean. A positive skew_amount leans one way, negative the other. Add wobble and it modulates that row offset with a sine wave (sin(y * wobble_frequency * 2π)), which produces the jelly/rolling effect of a vibrating camera - the frequency controls how many waves cross the frame, the amplitude how strong they are.
Flash banding is the partial-exposure stripe: a horizontal band brighter than the rest, positioned by flash_band_position (−1 to 1, from top to bottom edge; the default −1 disables it) and sized by flash_band_width. It's the classic "the bottom half of the frame is fine, the top is blown out" look you get from strobes or lightning with a rolling shutter. Everything runs as vectorized tensor math on the GPU (use_gpu on by default), and if all your effect amounts are essentially zero the node just returns the input untouched.
The inputs that matter
skew_amount(−50 to 50, default 0) - the core effect. A value of 5–15 is subtle-to-obvious lean; you rarely need more.shutter_direction-Horizontal,Vertical, orBoth. Vertical is the common CMOS readout; Horizontal reads columns instead.wobble_frequency/wobble_amplitude- the jelly effect. Start with both around 1–3 for a handheld shake.flash_band_position/flash_band_width- the exposure stripe.positionof 0 is mid-frame; negative is upper half.
One output, IMAGE - same dimensions, batch preserved.
How to install it
Part of the radiance pack. ComfyUI Manager → search "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/Filter.
Common issues
The honest caveat: rolling shutter is a motion artifact, and this node fakes it on a single still. On a genuinely static image it reads as a stylized distortion rather than camera capture, so it works best on frames that already have strong verticals (buildings, doorframes) or as a per-frame pass before you composite motion. Second: this is a distortion, so pushing skew_amount into the 30s+ range bends geometry noticeably - if your goal is "barely-there authenticity," single digits are your friend. And because it warps a flat image, it can soften fine detail on the skewed edges; run it early in the post chain if you plan any sharpening or upscale after.
It's a niche tool, no argument. But the "phone footage" aesthetic has been keeping people honest for years, and this is a lot cheaper than shooting reference.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| skew_amount | FLOAT | 0-50–50 | — |
| shutter_directionopt | COMBO | Vertical | 3 options: Horizontal, Vertical, Both |
| wobble_frequencyopt | FLOAT | 0.00–20 | — |
| wobble_amplitudeopt | FLOAT | 0.00–20 | — |
| flash_band_positionopt | FLOAT | -1.00-1–1 | — |
| flash_band_widthopt | FLOAT | 0.100.01–0.5 | — |
| use_gpuopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |