LTX2-marimo

The LTX-2 weights that the diffusers pipeline actually loads β€” plus a marimo notebook that runs them end to end: picture and synchronised audio in a single pass, muxed into one .mp4.

This repository exists to solve two practical annoyances:

  • Lightricks/LTX-2 is a 314 GB repository, but the pipeline loads only 92 GB of it. Working out which 92 GB is a small research project: two different shard-naming conventions, a duplicate shard set that the loader never opens, and a config file that decides it all. That work is done here β€” see Why the subset is 92 GB below.
  • On an ephemeral GPU box the weights do not survive a restart. On molab the working directory is rebuilt when a session restarts, so a 92 GB download is repeated. This repository is a one-command restore.

Nothing here is modified. Every file is byte-identical to the file of the same path in Lightricks/LTX-2.

What is in the repository

path files size
text_encoder/ 15 48.75 GB
transformer/ 10 37.76 GB
connectors/ 2 2.86 GB
vae/ 2 2.44 GB
vocoder/ 2 0.11 GB
audio_vae/ 2 0.11 GB
tokenizer/ 8 0.04 GB
scheduler/, latent_upsampler/, model_index.json 3 β€”
total 44 92.07 GB

Alongside the weights:

file what it is
notebook.py the marimo notebook: compute check β†’ fetch β†’ load β†’ prompt β†’ generate β†’ renders
fetch_weights.py standalone fetcher for this same subset, straight from Lightricks/LTX-2. No token needed
LICENSE-2 the LTX-2 Community License Agreement, in full

Quick start

1. Get the weights

from huggingface_hub import snapshot_download

snapshot_download(
    "dragonlimited/LTX2-marimo",
    local_dir="models/LTX-2",
    ignore_patterns=["*.md", "*.py"],      # keeps the card and scripts out of the model directory
)

That leaves model_index.json and the component directories in models/LTX-2, which is exactly where the notebook loads from. Or fetch the identical subset from the original repository:

python fetch_weights.py            # into models/LTX-2

Both are safe to re-run: every file is size-checked, so only what is missing is fetched.

2. Run it

Open notebook.py in marimo β€” or on molab with a GPU attached β€” and run it. No Hugging Face token is required anywhere: Lightricks/LTX-2 is not a gated repository, so the weights download anonymously.

Requirements

  • A CUDA GPU. Developed on an NVIDIA RTX PRO 6000 (96 GB). The weights are 92 GB, which does not leave room for activations, so the notebook CPU-offloads them.
  • ~100 GB of host RAM for that offload, and ~150 GB of disk for the weights.
  • Python 3.13 with diffusers 0.41, transformers, av, torch.

The notebook, step by step

step
0 compute check β€” GPU, RAM, disk
1 the model β€” open weights, no credentials; choose where they land
2 selective download of the 92 GB, resumable and size-checked
3 load onto the GPU, CPU-offloaded when the weights will not sit resident
4 prompt and settings β€” duration, frame size, frame rate, denoising steps, guidance, negative prompt
5 optional assets β€” a still to open or close the shot, or a clip to condition the opening
6 generate β€” the render appears with its soundtrack already muxed in
7 renders β€” every take kept in outputs/, each with its own download button

A short example prompt, written the way the model likes it (camera β†’ subject β†’ action β†’ light β†’ sound):

Wide shot at dawn: a lighthouse keeper climbs the spiral stairs, the beam swinging past the window, waves breaking below. She pauses, looks into the lens and says: "the boat comes in an hour."

What it does well, and what it does not

Good: short, atmospheric shots with genuinely well-matched sound β€” room tone, foley, ambience, a line of dialogue. Old-money interiors, landscapes, architecture, slow camera moves.

Honest limits:

  • Frame size up to 1024 x 576. This checkpoint is not trained for 1080p, and pushing past it buys artifacts rather than detail.
  • Duration: 5–30 seconds per shot is the real range. Past ~30 s the picture drifts and memory use runs away. A 30-second take at 768 x 512 has both succeeded and run out of memory on a 96 GB card. For a longer film, render 10-second shots and join them.
  • Voice: the native audio is ambience and short dialogue. It will not pronounce a proper noun reliably β€” for a narration, synthesise it separately and mux it in.
  • Text: diffusion models do not render lettering. No logos, captions or on-screen names.
  • Hands and fine detail are the usual weak spots; frame shots to avoid close-ups of hands.

Why the subset is 92 GB

model_index.json names the components the pipeline loads, and each component's own index file names the shards it reads. Two traps:

  1. A component's library decides its file naming. text_encoder is declared as a transformers component and loads model.safetensors; the diffusers components load diffusion_pytorch_model.safetensors. Both naming conventions are present for the text encoder, as complete duplicate shard sets β€” picking the wrong one downloads ~49 GB the loader never opens while the shards it needs stay missing, and loading then fails with FileNotFoundError.
  2. The repository carries unused variants: a second full transformer, alternate shardings, a distilled LoRA β€” about 222 GB beyond what the pipeline reads.

fetch_weights.py implements exactly this, and is the reason the notebook's download works at all.

Provenance and licence

The weights in this repository are an unmodified subset of Lightricks/LTX-2, copied with their original paths. They remain governed by the LTX-2 Community License Agreement β€” included in full as LICENSE-2, together with the use-based restrictions in paragraph 4 and Attachment A. In particular:

  • redistribution and third-party remote hosting are permitted only where recipients receive that Agreement in full; this card and LICENSE-2 are that notice, and the restrictions in paragraph 4 and Attachment A apply in their entirety to anyone who uses these files;
  • entities with annual revenues of at least $10,000,000 require a paid commercial licence from Lightricks;
  • no rights are granted to the LTX-2 name or to Lightricks' trademarks. Copyright, patent, trademark and attribution notices are retained as they appear in the original files.

notebook.py and fetch_weights.py are provided as-is for use with these weights.

Downloads last month
204
Safetensors
Model size
19B params
Tensor type
F32
Β·
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for dragonlimited/LTX2-marimo

Base model

Lightricks/LTX-2
Finetuned
(70)
this model