Sign In

JoyAI-Echo GGUF: a four-tensor packaging gap, and the one-line check for it

0

JoyAI-Echo GGUF: a four-tensor packaging gap, and the one-line check for it

If you run JoyAI-Echo as a GGUF and you've been fighting any of these:

  • the voice is flat and synthetic, TTS-like rather than performed

  • the model reads your prompt text aloud instead of the written dialogue

  • a different-looking person in every shot, no matter how you word the identity

  • style and lighting instructions ignored — you ask for a grimy interior and get a bright white studio

...it may not be your prompt. Check your file first. It takes one line.

The check

A GGUF stores its tensor count as a little-endian 64-bit integer at byte offset 8, so you can read it straight off the front of the file — no download of the full weights, no model load, no dependencies beyond the standard library:

print(int.from_bytes(open("your-file.gguf", "rb").read(16)[8:], "little"))

For a JoyAI-Echo DiT: 4448 means the text projection is bundled in. 4444 means it isn't.

What those numbers actually mean

This is not corruption, and it is not someone's conversion script eating your weights. It is a packaging difference between two closely related model families, and it only bites when the two conventions get mixed.

  • LTX-2.3 ships the text projection as a separate component file. It's about 2.2 GB and contains exactly four tensors: text_embedding_projection.audio_aggregate_embed.weight and .bias, and text_embedding_projection.video_aggregate_embed.weight and .bias. The LTX-2.3 DiT itself does not contain them. A base LTX-2.3 DiT reporting 4444 is correct and normal — do not "fix" it.

  • JoyAI-Echo bundles those same four tensors into its release checkpoint. That's why a complete JoyAI-Echo DiT reports 4448.

I checked this directly rather than assuming: the four projection tensors inside JoyAI-Echo-release.safetensors are byte-identical to the ones in LTX-2.3's standalone projection file. JoyAI-Echo inherited them from LTX-2.3 unchanged.

So a JoyAI-Echo GGUF at 4444 is not damaged. It has been packaged the LTX way, and it needs the companion file that the LTX way expects you to load. If your graph doesn't load one, nothing supplies those tensors.

Why it breaks things

These four project text conditioning into the audio and video branches. When nothing supplies them, they are constructed random-initialised at load time. The model still runs. Nothing errors. You just get partially random text conditioning, which produces exactly the symptom list above — all of which look like prompt problems, which is why people spend days rewriting prompts instead of checking the file.

Why your logs won't catch it

They sit outside the swept path, so loaders report a clean match. I have watched matched 1660/1660 Linears, 0 meta print over a file whose text conditioning was partly random. The load log is not evidence here.

Which published JoyAI-Echo GGUFs bundle them

Surveyed 2026-07-20 by reading each file's GGUF header directly:

  • realrebelai/JoyAI-Echo_GGUF — Q2_K, Q4_K_M, Q4_K_M_RM, Q6_K, Q6_K_RM — 4448, bundled

  • chfm/JoyAI-Echo_GGUF — Q2_K, Q4_K_M — 4448, bundled

  • chfm/JoyAI-Echo-ggufJoyAI-Echo-Q8_0.gguf4444, unbundled

  • smthem/JoyAI-Echo-ggufJoyAI-Echo-Q8_0.gguf4444, unbundled

To be fair to the people doing conversion work: leaving the projection out is what you get if you follow the upstream LTX-2.3 layout, which is a perfectly defensible thing for a converter to do. The problem isn't the conversion, it's that a JoyAI-Echo user coming from a bundled build won't know a companion file is now required, and nothing in the logs tells them.

Two ways to fix it

Option 1 — load the standalone projection. Take ltx-2.3_text_projection_bf16.safetensors from the LTX-2.3 release and load it alongside your quant. Because the weights are byte-identical to the ones JoyAI-Echo bundles, this is a correct fix rather than a substitute. It's the smaller download if you already have LTX-2.3 assets on disk, and it works with any JoyAI-Echo quant at any precision.

Option 2 — use a bundled build. If you'd rather have one self-contained file, any of the 4448 builds above work. At the time of writing there was no bundled Q8_0 published, so I built one:

huggingface.co/joeygambino/joyai-echo-dit-q8-rm-gguf

23.1 GB, Q8_0 weights, F32 non-quantised, arch ltxv, bare tensor names (no model.diffusion_model. prefix, matching the Rebels loader convention). DiT only — it still needs a full safetensors checkpoint alongside it for the VAEs, vocoder and text connectors.

Confirmed in a real multi-shot render (3 x 201 frames, portrait): the prompt-reading and identity-reset symptoms are gone, lip sync is true, and style instructions are followed.

Checking a whole folder at once

A small script is attached that walks a directory and reports the count for every GGUF it finds. It only judges files that identify themselves as JoyAI-Echo builds, and lists everything else without a verdict — precisely because 4444 is the correct count for base LTX-2.3 and for other architectures, and a checker that flags those would be worse than useless.

Honest scope note

Supplying the projection makes the model behave correctly. It does not make Q8 sound like full precision. Blind line-by-line review put the Q8 voice at 6-7/10 — "performed" emotion, slightly metallic sibilance — against 9-10/10 for a full-precision checkpoint on the same script. Use Q8 because it fits your card, not because it's the best voice available.


Quantised from JoyAI-Echo (JD Joy Future Academy), built on LTX-2.3 (Lightricks). LTX-2 Community License Agreement, included with the download. Non-commercial — the JoyAI-Echo component is research / non-commercial only. AI-generated content must be disclosed. Not affiliated with or endorsed by Lightricks or JD.

0