GigaHires V1
The all-in-one hires node the author moved past
- model
- vae
- positive
- negative
- latent
- positive_pass2
- negative_pass2
- upscale_model
- pass2_latent
- pass2_image
- refined_latent
- refined_image
- debug_info
One node that takes your first-pass latent and runs the entire hires fix: upscale it via the latent path or a learned upscaler, then run a second refinement pass. It's the pack's "most knobs exposed" coordinator - and it's the direction the README has since politely demoted. The recommended workflow in this pack is the helper-node layout, keeping the normal pass, upscale, and refine visibly separate. V1 is the everything-in-one-box version that predates that decision. It works, and it's a good way to see the whole pipeline at a glance; just know what you're trading away.
What it does
Internally it's one function doing three visible stages, and the outputs mirror them:
- Branch upscale -
branch_mode = latentinterpolates the latent up to your target (latent_modecontrols the filter);branch_mode = upscale_modeldecodes, runs a learned upscaler, re-encodes.sizing_mode/scale_by/target_width/target_heightwork exactly like the helper nodes. - Refine pass - a second
KSamplerat yourdenoise(default 0.35) with its ownsteps(12),cfg(7),sampler_name,scheduler, and thevae_mode/vae_tile_size/vae_overlaptrio for big decodes. - Decode - to the
refined_image.
That's why there are five outputs and it can feel like a lot: pass2_latent / pass2_image are the state between upscale and refine, and refined_latent / refined_image are the finished thing. Save the refined ones. debug_info is the JSON report - branch used, model name, base vs resolved size, latent shapes, per-stage timings.
The inputs worth knowing about
branch_mode-latentis the default and the cheap path;upscale_modelis the quality path but requires a model (see the trap below).positive_pass2/negative_pass2(both optional) - the one thing the helper nodes don't give you in one box. Wire these to override the conditioning for the second pass, e.g. a detail-focused prompt, while the first pass keeps your main prompt. Leave them empty and pass 2 reuses the first-pass conditioning.sampler_name/scheduler- and here's a genuine quirk: this node defaults to euler + normal, while the pack's ownGigaHires Refine Passdefaults to dpmpp_2m + karras, which the author's notes name as the quality baseline. You can change it, and you probably should.
Where people get burned
- The
upscale_modelValueError. Setbranch_mode = upscale_modelwithout picking anupscale_model_nameor wiring the optionalupscale_modelinput and the run fails on purpose. Pick a model first. - Reading the wrong outputs.
pass2_*is mid-pipeline; if you're savingpass2_imageand wondering why it's rough, that's the not-yet-refined one. - Latent branch blockiness. The author's testing found pure latent upscale can stay blocky even after refinement at low denoise. If you hit it,
branch_mode = upscale_modelor a larger target is the move, not more steps. - All-in-one opacity. The real cost of this node is that you can't inspect each stage's
debug_infoseparately - which is exactly why the author built the helper nodes afterward.
Install
Manager → search "comfyui-hires", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Enferlain/comfyui-hires
Restart ComfyUI. No pip dependencies - the pack relies on ComfyUI internals and the native extension API, so keep ComfyUI current or the nodes won't register at all.
Bottom line
V1 is a fine way to wrap your head around what a two-pass hires fix does before you care about the stages individually. Once you do care - and with this pack, that's the intended journey - the helper nodes give you the same pipeline with visibility. V1 is the map; the helpers are the territory.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent | LATENT | — | |
| branch_mode | COMBO | latent | 2 options: latent, upscale_model |
| latent_mode | COMBO | Latent (antialiased) | 6 options: Latent, Latent (antialiased), Latent (bicubic), Latent (bicubic antialiased), Latent (nearest), Latent (nearest-exact) |
| sizing_mode | COMBO | scale | 2 options: scale, target |
| scale_by | FLOAT | 2.000.1–8 | — |
| target_width | INT | 00–16384 | — |
| target_height | INT | 00–16384 | — |
| upscale_model_name | COMBO | None | 1 options: None |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 121–10000 | — |
| cfg | FLOAT | 7.00–100 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| denoise | FLOAT | 0.350–1 | — |
| vae_mode | COMBO | regular | 2 options: regular, tiled |
| vae_tile_size | INT | 51264–4096 | — |
| vae_overlap | INT | 640–4096 | — |
| positive_pass2opt | CONDITIONING | — | |
| negative_pass2opt | CONDITIONING | — | |
| upscale_modelopt | UPSCALE_MODEL | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| pass2_latent | LATENT | — |
| pass2_image | IMAGE | — |
| refined_latent | LATENT | — |
| refined_image | IMAGE | — |
| debug_info | STRING | — |