Nodes/ComfyUI-BFSNodes/LTX Identity Transfer (Multiple Angles)
ComfyUI Node

LTX Identity Transfer (Multiple Angles)

Frontal face plus body, side and back references

By alisson-anjos·Created 5 months ago·Updated 11 days ago· 100
LTX Identity Transfer (Multiple Angles)
  • model
  • positive
  • negative
  • vae
  • latent
  • reference_face_front
  • reference_back_head
  • reference_body_front
  • reference_side_profile
  • model
  • positive
  • negative
  • latent
  • debug
identity_projectorNone
phase_scale1.0
id_strength1.0
arcface_modeauto_adjust
debug_logfalse

Single-image identity transfer has an obvious blind spot: give the model one frontal face photo and it has to guess everything it can't see - the back of the head, the body, what the person looks like in profile. LTXIdentityMultiAngle is this pack's answer to that: instead of one reference, you feed it up to four, each pinned to a specific view, and each gets injected as its own conditioning segment the way LTXIdentityTransfer injects a single one. It's the same underlying reference-token mechanism, just with a fixed multi-view vocabulary baked in.

The views, and what's required

Only reference_face_front is mandatory - the frontal face, tagged as source_id 2. It does double duty: it's also what drives the optional ArcFace identity projector if you attach one. The other three are all optional and each maps to a fixed slot:

  • reference_back_head - nape and hair from behind (source_id 3)
  • reference_body_front - full body, for build and proportions (source_id 4)
  • reference_side_profile - profile of the face (source_id 5)

Leave any of them empty and that view just gets skipped, not padded with anything. This only pays off if you're running a checkpoint actually trained on this multi-view convention - the source_id assignments aren't arbitrary, they're the training layout, so a random LTXV checkpoint won't know what to do with a body-front reference on channel 4.

identity_projector is where ArcFace enters the picture: point it at a .safetensors projector file under models/loras, or leave it on None to skip and rely on the overlap conditioning alone. If you're not familiar with ArcFace - it's InsightFace's face-recognition embedding, the same identity vector underneath IP-Adapter FaceID, InstantID, and PuLID. Those tools inject an ArcFace embedding via cross-attention into a still-image model; this node uses it as a multiplier on top of the same reference-token trick everything else in this pack runs on, specifically for the frontal face. id_strength (default 1, up to 50) scales how hard that projector pushes, and arcface_mode picks between auto_adjust, as_is, or disable.

Two more knobs apply globally: phase_scale (training used 1.0, applied uniformly to every view's source_id) and debug_log if you want per-step console output while you're troubleshooting.

Outputs match the single-reference node minus the crop previews: patched model, updated positive/negative, the latent to sample from, and a debug string.

Installing it

Get the pack first - search "ComfyUI-BFSNodes" in ComfyUI Manager, or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-BFSNodes.git
cd ComfyUI-BFSNodes
pip install -r requirements.txt

Restart ComfyUI. You need a multi-view identity-transfer LoRA loaded onto model before this node - same rule as the rest of the identity family, a plain LoRA loader alone isn't the whole recipe. If you're using the ArcFace projector path, InsightFace's pretrained models are the thing to know about licensing-wise: the library itself is MIT, but the actual face-recognition weights are non-commercial, which is a restriction that follows you into anything built on ArcFace, this included.

Where this trips people up

The most likely mistake is feeding it views your checkpoint wasn't trained on - a back-of-head shot only helps if the LoRA actually learned what source_id 3 means, and if it didn't, you're just adding noise. If likeness isn't landing on the face specifically even with a strong frontal reference, check whether identity_projector is set to None - the overlap conditioning alone carries appearance in a coarser way than ArcFace does, and for a face that has to hold up under motion, the projector is usually the difference between "recognizable" and "vaguely similar." And because InsightFace is notoriously one of the fussier installs in this ecosystem (multiple long-running community complaints about even getting it to build), if identity_projector options aren't showing up as expected, that dependency chain is the first place to check.

CategoryLTX/identity

Inputs (14)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
latentLATENT
reference_face_frontIMAGEREQUIRED — frontal face (source_id 2). Also drives the ArcFace projector.
identity_projectorCOMBONoneArcFace projector .safetensors (from models/loras). 'None' = overlap only.
phase_scaleFLOAT1.00–4Global RoPE phase scale (training used 1.0). Applied to every view's source_id.
id_strengthFLOAT1.00–50Multiplies the ArcFace projector tokens (frontal face only).
arcface_modeCOMBOauto_adjust3 options: auto_adjust, as_is, disable
debug_logBOOLEANfalse
reference_back_headoptIMAGEOPTIONAL — back of the head / nape, hair from behind (source_id 3). Leave empty to skip.
reference_body_frontoptIMAGEOPTIONAL — full-body front, build/proportions (source_id 4). Leave empty to skip.
reference_side_profileoptIMAGEOPTIONAL — side / profile of the face (source_id 5). Leave empty to skip.

Outputs (5)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
debugSTRING