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
-
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