Nodes/FiL_Design_ImageMind/🔍 Upscaler Advanced
ComfyUI Node

🔍 Upscaler Advanced

The tile-grid calculator that lets you upscale huge images on a small GPU

By FiL-Design-Ai·Created 2 months ago·Updated 8 days ago· 8
🔍 Upscaler Advanced
  • image
  • upscale_model
  • latent
  • image
  • tiles
  • upscale_by
  • denoise
  • tile_width
  • tile_height
  • mask_blur
  • tile_padding
  • overlap
  • width
  • height
  • tile_cols
  • tile_rows
  • tile_count
  • latent_w
  • latent_h
  • info
  • warnings
  • latent
  • latent_tiles
  • layout
upscale_factor2.00
tile_size1024
tile_overlap64
auto_overlapfalse
auto_modefalse
auto_profileBalanced
manual_tile_cols0
manual_tile_rows0
non_square_tilesfalse
auto_fix_thin_edgesfalse

Want to upscale a 1024px image to something print-sized on a 6GB card? The trick, as old as tiled upscaling itself, is to not do it all at once: cut the target into overlapping tiles, process each one, stitch them back with feathered seams. The hard part has always been the boring arithmetic - how many tiles, how much overlap, what shape, whether the latent matches the pixel grid. FiL Upscaler Advanced is a tile-grid calculator that does all of it, and if you connect an upscale model, it'll actually upscale the pixels too.

It's the anchor of the FiL Design ImageMind pack's upscale pipeline: plan the grid here, process the tiles, recombine with the pack's Tile Assembly node.

How it works

Give it an image (and optionally a latent to resize and tile 1:1 alongside it), set an upscale_factor, and it computes a tile-aligned target size, then lays out the grid. The geometry is real, not cosmetic: target dimensions are aligned to a 64px grid, the grid step is tile − overlap, overlap is clamped at half a tile so the tile count can't explode, and edge tiles shift inward to stay full-size instead of being zero-padded - so no black strips along the edges. If you feed a latent, it's resized with bislerp, which is the correct choice there - lanczos is an RGB-specific interpolation and doesn't belong in latent space.

The inputs that matter:

  • upscale_factor - 2.0 doubles the size. This is the master dial.
  • tile_size / tile_overlap - the manual knobs. Bigger tiles = fewer seams but more VRAM per pass; more overlap = cleaner blends but more tiles. auto_overlap derives overlap from tile size (~12.5%) so it stays proportional when you change tile_size.
  • auto_mode + auto_profile - the lazy path: pick Low VRAM, Balanced, High VRAM, Max Quality, or Ultra Quality, and it chooses tile size, overlap, and even a denoise hint for your downstream sampler.
  • upscale_model - optional. Connect an ESRGAN-style model from your upscale_models folder and the image output is actually upscaled through it. Leave it disconnected and the node becomes calculator-only - image passes through unchanged.

That last one is the key insight: the node is useful in both modes. With no model it's a planner that emits a full numeric plan for downstream nodes; with a model it's a real upscaler.

The outputs you'll actually wire

21 outputs sounds intimidating; you use about four. tiles is a batch of the actual cropped pieces - feed those (or latent_tiles) into per-tile processing, which is where the tiled-upscale magic happens. layout is the per-tile rectangle map, and it's the one you must feed into FiL Tile Assembly to recombine - that's what tells the assembler where the feathered seams go, so always use the same layout that produced the tiles. The numeric outputs (upscale_by, denoise, tile_width, tile_height, overlap, tile_count) exist so you can feed them into external tiled-sampler stacks - Ultimate SD Upscale-style downstream nodes read exactly this kind of plan. And warnings tells you when the grid left a thin edge tile, which is why auto_fix_thin_edges exists.

If you ever want to do this whole thing with a tile ControlNet keeping each tile faithful - the classic "tile diffusion" workflow - this planner is the grid half; your ControlNet does the faithful half.

Installing it

Ships in FiL Design ImageMind (MIT). ComfyUI Manager: search FiL_Design_ImageMind, or:

cd ComfyUI/custom_nodes
git clone https://github.com/FiL-Design-Ai/FiL_LLM FiL_Design_ImageMind
pip install -r FiL_Design_ImageMind/requirements.txt

