Nodes/ComfyUI vsLinx Nodes/Anima LLLite Tiled ControlNet Sampler
ComfyUI Node

Anima LLLite Tiled ControlNet Sampler

Anima LLLite Tiled ControlNet Sampler — one node that replaces a whole tile-and-sample graph

By vslinx·Created about a year ago·Updated 26 days ago· 25
Anima LLLite Tiled ControlNet Sampler
  • image
  • model
  • positive
  • negative
  • vae
  • image
sampling_mode
seed0
steps20
cfg7.0
sampler_name
scheduler
denoise0.50
lllite_name
strength1.00
start_percent0.000
end_percent1.000
preserve_wrappertrue
rows2
columns2
overlap0.00
overlap_x64
overlap_y64
method
color_match
color_match_strength1.00
vae_decode_tiledfalse
vae_decode_tile_size512

Anima has no real ControlNet. The one structural control path it has is kohya-ss's experimental ControlNet-LLLite, and historically, using it for a tiled upscale meant building a monster of a graph: image tiling, a VAE encode and an LLLite apply and a KSampler and a VAE decode per tile, then a batch-untile with feathering. Change the grid and you rewire half the graph. This vsLinx node collapses all of that into a single box - with a dynamic grid, a second "multidiffusion" sampling mode that kills tile seams, and the LLLite apply logic vendored in so you don't even need the Anima LLLite pack installed.

How it works

For every tile in your rows × columns grid, it does what you'd do by hand: applies Anima LLLite to the model using that tile as the control image, VAE-encodes the tile, runs the KSampler with your shared conditioning, VAE-decodes, then feathers the overlaps and stitches everything back into one image. Because the grid is dynamic, changing rows/columns just changes how many times it loops - no rewiring. All tiles share one seed, so there's no per-tile seed fiddling.

Two sampling_modes cover the seam problem:

  • per_tile (default) - samples each tile to completion, then stitches. Lowest VRAM, but independently-sampled tiles can disagree, showing seams or "double-exposure" ghosting. The optional color_match (mean_std or wavelet, with color_match_strength) re-anchors each tile's colour to its source tile - it fixes tonal steps on smooth gradients but can't repair structural disagreement.
  • multidiffusion - one sampling pass over the whole image, splitting the latent into overlapping tiles every denoising step and averaging the overlaps in latent space. Tiles are re-synced every step, so seams and double-exposure are eliminated at the cost of a little extra VRAM. In this mode method and color_match don't apply, and the final decode is a single full-image pass - if that spikes VRAM, enable vae_decode_tiled (with vae_decode_tile_size) to decode it in tiles.

The inputs that matter

The surface is long but groups cleanly:

  • Sampler block - seed, steps, cfg, sampler_name, scheduler, denoise.
  • LLLite block - lllite_name (the weights file), strength (default 1.0), start_percent/end_percent, preserve_wrapper (lets it stack with other wrapper nodes instead of overwriting them).
  • Tiling block - rows, columns, overlap (fraction of tile size), overlap_x/overlap_y (extra pixels), method (resampling used to keep tiles uniform before stitching).
  • The rest - sampling_mode, color_match/color_match_strength, vae_decode_tiled/vae_decode_tile_size.

Wired in: image, model, positive, negative, vae. Output is a single image. The lllite_name can come from its own dropdown or from the pack's Load Anima LLLite Model node, so you can pick the model once and drive several samplers. Also handles image batches - a batch of N is tiled, sampled and stitched per-image and returned as a batch of N.

Installing and getting weights

It's part of the vsLinx pack: ComfyUI Manager → search "ComfyUI vsLinx Nodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/vslinx/ComfyUI-vslinx-nodes.git comfyui-vslinx-nodes

Restart, find it under vsLinx/sampling. No other node packs are required - the Anima LLLite apply code is vendored (Apache-licensed copy from kohya-ss). You do need LLLite weights in ComfyUI/models/controlnet, from kohya-ss/Anima-LLLite or community sources. Also note the weights' caveat: LLLite models trained on Anima Preview 3 are reported noticeably weaker on the 1.0 base release.

The honest take

Set expectations before you fall in love with this node. The ControlNet KB is blunt: Anima's LLLite is experimental and many users report it barely moving the image, with the workaround of training a control LoRA instead. So treat this as a tiling and sampling tool whose control signal happens to be LLLite - and for pure tiled upscaling on any model, the pack's MultiDiffusion Tiled Hires Fix (same multidiffusion core, no LLLite) is the more broadly useful sibling. If your Anima LLLite files work for you, this is the cleanest way to deploy them; if they don't, it's still the best way to run a tiled upscale pass on Anima.

CategoryvsLinx/sampling

Inputs (27)

NameTypeDefaultDescription
imageIMAGE
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
sampling_modeCOMBOper_tile: sample each tile fully then stitch (lowest VRAM; can show seams/ghosting). multidiffusion: one sampling pass over the whole image, averaging overlapping tiles in latent space every step — tiles stay in sync so seams and double-exposure are eliminated (slightly more VRAM). In multidiffusion mode the 'method' and 'color_match' fields are not used.
seedINT00–18446744073709550000
stepsINT201–10000
cfgFLOAT7.00–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT0.500–1
lllite_nameCOMBOAnima ControlNet-LLLite weights file (from the controlnet folder).
strengthFLOAT1.00-10–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
preserve_wrapperBOOLEANtrueDelegate to any model_function_wrapper already installed upstream instead of overwriting it, so multiple wrapper nodes can stack. Same toggle as the AnimaLLLiteApply node.
rowsINT21–256
columnsINT21–256
overlapFLOAT0.000–0.5Overlap between tiles as a fraction of tile size, added on top of overlap_x/overlap_y.
overlap_xINT640–8192Extra horizontal overlap in pixels.
overlap_yINT640–8192Extra vertical overlap in pixels.
methodCOMBOResampling used to keep every decoded tile at a uniform size before stitching.
color_matchCOMBOPer-tile color matching against the source tile, to fix tonal seams (brightness/colour steps between tiles). 'mean_std' re-scales each tile's per-channel mean/std (fast, simple); 'wavelet' keeps the tile's detail but takes the source tile's broad tone (better on textured tiles).
color_match_strengthFLOAT1.000–1How strongly to apply the color match (0 = off, 1 = full).
vae_decode_tiledBOOLEANfalse(multidiffusion only) Decode the final full-image latent in tiles instead of one pass, to avoid a single huge VAE decode that can spike VRAM (or spill into slow shared system memory). No effect in per_tile mode, where each tile is already decoded on its own.
vae_decode_tile_sizeINT51264–4096(multidiffusion only) Tile size in pixels for the tiled VAE decode.

Outputs (1)

NameTypeDescription
imageIMAGE