Nodes/FiL_Design_ImageMind/🔍 Upscaler Simple
ComfyUI Node

🔍 Upscaler Simple

Plan a tiled upscale grid once, then do what you want per tile

By FiL-Design-Ai·Created 2 months ago·Updated 8 days ago· 8
🔍 Upscaler Simple
  • image
  • upscale_model
  • latent
  • image
  • tiles
  • 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

Upscaler Simple is the trimmed-down sibling of FiL_Design_ImageMind's Upscaler Advanced: identical tiling panel, identical math, but only the five outputs most graphs actually use. If you've ever wanted the Ultimate SD Upscale-style tiled workflow without bolting a whole other pack onto ComfyUI, this is the on-ramp - it plans a tile grid over your image, optionally upscales through a real ESRGAN-style model, and hands you the pieces.

The key thing to understand is what it is not. This is not a "make the image bigger, magic, done" node. It's a tile-grid planner. It splits your image into overlapping tiles so you can do the heavy lifting (a diffusion pass, a per-tile upscaler) on each tile within your VRAM budget, then recombine them. The whole point of tiling is arbitrary output sizes on a card that would never hold the full image at once - the same reason Tiled Diffusion and Ultimate SD Upscale exist.

The inputs that matter

  • upscale_factor (2.0) - how much bigger. Range 0.1–8.0.
  • tile_size (1024) and tile_overlap (64) - the grid geometry. More overlap means fewer seams and more VRAM. auto_overlap derives overlap from tile size (~12.5%, min 32px) so it stays proportional when you change tile_size.
  • auto_mode + auto_profile - full auto picks tile size and overlap from a VRAM profile (Low VRAM → Ultra Quality). This is the "I just want it to work" path.
  • manual_tile_cols / manual_tile_rows - force an exact grid; 0 means derive it from tile size.
  • image, latent, upscale_model - at least one of image/latent required. upscale_model is an ESRGAN-style model loader and only applies when an image is connected.

The geometry deserves one note because it's where people get confused. Overlap isn't padding - the grid step is step = tile − overlap, so overlap genuinely increases the tile count. If the count looks wrong, that's why. Clamping keeps overlap at half a tile so the count can't explode, and non_square_tiles allows rectangular tiles within a 1.5:1 aspect.

The five outputs, and how they fit together

  • image - the image upscaled through the model (if one is connected) and resized to the tile-aligned target.
  • tiles - the actual cropped tile batch. Edge tiles shift inward to stay full-size, so no black padding strips.
  • latent / latent_tiles - the latent resized with bislerp (not lanczos - that's RGB-only interpolation and doesn't belong in latent space) and one latent crop per image tile.
  • layout - the per-tile positions. This is the one to keep track of. It's what FiL Tile Assembly consumes to stitch everything back together.

The intended pipeline: Upscaler Simple → process tiles (or latent_tiles) individually - upscale each with a diffusion pass, run ControlNet Tile, whatever - then feed the processed tiles plus the same layout into FiL Tile Assembly. Keep the layout matched to the tiles; mixing a layout from one grid with tiles from another is how you get seams in the wrong places.

Two honest notes. Without an upscale_model connected, image is just a passthrough - the node plans and crops but doesn't add pixels. And in latent-only mode the image/tiles outputs are empty placeholders, which trips people who wire them into a preview and see nothing.

The community's standing advice applies here too: decide whether you want more pixels (a plain ESRGAN pass - fast, can't hallucinate) or more detail (generative, tile-based, needs ControlNet Tile to stop tiles diverging). This node supports both paths; the difference is what you put between the tiles and the assembler.

Install is pack-standard: ComfyUI Manager search FiL_Design_ImageMind, or clone + pip install -r requirements.txt + restart. No model downloads ship with the pack - an upscale model comes from your own models/upscale_models.

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 upscale. Optional if latent is connected instead — at least one of image/latent is required.
upscale_modeloptUPSCALE_MODELESRGAN-style upscale model. Only applies when image is connected — has no effect in latent-only mode.
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 (5)

NameTypeDescription
imageIMAGEUpscaled through the model, resized to the tile-aligned target. 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).
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.