Face Fix - Composite Landmark Aligned
The smarter Face Fix composite — aligns eyes, nose, and mouth before pasting
- ltx_face_frames
- face_fix_context
- repaired_video_frames
- applied_face_mask
- repaired_frame_count
Face Fix - Composite Landmark Aligned is the version of the Face Fix composite that cares about where exactly the facial features land. Same basic job as Composite Opaque - take the decoded LTX face frames, paste them back over the tracked crops - but before it pastes, it detects the eyes, nose, and mouth landmarks in both the source crop and the generated face, computes a best-fit alignment transform, and warps the generated face so its features sit on top of the original's. Then it composites at full opacity with only the outer boundary feathered.
When does that matter? LTX regenerates the face crop independently, and it doesn't know your tracking box is authoritative. If the model draws the face slightly rotated, scaled up, or nudged sideways relative to the original - common when the source is tilted or the model "fixes" the pose - a straight paste looks wrong even if the face itself is great. Landmark alignment fixes exactly that drift, so you get the best of both: LTX's clean facial detail and the original's geometry.
How it works
It uses OpenCV's face-detector (YuNet) to pull landmark points from both images, then fits a partial affine transform (rotation + scale + translation, computed with RANSAC so outliers don't wreck it) mapping the generated landmarks onto the source's. The generated crop gets warped with that transform, then composited opaquely with an outer-boundary feather - the same as the plain composite. If landmark detection fails on a given frame, it falls back to an unaligned paste rather than failing the whole video.
The inputs
ltx_face_frames- the decoded LTX face-video frames.face_fix_context- tracked crop boxes and original frames from Prepare. This is your source of truth for where faces are.feather_pixels- outer-boundary feather width, default 6. Face interior stays opaque.transform_smoothing- the interesting one. It smooths the landmark scale/position changes across frames so the alignment doesn't jitter between frames. Default 0.75, range 0–0.95. It resets automatically at hard cuts - same shot-aware logic as the prepare nodes - so a new shot doesn't inherit a stale transform.
The outputs
repaired_video_frames- full-resolution video with aligned, repaired faces.applied_face_mask- what was pasted, per frame.repaired_frame_count- frames that got composited.
Installing it
Same pack, same story: Manager → search vrgamedev, or git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl.git into custom_nodes/, restart, hard-refresh. No extra model downloads for this node - the detector ships in assets/.
Common issues
- Features still look off despite alignment. Usually the transform is being dragged by a bad landmark frame. Raise
transform_smoothingto lean harder on neighbors, or check that the prepare step's crops actually contain the full face (morecrop_paddinghelps). - Jitter between frames. Again
transform_smoothing- 0.75 is a good start; push toward 0.9 if it wobbles. - Some frames look unaligned. Could be the RANSAC fallback when landmark detection fails on a particular frame. Generally harmless, but if it's frequent, the crops are probably too tight or too blurred.
Pick this one over the plain composite whenever faces are tilted or the shot moves the head around. For perfectly still, front-facing shots, the plain opaque composite is honestly fine - but this node costs you nothing to have on hand, and it's the difference between "good" and "convincing" on tricky footage.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| ltx_face_frames | IMAGE | Decoded LTX face-video frames. | |
| face_fix_context | VRGDG_FACE_FIX_CONTEXT | Tracked source crop boxes and original frames. | |
| feather_pixels | INT | 60–128 | Feather only the outer crop boundary. |
| transform_smoothing | FLOAT | 0.750–0.95 | Smooths landmark scale/position changes across frames. Resets automatically at hard cuts. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| repaired_video_frames | IMAGE | — |
| applied_face_mask | MASK | — |
| repaired_frame_count | INT | — |