Fade in Video
The two-minute fix for videos that start on a jarring hard cut
- images
- images
Generated videos love to slam straight into frame one at full brightness - the model doesn't care about a gentle entry, it just starts. If you've ever rendered a clip that feels like it begins with a blink, Fade in Video is the drop-in fix: it ramps the first N frames up from a chosen color (black by default) so the shot eases in like a real edit.
It's a finishing node, not a generation node, and it's the kind of polish that costs nothing to add. The docstring is explicit about placement: run it right after VAE Decode, on the IMAGE tensor, before your video goes to the combiner.
How it works
Three required inputs: images (the decoded frame tensor [N, H, W, C]), fade_frames (how many frames to fade over, default 5, up to 240), and start_alpha (the starting opacity at frame one, default 0.5 - so at 0.5 you're starting half-transparent toward black, at 0.0 fully black). There's also an optional fade_color as an R,G,B string like "0,0,0" for fading from something other than black - white for a flash-in, or a color that matches your scene's grade.
The mechanism is a per-frame blend: each of the first N frames is lerped between the fade color and the original frame, with the alpha ramping linearly from start_alpha up to 1.0 by the final fade frame. Frame fade_frames reaches 100% opacity (the original image), everything after it is untouched, and frames are clamped so you never clip values. The ramp handles 4-channel RGBA too, keeping alpha at full.
The inputs that matter
fade_frames- the duration of the fade. 5 frames is a quick dip; 12–24 reads like a proper fade-in at 24fps. If you're doing a slow, moody opening, this is the dial you turn.start_alpha- how dark frame one starts. The default 0.5 is oddly conservative (you can still see the shot at 50%); set it to 0 for a true from-black fade.fade_color- leave it alone unless you specifically want a colored fade.
Output
A single IMAGE tensor, same shape as the input, with the first frames re-graded. Wire it straight into your combiner/saver.
Common issues
The main gotcha is start_alpha tripping people up: because the ramp starts at 0.5 by default, a "fade in" at default settings never actually goes to black - the first frame is already 50% visible. If your fade looks weak, that's why. Set start_alpha to 0 for a proper dip. Also note it fades the whole image uniformly - there's no spatial or motion masking here, which is fine for most purposes but won't do a location-based reveal. And as with the pack's dissolve node, it works on decoded frames, so don't try to sneak it into the latent path.
Installing it
Part of trashkollector/TKNodes ("ComfyUI Handy Nodes"). Install via ComfyUI Manager (search "Handy Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/trashkollector/TKNodes
Restart, and it's under TKNodes. Pure torch math - no extra dependencies.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Decoded video frames [N, H, W, C] | |
| fade_frames | INT | 51–240 | Number of frames to fade in over. Frame 'fade_frames' reaches 100%. |
| start_alpha | FLOAT | 0.500–1 | Starting opacity at frame 1 (0.5 = 50%). Ramps up to 1.0 by fade_frames. |
| fade_coloropt | STRING | 0,0,0 | R,G,B (0-255) to fade in from. Default black. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |