FunPack Save Refinement Latent
Save the latent, not just the memory — the Refiner's spatial creativity mask
- latent
- latent
- status
FunPack's Refiner doesn't just learn from prompt text - it also wants to know where in the frame it kept messing up. FunPack Save Refinement Latent is the node that records that. You connect your KSampler's latent output into it, and it stores the video latent on disk under a refinement key, so the next time Studio or Video Refiner V2 runs that key it can compute a spatial creativity mask - a map of which regions of the image kept failing, so the next pass knows where to push harder.
How it works
Two inputs, no configuration beyond a name. latent is the LATENT from your sampler - connect the KSampler output here, not the decoded image; the whole point is to work in latent space. refinement_key (default my_style_v1) is the same key you use everywhere else in the session. The node writes the latent to disk under that key, then passes your latent straight through the latent output so the save doesn't break your graph flow, plus a status string.
One detail the description calls out and you should respect: audio and combined audio+video latents are skipped automatically - this save is video-only. It's not a bug; the spatial mask mechanism is defined for the video stream, so LTXAV combined latents get ignored rather than half-saved.
Why you'd use it
The Refiner learns from ratings - but a rating like "Wrong details" doesn't tell it where the details went wrong. The saved latent is the missing geometry. On the next run, Studio or Refiner V2 loads it, computes where the previous generation's content sat in the frame, and uses that to focus its creativity mask on the failing regions instead of nudging the whole frame equally. If you're doing iterative refinement - generate, rate, refine, generate again - this node is what makes the loop actually converge on the parts of the image that matter.
The input to prefer over the saved copy is the latent input on Studio/Refiner V2 itself, which the tooltips say takes priority over any saved latent for the key. Save Refinement Latent is for the graph-based workflow where you're not using Studio's internal wiring - or when you want the saved latent to persist as a record across sessions.
Install
It's part of ComfyUI-FunPack:
cd ComfyUI/custom_nodes
git clone https://github.com/olivv-cs/ComfyUI-FunPack
pip install -r requirements.txt
or ComfyUI Manager → search "ComfyUI-FunPack". No extra dependencies; it's a state/file node.
The honest take
This one earns its keep only inside the iterative refine loop. If you generate once and move on, it's dead weight. If you rate-and-refine the same key repeatedly, it's the difference between the Refiner blindly re-guessing and the Refiner knowing exactly which part of the frame it has been getting wrong. Just keep the key consistent with the Refiner's - a mismatched key silently means no mask, and the node's status output is where you'll see it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| refinement_key | STRING | my_style_v1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| status | STRING | — |