Dissolve
The grainy crossfade that never smooth-blends
- image1
- image2
- IMAGE
Most image transitions crossfade smoothly - one image fades into another with a soft blur in between. Dissolve doesn't do that. It flakes away: individual pixels switch from image1 to image2 at random, so the transition looks like the filmic dissolve you see in old movies, where the frame falls apart into grain before the next shot arrives. It's a one-trick node, but it's a good trick, and it's the right tool when a clean fade feels too sterile.
How it works
The node generates a random dither pattern the size of your image - literally torch.rand_like - and uses it as a per-pixel coin flip: where the random value is below dissolve_factor, the output pixel comes from image1; everywhere else, from image2. The result is clamped and out. At dissolve_factor 0 you get all image1; at 1, all image2; in between, a noisy mix of both.
- dissolve_factor (0–1, default 0.5) - the ratio of image1 to image2, and effectively your progress through the dissolve.
Output is a single IMAGE.
Install
Dissolve is one of ~22 nodes in ComfyUI-post-processing-nodes.
- ComfyUI Manager: search "post processing nodes", install, restart.
- Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/EllangoK/ComfyUI-post-processing-nodes
Restart after. No requirements.txt or downloads - a couple of tensor ops. It's under postprocessing → Blends in the node menu.
The catch, and how to use it anyway
The pattern is random per frame with no seed, so if you run it on a video sequence, every frame gets a fresh random flake pattern - which, counterintuitively, is usually what you want for a dissolve transition, since the grain scintillates. For a still image, one run is one arbitrary mix, so you can't "set" a particular look; you just get the dissolve at that factor. The classic workflow: keyframe dissolve_factor from 0 to 1 across a video batch (via a frame-number-driven input or a scheduler node) and you've got a real filmic transition. And unlike the pack's Blend node, there's no auto-resize here - feed it two same-size images or the math will be working on mismatched tensors.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image1 | IMAGE | — | |
| image2 | IMAGE | — | |
| dissolve_factor | FLOAT | 0.500–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |