Nodes/Artfat Resolution/Artfat Resolution
ComfyUI Node

Artfat Resolution

Artfat Resolution computes the whole chain

By artfat-creator·Created 2 months ago·Updated 8 days ago· 1
Artfat Resolution
  • image
  • mask
  • width
  • height
  • image
  • mask
  • latent
  • info
◄size2:3 portrait · 512×768►
◄base512►
◄ratio_w2►
◄ratio_h3►
◄megapixels1.00►
◄mp_aspect9:16 portrait►
◄manual_w1200►
◄manual_h400►
◄multiple32►
◄upscale_11.00►
◄upscale_21.00►
◄scale_methodlanczos►
◄cropcenter►
◄batch_size1►
◄latent_typeSD3 / Flux / Krea 2 (16ch)►

The most annoying part of a low-base + upscale workflow isn't the upscaling - it's the bookkeeping. Generate small at a clean resolution, upscale to a mid size, upscale again to a final size, and somewhere along the way you're typing the same numbers into three different nodes and hoping they agree. Artfat Resolution is a tiny node that does that math for you: you pick one size and two upscale factors, and it hands you the entire chain as outputs - base, mid, final - plus a ready empty latent and a text readout you can wire straight into your filename.

It's built for the Krea 2 / Selfism "low-base + hi-res fix" crowd, where you deliberately generate short (512–640 on the short side) and then grow it in two passes. That pattern exists for a reason: models fall apart above their native resolution - duplicate anatomy, tiling, that soft smeary look - and the fix is to generate small and upscale with a low-denoise second pass. This node makes the "which size is my second pass actually going to be" question visible before you spend the VRAM on a guess.

How it works

The size dropdown is the whole interface. Three ways in:

  • Preset size - eight ready options (2:3 portrait · 512×768, 1:1 square · 640×640, 16:9 wide · 832×480, etc.). Beginner-friendly and usually enough.
  • Custom ratio - set base (the short side) plus ratio_w/ratio_h. Want a 3:1 banner at a 512 short side? ratio_w=3, ratio_h=1.
  • Manual W×H - type exact manual_w/manual_h. This is the one mode where nothing gets snapped; the README is emphatic that exact stays exact.

Then upscale_1 and upscale_2 are decimal multipliers - 1.0 means off, a true passthrough that doesn't even snap. Everything passes through a multiple snap (8/16/32/64), so the numbers that come out are actually usable downstream. There's a latent_type dropdown (16ch for SD3/Flux/Krea 2, 4ch for SD1.5/SDXL) and a batch_size for the latent.

The outputs are the story: width, height, mid_width, mid_height, final_width, final_height (all INT), an info string like 512x768 -> 960x1472 -> 1920x2944, and a latent output that's a ready empty LATENT at base size - so it replaces your EmptyLatentImage entirely. The node even draws the base → mid → final chain live on its face as you drag the widgets, which is a small touch that saves real time when you're tuning a banner ratio.

The inputs that actually matter

For 90% of use: size and upscale_1/upscale_2. Wire the width/height INTs into your KSampler's empty latent (or just use the built-in latent output - it's already the right size and channel count). Wire info into a text node for the filename. The thing to actually think about is latent_type: get it wrong and you're feeding a 16-channel latent into a 4-channel model, which errors out the instant you try to sample. Flux, SD3, Qwen and Krea 2 are all 16ch; classic SD1.5/SDXL are 4ch.

Install

Two ways, both painless - there are no model downloads and no extra Python dependencies (it only uses torch, which ComfyUI already ships):

ComfyUI-Manager: Custom Nodes Manager → Install via Git URL → paste https://github.com/artfat-creator/ComfyUI-Artfat-Resolution.

Manual clone:

cd ComfyUI/custom_nodes
git clone https://github.com/artfat-creator/ComfyUI-Artfat-Resolution.git

Then restart ComfyUI. A browser refresh isn't enough - the node registers on server start. It shows up under the artfat category.

Gotchas

  • Manual mode won't save you from the VAE. Exact dimensions that aren't a multiple of 8 can choke the VAE decode (latents are 8x smaller per side). If you're going fully manual, keep manual_w/manual_h sane multiples - the node won't do it for you.
  • multiple of 8 is tempting but risky for Krea 2 / Qwen-based models; the author's own tooltip flags 16/32 as the safe ones.
  • You can't downscale with this thing - upscale_1/upscale_2 floor at 1.0. It's a resolution planner, not a resizer.
  • It's a tiny node from a small author, so don't expect a big support community. For this one you probably won't need it - the whole thing is one dropdown and two multipliers.
Categoryartfat

Inputs (17)

NameTypeDefaultDescription
sizeCOMBO2:3 portrait · 512×768Ready size, 'Custom ratio' (ratio_w/h + base), 'Megapixels · aspect' (MP + aspect), or 'Manual W×H' (exact).
baseINT512128–8192Short side of the BASE gen. Used ONLY in 'Custom ratio' mode.
ratio_wINT21–100Aspect width — 'Custom ratio' mode, or 'Megapixels' with aspect = custom.
ratio_hINT31–100Aspect height — 'Custom ratio' mode, or 'Megapixels' with aspect = custom.
megapixelsFLOAT1.000.05–16Target area in megapixels — 'Megapixels · aspect' mode only. W×H hit this pixel budget at the chosen aspect, snapped to 'multiple'.
mp_aspectCOMBO9:16 portraitAspect for 'Megapixels' mode. 'custom' uses ratio_w:ratio_h.
manual_wINT120064–16384Exact width — 'Manual W×H' mode only. NOT snapped (kept exact).
manual_hINT40064–16384Exact height — 'Manual W×H' mode only. NOT snapped (kept exact).
multipleCOMBO32Snap base+upscaled sides to a multiple. 16/32 safe for Krea 2 / Qwen / H3. Ignored for the exact side in Manual mode.
upscale_1FLOAT1.001–81st upscale stage (for a downstream image/video upscaler). 1.0 = off (passthrough, exact).
upscale_2FLOAT1.001–82nd upscale stage (applied on top of stage 1). 1.0 = off.
scale_methodCOMBOlanczosResampling used ONLY when an image/mask is connected and resized to the BASE W×H.
cropCOMBOcenterImage resize aspect handling. 'center' = cover-crop keeping aspect; 'disabled' = stretch to exact W×H.
batch_sizeINT11–64Batch size for the empty LATENT output.
latent_typeCOMBOSD3 / Flux / Krea 2 (16ch)Channels for the empty LATENT. Krea 2 / Flux / SD3 = 16ch; classic SD = 4ch.
imageoptIMAGEOptional image to resize to the computed BASE W×H.
maskoptMASKOptional mask to resize to the computed BASE W×H.

Outputs (6)

NameTypeDescription
widthINT—
heightINT—
imageIMAGE—
maskMASK—
latentLATENT—
infoSTRING—