Topaz - Image Upscale
Rent the upscaler you don't own
- image_url
- image
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Topaz is the upscaler everyone benchmarks against and almost nobody wants to pay a subscription for. This node is the middle path: Topaz's engine, one API call, no licence, billed per image.
Whether that's a good deal depends on what you're upscaling. Local has gotten genuinely strong - SeedVR2 is the community's default for adding real detail, the RTX video nodes made one node author cancel their Topaz subscription outright, and classic ESRGAN-family models are free and instant. Topaz's edge isn't detail on a clean source; it's predictability on awkward ones, and the fact that it does its thing on someone else's GPU while your machine gets on with something else.
How it works
You hand it an image, it hands you back an upscaled one. Under the hood it's one KIE Market task: the pack PNG-encodes your tensor, uploads it, submits the job with your factor, then polls KIE's record endpoint until the task lands, downloading the result as a ComfyUI IMAGE. All the URL plumbing the raw API needs is hidden behind the socket, which is the nicest thing about how this pack is built - there's no image URL field to paste into.
Inputs and outputs
image_url is required and, despite the name, it's a native IMAGE socket. Wire any image output into it. Batches work - the pack uploads every frame - but each one is a separate billable task, so don't casually point a 40-image batch at a paid endpoint.
upscale_factor is the interesting one: an enum of 2, 1 and 4, defaulting to 2. Yes, 1 is an option and yes, that reads as "upscale by nothing" - in practice 1x is a restoration pass, which is what you want for denoise and deblur on a source that's already big enough. 4x is where things get expensive and where a noisy or compressed input will show every artifact it has. Start at 2.
Small warning from the schema itself: the tooltip for upscale_factor says "factor to upscale the video by". This is the image node, and that text is a copy-paste from the video endpoint. The factor means width and height multiply, so 2 means four times the pixels.
timeout_seconds (30–7200, default 1200) is your wait budget, and callback_url should stay empty for normal use.
Outputs are the pack's standard seven: image (the actual result, ready to wire into a Save Image or a face pass), url (the hosted copy), all_urls_json, task_id, raw_json, credits_consumed and credits_left. Nothing in the crop is a secret - the node prints a credits-spent receipt on itself after a successful run, and credits_left saves you from guessing whether that 4x batch was affordable.
Install
ComfyUI Manager, search KIE.ai Nodes Next, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Four light dependencies (requests, Pillow, numpy, PyYAML) and zero model downloads - the upscaler isn't on your disk, which is the whole point. Then set your key once: Settings → KIE.ai Nodes Next → Connection, paste, confirm the CONNECTED row and balance. KIE_API_KEY in the environment takes priority on headless setups.
Where people get burned
The failure mode nobody expects is financial, not technical. It's a metered endpoint on a pay-as-you-go account, and a batch of 4x upscales is exactly how an afternoon's experimenting turns into a real bill. Test on one image, then queue the rest.
Second: uploading means your image leaves the machine. That's the mechanism, not a bug, and it matters if the picture contains a face you don't have permission to ship to a third party.
Third, the pack's live-catalog design. Node definitions come from KIE's docs and refresh at most daily, so a Topaz endpoint KIE changes will change behaviour under you. If a factor that worked yesterday is rejected today, sync the catalog before you debug your graph - and remember the broader KIE story, where models get retired and workflows built on them just stop.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | — | |
| upscale_factor | COMBO | 2 | Factor to upscale the video by (e.g. 2.0 doubles width and height) |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |