Nodes/Difforum/Difforum · Restyle (Deforum / AnimateDiff look)
ComfyUI Node

Difforum · Restyle (Deforum / AnimateDiff look)

The Deforum look riding on H3's motion

By chillithebillis·Created 4 months ago·Updated 11 days ago· 10
Difforum · Restyle (Deforum / AnimateDiff look)
  • video
  • model
  • positive
  • negative
  • vae
  • direction
  • prompts
  • control_net
  • control_image
  • frames
  • report
◄styledeforum morph►
◄denoise0.45►
◄steps12►
◄cfg5.0►
◄sampler_nameeuler►
◄schedulernormal►
◄cadence1►
◄long_edge1024►
◄seed0►
◄feedback0.35►
◄seed_modefixed►
◄color_hold0.50►
◄follow_energytrue►
◄flow_scale0.50►
◄control_strength0.60►

Here's the honest state of this genre: the AnimateDiff boil and the Deforum morph are dead as capabilities - they were replaced by actual video models, and nobody argues about that anymore. What didn't die is the look. People still want that texture re-rolling every frame, that smear along the motion, that Disco Diffusion flicker. The 2026 way to get it is to let a real video model supply the motion and paint over it.

That's Restyle. It is the most interesting node in this pack and the one most likely to eat your evening.

How it works

It's vid2vid with memory. For each frame: estimate the optical flow between the current video frame and the previous one, warp your previous stylized output along that flow, mix it into the source frame as the init, and diffuse. That feedback loop is the whole trick - Deforum's morph came from re-diffusing a mutated version of the last frame, and here the mutation is aligned to real motion instead of a synthetic camera vector. Then, if you set cadence above 1, only every Nth frame is actually sampled and the ones in between ride the flow warp, which halves the cost.

color_hold pulls each painted frame back toward the source's palette so the source lighting survives the repaint.

The styles

The four presets are not intensities of one thing, they're different parameter sets, and knowing what's in them saves a lot of fiddling:

  • clean restyle - no feedback at all, high colour hold (0.7). A steady painted version of your clip. The one to start with when you're testing a style prompt.
  • animateDiff boil - light feedback (0.15) with a per-frame seed, so texture re-rolls every frame. This is the boiling.
  • deforum morph - heavy feedback (0.55) and low colour hold (0.35). Contents smear along the motion. It's the default and it's the loudest.
  • disco flicker - feedback 0.25, per-frame seed, denoise multiplied by 1.25 and a bit of grain. Loose, high-energy, unstable on purpose.
  • custom - uses feedback, seed_mode and color_hold as you set them.

denoise is your master knob: 0.3 keeps the video model's render, 0.6+ re-imagines it. follow_energy with a Director connected makes denoise follow the Director's energy curve (0.5 = exactly as set), which is how you get quiet passages and violent ones without writing a schedule.

Wiring and the outputs

video takes frames from your H3 / LTX render (Get Video Components is the usual source), plus a plain model, positive, negative and vae from whatever image model you're painting with. Optionally a Director for its scene prompts and energy, or a prompts track from Prompt Travel. Two outputs: frames, and report - which you should actually read, because it prints frames painted, working size, seconds per frame, and whether flow alignment was available.

Install

ComfyUI Manager → search Difforum, or:

cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum

Restart. Two install notes that matter here specifically. First, install OpenCV (pip install opencv-python into ComfyUI's environment) - without it the node still runs but can't align feedback to motion, and it tells you so in the report with ! OpenCV missing. Second, use a few-step model. Turbo SDXL or SDXL + DMD2 at 4-6 steps with cfg 1-2, lcm or euler_ancestral, sgm_uniform is the pack's own recommendation and it's right: you're making hundreds of sampler calls in a row, and feedback rewards consistency between frames far more than it rewards per-frame detail. A base model at 26 steps will burn ten times the time to produce texture the next frame overwrites.

Template 13 (restyle_any_video) is the one to open, and template 11 shows the full pipeline - turbo feedback pass for the look, H3 for the motion, Look Mix to merge them.

Where people get burned

The classic mistakes, in order of frequency. Running a distilled model at cfg above ~2, which torches contrast and compounds every frame as the feedback loop paints over the damage. Leaving long_edge at the 1024 default when the source is 640 - you're paying for pixels the video model never made, and you'll blame the style. Setting cadence to 4 and then complaining the clip is a slideshow of warps; the pack's own performance notes put the useful range at 1-3. And the one that catches people out at the end: if you launch ComfyUI with --lowvram, --novram or --disable-smart-memory, the model gets re-staged for every single painted frame. The node warns about it in report when it detects those flags. If the image model fits, drop them.

CategoryDifforum/4 · Render

Inputs (24)

NameTypeDefaultDescription
videoIMAGEFrames from H3 / LTX / any video (Get Video Components).
modelMODELAn image model in the look you want. Turbo SDXL / DMD2 at 4-6 steps is fast and good.
positiveCONDITIONINGThe look, e.g. 'oil painting, thick brush strokes'.
negativeCONDITIONINGNegative conditioning (CLIP Text Encode).
vaeVAEThe VAE that matches the model.
styleCOMBOdeforum morphdeforum morph: strong feedback, smears along motion. animatediff boil: texture re-rolls each frame. disco flicker: high energy, loose colour. clean restyle: steady painted version. custom: uses feedback / seed_mode / color_hold below.
denoiseFLOAT0.450.05–1How much each frame is re-painted. 0.3 keeps the render, 0.6+ re-imagines it.
stepsINT121–100Full-denoise steps; each frame runs steps x denoise.
cfgFLOAT5.00–30Prompt strength. Turbo models: 1-2.
sampler_nameCOMBOeulerSampler. euler / dpmpp_2m for regular models, euler_ancestral or lcm for turbo.
schedulerCOMBOnormalNoise schedule. karras / normal for regular models, sgm_uniform for turbo.
cadenceINT11–8Re-paint every Nth frame; the rest follow the flow. 2 = twice as fast.
long_edgeINT10240–4096Working size. 0 = the video's size. Upscale afterwards for 2K.
seedINT00–4294967295Noise seed.
directionoptDIFFORUM_DIRECTIONDirector: scene prompts (with CLIP) and the energy curve.
promptsoptDIFFORUM_PROMPTPrompt travel; otherwise the Director's scene prompts, otherwise positive.
feedbackoptFLOAT0.350–0.95custom: share of the previous stylized frame in the next one.
seed_modeoptCOMBOfixedcustom: per frame = texture re-rolls every frame (boil / flicker).
color_holdoptFLOAT0.500–1custom: how much each frame keeps the source colours.
follow_energyoptBOOLEANtrueWith a Director: denoise follows its energy curve (0.5 = as set).
flow_scaleoptFLOAT0.500.25–1Resolution of the motion estimate that carries the previous frame. 0.5 = fast.
control_netoptCONTROL_NETA ControlNet that holds the clip's structure while the look is re-painted, so denoise can go up to 0.6-0.8 (the real Deforum / AnimateDiff range) without losing the shapes. Depth or canny with control_image; tile with the clip itself.
control_imageoptIMAGEPer-frame control maps of the clip (Depth Anything 3, Canny...). Empty = the clip frames themselves (tile / union ControlNets).
control_strengthoptFLOAT0.600–3How hard the structure is held. 0.4 loose, 0.6 balanced, 0.9 locked.

Outputs (2)

NameTypeDescription
framesIMAGE—
reportSTRING—