Fix the Face First: A Three-Pass Finish Workflow for MiniMax H3 Wide Shots
MiniMax H3 faces melt in wide shots even when close-ups come out clean: the failure tracks on-screen head size, not output resolution. A Japanese ComfyUI builder added a per-frame face-refinement pass in front of the audio and upscale relay, and the ordering rule is the part worth stealing.
AI-assisted draft. Reviewed and edited by the Phosphene team before publication.
On this page

Every MiniMax H3 user meets this eventually. The wide shot renders, the body moves right, the lighting holds, and then you look at the character's face and it is not a face anymore. Melted features, skin that flows like candle wax, someone who stopped being the person from the close-up two shots earlier. You raise the resolution and the face still dissolves, because the problem was never pixels.
A Japanese ComfyUI builder who publishes as Ai-Hakase just shipped a workflow aimed squarely at this failure. It is called Face Perfect Refine, and it extends the three-pass finish relay we covered before with a new first stage: fix the face before you touch the audio or the upscale. The packaged graph sits behind their paid membership, same as their other releases, but the technique is public and it assembles into something you can rebuild yourself.
Why faces melt in wide shots
The key diagnosis is that H3's face failures track the size of the head in the frame, not the output resolution. A character framed tight gets a recognizable face every time. Pull the camera back, and the same character with the same settings starts to look like a stranger. Crank the resolution and the melt survives, because the model never committed to a face in the first place.
Think about what a small face means to a video diffusion model. The face occupies a handful of latent tokens in a wide frame. Those tokens carry motion, lighting, and identity all at once, and there simply is not enough capacity left to hold a stable identity. The close-up works because the face gets a large share of the frame. The wide shot does not fail dramatically; it fails by under-committing. No reroll fixes that, because every reroll faces the same token budget. What fixes it is changing the frame for a moment: crop in, regenerate the face at a size the model can actually commit to, and put the result back.
That is exactly what a video FaceDetailer does, and it is the same trick image editors have used for years in stills.
The Face Perfect Refine relay
The workflow takes three inputs: the finished clip you want to repair, one reference image of the face, and a preset that says close-up or wide. Optionally a short text note. That is the entire operator surface, which is the point. Everything else is internal.
Three passes run in a fixed order:
- Face Refine. Every frame gets processed by a video variant of the FaceDetailer from the Impact Pack, in the form of the community
ComfyUI-H3-FaceRefinenode. The node detects the face, crops around it so the head fills much more of the frame, regenerates that region with H3, and pastes it back with frame smoothing. The reference image anchors identity while the density of the crop fixes the under-commitment problem. The multiplier names in the node tell you how the author thinks about it: separate denoise multipliers for small and large faces, a crop factor, aface_pxbudget for the cropped region, and a frame-smoothing window so the repaired face does not flicker between frames. - Audio Refine. With the face pinned, the second pass freezes the video latent and spends extra denoising steps on audio alone, using the same H3-AudioRefine node from the Perfect Refine post. There is one wiring detail worth repeating: the audio pass runs on a model without the acceleration LoRA. A fast distillation LoRA makes audio sound processed, and the author explicitly warns against leaving the LoRA on for this stage.
- Latent Upscale 3D. The last pass upscales the whole clip in latent space with the LBH-123-AI upscaler. This is the stage that covers a second common failure mode: sometimes the face repair lands beautifully for close-ups but the wide shots stay soft, or vice versa. A global latent upscale evens out the finish across the whole shot.
One wiring detail makes that relay possible, and it is easy to miss: H3 Face Stitch Back returns plain frames, while the audio-refine sampler and the 3D upscaler operate on a packed H3 LATENT that carries audio and video together. The bridge is the companion H3InjectVideoLatent node, which encodes the repaired frames back into the video stream of the joint AV latent while leaving the audio stream intact. Without it the audio pass would have no packed latent to refine against, and the relay collapses into separate, unconnected stages.
The order is the design
The sequence face, then audio, then upscale is not cosmetic. Each stage protects the work of the one before it, and the author is explicit that you should not rearrange it.
Fix the face before anything else because identity is the hardest thing to recover later. An upscaler does not invent a missing face; it enhances whatever structure is already in the latent. If the face is still melted when you upscale, you get a sharper melt. Audio comes second because the refine node is designed to leave the video untouched: with video_denoise at 0 it freezes the video stream and spends its extra steps on audio alone, so the mouth shapes you just fixed stay protected. That protection holds only while the video stream remains frozen, so keep video_denoise at 0 for this stage; a positive value would let the pass modify the face geometry again. The final upscale runs last so it works on the finished result instead of baking more pixels around a broken face.
There is a general principle underneath: in a multi-pass finish, the stage that restores structure must run before the stages that enhance it, and the stage that can be disrupted by re-generation runs before the generation that might disrupt it.
Practical notes from the author
- The workflow runs locally or on RunPod. For cloud instances the recommendation is an RTX 3090, with RTX-series cards generally preferred; L4 instances tend to hit CUDA errors in this graph. If the ComfyUI endpoint is ever exposed through
--listen, a tunnel, or a shared host, setH3_FACEREFINE_STRICT_PATHS=1so the pack refuses to read videos outside its own folder, and load source clips through the Browse dialog instead of pasting absolute paths. - The internal parameters and a troubleshooting table live in a MarkdownNote inside the workflow, so operators can tune without digging through node wiring. Green nodes are the only inputs the author expects you to touch.
- A front-facing, clearly lit reference photo gives the most stable identity anchor. This echoes the reference-selection advice from character consistency for images: the better the identity input, the less the refine pass has to invent.
- Keep the smoothing window reasonable. Over-smoothing turns a repaired face into a static sticker that drifts against head motion.
What survives contact with other stacks
The MiniMax specifics matter less than the pattern. The posture here is polish, not reroll: treat the finished clip as the asset, and run a repair pipeline over it instead of going back to generation and hoping. Wide-shot face melt, synthetic audio texture, and soft resolution are three different defects that arrive in one clip, and the cheapest way to fix all three is one targeted pass each, in the right order.
The identity-first ordering transfers to any model with face instability, and the per-stream refinement idea transfers to any joint audio-video model. If your tool cannot crop-and-repair faces per frame, approximate the same idea: generate a reference close-up of the character first, then compose the wide shot around it, so the model never has to invent the face at small scale. That works even with tools that have no detailer at all.
The reroll lottery is a waste of money precisely because wide-shot faces fail deterministically. Stop rolling. Repair.