Nodes/Muse Collective LTX Timeline/Muse Collective LTX Timeline V3
ComfyUI Node

Muse Collective LTX Timeline V3

Keeping the Same Face Across a Whole Timeline

By muse-collective-26·Created 3 months ago·Updated 2 months ago· 9
Muse Collective LTX Timeline V3
  • model
  • clip
  • audio_vae
  • vae
  • spatial_upscaler
  • bg_audio
  • base_model
  • face_reference_image
  • last_chunk_frames
  • audio
  • stage1_frames
  • seed_hunt_preview_1
  • seed_hunt_preview_2
  • seed_hunt_preview_3
  • seed_hunt_preview_4
  • seed_hunt_audio_1
  • seed_hunt_audio_2
  • seed_hunt_audio_3
  • seed_hunt_audio_4
◄start_second0.00►
◄end_second10.00►
◄duration_seconds10.00►
◄start_frame0►
◄end_frame240►
◄duration_frames240►
◄timeline_data{}►
◄local_prompts►
◄segment_lengths►
◄global_prompt►
◄guide_strength►
◄epsilon0.0010►
◄frame_rate24.00►
◄display_modeseconds►
◄custom_width960►
◄custom_height544►
◄resize_methodmaintain aspect ratio►
◄divisible_by32►
◄img_compression18►
◄generate_audiotrue►
◄custom_audio_onfalse►
◄lipsynctrue►
◄motion_guide_ontrue►
◄chunk_duration_seconds10.0►
◄auto_chunk_threshold10.0►
◄carry_frames73►
◄carry_strength1.00►
◄crossfade_frames0►
◄ic_lora_nameNone►
◄ic_lora_strength1.00►
◄stage1_steps8►
◄stage2_steps4►
◄stage2_denoise0.42►
◄cfg1.0►
◄seed42►
◄filename_prefixmuse►
◄bg_volume1.00►
◄guide_scale_by0.50►
◄guide_scale_by_s21.00►
◄guide_upscale_methodbicubic►
◄guide_image_attn_strength1.00►
◄guide_cropcenter►
◄guide_auto_snap_ic_gridtrue►
◄guide_use_tiled_encodefalse►
◄guide_tile_size256►
◄guide_tile_overlap64►
◄timeline_ui►
◄seed_huntfalse►
◄seed_hunt_steps6►
◄seed_hunt_scale0.25►
◄seed_hunt_11►
◄seed_hunt_22►
◄seed_hunt_33►
◄seed_hunt_44►
◄use_seed_hunt_1false►
◄use_seed_hunt_2false►
◄use_seed_hunt_3false►
◄use_seed_hunt_4false►
◄face_id_enabledfalse►
◄identity_projectorNone►
◄source_id2►
◄phase_scale1.0►
◄id_strength1.0►
◄arcface_modeauto_adjust►

The most frustrating part of long-form video generation is that your character is only consistent until they're not. You're five chunks in, the plot's moving, and suddenly the protagonist has a different nose. MuseDirectorSamplerV3 takes V2's director and adds Face ID - a reference-image identity lock that pulls the sampled face toward a real face you provide, chunk after chunk.

V3 is a WIP fork, and the pack is honest about it: V2's full feature set is intact (Seed Hunt included), and the delta is the face machinery. If identity drift is your number-one enemy, this is the version to try.

How Face ID works

