Replicate batouresearch/high-resolution-controlnet-tile
Creative tile upscaling in ComfyUI
- image
- IMAGE
This is a creative upscaler - the kind that doesn't just add pixels, it invents detail. Feed it an image and it renders a much larger version (up to 4096px) with pores, fabric weave, and texture that weren't in the original. It's BatouResearch's take on the tile-ControlNet upscaling recipe, and it lives in the same family as Clarity and the Magnific-style tools. Through this node you run it on Replicate's cloud: the image goes up, the model runs on their GPU, the result comes back. You need a Replicate account and a REPLICATE_API_TOKEN, and you pay per run - but nothing runs on your hardware and nothing installs beyond the wrapper.
Before you reach for it, know which job you have. Our upscaling notes split the word three ways: "more pixels" (fast, non-generative, ESRGAN/Lanczos), "more detail" (generative, invents plausible texture, the tile-ControlNet lineage), and video. This node is squarely the middle one. It will make a soft image sharp and rich - and it will rewrite faces, because generating detail is exactly what it does.
How it works
It tiles the image, runs a diffusion pass on each tile with a ControlNet Tile conditioning that keeps every tile faithful to the source, and blends them back together - which is how you get arbitrary output sizes without the composition falling apart. Two LoRAs (sharpness and detail) push texture on top. The resemblance/creativity pair is the steering wheel: resemblance holds it to the original, creativity lets it reimagine.
The inputs and outputs that matter
image- the picture to upscale.resolution-2048,2560, or4096. The target long edge. Higher costs more and takes longer.resemblance(0.85) - how tightly the result tracks the source. High keeps it faithful.creativity(0.35) - how much new detail it's allowed to invent. This is the knob that turns "upscale" into "reinterpret." Nudge it up for grungy texture, down to stay clean.prompt/negative_prompt- describe what's in the image to steer the added detail; the default negative already blocks common anatomy failures.
Output is a single IMAGE. Supporting knobs: hdr for dynamic-range punch, lora_sharpness_strength (1.25) and lora_details_strength (1) for the texture LoRAs, steps (8 - it's a fast pipeline), scheduler, guidance_scale, format (jpg/png), and force_rerun to skip Replicate's result cache.
How to install it
One install brings the whole Replicate pack.
- ComfyUI Manager: search ComfyUI-Replicate, install, restart.
- Manual:
then restart.cd ComfyUI/custom_nodes git clone https://github.com/replicate/comfyui-replicate cd comfyui-replicate pip install -r requirements.txt
No weights land locally - just the replicate package. Set your token first: export REPLICATE_API_TOKEN="r8_..." (replicate.com/account/api-tokens).
Common issues & troubleshooting
The face came back as a different person. Expected. Generative upscalers don't preserve identity, they rebuild it - a face the model doesn't know gets fitted to what it does know. If a recognizable face matters, keep it out of this pass and inpaint or face-restore it separately. This is a design fact of the whole tile-ControlNet category, not a bug you can dial out.
It hallucinated detail that shouldn't be there (extra pores, invented patterns, over-crunchy texture). Drop creativity toward 0.2 and push resemblance up. If the source was already sharp and you only wanted it bigger, this is the wrong tool - a plain ESRGAN pixel upscaler adds resolution without inventing anything.
It's too soft or not adding enough. Raise creativity a little and bump the two LoRA strengths. If the source is genuinely blurry rather than small, generative detail is the right call - but manage your expectations on how much true structure it can recover.
Same image every time. Replicate is returning the cached result for identical inputs. Change the seed or set force_rerun.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| promptopt | STRING | — | |
| imageopt | IMAGE | — | |
| resolutionopt | COMBO | 2560 | 3 options: 2048, 2560, 4096 |
| resemblanceopt | FLOAT | 0.850–1 | — |
| creativityopt | FLOAT | 0.350.1–1 | — |
| hdropt | FLOAT | 0.000–1 | — |
| scheduleropt | COMBO | DDIM | 4 options: DDIM, DPMSolverMultistep, K_EULER_ANCESTRAL, K_EULER |
| stepsopt | INT | 8 | — |
| guidance_scaleopt | FLOAT | 0.000–30 | — |
| seedopt | INT | — | |
| negative_promptopt | STRING | teeth, tooth, open mouth, longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, mutant | — |
| guess_modeopt | BOOLEAN | false | — |
| lora_sharpness_strengthopt | FLOAT | 1.25-5–10 | — |
| lora_details_strengthopt | FLOAT | 1.00-5–3 | — |
| formatopt | COMBO | jpg | 2 options: jpg, png |
| force_rerunopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |