Upscale
A GAN upscaler that ships its own workflow — and knows what scale means
- image
- image
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 -
2xor4x(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 thescalewidget is "currently a UI hint only" - it always outputs 4× the input size. The widget matters only for future diffusion-refine variants. So pick4xif 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/for4x-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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| workflow | COMBO | Ultrasharp 4x | Which upscale workflow to run. |
| scale | COMBO | 2x | 2 options: 2x, 4x |
| main_prompt | STRING | Optional guide prompt for the diffusion-refine pass. Empty → workflow's default (e.g. 'masterpiece, 8k'). | |
| custom_params | STRING | {} | Internal — JSON of user-defined parameter attachments/values for this node. |
| imageopt | COMFYTV_IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | COMFYTV_IMAGE | — |