FreeInit Iteration Options ππ π
FreeInit for AnimateDiff, and why almost nobody plugs it in
- ITERATION_OPTS
This is the FreeInit implementation for AnimateDiff. The README lists it in one line - "FreeInit and FreeNoise support (FreeInit is under iteration opts...)" - and this node is the whole of that "under iteration opts" part. It's a settings bundle, not something that touches your image directly: you build it here, then plug the result into the iteration_opts slot on Sample Settings (ADE_AnimateDiffSamplingSettings), which in turn feeds your loader or Use Evolved Sampling.
What it buys you is temporal consistency - less flicker, less boiling detail between frames - at the direct cost of render time. There's no way around that tradeoff, so it's worth knowing upfront: with the default iterations: 2, you're roughly doubling how long your sampling takes for one clip.
How it works
A video diffusion run starts from random noise, and the low-frequency component of that starting noise quietly shapes the whole clip's temporal layout - fresh random noise doesn't have great low-frequency structure for coherence, which is a big part of why AnimateDiff clips flicker. FreeInit's trick: sample the clip once, take the low-frequency part of what came out, keep the high-frequency part of a new batch of random noise, and re-sample from that blend. Do it a couple of times and the motion settles down.
filter picks how the frequency split happens (with n_butterworth as the filter order, only relevant if you pick that filter), and d_s/d_t are the spatial and temporal cutoffs - d_t is the one actually driving the video-consistency effect. sigma_step and apply_to_1st_iter control exactly where in the sampling process the re-init kicks in.
The inputs and outputs that matter
iterations(default 2) - this is the cost dial. Each iteration is close to a full extra sampling pass. 2 is the default for a reason; going higher rarely earns its keep.filter- the low-pass filter type used to split frequencies.d_s/d_t(both default 0.25) - spatial/temporal cutoff. Lowerd_tif motion goes stiff.init_type- which FreeInit initialization strategy to run.
Less commonly touched: n_butterworth (default 4, Butterworth order), sigma_step (default 999 - near the start of sampling), apply_to_1st_iter (default false), and the optional iter_batch_offset/iter_seed_offset for varying the seed across iterations rather than reusing the same one. Output is a single ITERATION_OPTS, which only fits Sample Settings' iteration_opts input.
How to install it
Through ComfyUI Manager: search AnimateDiff Evolved, confirm the author is Kosinkadink, install. Manually:
cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
then restart. This node needs no model download of its own - it's pure configuration sitting on top of whichever motion module you've already loaded elsewhere in the graph.
Common issues & troubleshooting
Generation is taking way longer and you don't know why. Check for this node in the graph. iterations multiplies your sampling cost directly - if it's set to 2 or 3 and wired into your Sample Settings, that's the tax you're paying.
Barely any visible difference. FreeInit fixes a specific problem (temporal flicker/inconsistency), and if your clip is already fairly coherent - short clip, good motion module, sane context_options - there's less for it to fix. It's a targeted repair tool, not a general quality boost.
Motion looks flat or stuck after enabling it. You've pushed the temporal constraint too hard. Lower d_t, drop back to 1 iteration, or leave apply_to_1st_iter off so the first pass gets a normal, unconstrained start.
Worth saying plainly: this is one of the more obscure corners of the pack. It's a real, working academic technique (FreeInit predates AnimateDiff-Evolved's implementation of it), but the community rarely mentions using it in practice - most people fighting flicker reach for a better context-window setup or a different motion module before they reach for this. If you're a beginner landing here from search, it's fine to skip this node entirely until you have a specific consistency problem nothing else has fixed.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| iterations | INT | 2 | β |
| filter | COMBO | 4 options: gaussian, butterworth, ideal, box | |
| d_s | FLOAT | 0.2500β1 | β |
| d_t | FLOAT | 0.2500β1 | β |
| n_butterworth | INT | 41β100 | β |
| sigma_step | INT | 9991β999 | β |
| apply_to_1st_iter | BOOLEAN | false | β |
| init_type | COMBO | 3 options: FreeInit [sampler sigma], FreeInit [model sigma], DinkInit_v1 | |
| iter_batch_offsetopt | INT | 00β9007199254740991 | β |
| iter_seed_offsetopt | INT | 1-9007199254740991β9007199254740991 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ITERATION_OPTS | ITERATION_OPTS | β |