Output-Scale Tiles: AI or Standard Resize
The node that decides how big the picture gets and where the tiles fall
- image
- upscale_model
- upscaled_tiles
- processing_preview
- upscaled_image
- blend_masks
- tile_metadata_json
- preflight_summary
This is where you set the actual upscale. The Prompt Director decides what the job is; the Tile Planner decides how many times bigger the output is, how it's divided into tiles, how much the tiles overlap, and how the joins get feathered. In the shipped workflow it's the node with scale_factor sitting on it, and the README's first-run advice is basically "set that to 2 and press Run."
What it does
It takes your source image and does three jobs at once:
- Enlarges it - either with an AI upscaler model (ESRGAN-family) or a standard resize (Lanczos, bicubic, bilinear, area). The two families are different jobs in the KB's sense of the word: AI models can add detail but may round small objects like lettering or car wheels; standard resizing preserves source geometry and can't invent anything. Lanczos is the shipped default precisely because it needs no model and keeps geometry honest.
- Plans the tile grid - splits the enlarged image into overlapping tiles sized to your sampler, with
overlapandfeatherset in final output pixels. - Emits everything downstream needs - the tile batch, the blend masks, the tile metadata, a preflight summary, and a diagnostic preview showing the grid.
Every tile is cached to disk, so changing scale_factor and rerunning reuses the prompts and (where possible) the enlarged tiles. The cache is safe to delete; entries are reproducible.
Inputs that matter
- upscale_method -
AI upscaler model (ESRGAN, etc.)or one of the standard resize methods. The AI option requires anupscale_modelwired in (a 4x model from OpenModelDB); the workflow ships on Lanczos so it runs with zero extra downloads. The README's warning about the ESRGAN loader: the shipped workflow deliberately leaves it unwired so a missing model can't refuse your run before it starts. - scale_factor - how many times larger the final image is, 1 to 12. The tooltip does the math for you: a 1340×896 source at 12x renders about 90 tiles. Start at 2.
- min_tile_size / max_tile_size - processing tile size in final sampler pixels, 1024–1536 by default. Sampler tiles stay small so the working memory stays small; it's model weights that dominate VRAM, not tile size.
- overlap / feather - seam controls. Going from 32/16 to 128/64 usually costs no extra tiles; the planner just makes each tile slightly larger. Check the preflight box before and after.
- upscale_batch_size - tiles sent through an AI upscaler together. Default 1; lower this first if the enlarger runs out of VRAM. Ignored by standard resize methods.
- padding_mode -
edgerepeats the outermost pixels for tiles past the border (right for photos);zerois for images with true black borders. - cache_mode / cache_tag - cache control;
cache_tagis optional, since the upscaler weights are fingerprinted automatically.
Outputs: upscaled_tiles, processing_preview (the grid diagnostic), upscaled_image (the enlarged baseline, un-overlaid), blend_masks, tile_metadata_json, and preflight_summary (a string you can eyeball before committing to a 90-tile run).
Where it sits
upscaled_tiles, blend_masks, and tile_metadata_json feed SmartTileJobDirector (which cuts the exact tiles and hands each one its context) and later SmartTileFinalizer (which stitches using those same masks). The preview and preflight are your sanity checks before the expensive part starts.
Install
Via ComfyUI Manager (search "ComfyUI-Smart-Upscaler") or:
cd ComfyUI/custom_nodes
git clone https://github.com/HallettVisual/ComfyUI-Smart-Upscaler
then restart. Grab ComfyUI-KJNodes and rgthree-comfy too. No Python deps; the ~13 GB of models are listed in docs/MODELS.md, and none of them are needed just to run this node on Lanczos - that's the point of the default.
Gotchas
- Missing-model workflow refusal. A loader pointing at a model you don't have stops the run before a tile is drawn. This is why the ESRGAN loader ships unwired.
- High scale = long run. The tooltip's 90-tile example at 12x is not a typo. Use the one-tile test (
SmartSamplerTileSelector) before committing. - VRAM on the enlarger.
upscale_batch_sizedown first, thenmax_tile_size. - Seams visible in flat areas. That's usually the prompt (check the prompt log), not the planner - unless one tile is a different shade, which is the stitcher's
cross_tile_consistencyjob. Raise overlap/feather if the geometry itself is showing.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| upscale_method | COMBO | AI upscaler model (ESRGAN, etc.) | AI models can add detail but may round small objects. Standard resize methods preserve source geometry and need no model. |
| min_tile_size | INT | 1024256–4096 | Minimum processing tile size in final sampler pixels. |
| max_tile_size | INT | 1536256–4096 | Maximum processing tile size in final sampler pixels. |
| overlap | INT | 320–1024 | Total shared overlap in final sampler pixels. |
| feather | INT | 160–512 | Blend fade width in final sampler pixels. |
| scale_factor | FLOAT | 2.001–12 | How many times larger the final image is. High scales multiply tile count and time: a 1340x896 source at 12x renders about 90 tiles. |
| divisible_by | INT | 161–256 | — |
| upscale_batch_size | INT | 11–16 | Tiles sent through an AI upscaler together. Ignored by standard resize methods. |
| padding_mode | COMBO | edge | How tiles that reach past the image border are filled before enlargement. Edge repeats the outermost pixels (right for photos - leave it here). Zero fills black, only useful for images with true black borders. |
| cache_mode | COMBO | read_write | Reuse enlarged tiles from disk, regenerate them, or skip the disk cache. |
| cache_tag | STRING | auto | Optional cache label. The upscaler weights are fingerprinted automatically. |
| preview_max_size | INT | 1600512–8192 | Maximum dimension of the output-scale diagnostic preview. |
| upscale_modelopt | UPSCALE_MODEL | Required only when the AI upscaler method is selected. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| upscaled_tiles | IMAGE | — |
| processing_preview | IMAGE | — |
| upscaled_image | IMAGE | — |
| blend_masks | MASK | — |
| tile_metadata_json | STRING | — |
| preflight_summary | STRING | — |