ComfyUI Node

Topaz Upscale

Topaz Upscale — bigger pixels, without giving the model permission to invent

By yogurt7771·Created 2 years ago·Updated 6 days ago· 3
Topaz Upscale
  • image
  • provider
  • image
◄model▾►
◄scale_factor2.0►
◄output_width0►
◄output_height0►
◄crop_to_fillfalse►
◄output_formatpng►
◄face_enhancementauto►
◄face_enhancement_strength-1.00►
◄face_enhancement_creativity-1.00►
◄subject_detectionauto►
◄extra►
◄retry_count1►

The upscaling argument in this community is usually two people doing different jobs and shouting past each other. One wants more pixels, the other wants invented detail; the first is a scaler, the second is generation. Topaz Upscale is squarely the first. It's the conservative Topaz line - Standard V2, Low Resolution V2, High Fidelity V2, CGI, Text Refine - the family you point at a photo, a product shot, or an illustration you like and don't want reinterpreted.

Reach for it when local ESRGAN output looks over-sharpened, when the source is a phone photo with mild noise, when you're making something printable, or when the subject is text or line art and you don't want a diffusion pass hallucinating letterforms. Nothing runs locally: the node sends your image to the Topaz Image API and hands you back a tensor, so VRAM isn't a factor and the cost is per call.

How it works

One input image in, one image out. The pack submits the file to Topaz, polls the task until it finishes, decodes the result, and returns it as an IMAGE batch - the same type every other node in ComfyUI takes, so you can wire it into a Save node, a preview, or another pass. Configuring the connection (key, endpoint, task ceiling) is the job of the separate Provider: Topaz Labs node; leave the provider input empty and it uses the official key from api_key.json or TOPAZ_API_KEY.

The inputs that matter

  • model - the version, and picking one reveals that model's own sliders below it (sharpening, noise reduction, compression fix on the V2 models; an enhancement strength on Text Refine). Defaults are sensible, which is why most people never touch them. Text Refine is the interesting one: it's built for glyphs, screenshots and UI, where a general upscaler smears edges.
  • scale_factor - 1 to 16, in 0.1 steps. That fine-grained step is a nice touch; 1.5x prints fine and 16x on a 4000px source will produce a file that chokes a browser. Used only when output_width and output_height are 0.
  • output_width / output_height - set exact dimensions instead of a factor. These are advanced for a reason: fix one, leave the other at 0, and you're asking the service to do the arithmetic.
  • crop_to_fill - when the requested dimensions change the aspect ratio, this crops instead of letterboxing. Leave it off for documents and layout work.
  • face_enhancement (auto / true / false), face_enhancement_strength, face_enhancement_creativity - strength and creativity both default to -1, which is the pack's "use the model's own default" sentinel, not a value. This is Topaz's answer to the oldest complaint about upscaling: every generative rung rewrites faces. Here you're steering how hard the face pass goes rather than hoping.
  • subject_detection - auto, or restrict processing to All, Foreground, Background. Useful when the background is fine and you only care about the subject, or the reverse.
  • output_format - png by default; jpeg, tiff and webp are there for delivery.
  • extra - a JSON object merged into the request for parameters the pack hasn't surfaced as widgets yet. This is the escape hatch, not a requirement.
  • retry_count - total attempts on failure, so 1 means no retry at all.

Output: a single image. Wire it to anything that takes IMAGE - a Save node, a preview, or a local detail pass afterwards.

Installing

ComfyUI Manager, search the pack title; or:

cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes && pip install -r requirements.txt

Restart, and look under YogurtNodes/LLM/Upscale. Runtime display names carry a " (Yogurt Nodes)" suffix. Key file:

# custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json
{ "topaz": "your-topaz-api-key" }

Where people get burned

Upscaling first and fixing later is the classic mistake, and it costs you on a paid API: get faces, hands and composition right at native resolution, then upscale. Above 4x on a large source, raise task_timeout on the provider node rather than cranking retry_count - you'll pay for the same job twice otherwise.

Two things this node is not. It isn't a video upscaler: run it frame by frame and fine repeating texture shimmers, because consecutive frames resolve detail differently - that's the defining failure of the job, not a settings problem. And it isn't a restoration model, which is what the pack's generative sibling is for. Point this one at images that are already good and want to be larger; for compressed, soft or genuinely damaged sources, the generative pass is the one that has anything to add.

CategoryYogurtNodes/LLM/Upscale

Inputs (14)

NameTypeDefaultDescription
imageIMAGEImage to process.
modelCOMBOModel version; the inputs below change with the selected model.
scale_factorFLOAT2.01–16Upscale factor, used when output_width and output_height are 0.
output_widthINT00–32000Exact width; 0 uses scale_factor.
output_heightINT00–32000Exact height; 0 uses scale_factor.
crop_to_fillBOOLEANfalseCrop instead of letterboxing on ratio change.
output_formatCOMBOpngReturned file format.
face_enhancementCOMBOautoEnhance faces.
face_enhancement_strengthFLOAT-1.00-1–1Face sharpness relative to background. -1 uses the model default.
face_enhancement_creativityFLOAT-1.00-1–1Face enhancement creativity. -1 uses the model default.
subject_detectionCOMBOautoWhich subjects to process.
extraSTRINGOptional JSON object merged into the request (for parameters not exposed as inputs).
retry_countINT11–10Total attempts on failure.
provideroptYOGURT_LLM_PROVIDERProvider node. When unconnected, the official API is used with keys from api_key.json or environment variables.

Outputs (1)

NameTypeDescription
imageIMAGE—