Anima Regional Inpaint Canvas
Regional inpaint for Anima, painted the same way — this is the canvas node's fix-it sibling
- model
- clip
- vae
- image
- IMAGE
- MODEL
- POSITIVE
- NEGATIVE
- INPAINT_LATENT
- INPAINT_MASK
- METADATA
The sibling node in the Anima Regional Canvas pack does the same painting trick as AnimaRegionalCanvas, but pointed at a different problem: fixing and repainting an existing image instead of generating from scratch. Paint the areas you want changed, leave the rest white, and it returns an inpaint-ready latent where everything you didn't touch stays pixel-identical. Given how much of the 2026 anime workflow is "generate in Anima, then patch the hands/face," that's a genuinely useful corner.
What it's for
Masked inpainting's one enduring advantage over instruction-editing models is the guarantee: only the masked region gets re-denoised, everything else survives exactly. This node gives you that on Anima's regional stack. You connect an input image, paint over just the parts that are wrong or that you want region-controlled, and the node builds the inpaint latent plus the color mask the regional ControlNet needs. One pass, mask and control image in agreement, because they came from the same paint stroke.
How it works
Same mechanism as the standard canvas - paint colors, per-color prompts, masked conditioning - with the inpaint bits bolted on. The painted regions become the inpaint mask (everything non-white), and the white/unpainted area is treated as the keep/base region. If you connect image and vae, the source image is resized to the canvas, encoded through the VAE, and the unpainted pixels are preserved in the latent with a noise mask so the sampler only regenerates what you marked. grow_mask_by (default 6) dilates the mask outward with a max-pool so you don't get a hard seam at the paint edge - raise it if you see a visible boundary line, drop it if the repaint is eating into areas you wanted kept.
The input and output that matter
Beyond the shared canvas inputs, the ones specific to this node:
image- optional. The picture you're inpainting over. It appears on the canvas automatically so you can paint accurately.vae- optional, needed for the inpaint latent path.grow_mask_by- mask expansion in pixels, 0–64, default 6.
And the output that replaces the standard node's LATENT:
INPAINT_LATENT- goes straight toKSampler latent_image. This is the one you wire.INPAINT_MASK- the mask itself, useful for previewing what you're about to repaint (run it throughConvert Mask to Image).
IMAGE still feeds Apply Anima ControlNet-LLLite, and POSITIVE / NEGATIVE go to the sampler as before.
The fallback that saves you a node swap
Connect neither image nor vae and this node quietly degrades to a plain empty-latent generator, behaving like its non-inpaint sibling. That's a small thing that saves real annoyance: you can build one workflow, leave the image input unplugged for straight generation, and only wire in a source image when you actually want to fix something.
Install
Identical to its sibling - it's the same pack:
cd ComfyUI/custom_nodes
git clone https://github.com/ukr8b3g-cmyk/Anima_Regional_Canvas.git
Restart ComfyUI. Or search "anima regional" in ComfyUI Manager. There are no pip dependencies to worry about; the node only uses numpy/torch/Pillow, all already in ComfyUI. You still need the stack it drives, installed separately: kohya's ComfyUI-Anima-LLLite node, the Anima base model, and the anima-lllite-regional-exp-v3.safetensors regional ControlNet from Sen-sou. Example workflows for both nodes ship in the pack's workflows/ folder.
Common issues
The usual suspect list, grounded in how the thing actually behaves:
- Hard edges on the repaint - your
grow_mask_byis too small, or the mask is biting into kept areas. The mask expansion exists precisely to blend the seam. - Weak or bleeding regions - remember the regional ControlNet model is experimental, trained on a small dataset. Keep
region_strengthhigh and don't blame the canvas when adherence tops out. - The image shows on the canvas but nothing changes - check that
imageandvaeare both connected; withoutvaeit silently falls back to the empty-latent path and you're generating from scratch, not inpainting. - Low-res output - this is Anima, and it wants resolution. Keep the canvas at 1024+; a small inpaint canvas comes back soft because the model was trained big.
One more honest note: for a simple single-region fix, a plain masked-inpaint workflow without the regional ControlNet is often enough. This node earns its keep when you're repainting several distinct areas at once - hands, face, background - and want each governed by its own prompt without hand-syncing a mask image and a ControlNet map.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| width | INT | 102416–16384 | — |
| height | INT | 102416–16384 | — |
| batch_size | INT | 11–4096 | — |
| brush_size | INT | 921–512 | — |
| region_strength | FLOAT | 0.950–10 | — |
| quality_prompt | STRING | masterpiece, absurdres, score_7, anime style | — |
| scene_prompt | STRING | — | |
| red_prompt | STRING | — | |
| blue_prompt | STRING | — | |
| yellow_prompt | STRING | — | |
| green_prompt | STRING | — | |
| magenta_prompt | STRING | — | |
| negative_prompt | STRING | worst quality, low quality, blurry, bad anatomy | — |
| canvas_data | STRING | — | |
| regional_enabled | BOOLEAN | true | — |
| grow_mask_by | INT | 60–64 | — |
| vaeopt | VAE | — | |
| quality_prompt_inopt | STRING | — | |
| scene_prompt_inopt | STRING | — | |
| red_prompt_inopt | STRING | — | |
| blue_prompt_inopt | STRING | — | |
| yellow_prompt_inopt | STRING | — | |
| green_prompt_inopt | STRING | — | |
| magenta_prompt_inopt | STRING | — | |
| negative_prompt_inopt | STRING | — | |
| imageopt | IMAGE | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MODEL | MODEL | — |
| POSITIVE | CONDITIONING | — |
| NEGATIVE | CONDITIONING | — |
| INPAINT_LATENT | LATENT | — |
| INPAINT_MASK | MASK | — |
| METADATA | STRING | — |