Restart; it's under 🎨 FiL Design/Image. ComfyUI 0.3.60+, Python 3.10+, light dependencies. It doesn't ship upscale models - it reads your existing models/upscale_models folder - so grab a 4x ESRGAN (4x-UltraSharp or a Remacri-class model are the usual picks) if you want actual pixel upscaling.

Gotchas

The number-one confusion: "the tile count looks wrong." It's usually right - overlap grows the count by design, since step = tile − overlap. If you want a fixed count, pin manual_tile_cols and manual_tile_rows and the grid holds exactly that, growing the tile instead. Second: at least one of image or latent is required, or the node raises - source dimensions come from whichever you connected. And remember: no upscale_model, no actual upscaling. The most common "this node does nothing" report is really "I forgot to connect the model."

Category🎨 FiL Design/🖼️ Image

Inputs (13)

NameTypeDefaultDescription
upscale_factorFLOAT2.000.1–8Upscale multiplier. 2.0 = double the size.
tile_sizeINT102464–2048Base tile size in pixels for tiled upscale.
tile_overlapINT640–512Tile overlap in pixels. Higher = fewer seams, more VRAM.
auto_overlapBOOLEANfalseIgnore tile_overlap and derive it automatically from the tile size (~12.5%, min 32px) instead — keeps overlap proportional when you change tile_size. No effect when Full Auto is on (it already derives its own overlap).
auto_modeBOOLEANfalseFull Auto: automatically choose tile settings based on profile.
auto_profileCOMBOBalancedVRAM/quality profile for auto mode.
manual_tile_colsINT00–64Force this many tile columns. 0 = compute from tile size.
manual_tile_rowsINT00–64Force this many tile rows. 0 = compute from tile size.
non_square_tilesBOOLEANfalseEnable non-square tiles with aspect-ratio awareness.
auto_fix_thin_edgesBOOLEANfalseIn Manual Tiles mode, shrink tile_size to the next standard size (1536/1024/768 → 512) instead of just warning when the grid would leave a thin edge tile. At 512 (smallest standard) it can't shrink further — the thin edge is then handled downstream by overlap/mask_blur. Does not affect an explicit manual column/row grid.
imageoptIMAGEInput image to analyze. Optional if latent is connected instead — at least one of image/latent is required; source dimensions come from whichever is connected.
upscale_modeloptUPSCALE_MODELOptional ESRGAN-style model. When connected, the image output is actually upscaled through it (then resized to the tile-aligned target). When left unconnected, image is passed through unchanged and this node is calculator-only.
latentoptLATENTOptional latent to resize/tile alongside (or instead of) the image. When connected, the latent output is resized (bislerp) to the tile-aligned target and latent_tiles gets one crop per tile. Can stand in for image entirely — at least one of image/latent is required.

Outputs (21)

NameTypeDescription
imageIMAGEActually upscaled when upscale_model is connected, otherwise the input image passed through unchanged. Empty placeholder when no image is connected (latent-only mode).
tilesIMAGEBatch of the actual cropped tile pieces (edge tiles shifted inward to stay full-size, no black padding). Empty placeholder when no image is connected (latent-only mode).
upscale_byFLOATActual upscale ratio.
denoiseFLOATDenoise hint.
tile_widthINTTile width.
tile_heightINTTile height.
mask_blurINTMask blur radius.
tile_paddingINTTile padding.
overlapFLOATEffective tile overlap in pixels (after clamping/auto-profile) — the average of the per-axis overlap, which can be a fractional pixel when axes differ (non_square_tiles).
widthINTOutput width.
heightINTOutput height.
tile_colsINTTile columns.
tile_rowsINTTile rows.
tile_countINTTotal tile count.
latent_wINTLatent width.
latent_hINTLatent height.
infoSTRINGInfo string.
warningsSTRINGWarnings string.
latentLATENTInput latent resized to the tile-aligned target (bislerp). Empty placeholder when no latent is connected.
latent_tilesLATENTBatch of latent crops, one per image tile (same grid/order as `tiles`). Empty placeholder when no latent is connected.
layoutFIL_TILE_LAYOUTTile-grid layout (exact per-tile positions) — wire into FiL Tile Assembly to recombine processed tiles. Always the real computed grid, independent of image/latent connection.