Anima LLLite Tiled ControlNet Sampler
Anima LLLite Tiled ControlNet Sampler — one node that replaces a whole tile-and-sample graph
- image
- model
- positive
- negative
- vae
- image
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 optionalcolor_match(mean_stdorwavelet, withcolor_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 modemethodandcolor_matchdon't apply, and the final decode is a single full-image pass - if that spikes VRAM, enablevae_decode_tiled(withvae_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.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| sampling_mode | COMBO | per_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. | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.500–1 | — |
| lllite_name | COMBO | Anima ControlNet-LLLite weights file (from the controlnet folder). | |
| strength | FLOAT | 1.00-10–10 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
| preserve_wrapper | BOOLEAN | true | Delegate to any model_function_wrapper already installed upstream instead of overwriting it, so multiple wrapper nodes can stack. Same toggle as the AnimaLLLiteApply node. |
| rows | INT | 21–256 | — |
| columns | INT | 21–256 | — |
| overlap | FLOAT | 0.000–0.5 | Overlap between tiles as a fraction of tile size, added on top of overlap_x/overlap_y. |
| overlap_x | INT | 640–8192 | Extra horizontal overlap in pixels. |
| overlap_y | INT | 640–8192 | Extra vertical overlap in pixels. |
| method | COMBO | Resampling used to keep every decoded tile at a uniform size before stitching. | |
| color_match | COMBO | Per-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_strength | FLOAT | 1.000–1 | How strongly to apply the color match (0 = off, 1 = full). |
| vae_decode_tiled | BOOLEAN | false | (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_size | INT | 51264–4096 | (multidiffusion only) Tile size in pixels for the tiled VAE decode. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |