ComfyUI Node
⬡ Polyhedron Fast Upscale
Plain resize and model-based upscaling in one node, for IMAGE, VIDEO and MASK together - the mask follows the image instead of drifting out of register. Works through long batches in chunks so a clip does not have to fit in VRAM all at once, and can snap the result to the divisor the samplers downstream expect.
⬡ Polyhedron Fast Upscale
- image
- video
- upscale_model
- mask
- image
- video
- width
- height
- mask
◄size_modefactor►
◄upscale_by2.00►
◄width1024►
◄height1024►
◄resize_methodbicubic►
◄devicegpu►
◄divisible_by16►
◄per_batch32►
◄mute_staging_logstrue►
◄keep_proportionstretch►
◄crop_positioncenter►
◄pad_color0, 0, 0►
CategoryPolyhedron/Upscaling
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| size_mode | COMBO | factor | factor: scale both sides by upscale_by (the Power Upscale way). exact: hit width x height (the Resize-v2 way; a zero side keeps the aspect). |
| upscale_by | FLOAT | 2.000.05–8 | factor mode: scale for both sides. |
| width | INT | 10240–8192 | exact mode: target width (0 = derive from height). |
| height | INT | 10240–8192 | exact mode: target height (0 = derive from width). |
| resize_method | COMBO | bicubic | bicubic/bilinear/area/nearest run on gpu OR cpu. lanczos is PIL = cpu-only. nvidia_rtx_vsr = Maxine VideoSuperRes (needs nvvfx + RTX; target snaps to /8). |
| device | COMBO | gpu | Where the torch resize runs. lanczos refuses gpu (fail loud); nvidia_rtx_vsr always runs on the GPU regardless. |
| divisible_by | INT | 161–64 | Snap the target DOWN to a multiple (Wan-friendly default 16). |
| per_batch | INT | 320–512 | Frames per sub-batch for ESRGAN + resize (VRAM guard). 0 = whole batch. nvidia_rtx_vsr is per-frame by SDK design. |
| mute_staging_logs | BOOLEAN | true | Silence ComfyUI's model staging INFO lines while this node runs (restored byte-exactly after). |
| keep_proportion | COMBO | stretch | What to do when the aspect ratios differ. stretch = distort to the target (the stretch behaviour). crop = cover the target and cut the overhang. pad = fit inside and fill the rest with pad_color. |
| crop_position | COMBO | center | Where the image sits - used for BOTH the crop cut and the pad placement. |
| pad_color | STRING | 0, 0, 0 | Fill colour for pad, as R, G, B (0-255). Unparseable = black (fail soft). |
| imageopt | IMAGE | Frame input [N,H,W,C]. Wire EXACTLY one of image/video. | |
| videoopt | VIDEO | Native VIDEO input; audio + frame rate ride through into the VIDEO output. Wire EXACTLY one of image/video. | |
| upscale_modelopt | UPSCALE_MODEL | Optional ESRGAN pass BEFORE the resize (core spandrel path, sub-batched). | |
| maskopt | MASK | Optional mask - resized with the SAME geometry (crop/pad included). A padded border is 0: it was never part of the source. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| video | VIDEO | — |
| width | INT | — |
| height | INT | — |
| mask | MASK | — |