Nodes/ComfyUI-UltimateUpsacaler/Geekatplay HyperTile Planner
ComfyUI Node

Geekatplay HyperTile Planner

The node that does the tiled-upscale math so you don't guess

By GeekatplayStudio·Created 7 months ago·Updated 6 months ago· 7
Geekatplay HyperTile Planner
  • image
  • tile_width
  • tile_height
  • batch_size
  • denoise
  • tiled_decode
  • profile
  • source_width
  • source_height
  • target_width
  • target_height
  • upscale_ratio
  • tiles_x
  • tiles_y
  • preview_text
◄sizing_mode▾►
◄target_long_edge4096►
◄magnification4.0►
◄output_width4096►
◄output_height4096►
◄snap_to_multiple64►
◄model_family▾►
◄vram_gb12►
◄preserve_compositiontrue►
◄denoise_adjust0.00►

If you've ever built a tiled upscale by hand, you know the ritual: pick a target size, do the aspect-ratio math by hand, then second-guess your tile size and denoise until the seams teach you otherwise. The HyperTilePlanner is Geekatplay's attempt to kill that loop. It's the conductor of this whole pack - it reads your source image, works out where you want to end up, and hands every other node its numbers.

It ships in GeekatplayStudio/ComfyUI-UltimateUpsacaler, a stack that wraps the classic ComfyUI tiled-generative-upscale pattern - neural upscale via Ultimate SD Upscale, then a tiled denoise pass with ControlNet Tile - into helper nodes plus ready-to-import SDXL and FLUX workflows. "Ultimate Upsacaler" is not a promise to beat SUPIR or SeedVR2; it's tiled diffusion made low-guess. (And yes, the repo spells it "Upsacaler" - typo and all, that's the one to search.)

How it works

The node reads the image tensor's dimensions and resolves a target size from your sizing_mode:

  • target_long_edge - scale so the long edge hits your value (default 4096)
  • magnification - multiply the source by a factor (default 4x)
  • output_size - exact output_width/output_height

The result snaps to snap_to_multiple (default 64 - SDXL latents tile in multiples of 8, and 64 keeps everything clean). Then come the heuristics, which are the part worth understanding. It picks a tile size from model_family + vram_gb: SDXL gets 1024px tiles on 24GB+, 768 on 16–24GB, 512 below; FLUX.1-dev gets 768 on 24GB+, else 512; FLUX.1-schnell 768 on 16GB+, else 512. If the target exceeds 8192 on a ≤16GB card it clamps to 512, and anything at 6x+ upscale also backs down. Denoise comes from preserve_composition - 0.24 for SDXL, 0.18 for dev, 0.14 for schnell with it on, looser with it off - then denoise_adjust nudges it (clamped to 0–1). tiled_decode turns on when the longest side is 2048+ or VRAM is ≤12GB. Everything lands in a JSON profile plus discrete outputs.

The inputs that actually matter

  • model_family - SDXL, FLUX.1-dev, or FLUX.1-schnell. Be honest here; it changes tile and denoise defaults.
  • vram_gb - the single most impactful knob. Overstate it and you get 1024px tiles that OOM mid-sample; understate it and you're on 512px tiles with more seams than you needed.
  • preserve_composition - keep it true unless you want the pass free to move things. Denoise above roughly 0.5 is where composition genuinely starts shifting, and the defaults sit well under that.
  • denoise_adjust - a ±0.3 fine-tune for when seams show up or detail comes out timid.

Outputs and where they wire

tile_width/tile_height and tiles_x/tiles_y feed the tiler and the Tile Preview; denoise feeds the KSampler in the tiled pass; tiled_decode feeds the VAE decode; target_width/target_height feed HyperTile Resize Image. profile is the full JSON of what it decided, and preview_text is a one-line human summary.

Install

The usual path: ComfyUI Manager → search "ComfyUI-UltimateUpsacaler" (or just "Geekatplay") → install, or:

cd ComfyUI/custom_nodes && git clone https://github.com/GeekatplayStudio/ComfyUI-UltimateUpsacaler

Then restart. Note the pack's own installer (install.py / install.bat) goes further: it clones UltimateSDUpscale and TTP Toolset and downloads 4x-UltraSharp, RealESRGAN_x4plus, the 6.9GB SDXL base checkpoint and the 2.5GB SDXL Tile ControlNet - so expect a big first download even though this node itself is pure math and needs nothing beyond numpy/Pillow.

Common issues

  • Lying about VRAM. This is the trap. Tell it 24GB on a 12GB card and the 1024px tiles will eat your sample. Set vram_gb to what you have, not what you wish you had.
  • Asking for 16000 on a 12GB card. The planner will happily plan it; it won't save you from the geometry. The README's own advice: keep tiles at 512 on 12–16GB.
  • Treating denoise_adjust as free. At +0.3 on the SDXL default you're at 0.54, past the composition point.

One nice touch: the node's change-detection key is the image's own pixel sum, so loading a new source re-plans instead of serving a stale cached plan. You'll only notice that when it works - which is the point.

CategoryGeekatplay HyperTile/Upscale

Inputs (11)

NameTypeDefaultDescription
imageIMAGE—
sizing_modeCOMBO3 options: target_long_edge, magnification, output_size
target_long_edgeINT40961024–16000—
magnificationFLOAT4.01–16—
output_widthINT409664–32768—
output_heightINT409664–32768—
snap_to_multipleINT641–512—
model_familyCOMBO3 options: SDXL, FLUX.1-dev, FLUX.1-schnell
vram_gbINT126–80—
preserve_compositionBOOLEANtrue—
denoise_adjustFLOAT0.00-0.3–0.3—

Outputs (14)

NameTypeDescription
tile_widthINT—
tile_heightINT—
batch_sizeINT—
denoiseFLOAT—
tiled_decodeBOOLEAN—
profileSTRING—
source_widthINT—
source_heightINT—
target_widthINT—
target_heightINT—
upscale_ratioFLOAT—
tiles_xINT—
tiles_yINT—
preview_textSTRING—