Topaz Resolution
Named output sizes with snapping — the little node that feeds half your graph
- width
- height
- info
Most dimension problems in ComfyUI are just typing problems: you want a specific output size, you need both edges to be a multiple of something, and you're going to fat-finger 1920x1088 for the third time today. Topaz Resolution exists so you don't type those numbers. Pick a named size, an orientation, and a divisibility constraint, and it hands you back two plain INTs plus a description string. Because they're plain INTs - not some pack-private type - the same node can drive the Topaz upscale nodes' target_width/target_height and a latent model's empty-image size, a MiniMax-H3 resolution, or anything else that takes dimensions. It earns its keep fast in video graphs where a bunch of nodes all need to agree on one size.
Inputs
preset- the named sizes. Watch the two that both get called "2K" in the wild: QHD 1440p is 2560x1440, DCI 2K is 2048x1080. They're named explicitly precisely because "2K" alone is ambiguous.customswitches to thecustom_width/custom_heightfields.orientation-landscape(default),portrait(swaps width and height), orsquare(takes the shorter edge, so 1080p becomes 1080x1080).divisible_by- snap both edges to a multiple of this. 1 means no constraint. This exists because many latent video models only accept dimensions their encoder can downsample cleanly: MiniMax-H3 wants multiples of 32, which is why Full HD there is 1920x1088, not 1920x1080.rounding- which way to move when a size doesn't divide evenly:upnever returns less than you asked for,downnever returns more,nearestkeeps the smallest difference.upis the default and usually the right one.
Optional extras: custom_width/custom_height for the custom preset (still snapped to divisible_by), and custom_divisor - an override for divisible_by when it's above 0, for the rare model whose constraint isn't a power of two (the dropdown only goes up in powers of two: 1, 2, 4, 8, 16, 32, 64, 128).
Outputs
width (INT), height (INT), and info (STRING - a human-readable summary of what was resolved, handy to feed a text node or just glance at). Wire width into a target node's width input and height into its height input; the snapping happens after orientation, so portrait sizes satisfy the divisibility constraint too.
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". Unusually for this pack, this node doesn't even need a Topaz installation to function - it's pure arithmetic over plain INTs. The rest of the pack still wants Windows and a licensed, signed-in Topaz Video install.
Common issues
The easy mistakes are all about expectations, not errors. If your custom size comes back slightly larger than you typed, that's divisible_by snapping up - pick down or nearest if the exact value matters more than the constraint. If you set a preset to Full HD and a downstream model errors anyway, check whether it's the 1080-vs-1088 divisibility issue: for anything that needs multiples of 32, Full HD from this node's divisible_by: 32 is 1920x1088, and that's correct, not a bug.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | Full HD 1080p (1920x1080) | Named output size. 'custom' uses the width and height below. Note the two entries that both get called 2K: QHD is 2560x1440, DCI 2K is 2048x1080. |
| orientation | COMBO | landscape | portrait swaps width and height. square takes the shorter edge, so 1080p becomes 1080x1080. |
| divisible_by | COMBO | 1 | Force both edges to a multiple of this. Many video models require it — MiniMax-H3 needs 32, which turns 1920x1080 into 1920x1088. 1 means no constraint. |
| rounding | COMBO | up | Which way to move a size that does not divide evenly. up never returns less than you asked for; down never returns more; nearest keeps the smallest difference. |
| custom_widthopt | INT | 192016–16384 | Used only when preset is 'custom'. Still snapped to divisible_by. |
| custom_heightopt | INT | 108016–16384 | Used only when preset is 'custom'. Still snapped to divisible_by. |
| custom_divisoropt | INT | 00–256 | Overrides divisible_by when above 0, for the rare model whose constraint is not a power of two. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |
| info | STRING | — |