FunPack Latent Resample
The sharpen-or-upscale step between your two passes
- latent
- upscaler
- positive
- negative
- latent
- positive
- negative
- status
Video generation is where two-pass workflows stop being optional. A single pass gives you a clip that's coherent but soft; the standard fix is the one image models have used since hi-res fix - generate small, scale the latent, denoise again at low strength. FunPack Latent Resample is the middle step of that, and it does something the generic latent-upscale nodes don't: it takes your conditioning along for the ride and resizes it to the new grid so your anchors and pins stay where you put them.
One thing to get out of the way before you wire it up, because it will bite you: this is a video node. It expects a video latent, and it says so in a runtime error if you hand it an image latent.
The two operations
operation is a two-option combo, and the tooltip is the author explaining the tradeoff in plain words.
sharpen upscales the latent by scale, then brings it back down to the original size with an antialiased bicubic resample. Nothing downstream sees a bigger clip. What changes is that the latent now contains detail that wasn't in it, and pass two re-denoises that detail into something coherent. This is latent hi-res fix in the classic sense: cheap, because pass two runs at the same resolution it would have anyway.
The source has a note about why the downscale is bicubic and not a box filter: version 4 used area averaging, which came back soft and aliased, and "sharpen leaves smearing" was traced to exactly that. Nice to see a bug fix documented in a comment instead of buried.
upscale keeps the larger latent, so pass two genuinely runs at the new size. Much slower - the status string tells you how much slower, phrased as a multiple of the work, e.g. upscale: 40x24 -> 80x48 latent (4x the work in pass 2).
scale runs 1 to 4, default 2. Two is the honest default; 4x is a lot of pixels for a video.
Inputs and outputs
Required: latent, upscaler (type LATENT_UPSCALE_MODEL), operation, scale.
Optional: positive and negative. Wire them and you get them back, resized to the new latent grid - that's the rescale_conditioning path, and the status will mention how many anchor pins were adjusted. Leave them unwired and you get nothing back on those sockets, which is fine for a plain two-pass. Note that noise_mask is carried through on the latent deliberately, so a pinned frame stays pinned.
The upscaler input is where people get stuck. FunPack ships FunPack Load Latent Upscaler for this, reading from models/latent_upscale_models, and it's the loader you want - if the object you connect doesn't know how to run itself on a latent, the node raises: "this upscaler does not say how to run itself on a latent (no funpack_latent_upscale)." The loader is also explicit that the newer attention-based H3 upscaler can't be built yet and you should use an older convolution-based one.
Outputs: latent (to pass two), positive, negative, and status. The status is a full sentence about what it just did, which is the closest thing to a debugger this pack gives you. Read it.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/digital-garbage/ComfyUI-FunPack
cd ComfyUI-FunPack && pip install -r requirements.txt
Restart ComfyUI afterwards. ComfyUI Manager can install the pack by searching ComfyUI-FunPack, but Registry installs only give you 5.0 once it's published there - the README suggests checking Settings ▸ About FunPack in the /funpack/ UI. Dependencies are comfy-kitchen>=0.2.32 and gguf. Your upscaler file is a separate download; FunPack doesn't ship one.
Common issues
expected a video latent [B, C, T, H, W]. You gave it an image latent. This node is for the video pipelines the pack is built around - MiniMax H3 is the tested one, SD 1.5 is experimental, LTX 2.x is explicitly untested - and for stills you want the ordinary latent upscale nodes instead.
sharpen did nothing visible. Check status and check your second pass. Sharpen adds detail to the latent for pass two to resolve; if pass two runs at denoise 0.1 it will politely ignore most of it.
upscale ate your VRAM. That's the operation. The work scales with area, not with the linear scale value, and pass two is where the cost lands. If you want the speed of the first option with the size of the second, that's a different node's job.
The upscaler won't load. Convolution-based H3 upscalers are what FunPack can build today. If you grabbed the attention-based one, you'll get a message saying so rather than a stack trace.
The node isn't in the menu at all. FunPack v5 loads features as modules and leaves out any that fail to load while everything else keeps running - so check the startup console, not your install order.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| upscaler | LATENT_UPSCALE_MODEL | — | |
| operation | COMBO | sharpen | sharpen: up, then back to this size -- pass 2 re-denoises the added detail. upscale: kept larger, pass 2 runs at the new size (much slower). |
| scale | FLOAT | 2.001–4 | — |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| status | STRING | — |