Nodes/ComfyUI-GGUF-Loader/LTX-2.3 Face Identity Reinforcer ⚡
ComfyUI Node

LTX-2.3 Face Identity Reinforcer ⚡

The node that makes Best-Face-ID actually hold a face in LTX-2.3

By ChrisColeTech·Created 20 days ago·Updated about 14 hours ago· 7
LTX-2.3 Face Identity Reinforcer ⚡
  • model
  • vae
  • reference_image
  • target_latent
  • reference_image_2
  • model
identity_strength1.00
face_padding0.15
auto_face_croptrue
crop_zoom_factor2.0
spatial_gatingmask_soft
placement_modei2v_safe
source_id2
phase_scale1.0
debugfalse

If you make LTX-2.3 talking-head or face-to-video content, you know the failure mode: the person in frame one is a stranger by frame thirty. The community's best-known fix is the Best-Face-ID LoRA from Alissonerdx (Best_FaceID_v1.0_LoRA.safetensors), and this node is the wrapper that makes it behave. It takes everything the identity recipe needs - reference latent injection, the RoPE source-phase tag the LoRA was trained on, face detection, spatial mask gating - and collapses it into one node you can drop into a graph.

The subtle part is why a wrapper is even necessary. Best-Face-ID tags its reference tokens with a specific RoPE position (source_id=2) via phase rotation, and that convention collides with i2v's frame-0 conditioning unless the tokens are placed carefully. This node keeps the trained source_id=2 tag while positioning reference tokens so they don't stomp the first-frame hold - which is what makes the whole approach work in image-to-video, not just text-to-video. GPU-verified A/Bs from the pack author: conditioning alone pulls identity toward the photo, reinforcer + Best-Face-ID locks it closest, and strength 0 is a bitwise no-op.

How to wire it

Load Best_FaceID_v1.0_LoRA.safetensors on the MODEL path before this node (a stock LoraLoaderModelOnly at ~1.0 strength is fine), then run this node's model output into the rest of the workflow. Required: model, vae, reference_image, and target_latent (same latent that feeds your sampler).

The dials that actually change results:

  • auto_face_crop (default on) - detects the face and crops the reference around it at crop_zoom_factor, matching the target aspect ratio. This is the biggest single lever for wide or full-body references: the VAE encodes real face detail instead of a pinhead. Disable it when your reference is already a tight headshot.
  • identity_strength - 1.0 is the Best-Face-ID default; raise it for stronger likeness, lower it when the reference starts drowning the prompt.
  • spatial_gating - mask_soft (recommended) limits identity influence to the face region with a cosine falloff; mask_hard is a hard binary; off is raw Best-Face-ID. If you've seen identity bleed onto clothing or background, soft gating is your fix.
  • source_id / phase_scale - leave at 2.0 / 1.0; those are the values the LoRA was trained against. source_id=0 disables rotation for plain overlap behavior.
  • reference_image_2 - a second reference for multi-subject scenes.

One model out, ready for this pack's LTX-2.3 prep nodes. It handles joint AV latents - the video half is unbound automatically.

Installing it

This node lives in the ComfyUI-GGUF-Loader pack (ChrisColeTech's fork of city96's ComfyUI-GGUF). ComfyUI Manager: search "ComfyUI-GGUF-Loader", install, restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf

Restart, then drop Best_FaceID_v1.0_LoRA.safetensors into models/loras. Face detection is built in (YuNet → MediaPipe → Haar fallback), no separate detector download.

Common issues

The recurring trap is using the node without the LoRA - the phase tag does little without the weights it was trained for, so you're just doing plain reference conditioning. And if you're on the LTX-2.5 listing instead: it's the same implementation, but the Best-Face-ID LoRA is 2.3-trained, so that pairing is unverified cross-version territory. On 2.3, this is the settled way to keep a face.

Category🤖 CCTech/LTX-2.3

Inputs (14)

NameTypeDefaultDescription
modelMODEL
vaeVAE
reference_imageIMAGE
target_latentLATENT
identity_strengthoptFLOAT1.000–2Scales reference latent magnitude. 1.0 = Best-Face-ID default.
face_paddingoptFLOAT0.150–0.5Face bbox expansion - captures hair/neck context.
auto_face_cropoptBOOLEANtrueWhen a face is detected, auto-crop the reference image around the face at zoom_factor extent and match target aspect ratio. Dramatically improves identity transfer for wide/full-body references by giving the VAE much more face detail to encode. Turn off if reference is already tightly cropped.
crop_zoom_factoroptFLOAT2.01.2–4How much context around the face to include. 2.0 = crop is 2x the face bbox (shoulders + hair). 1.5 = very tight (face + hair only). 3.0 = wide (upper body). Ignored if auto_face_crop off.
spatial_gatingoptCOMBOmask_softConstrain identity influence to face region. mask_soft = cosine falloff (recommended). mask_hard = binary. off = uniform (raw Best-Face-ID).
placement_modeoptCOMBOi2v_safei2v_safe / t2v_overlap = pure overlap layout (Best-Face-ID's default). Reference reuses target's coord grid, disambiguated by clean/noisy state and sequence position. prefix = additive offset (legacy).
source_idoptFLOAT20–8RoPE source tag applied via phase rotation. Best-Face-ID LoRA expects 2.0. source_id=0 disables rotation (overlap-only behavior).
phase_scaleoptFLOAT1.00–2Phase rotation magnitude multiplier. Best-Face-ID LoRA expects 1.0. Lower values reduce reference/target separation strength.
reference_image_2optIMAGEOptional secondary reference (multi-subject).
debugoptBOOLEANfalse

Outputs (1)

NameTypeDescription
modelMODEL