Topaz Upscale Stage
One pass of a multi-pass Topaz upscale — Proteus for repair, Rhea for resolution
- params
- previous_stage
- chain
One Topaz upscale pass isn't always enough, and sometimes one model isn't the right one. Topaz Upscale Stage is a single, chainable pass of a multi-pass upscale: you pick a model and a scale, optionally tune it with its own params, and feed the result into the next stage. The last stage connects to the upscale_chain input of Topaz Video Upscale (or Topaz Image Upscale), and the whole chain runs in one go.
Why would you stack passes instead of just picking 4x on one node? Because the models have different personalities, and the classic multi-pass shape is denoise-and-repair on a first pass with one model/profile, then add the resolution with a second. On the video side you might run Proteus to clean up and Rhea to enlarge. On stills it's arguably even more useful - repair pass one, resolution pass two. Stacking two Topaz Video Upscale nodes in series also works, but it costs an extra process launch and a tensor round trip each time. This node exists so the passes happen inside one ffmpeg call as chained tvai_up filters, frames never leaving the process in between.
How it chains
Topaz Upscale Stage (Proteus, 2x)
-> Topaz Upscale Stage (Rhea, 2x) [previous_stage]
-> Topaz Video Upscale (Proteus, 1x) [upscale_chain]
The previous_stage input takes another stage's chain output, so stages run in the order they're connected. Scales multiply along the chain: 2x then 2x is 4x overall. The final Topaz Video Upscale node's own model runs last - set its scale to 1 if it's there purely as the chain endpoint, or give it its own factor if you want one more doubling. Each stage takes its own params, so you can denoise hard on the first pass and sharpen on the second.
Inputs
Required: model and scale_factor (1–4). Not every model supports every factor, and the node validates this before anything renders - Topaz rejects e.g. pnat-1 at 1x, so you find out immediately rather than several seconds into a render. Optional but worth knowing:
scale_mode-factor(an exact integer multiple, the predictable default) ortarget_size, where the stage upscales far enough to cover thetarget_width/target_heightand resamples its output to that size before the next stage sees it. That's how you pin an intermediate pass to a resolution - a Topaz Resolution node plugs straight into the width/height inputs.fit_mode- withtarget_size, how the frame lands in that size:fitpads with black,fillcrops the overflow,stretchchanges the aspect ratio.params- tuning for this stage only, from a Topaz Upscale Params node.
Output is a single chain value of type TOPAZ_UPSCALE_CHAIN - it only connects to another stage's previous_stage or to an upscale node's upscale_chain input.
Install
It ships in the one pack:
git clone https://github.com/donangel85/ComfyUI-TopazVideoLocal.git
from ComfyUI's custom_nodes folder, restart ComfyUI. No pip step beyond numpy; ComfyUI Manager finds it under "TopazVideoLocal". Underneath: Windows, a licensed signed-in Topaz Video installation, and the weights for every model you're chaining on disk.
Common issues
The failure mode to expect is a scale-factor validation error - that's the node working as intended, telling you a model doesn't support the factor you picked (switch it or change the model). And a reminder that applies to every node in this pack: each stage is processing the same in-RAM batch, so multi-pass on a long clip multiplies your memory problem. Run a few frames first to sanity-check the chain before committing a long render.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | <no Topaz Video installation found> | 1 options: <no Topaz Video installation found> |
| scale_factor | COMBO | 2 | Used when scale_mode is 'factor'. Scales multiply along the chain: 2x then 2x is 4x overall. Not every model supports every factor — pnat-1 only allows 2, hyp-1 only 1. |
| scale_modeopt | COMBO | factor | factor: an exact integer multiple, the most predictable option. target_size: upscale far enough to cover the size below, then resample this stage's output to it before the next stage sees it. |
| target_widthopt | INT | 192016–16384 | Used when scale_mode is 'target_size'. Connect a Topaz Resolution node here to pick a named size. |
| target_heightopt | INT | 108816–16384 | Used when scale_mode is 'target_size'. |
| fit_modeopt | COMBO | fit | How the frame is placed into the target size. fit pads with black, fill crops the overflow, stretch changes the aspect ratio. |
| paramsopt | TOPAZ_UPSCALE_PARAMS | Tuning for this stage only. | |
| previous_stageopt | TOPAZ_UPSCALE_CHAIN | Chain another stage in front of this one. Stages run in the order they are connected. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| chain | TOPAZ_UPSCALE_CHAIN | — |