Nodes/Smart Upscaler - Hallett/Tile Job Director: Exact Local Tiles
ComfyUI Node

Tile Job Director: Exact Local Tiles

The node that cuts the exact tiles and hands each one its context

By HallettVisual·Created about a month ago·Updated about a month ago· 17
Tile Job Director: Exact Local Tiles
  • upscaled_tiles
  • prompt_system
  • tile_images
  • tile_instructions
  • tile_references
  • tile_seeds
  • caption_images
tile_metadata_json
global_context
selection_modesingle_tile
tile_number1
base_seed0
seed_modeincrement

The Tile Planner makes the plan; the Tile Job Director executes it. This node takes the enlarged tile batch plus the whole-image context from SmartCachedTextGenerate, cuts the exact local tiles, and assembles every per-tile job - the tile image, its instruction, its reference ID, and its seed. Think of it as the foreman between "here's the picture and the plan" and "here's a queue of ninety self-contained tile jobs."

What it does

It matches each planned tile with the prompt contract from the Prompt Director (prompt_system) and the scene brief (global_context), then emits the complete job sets that the rest of the pipeline consumes. It also has a selection_mode that switches the whole pack between one tile and all tiles - the mechanism behind the one-tile test that the README pushes as the fastest way to iterate.

The seeds it hands out are worth a moment. base_seed plus seed_mode decides how every tile gets a reproducible seed:

  • increment - each tile steps the base seed by one.
  • fixed - every tile uses the same seed (good for debugging, bad for identical tiles).
  • hashed - a stable hash of the tile reference, so a tile keeps its seed across reruns even if the order changes.

Same seed for a tile = same result, which is why the pack's caching story works: change the scale and rerun, and the tiles you didn't want to move come out the same.

Inputs that matter

Mostly wired for you:

  • upscaled_tiles, tile_metadata_json - from the Tile Planner. global_context - the scene brief from SmartCachedTextGenerate. prompt_system - the contract from the Prompt Director.
  • selection_mode - single_tile or all_tiles. The README's advice is to review with single_tile before switching to all_tiles.
  • tile_number - the human tile number (T001…), used in single-tile mode to pick which one.
  • base_seed and seed_mode - described above.

Outputs, all lists in the same order so the downstream nodes can zip them together: tile_images, tile_instructions, tile_references, tile_seeds, and caption_images (the bare local crops the captioner should actually look at - unpadded, no diagnostics painted on them, per the pack's honesty contract that literal models would otherwise reproduce the overlay in the output).

Where it sits

tile_images + tile_instructions feed the per-tile prompt generator (SmartCachedTilePromptGenerator), and the four sampler-facing sets flow into SmartSamplerTileSelector, which decides what actually reaches the sampler. Because the Job Director only ever exchanges standard IMAGE and STRING values, the generator block is externally replaceable - the pack's promise is that anything taking a picture and a prompt and returning a picture can sit in that slot.

Install

Same pack install as every node here - ComfyUI Manager (search "ComfyUI-Smart-Upscaler") or:

cd ComfyUI/custom_nodes
git clone https://github.com/HallettVisual/ComfyUI-Smart-Upscaler

then restart, plus ComfyUI-KJNodes and rgthree-comfy for the shipped workflow. No Python deps; models in docs/MODELS.md total ~13 GB (the captioner and the Z-Image Turbo stack are the load-bearing ones).

Gotchas

  • Seeds and reproducibility. If a tile keeps changing between runs, check seed_mode - hashed is the one that pins a tile's seed to its reference across reruns.
  • single_tile leaves the rest blank. That's expected; the finalizer fills unrendered positions from the enlarged baseline so you can see the whole picture. Switch back to all_tiles for the real run.
  • Confusing tile IDs. References display as T001, T002…; the inspector and the sampler selector both use the same numbering, so a bad tile's number in the log is the same number you type into tile_number. That consistency is the pack's whole debugging story.
CategorySmart Upscaler/Prompting

Inputs (8)

NameTypeDefaultDescription
upscaled_tilesIMAGE
tile_metadata_jsonSTRING
global_contextSTRING
prompt_systemSMART_PROMPT_SYSTEM
selection_modeCOMBOsingle_tile2 options: single_tile, all_tiles
tile_numberINT11–4096
base_seedINT00–18446744073709550000
seed_modeCOMBOincrement3 options: increment, fixed, hashed

Outputs (5)

NameTypeDescription
tile_imagesIMAGE
tile_instructionsSTRING
tile_referencesSTRING
tile_seedsINT
caption_imagesIMAGE