JoyAI_Echo_SM_Model
The loader that makes a 5-minute story fit on 6 GB
- model
Most of ComfyUI_JoyAI_Echo is plumbing. This node is the part that decides whether JoyAI-Echo runs on your GPU at all, because it's the one that loads the actual generator - the ~22B LTX-2.3-based DiT that JD's Joy Future Academy finetuned into JoyAI-Echo, plus not one but two VAEs and up to five LoRAs.
Quick background, because it matters for how you load this thing: JoyAI-Echo is a "large scale LTX-2.3 finetune" aimed at minute-level multi-shot audio-video stories - one prompt JSON becomes a sequence of coherent shots with a paired audio-visual memory bank holding character identity across the whole clip. The full fp16 checkpoint is around 46 GB, which is why the pack ships GGUF quant support baked straight in. On a 6 GB card you are not loading a 46 GB safetensors; you're loading JoyAI-Echo-Q8_0.gguf or the Q6_K, and the whole README's "6G Vram can infer 5 minutes" claim rides on that.
How it works
The node collects everything into an inference config (the pack ships JoyAI_Echo/configs/inference.yaml under the hood) and hands it to load_joyai_engine. The engine is deliberately two-stage: the text encoder loads, encodes all your prompts, then fully releases - so the generator you load here never has to share VRAM with the 12B Gemma encoder. Everything runs bfloat16 on CUDA, hardcoded. You get a MODEL out, which is your only wire from here.
The LoRA slots are the sneaky-good part. Five of them, each with its own weight slider (0 to 3). A LoRA only actually loads when its name isn't "none" and its weight is above zero, so you can leave the sliders at 0 and nothing gets applied. LoRAs work fine on this finetune - the community has used the LTX-2.3 checkpoints this way since release.
Inputs that matter
dit/gguf- pick exactly one.ditpulls fromComfyUI/models/diffusion_models(the full safetensors),gguffromComfyUI/models/gguf(the Q8_0/Q6_K quants). The pack registers its ownggufmodel folder at load time, so the combo box fills even if you don't have city96's ComfyUI-GGUF installed.vae- the LTX-2.3 distilled video VAE (ltx-2.3-22b-distilled_video_vae.safetensors). Don't skip it and don't mix it up with the next one.audio_vae- yes, a separate VAE file for audio (ltx-2.3-22b-distilled_audio_vae.safetensors). JoyAI-Echo does sound in the same pass; the audio VAE is what makes that happen. Both come from smthem/LTX-2.3-test-gguf on Hugging Face.lora_1throughlora_5+ weights - fromComfyUI/models/loras.
Installing and getting the files
Clone it into custom_nodes and restart, or just search "JoyAI Echo" in ComfyUI Manager:
cd ComfyUI/custom_nodes
git clone https://github.com/smthemex/ComfyUI_JoyAI_Echo
pip install -r ComfyUI_JoyAI_Echo/requirements.txt
Then grab the weights - the DiT quant from smthem/JoyAI-Echo-gguf, the VAEs, text encoder and connector from smthem/LTX-2.3-test-gguf. Layout:
ComfyUI/models/gguf/ JoyAI-Echo-Q8_0.gguf (or Q6_K)
ComfyUI/models/vae/ ltx-2.3-22b-distilled_video_vae.safetensors
ComfyUI/models/vae/ ltx-2.3-22b-distilled_audio_vae.safetensors
Common issues
The number one trap is the requirements file: it lists torch, torchvision, and torchaudio at the top. If you pip install that wholesale into a working ComfyUI environment you will happily reinstall torch and break the CUDA build. Skip those three - ComfyUI already has them - and install the rest (transformers>=4.57.1,<4.58.0 is the one that's actually pinned tight, and mismatched transformers is a classic silent-failure source).
OOM is the other thing you'll hit, and the answer is almost always "use the GGUF instead." Q8 is effectively fp16 at half the size (the KB's GGUF panel treats that as settled), so if the full safetensors won't load, don't go hunting for fp8 versions - switch the gguf combo to JoyAI-Echo-Q8_0.gguf.
One behavior worth knowing because it bites in mixed workflows: every node in this pack calls clear_comfyui_cache() when it runs, which unpins and empties whatever ComfyUI currently has loaded. Run this graph and your SDXL checkpoint gets flushed from VRAM, even if it was sitting in another workflow tab. Annoying, but it's how the pack keeps a 46 GB model honest on a small card.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| dit | COMBO | 1 options: none | |
| gguf | COMBO | 1 options: none | |
| vae | COMBO | 1 options: none | |
| audio_vae | COMBO | 1 options: none | |
| lora_1 | COMBO | 1 options: none | |
| lora_1_weight | FLOAT | 0.000–3 | — |
| lora_2 | COMBO | 1 options: none | |
| lora_2_weight | FLOAT | 0.000–3 | — |
| lora_3 | COMBO | 1 options: none | |
| lora_3_weight | FLOAT | 0.000–3 | — |
| lora_4 | COMBO | 1 options: none | |
| lora_4_weight | FLOAT | 0.000–3 | — |
| lora_5 | COMBO | 1 options: none | |
| lora_5_weight | FLOAT | 0.000–3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |