⑤ Enhance · Enzino H3 WF ✦
The 4K-and-detail pass you'll forget is even switched on
- bus
- ✦
- frames
H3 renders at a native budget of roughly one megapixel and 24 fps. That's the model's training range, and pushing the sampler past it gives you a slower clip, not a sharper one. So the way to a 1440p or 4K deliverable is to render at 1 MP and finish afterwards - and ⑤ Enhance · Enzino H3 WF ✦ is that finishing step, in one node, in the right order.
It takes the ✦ wire from ④ Render and gives it back with three possible operations applied: a Krea 2 detail pass, an upscale, and frame interpolation. All three default to off, which is why it's easy to forget it's in the graph.
The order is not arbitrary
In the source, _finish runs polish first, then upscale, then interpolation. Each of those choices is deliberate.
Polish before upscale because upscaling a smaller frame is cheaper, and because whatever sharpener you use afterwards should be working on frames that already have the detail - sharpening mush just gives you sharp mush. Interpolation last because 48 or 72 fps out of a 4K clip is twice the frames to interpolate, and interpolating before an upscale would have you upscaling twice as many frames.
The Krea 2 pass, honestly
polish_on is the Full-edition second pass: every frame is re-detailed by Krea 2 at low denoise. Its own tooltip sets the expectation - "Krea 2 second pass on every frame (fine detail only, motion and colours stay H3's)".
polish_mode is the switch that matters. In texture it only takes skin, hair and fabric texture from Krea 2; colours, faces, shapes and motion stay H3's, and an anti-flicker filter (polish_stable, on by default) smooths what the second pass added. In full you're letting an image model re-render the frames, which is stronger and much more likely to drift.
polish_denoise defaults to 0.15, range 0.03 to 0.6 - stay near the bottom. polish_steps at 4 is plenty when you're only touching low-level detail, polish_prompt is optional because the point isn't re-prompting, and the three file slots want a Krea 2 model, its Qwen3-VL 4B text encoder and the Qwen Image VAE. All three are in the ◆ Models card.
Worth being blunt: this is a nice-to-have, not a fix for a soft clip. If faces are soft because they're tiny in frame, no second pass rescues them - reframe, or render at 1.3–1.5 MP.
Upscale and interpolation
upscale is off, 1080p, 1440p or 2160p. upscaler is where the real decision lives: lanczos (the fallback default), any upscaling model in models/upscale_models, or - if you have Comfy-Org's Nvidia VFX Nodes installed - RTX Video Super Resolution. The pack offers RTX VSR as soon as it detects it, and pre-selects it (or a 4x model) rather than leaving you on lanczos.
That's the same fork the upscaling world argues about constantly: an interpolator like lanczos or RTX VSR estimates pixels, a generative restorer like UltraSharp invents them. For video, frame-by-frame generative upscaling can shimmer where the model guesses differently each frame, so try lanczos first and only reach for a restorer if the source is clean enough to survive it.
interpolate is off, x2 or x3. 24 fps becomes 48 or 72 (that's RIFE or FILM - interp_model picks which, and FILM handles large motion better while RIFE is faster and cleaner). It commits you to a longer render than you'd expect, because every frame in the clip gets interpolated.
The Free-edition ceiling
This node is in the Free edition with the rest of the chain, but not all of it. If you're not on Full, the polish is skipped, interpolation is skipped, and a 4K request silently becomes 1440p - with the node writing a status line like "Free edition: Krea 2 polish, interpolation skipped" so you find out. Saving, upscaling to 1080p/1440p and everything else still work.
Wiring and install
Output frames is an IMAGE batch at the finished size and frame rate, into ⑥ Output. There's also the ✦ wire, which is what ⑥ actually needs - it carries the frames and the audio, so the soundtrack survives the upscale.
cd ComfyUI/custom_nodes
git clone https://github.com/byenzinoai/ComfyUI-Enzino-H3-Studio
# restart ComfyUI, Ctrl+F5
No pip dependencies - the interpolation and upscale ride ComfyUI's own nodes.
One practical trap: the ✦ wire has to carry frames, and this node raises "⑤ Enhance needs the ✦ wire from ④ Render" if it doesn't. That means bypassing ④ and starting the chain here won't work, and neither will a stale graph where the wire got re-routed around the render.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| bus | ENZINO_H3 | — | |
| polish_on | BOOLEAN | false | Full: Krea 2 second pass on every frame (fine detail only, motion and colours stay H3's) |
| polish_model | COMBO | none | 1 options: none |
| polish_te | COMBO | none | 1 options: none |
| polish_vae | COMBO | none | 1 options: none |
| polish_denoise | FLOAT | 0.150.03–0.6 | — |
| polish_steps | INT | 41–30 | — |
| polish_mode | COMBO | texture | 2 options: texture, full |
| polish_stable | BOOLEAN | true | — |
| polish_prompt | STRING | — | |
| upscale | COMBO | off | 4 options: off, 1080p, 1440p, 2160p |
| upscaler | COMBO | lanczos | 1 options: lanczos |
| interpolate | COMBO | off | 3 options: off, x2, x3 |
| interp_model | COMBO | none | 1 options: none |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| ✦ | ENZINO_H3 | — |
| frames | IMAGE | — |