Nodes/ComfyTV/Upscale
ComfyUI Node

Upscale

A GAN upscaler that ships its own workflow — and knows what scale means

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Upscale
  • image
  • image
force_run_token0
project_id
parent_output_id0
workflowUltrasharp 4x
scale2x
main_prompt
custom_params{}

There are three different jobs hiding under the word "upscale": more pixels, more invented detail, and more pixels over time. This ComfyTV stage is unapologetically the first kind. It ships a pure GAN upscale workflow - no diffusion, no prompt, no hallucinated pores - which makes it the fast, cheap, deterministic rung of the upscaling ladder. If you want the source sharpened into existence, this isn't the node; if you want a clean 4× of something that's already good, it's exactly right.

It's a ComfyTV Image stage: wire an image in, pick a workflow, hit Run, get a bigger image downstream.

The inputs

  • workflow - which upscale workflow to run, default Ultrasharp 4x.
  • scale - 2x or 4x (default 2x). Read this before you get burned: the shipped Ultrasharp workflow is a fixed-scale GAN model, and the preset's own description says the scale widget is "currently a UI hint only" - it always outputs 4× the input size. The widget matters only for future diffusion-refine variants. So pick 4x if you want it honest, or just accept the output is 4× regardless.
  • main_prompt (multiline, optional) - a guide prompt for a diffusion-refine pass. Empty means the workflow's default (something like "masterpiece, 8k"). On the pure-GAN workflow it's ignored entirely - there's no diffusion to guide.
  • image (optional) - the source. Required to run.

The project_id / parent_output_id / force_run_token and custom_params inputs are internal plumbing - ignore them.

How it works

UpscaleStage is workflow-driven: it packages your image and invokes the selected upscale workflow through the pack's local-runner machinery. The shipped Ultrasharp 4x is an ESRGAN-style GAN upscaler (4x-UltraSharp.pth, ~67 MB) that runs in about a second or two per image on a 24GB card. Per the upscaling playbook, that's the "more pixels" job - deterministic, no content invented, no risk of a generative upscaler rewriting a face. The preset docs note you can point the workflow at any other ESRGAN-style model in the same folder (RealESRGAN, etc.) via the sidebar binding.

Install

ComfyTV ships ~190 stages in one pack; this node comes with it.

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart ComfyUI fully and look under ComfyTV → Image. ComfyUI Manager finds it by searching "ComfyTV". The pack declares zero Python dependencies, but the workflow needs its model: drop 4x-UltraSharp.pth into ComfyUI/models/upscale_models/ (the workflow folder's README gives the exact path and size). Without it the workflow fails at load. On ComfyUI Desktop or macOS, clone into the running instance's absolute path from the startup log.

Troubleshooting

  • Workflow fails to load. Missing model - check models/upscale_models/ for 4x-UltraSharp.pth.
  • I chose 2x and got 4x. Known and documented: the GAN workflow is fixed-scale and ignores the widget. If you truly need 2×, follow it with a resize, or wait for a scale-aware variant.
  • Prompt does nothing. Expected on the GAN workflow - it has no diffusion pass to consume a prompt.
  • Upscale is huge and slow. It's a 4× GAN on a 24GB card; on weaker GPUs or 4K sources it's slower - that's the "GAN is cheap" claim taken to its limit, not a bug.

If you want more pixels and nothing else, this is the pack's right answer - fast, deterministic, and honest about what it isn't.

CategoryComfyTV/Image

Inputs (8)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
workflowCOMBOUltrasharp 4xWhich upscale workflow to run.
scaleCOMBO2x2 options: 2x, 4x
main_promptSTRINGOptional guide prompt for the diffusion-refine pass. Empty → workflow's default (e.g. 'masterpiece, 8k').
custom_paramsSTRING{}Internal — JSON of user-defined parameter attachments/values for this node.
imageoptCOMFYTV_IMAGE

Outputs (1)

NameTypeDescription
imageCOMFYTV_IMAGE