Nodes/10S-Comfy-nodes/πŸ§‘ LTX Face Identity Reinforcer
ComfyUI Node

πŸ§‘ LTX Face Identity Reinforcer

The node that un-broke the LoRA

By TenStripΒ·Created 4 months agoΒ·Updated 26 days agoΒ· 244
πŸ§‘ LTX 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β–Ί

The LTX-Best-Face-ID LoRA by Alissonerdx is the community's best identity-preservation LoRA for LTX - but it shipped T2V-only. The reason is genuinely subtle: the LoRA injects a reference latent at frame 0's RoPE grid, and in i2v workflows that same grid position is already occupied by the conditioning start image. Two things fighting for the same coordinates means the reference gets diluted or the i2v conditioning gets stomped. LTXFaceIdentityReinforcer is TenStrip's fix: it reimplements the full Best-Face-ID mechanism with a per-rotary-dimension phase rotation that separates reference tokens from target tokens positionally, so the LoRA finally works alongside i2v frame-0 conditioning.

It's one node that composes six mechanisms internally - VAE encoding of the reference, YuNet face detection with auto-crop, reference-to-reference alignment, overlap-coordinate token injection, the RoPE phase rotation, and spatial mask gating - so the user sees a single drop-in that replaces the whole LikenessAnchor identity pattern.

Wiring it

Load Model β†’ Load LTX-Best-Face-ID LoRA β†’ LTXFaceIdentityReinforcer β†’ Sampler
                                                  ↑
                                       VAE, reference_image, target_latent
                                       (reference_image_2 optional)

Required inputs: model, vae, reference_image, and target_latent (the same latent going to your sampler - the reference is resized to match it in pixel space before encoding). Output is a single patched MODEL.

The dials that matter

  • identity_strength (1.0) - scales the reference latent magnitude. 1.0 is the Best-Face-ID default; this is your first lever up or down.
  • auto_face_crop (True) + crop_zoom_factor (2.0) - when a face is detected, the reference is cropped around it at 2Γ— the face bbox before encoding. This is the single biggest quality lever: a wide or full-body reference gives the VAE almost no face detail to work with, and the crop fixes that. Turn it off only if your reference is already a tight face crop.
  • face_padding (0.15) - how much hair/neck context to keep around the box.
  • spatial_gating (mask_soft) - confines identity influence to the face region with a cosine falloff. off gives you raw Best-Face-ID behavior (uniform influence).
  • source_id (2) and phase_scale (1.0) - the RoPE phase-rotation parameters the LoRA was trained with. Leave them. These are what disambiguate reference from target.
  • reference_image_2 - optional second reference (uses source_id=3) for multi-shot identity.

The two real-world caveats

First: this node only works if the Best-Face-ID LoRA is loaded on the model path before it. Without the LoRA you still get reference injection, but the identity signal the LoRA was trained to read isn't there. Second, the community experience with TenStrip's face workflows is that small faces in wide shots are where identity falls apart - if the subject is 3 meters from camera, even this node can't conjure detail that isn't in the reference. Crop the source closer, or use a second reference with a clean face read. That "box effect" around the face people report is usually a face-detection/padding tuning problem, not a reason to abandon the node.

There's also a full-scene mode hiding here: set auto_face_crop=False and spatial_gating=off, and the whole reference image gets encoded as a general scene anchor - a genuinely good i2v stabilizer for lighting and composition, not just faces.

Install is the pack-wide clone (10S_Nodes into custom_nodes, restart, or ComfyUI Manager β†’ "10S-Comfy-nodes"). The LoRA itself is a separate HuggingFace download (Alissonerdx/LTX-Best-Face-ID), and the pack needs the LTX2 model family to hook into - nothing else in the pack installs automatically.

Category10S Nodes/Identity

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 'what we use' 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 v2 phase rotation. Best-Face-ID LoRA expects 2.0. source_id=0 disables rotation (falls back to overlap-only v1 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). Uses source_id=3.
debugoptBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
modelMODELβ€”