Built a lot on JoyAI-Echo these past weeks — merges, quants, tooling — plus one bug report your team will want (lip-sync drift past ~10s)
First: thank you for releasing this model. The slot-paired face+voice memory bank is the most useful thing to happen to multi-shot character video, and everything below exists because of it.
What the community built on it (all credited, base_model lineage points here):
Surgical full-weight merge — Echo's video/conditioning branch + LTX-2.3-distilled-1.1's audio branch, byte-exact per tensor. Keeps Echo's cross-shot identity with the stronger stock voice: https://huggingface.co/joeygambino/joyai-echo-ltx23-echoVid-ltxAud-surgical
GGUF quants of Echo itself, with the four text_embedding_projection tensors bundled — third-party GGUF conversions drop them, which causes the robotic-voice / prompt-reading / new-face-every-shot failures people report: https://huggingface.co/joeygambino/joyai-echo-dit-q8-rm-gguf
INT8 ConvRot and GGUF builds of the merge, a ComfyUI multishot node pack + workflow, and a hosted demo Space: https://huggingface.co/joeygambino/joyai-echo-multishot-workflow / https://huggingface.co/spaces/joeygambino/joyai-echo-ltx23-surgical
Now the bug report, because your users are almost certainly hitting it:
The release inference code hardcodes VIDEO_FPS = 24.0 in the video RoPE position math (ltx_distillation/models/ltx_wrapper.py, _compute_video_positions — the division that converts frame indices to seconds). Audio rope positions are computed in true seconds. At 24fps output the clocks agree — but at 25fps, video rope-time runs 4% fast against audio rope-time, accumulating ~40ms of mouth-ahead-of-audio drift per second of shot. It crosses the visible threshold almost exactly 10 seconds in — which is why lip-sync seems perfect on shots up to ~241 frames and "drifts by a hair" past that, on every checkpoint, resetting each shot. For weeks we assumed this was a training-length limitation of the model. It is not — the model is innocent.
The fix is one line: divide by the actual render fps instead of the constant. After the change we verified frame-accurate sync on 361-frame (15-second) continuous talking shots at both 24 and 25fps. Happy to provide any of the measurement details.
Respect for the research/non-commercial license throughout — and again, genuinely: great model.