Nodes/Context-Anchored Tile Refine/Context-Anchored Tile Upscale (VL)
ComfyUI Node

Context-Anchored Tile Upscale (VL)

4K from a 1024px image in one node — for Krea 2

By Blakeem·Created 2 months ago·Updated 14 days ago· 21
Context-Anchored Tile Upscale (VL)
  • image
  • model
  • clip
  • vae
  • upscale_model
  • negative
  • IMAGE
seed0
sampler_namedpmpp_2m
schedulersgm_uniform
steps20
cfg3.5
denoise0.50
upscale_by2.00
max_tile_width1536
max_tile_height2048
context_anchor32
context_overlap32
anchor_sourcesource image
vlm_methodvision tokens and captions

This is the "just make it huge" node. Context-Anchored Tile Upscale (VL) is the all-in-one version of the pack's VL refine: image in, a much bigger refined image out, no sampler nodes to wire and no positive prompt to write. It's Krea 2-only, and the README's sample images are the sales pitch - a 1024x576 frame upscaled to 4096x2304 in a first pass, then to 8192x4608 in a second, with no visible tile seams. Not cherry-picked, per the author.

How it works

The node runs two stages in sequence. First the whole image is upscaled in one pass: the optional upscale_model runs if you connect one (an ESRGAN-style model works here), then a single lanczos resize brings it to input size × upscale_by. Only after that does the tiling begin. Nothing is resampled mid-tile, and the refine stage is the exact same synchronized VL engine as Tile Refine (VL) - every tile a lane of one shared-canvas diffusion run, conditioned on its slice of a single whole-image vision encode. That's why there's no positive prompt input: each tile's conditioning is built from the image itself, so prompt objects never show up in the wrong tile.

The inputs that matter

Unlike the Refine nodes, this one internalizes the sampling plumbing, so you get familiar widgets instead of NOISE/SAMPLER/SIGMAS/GUIDER sockets:

  • upscale_by - the multiplier (0.01 to 8). Default 2. This plus your source size determines how many tiles you'll get.
  • denoise - how much the refine stage rewrites the upscaled image. Default 0.5 is the sweet spot for a 4x pass; the README's second pass drops to 0.35. Set it to 0.0 and this becomes an upscale-only node - handy for testing.
  • max_tile_width / max_tile_height - defaults here are 1536 and 2048 (note the taller-than-wide bias for portrait-ish tiles), and this is the knob that trades VRAM against detail.
  • steps, cfg, sampler_name, scheduler, seed - the usual suspects. Defaults are dpmpp_2m / sgm_uniform / 20 steps / CFG 3.5, which are close to Krea 2 Raw's official settings, so you can mostly leave them alone.

The optional negative is the only text channel that survives - unconnected, it's an empty encode of this node's CLIP. There's no mask input; for region passes, use Tile Refine (VL). The clip must be a vision-language encoder (Krea 2 family) - same rule as the other VL node.

Gotchas

The sampler restriction from the VL Refine node applies here too: only euler, heun, dpm_2, dpmpp_2m, dpmpp_2m_sde (all variants), exp_heun_2_x0, and exp_heun_2_x0_sde are supported, and anything else is rejected before sampling starts. If you're used to dpm_fast or uni_pc from other workflows, this is why the queue errors out.

The two-pass recipe the README shows is worth copying: upscale 4x at denoise 0.5 (6 tiles on their sample image), then run the result through the node again at 2x with denoise 0.35 (30 tiles). Each pass lands at a resolution the model handles comfortably, and the second pass cleans up what the first roughed in.

Install is identical to the rest of the pack - search "Context-Anchored Tile Refine" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Blakeem/ComfyUI-ContextAnchoredTileRefine

Restart, and you're done: no pip dependencies, no extra model files in this pack. The Krea 2 setup around it (Qwen3-VL text encoder plus Qwen-Image VAE) is the part beginners forget, and Krea 2 Turbo is explicitly untested with the VL nodes - stick to plain Krea 2 until the author says otherwise.

Categoryimage/upscaling

Inputs (19)

NameTypeDefaultDescription
imageIMAGEThe image to upscale and then refine.
modelMODELThe diffusion model that denoises each tile.
clipCLIPMust be a vision-language text encoder (Krea 2 family). There is no positive prompt input, since each tile is conditioned on the image itself.
vaeVAEThe VAE that encodes and decodes each tile.
seedINT00–18446744073709550000Noise is drawn once for the entire image and then sliced for each tile.
sampler_nameCOMBOdpmpp_2m44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsgm_uniform9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
stepsINT201–10000
cfgFLOAT3.50–100
denoiseFLOAT0.500–1
upscale_byFLOAT2.000.01–8The upscale multiplier. The optional upscale_model runs first when one is connected.
max_tile_widthINT1536256–16384Hard cap on the width the model ever sees per sampled crop, including the context_overlap and context_anchor rings. Set to the largest width the model supports.
max_tile_heightINT2048256–16384Hard cap on the height the model ever sees per sampled crop, including the context_overlap and context_anchor rings. Set to the largest height the model supports.
context_anchorINT320–512Pixels around each tile that are frozen and shown to the model as context, then cropped away.
context_overlapINT320–512Overlapped context that is diffused from both sides and then blended. It anchors the tiles to each other, like context_anchor anchors each tile to its surroundings.
anchor_sourceCOMBOsource imageWhat fills context_anchor. source image keeps the result true to the input. live canvas adds more detail and drifts further from the input.
vlm_methodCOMBOvision tokens and captionsWhether each tile is conditioned on a caption of itself, on its slice of the entire image's vision encode, or on both. The name in parentheses is the caption preset it asks. Copy settings.toml to settings.user.toml to write your own tile prompts.
upscale_modeloptUPSCALE_MODELOptional upscale model, run over the entire image before any tiling.
negativeoptCONDITIONINGOptional negative conditioning. Unconnected it is an empty encode of this node's CLIP.

Outputs (1)

NameTypeDescription
IMAGEIMAGE