Anima Image Scale By Multiple
Scale to 1.5x and stay on Anima's grid — that's the whole trick
- image
- image
- width
- height
- applied_scale
Two-pass Anima workflows live or die on one detail: the second-pass size has to stay on a grid the model's latents actually like. A first pass at 1024x1536 scaled 1.5x lands on 1536x2304 - fine. But 1280x1280 at 1.5x lands on 1920x1920, also fine. Not every combo lands that cleanly, and the moment your 1.5x math gives you a dimension that isn't a multiple of 8, you're asking the VAE to do something it's not happy doing. Anima Image Scale By Multiple scales the image and snaps both dimensions to a multiple of 8, 16, 32, or 64 in one step. That's the whole job, and it's a genuinely useful one.
How it works
It takes an IMAGE plus a few settings and returns the resized tensor:
scale_by- the factor, default1.5(range 0.1–8). The 1.5x figure matches the README's recommended workflow: a1024x1536first pass becomes a 1536x2304 second pass.upscale_method-nearest-exact,bilinear,area,bicubic, orlanczos. Lanczos is the default, and it's what you want for upscaling; switch toareawhen you're scaling down.multiple-8,16,32, or64, default32, matching the rest of the pack's grid philosophy.max_long_edge-0means no cap. Set it to something like 2048 and the node scales down to fit within that longest edge before snapping.
The resample itself runs through ComfyUI's native common_upscale (the "true Lanczos" the README brags about), and the result is clamped to a valid image range. Snapping uses rounding, not floor, so the output can land a hair under your target as easily as over it.
Four outputs come out: the resized image, the final width and height as integers, and - the one people miss - applied_scale, a float reporting the actual average scale that was applied. That last one matters because it won't exactly equal scale_by. Snapping moves things, so if you ask for 1.5x and the snap pushes you to 1.49x, applied_scale tells you the truth. Read it when you're wiring the next stage of the workflow, not the number you typed in.
What it isn't
It is not an AI upscaler. Don't feed it a soft 1024px image expecting it to invent new detail - it's a geometric resize that keeps you on-grid. For Anima's soft default output, the actual detail fix people use is a latent upscale around 1.25x with denoise 0.25–0.35 between two KSamplers, or a proper model-based upscaler if you want to go big. This node is the honest glue: it makes sure whatever scale pass you run ends up at a dimension Anima's pipeline is happy to chew on.
Installation and troubleshooting
Same pack, same story - no models, no dependencies (dependencies = [] in pyproject.toml). ComfyUI Manager: search "Anima Resolutions", install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/cyberdeliaAI/ComfyUI-anima-Resolutions.git
Troubleshooting is mostly about expectations. If applied_scale disagrees with scale_by, that's the snap working, not a bug. If you're scaling down and using lanczos, switch to area - Lanczos downsampling rings and aliases. And don't push past a single scale pass: Anima artifacts if you chain multiple upscale stages, and this node is best used once, as the deliberate step between first pass and final output.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| scale_by | FLOAT | 1.500.1–8 | — |
| upscale_method | COMBO | lanczos | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
| multiple | COMBO | 32 | 4 options: 8, 16, 32, 64 |
| max_long_edge | INT | 00–16384 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| width | INT | — |
| height | INT | — |
| applied_scale | FLOAT | — |