v0.47.1 — HiResFix round 5 + Civitai batch lift + Wildcard IS_CHANGED
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