Skip to content

v0.47.1 — HiResFix round 5 + Civitai batch lift + Wildcard IS_CHANGED

Choose a tag to compare

@Deaththegrim Deaththegrim released this 07 May 02:11
· 48 commits to main since this release

v0.47.1 — Round-5 HiResFix wins + cross-node perf sweep

Folded changes since v0.46.2.

v0.47.0 — HiResFix round 5

What changed Real-world impact
Soft GPU cleanup between iterations New _between_iterations_cleanup() calls comfy.model_management.soft_empty_cache() after every iteration. Gentler than torch.cuda.empty_cache() — only fires when memory is actually constrained. Long iteration loops (4–5 iters at 4× scale) used to accumulate VRAM fragmentation; iteration 5 sometimes allocated around fragments instead of into them. Stable now.
denoise=0 short-circuit common_ksampler at denoise=0 still ran its noise+step setup ritual (~1 s per call) even though no sampling happens. The call is now skipped entirely; the upscaled latent flows through unchanged. Saves ~1 s × N iterations × stages on "upscale-only" workflows. Both samplers.
Per-pass hires_sampler / hires_scheduler Two new optional widgets on the SDXL HiResFix Script. (same as primary) default = inherits the primary call (no behaviour change). Override to use a different sampler at the hires stage. Useful for "primary dpmpp_3m_sde + karras + hires euler + simple" patterns, or swapping to faster samplers when hires steps are cheap.

v0.47.1 — Cross-node perf sweep

What changed Impact
Civitai Save: lift batch-shared work out of the per-frame loop build_a1111_parameters + json.dumps(prompt) + json.dumps(extra_pnginfo) were called per frame inside the save loop. Frames in a Comfy batch always share H/W, so the parameter string is identical for every frame; same for the workflow-trace JSON. Batch of 4 with a typical trace: ~3 redundant param-string builds + 3 redundant JSON dumps avoided per save. Compounds across overnight batches.
Wildcard Expand IS_CHANGED tracks library mtime Same staleness pattern as the Random by Tag fix in v0.42.1. With expand_named_refs=True, the result depends on whichever entries __name__-references resolve to. Edits to those entries mid-session must invalidate Comfy's cached output. mtime folded into the hash only on the named-ref branch — pure {a|b|c} expansion still hashes fast. Edits to library entries now actually re-trigger downstream Wildcard Expand consumers at fixed seed.

Audit notes — verified no fix needed

Node Status
Scene / Background / Comic Frame Pure-string composition; Comfy's default input-hash IS_CHANGED is correct
Save / ThumbnailSaver OUTPUT_NODE=True, side-effect writers — should re-run every queue
Multi node IS_CHANGED already hashes picked entries' text
Library node IS_CHANGED hashes per-entry text + negative + LoRA sig (when MODEL/CLIP wired)
Style / Comic Page / Character Anchor Required-input nodes, Comfy hashes inputs by default
LoRA Picker Stateless (per-call session-cached saves)

Cumulative HiResFix optimization picture (v0.32 → v0.47.0)

16 HiResFix-specific items shipped across 5 rounds. Every per-iteration cost that can be hoisted has been; every load that can be cached is; every redundant work step short-circuits when not needed.

Backward compat

All changes internal — no socket / widget / workflow JSON shape changes since v0.46.2. Workflow JSONs from any version since the optional-MODEL/CLIP refactor (v0.32) still load cleanly.

Install / upgrade

cd ComfyUI/custom_nodes/ComfyUI-GrimmRibbity
git pull
# restart ComfyUI / hard-refresh browser tab