The node uses an identity-overlap conditioning pass (under the hood it drives LTX's LTXIdentityOverlapConditioning, the same identity conditioning Lightricks ships for 2.3) to bias the sampled face toward a reference image. The reference goes in through the optional face_reference_image input - and the tooltip gives you the good advice: feed it a close-up face crop, not a full-body shot. The MuseFaceLock node in this same pack exists precisely to produce that crop from any reference image, via SAM3 text-prompted segmentation.

The controls are the required face_id_enabled toggle plus a small cluster of identity knobs:

  • face_id_enabled - master switch. Default off; V3 behaves like V2 when it's off.
  • identity_projector / source_id / arcface_mode - which face-embedding projector pipeline to use and how it reads the reference. Defaults are the sane starting point; changing these is for people who've already seen the defaults fail.
  • phase_scale and id_strength - how hard and at what stage of sampling the identity is pushed. id_strength is your dial: too low and identity drifts anyway, too high and the face starts looking pasted-on and stiff.

The rest of the panel

Since V3 inherits V2, you get the full director: the timeline editor with MAIN/AUDIO/BG AUDIO/MOTION tracks, [SPEECH]/[SOUNDS] tags (uppercase only), Seed Hunt with seed_hunt and the use_seed_hunt_1..4 toggles, chunking (chunk_duration_seconds, carry_frames), and the two-stage sampling (stage1_steps 8, stage2_steps 4, stage2_denoise 0.42, cfg 1). Outputs are last_chunk_frames, audio, stage1_frames, and the four seed-hunt preview/audio pairs.

Installing it

Same pack, same drill:

cd ComfyUI/custom_nodes
git clone https://github.com/muse-collective-26/muse-ltx-timeline

Restart and pip install av torchaudio soundfile. You'll need the LTX 2.3 stack plus the talking-head LoRA if you're doing lipsync. If you want Face ID plus the automatic face crop, add MuseFaceLock - which needs the comfyui_sam3 custom node package, a dependency the README doesn't advertise. The pack loads V3 as a WIP module in a try/except, so a missing dependency won't take the whole pack down, but it will silently skip the node.

Gotchas

  • Face ID is not magic. A close-up reference with good lighting gives you a chance; a mid-shot of a face at an angle gives you a coin flip. Crop tight, crop well.
  • Identity conditioning costs VRAM and time on top of an already-heavy 22B pipeline.
  • V3's Face ID sits alongside V4's Ghost Mask as two different answers to the same problem - V3 locks the face, V4 locks whole-character references across the timeline. If you're fighting full-character drift rather than just faces, V4 is the one.

It's WIP, it's fiddly, and the identity knobs reward tuning. But if you've ever watched a character's face quietly change over a ninety-second clip, you know why this node exists.

CategoryMuse Collective

Inputs (72)

NameTypeDefaultDescription
modelMODEL—
clipCLIP—
audio_vaeVAE—
vaeVAE—
spatial_upscalerLATENT_UPSCALE_MODEL—
start_secondFLOAT0.000–3600—
end_secondFLOAT10.000–3600—
duration_secondsFLOAT10.000–3600—
start_frameINT00–86400—
end_frameINT2400–86400—
duration_framesINT2401–86400—
timeline_dataSTRING{}—
local_promptsSTRING—
segment_lengthsSTRING—
global_promptSTRING—
guide_strengthSTRING—
epsilonFLOAT0.00100–1—
frame_rateFLOAT24.001–120—
display_modeCOMBOseconds2 options: seconds, frames
custom_widthINT96064–4096—
custom_heightINT54464–4096—
resize_methodCOMBOmaintain aspect ratio4 options: maintain aspect ratio, stretch to fit, crop, pad
divisible_byINT321–256—
img_compressionINT180–51—
generate_audioBOOLEANtrueLTX generates ambient/sfx audio from [SOUNDS] prompts.
custom_audio_onBOOLEANfalseUse audio file(s) from the AUDIO timeline track.
lipsyncBOOLEANtrueSync mouth movements to custom audio. Requires Custom Audio ON and talking head LoRA.
motion_guide_onBOOLEANtrueUse motion guide segments from the timeline.
chunk_duration_secondsFLOAT10.02–120—
auto_chunk_thresholdFLOAT10.00–3600—
carry_framesINT731–240Reference frames from previous chunk locked at chunk start. 73 ≈ 3s at 24fps.
carry_strengthFLOAT1.000–1—
crossfade_framesINT00–120—
ic_lora_nameCOMBONone1 options: None
ic_lora_strengthFLOAT1.00-10–10—
stage1_stepsINT81–50—
stage2_stepsINT41–50—
stage2_denoiseFLOAT0.420–1—
cfgFLOAT1.00–20—
seedINT420–18446744073709550000—
filename_prefixSTRINGmuse—
bg_volumeFLOAT1.000–2—
guide_scale_byFLOAT0.500.01–8—
guide_scale_by_s2FLOAT1.000.01–8—
guide_upscale_methodCOMBObicubic5 options: bicubic, bilinear, nearest-exact, area, bislerp
guide_image_attn_strengthFLOAT1.000–1—
guide_cropCOMBOcenter2 options: center, disabled
guide_auto_snap_ic_gridBOOLEANtrue—
guide_use_tiled_encodeBOOLEANfalse—
guide_tile_sizeINT25664–512—
guide_tile_overlapINT6416–256—
timeline_uiSTRING—
seed_huntBOOLEANfalseON + no candidate chosen: run a 4-seed Stage-1-resolution preview instead of the full pipeline. ON + one use_seed_hunt_N chosen: commit to that candidate — Stage 2 refines its actual cached latent instead of regenerating Stage 1 from scratch.
seed_hunt_stepsINT61–50—
seed_hunt_scaleFLOAT0.250.05–1Unused as of 1.0.4 — Seed Hunt now scouts at Stage 1's real resolution automatically (so the picked candidate's actual latent can carry forward into Stage 2). Kept as a widget only so older saved workflows still load correctly.
seed_hunt_1INT10–18446744073709550000Unused as of 1.0.4 — scouting now draws a fresh random seed for each candidate every run instead of reusing these fixed values (the actual latent carries forward on commit, so the seed number no longer needs to be fixed or reproducible).
seed_hunt_2INT20–18446744073709550000—
seed_hunt_3INT30–18446744073709550000—
seed_hunt_4INT40–18446744073709550000—
use_seed_hunt_1BOOLEANfalse—
use_seed_hunt_2BOOLEANfalse—
use_seed_hunt_3BOOLEANfalse—
use_seed_hunt_4BOOLEANfalse—
face_id_enabledBOOLEANfalsePatches the model at every Stage 1/Stage 2/per-chunk build point so the sampled face is pulled toward face_reference_image. Requires the matching Best-Face-ID LoRA already loaded onto the model input, and ComfyUI-BFSNodes installed. Off = identical to V2.
identity_projectorSTRINGNoneArcFace projector .safetensors filename from models/loras, or 'None' for overlap-only (recommended default — the projector is a weak channel; the overlap latent carries the bulk of identity).
source_idFLOAT20–8—
phase_scaleFLOAT1.00–4—
id_strengthFLOAT1.00–50—
arcface_modeCOMBOauto_adjust3 options: auto_adjust, as_is, disable
bg_audiooptAUDIO—
base_modeloptMODELBase model without talking-head LoRA. Connect the UNETLoader output directly here so the ambient audio pass generates sounds without speech.
face_reference_imageoptIMAGEReference face for Face ID (see face_id_enabled). Feed it a close-up face crop — Muse Face Lock can produce one from any reference image automatically.

Outputs (11)

NameTypeDescription
last_chunk_framesIMAGE—
audioAUDIO—
stage1_framesIMAGE—
seed_hunt_preview_1IMAGE—
seed_hunt_preview_2IMAGE—
seed_hunt_preview_3IMAGE—
seed_hunt_preview_4IMAGE—
seed_hunt_audio_1AUDIO—
seed_hunt_audio_2AUDIO—
seed_hunt_audio_3AUDIO—
seed_hunt_audio_4AUDIO—