Difforum · Feedback Sampler (Classic+)
The heart of Difforum — warp, re-diffuse, colour-match, repeat
- model
- positive
- negative
- vae
- params
- camera
- init_image
- strength_schedule
- depth
- cfg_schedule
- positive_schedule
- control_net
- control_image
- frames
This is the node the whole pack is built around. Difforum · Feedback Sampler (Classic+) is Deforum's famous feedback loop, rebuilt for modern models: each frame is born from the last - warp the previous frame along the camera path, re-diffuse it as img2img, match its colour back to the first frame, and repeat. The result is the continuous-morphing, psychedelic, living-image look Deforum was known for, except this version takes a plain ComfyUI MODEL, VAE, and CONDITIONING, so it runs SD1.5, SDXL, Flux, or SD3.5 - no 2023-era lock-in, no Python 3.12 refusal, no auto-queue hacks. If you want one sentence for what makes this pack worth installing, it's "Deforum that still runs on a current ComfyUI."
The required inputs read like a sampler plus a camera: model, positive, negative, vae, the params from Anim Setup, a camera track, an init_image for frame 0, and a strength_schedule (the per-frame denoise curve - lower strength = more stable, higher = more morph). Then the usual steps, cfg, sampler_name, scheduler, plus the two colour-coherence controls: color_mode (default lab - perceptual LAB matching, and yes, lab beats rgb for keeping a clip coherent) and color_coherence (0.7–0.9 is the sweet spot per the README).
The optional inputs are where it gets powerful, and the README's "Quality & coherence" section is basically a tour of them:
depth(+near/far/invert_depth/translation_scale) - unlocks real 3D camera. No depth map, no 3D motion; that's the pack's most common gotcha.positive_schedule- prompt travel, one conditioning per frame; the scene morphs its subject as the camera moves.control_net+control_image+control_strength- structure guidance each frame (keep it ~0.3–0.5 if it feels rigid). Must match your base model family (SD1.5↔SD1.5, SDXL↔SDXL).symmetry+symmetry_segments- fold the frame inside the loop; the diffusion heals the seams, giving the living-kaleidoscope look that the mesh of every frame compounds.sharpen(0.2–0.5) andnoise(0.02–0.05) - re-inject detail every frame so the loop resolves it into structure instead of amplifying blur (the anti-mush trick, same as Detail Guard).border(defaultreflection) - stops black edges creeping in on zoom-out and rotation.cadence(2–3) - only diffuse every Nth frame; the in-between frames ride the camera warp. Roughly N× faster with smoother motion.seed_mode-fixed(default) reuses the same noise each frame, calming texture boil enormously;incrementfor livelier churn.
Output: a single frames IMAGE batch (frame 0 through max_frames), ready for VHS-style post, Flow Stabilize, or Save Video.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart ComfyUI ([Difforum] loaded N nodes in console) or ComfyUI Manager → "Difforum". numpy only; the sampler uses ComfyUI's own common_ksampler underneath, so no extra deps.
Common issues & the fixes that actually work
- Flicker / texture boiling - lower per-frame
strengthto ~0.4–0.5, keepseed_mode=fixed, and run the frames through Flow Stabilize (~0.5). Naive frame blending ghosts; flow-aligned blending doesn't. - Colour drift -
color_mode=lab,color_coherence0.7–0.9. - All-black frames on SD1.5 - a real, pack-documented one: some ComfyUI builds make SD1.5 fp16 NaN. Launch with
--force-fp32; it's a base-model precision issue, not Difforum. - Mush after many frames -
sharpen~0.3,noise~0.02–0.05. - 3D camera does nothing - you're in 3d mode without a depth input.
This is the node people actually mean when they say "Deforum." It's also the one where the pack's 16 test suites and the difforum_feedback_classic.json template earn their keep - start from the template, swap in a modern checkpoint, and let the loop do its thing.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| params | DIFFORUM_PARAMS | — | |
| camera | DIFFORUM_CAMERA | — | |
| init_image | IMAGE | — | |
| strength_schedule | DIFFORUM_SCHEDULE | — | |
| steps | INT | 201–200 | — |
| cfg | FLOAT | 7.00–30 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| color_coherence | FLOAT | 0.800–1 | — |
| color_mode | COMBO | lab | 3 options: lab, rgb, none |
| depthopt | IMAGE | — | |
| cfg_scheduleopt | DIFFORUM_SCHEDULE | — | |
| positive_scheduleopt | DIFFORUM_PROMPT | — | |
| nearopt | FLOAT | 1.000.01–1000 | — |
| faropt | FLOAT | 100.000.02–10000 | — |
| invert_depthopt | BOOLEAN | false | — |
| translation_scaleopt | FLOAT | 1.00–100 | — |
| control_netopt | CONTROL_NET | — | |
| control_strengthopt | FLOAT | 0.600–3 | — |
| control_imageopt | IMAGE | — | |
| symmetryopt | COMBO | none | 5 options: none, mirror_h, mirror_v, mirror_quad, kaleidoscope |
| symmetry_segmentsopt | INT | 62–64 | — |
| borderopt | COMBO | reflection | 3 options: reflection, zeros, border |
| sharpenopt | FLOAT | 0.200–2 | — |
| noiseopt | FLOAT | 0.0200–0.5 | — |
| cadenceopt | INT | 11–12 | — |
| start_frameopt | INT | 00–1000000 | — |
| end_frameopt | INT | 00–1000000 | — |
| seed_modeopt | COMBO | fixed | 2 options: fixed, increment |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |