Difforum · Render Options
The eighteen dials they took off the sampler
- options
Every Deforum-style sampler eventually turns into a wall of unrelated inputs. Difforum's answer was to move the fine-tuning out of the Feedback Sampler and into one node that emits a single options bundle - the kind of plumbing ComfyUI does well, where one wire carries a dozen settings.
You don't have to use it. Left unwired, the look (colour lock, sharpen, grain) comes from the Director's look preset and everything else falls back to sensible defaults. Wire it in when you want manual control, which in practice happens the first time a clip drifts in colour, goes soft, or you try to render a 30-second shot on a card that fits the model but not the shot.
What's in the bundle
Three of these are worth understanding before you touch the rest.
Colour anchoring. color_coherence is how hard colours are held to the anchor, color_mode is how they're matched (lab perceptual, rgb, or none), and anchor_mode decides what the anchor is: scene re-anchors at each prompt scene, first holds frame 0 forever, rolling uses the previous key, none lets colour drift free. The default is scene, which is the right default for prompt travel because it lets a scene change change the palette. If you've migrated a workflow from the pack's older 0.x era, first is what you used to get.
Step scaling. step_scaling on by energy (fast) means a frame at denoise 0.5 runs half the steps, exactly like classic Deforum - which is where the "steps scale with energy" speedup comes from, and it's roughly a 2x saving at the same look. fixed runs the full step count every frame. Switch to fixed when you want identical cost per frame for a deadline, or when you're comparing seeds and don't want the step count co-varying.
Depth calibration. If you're doing 3D camera moves off a depth map, depth_tracking (follow re-projects depth with the image every frame, static freezes it), translation_scale, near, far and invert_depth are the whole calibration surface. invert_depth exists because half the depth models in circulation output near = dark rather than near = white; if your dolly-in turns into a dolly-out, that's the switch.
The rest: sharpen (after each diffused frame, keeps feedback from going soft), noise (grain fed in before diffusing, which is how the loop gets new detail instead of recycling), hole_noise (extra noise where the camera uncovers new area so it gets repainted rather than smeared), symmetry plus symmetry_segments (mirror or kaleidoscope applied inside the loop, where it compounds into a living pattern), border (what fills exposed edges: reflection, border, zeros), seed_mode (fixed = the same noise every frame, calmer texture; increment = new noise per frame), and start_frame / end_frame for chunked rendering.
One output: options, into the Feedback Sampler or Live Sampler.
Chunked rendering, in one paragraph
start_frame and end_frame let you render a piece of a clip: you feed the sampler an init image that is the frame at start_frame, and the render picks up from there with the same camera and schedules. That's how you finish a long shot across sessions, and it's how you retry a bad ten seconds without re-rendering the good forty. The one thing it cannot do is invent the init frame for you - if you hand it the wrong picture, you get a plausible-looking clip starting in the wrong place.
Install
ComfyUI Manager → search Difforum, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart. numpy only; OpenCV is optional and only matters for the flow and webcam features elsewhere in the pack, not here. Templates → Difforum ships graphs that already have this node sitting between Director and sampler, which is the layout to copy.
Where people get burned
translation_scale changed meaning in the 1.x rewrite - 3D lateral moves are now measured in pixels at the reference depth, the same unit as 2D pans. A graph ported from 0.x will pan less than it used to, and the fix is to raise translation_scale, not to fight the camera.
The other one is symmetry. Doing it here is not the same as the standalone Symmetry node: inside the loop every frame is folded and then re-diffused, so the pattern compounds and the camera keeps walking through it. Applied once at the end, it's a mirror. Decide which you want before you spend an hour on a render, because the in-loop version gets weird fast - in the good way, if you're making a mandala, and in the bad way if you were trying to subtly tidy a face. Keep both dimensions divisible by 8 whatever you set; max_megapixels on Setup caps the frame area if the resolution is what's blowing up.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| color_coherence | FLOAT | 0.800–1 | How hard colours are held to the anchor. |
| color_mode | COMBO | lab | How colour is matched to the anchor: lab (perceptual), rgb, or none. |
| anchor_mode | COMBO | scene | scene = re-anchor colour at each prompt scene; first = hold frame 0; rolling = previous key; none = free. |
| sharpen | FLOAT | 0.200–2 | Sharpening after each diffused frame; keeps feedback from going soft. |
| noise | FLOAT | 0.0200–0.5 | Grain added before each frame is diffused; feeds new detail. |
| hole_noise | FLOAT | 0.250–1 | Extra noise where the camera reveals new area, so it is repainted. |
| symmetry | COMBO | none | Symmetry applied inside the loop (kaleidoscope for mandalas). |
| symmetry_segments | INT | 62–64 | Kaleidoscope segments. |
| border | COMBO | reflection | What fills the edges the camera exposes: reflection (mirror), border (stretch), zeros. |
| depth_tracking | COMBO | follow | follow = depth is re-projected with the image every frame. |
| translation_scale | FLOAT | 1.000–20 | 3D motion strength vs. the depth map's range. |
| near | FLOAT | 1.000.01–1000 | Depth calibration: distance of the nearest depth value. |
| far | FLOAT | 100.000.02–10000 | Depth calibration: distance of the farthest depth value. |
| invert_depth | BOOLEAN | false | Enable if near things are dark in your depth map. |
| step_scaling | COMBO | by energy (fast) | by energy: a frame at denoise 0.5 runs half the steps, like Deforum (about 2x faster at the same look). fixed: every frame runs all steps. |
| seed_mode | COMBO | fixed | fixed = same noise every frame (calmer texture). |
| start_frame | INT | 00–1000000 | Feedback Sampler: render a chunk; init_image is the frame at start_frame. |
| end_frame | INT | 00–1000000 | 0 = to the end. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| options | DIFFORUM_OPTIONS | — |