LTX-2.3 Video Generation

AI video generation with LTX-2.3 22B — text-to-video, image-to-video clips for video production.

LTX-2.3 Video Generation — Super Bowl-style launch ad (from the digitalsamba/claude-code-video-toolkit README)

From the digitalsamba/claude-code-video-toolkit README — shows the whole collection, not only this skill. · view on GitHub

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/ltx2, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit digitalsamba/claude-code-video-toolkit/.claude/skills/ltx2#main ~/.claude/skills/ltx2

For one project only, change the path to .claude/skills/ltx2. This skill also uses ltx2.py, upscale.py, flux2.py, qwen3_tts.py — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of LTX-2.3 Video Generation

Show the full text223 lines
namedescription
ltx2AI video generation with LTX-2.3 22B — text-to-video, image-to-video clips for video production. Use when generating video clips, animating images, creating b-roll, animated backgrounds, or motion content. Triggers include video generation, animate image, b-roll, motion, video clip, text-to-video, image-to-video.

LTX-2.3 Video Generation

Generate ~5 second video clips from text prompts or images using the LTX-2.3 22B DiT model. Runs on Modal (A100-80GB). Requires MODAL_LTX2_ENDPOINT_URL in .env.

Quick Reference

# Text-to-video
uv run tools/ltx2.py --prompt "A sunset over the ocean, golden light on waves, cinematic" --output sunset.mp4

# Image-to-video (animate a still image)
uv run tools/ltx2.py --prompt "Gentle camera drift, soft ambient motion" --input photo.jpg --output animated.mp4

# Custom resolution and duration
uv run tools/ltx2.py --prompt "..." --width 1024 --height 576 --num-frames 161 --output wide.mp4

# Fast mode (fewer steps, quicker)
uv run tools/ltx2.py --prompt "..." --quality fast --output quick.mp4

# Reproducible output
uv run tools/ltx2.py --prompt "..." --seed 42 --output reproducible.mp4

Parameters

Parameter Default Description
--prompt (required) Text description of the video
--input - Input image for image-to-video
--width 768 Video width (divisible by 64)
--height 512 Video height (divisible by 64)
--num-frames 121 Frame count, must satisfy (n-1) % 8 == 0
--fps 24 Frames per second
--quality standard standard (30 steps) or fast (15 steps)
--steps 30 Override inference steps directly
--seed random Seed for reproducibility
--output auto Output file path
--negative-prompt sensible default What to avoid
--lora none Style LoRA preset. Currently: crt-terminal.

Style LoRAs

Style LoRAs bias the output toward a specific visual aesthetic. They're baked into the Modal image and selected per-request; switching LoRAs forces a pipeline rebuild (~60s one-time cost per container lifetime per switch).

crt-terminal — CRT / pixel-art terminals

Base: LTX-2.3 22B, trained by @lovis93 (Apache 2.0).

# Trigger word is auto-prepended — write the prompt normally
uv run tools/ltx2.py --lora crt-terminal \
  --prompt "a terminal typing out \"\\$ claude --continue\" character by character in glowing green pixel font, scanlines, phosphor glow, low choppy frame rate, hacker mood" \
  --output crt_claude.mp4

What the preset changes:

  • Prepends crtanim, to the prompt (the LoRA's trigger word)
  • Defaults to 1024×1024, 121 frames (the ratio it was trained on)
  • Relaxes the default negative prompt so on-screen text isn't filtered out

Prompt pattern: <CRT aesthetic> → <color palette> → <animation style> → <subject> → <literal text in quotes> → <mood>. Keep on-screen text to 1–3 words — the model can't render long strings reliably. The LoRA prefers static framing; ask for camera moves explicitly if you want them.

Valid Frame Counts

(n - 1) % 8 == 0: 25 (~1s), 49 (~2s), 73 (~3s), 97 (~4s), 121 (~5s default), 161 (~6.7s), 193 (~8s max practical).

Common Resolutions

Resolution Ratio Notes
768x512 3:2 Default, good balance
512x512 1:1 Square, fastest
1024x576 16:9 Widescreen
576x1024 9:16 Portrait/vertical

Prompting Guide

LTX-2 responds well to cinematographic descriptions. Layer these dimensions:

  • Camera: "Slow dolly forward", "Aerial drone shot", "Tracking shot", "Static wide angle"
  • Lighting: "Golden hour", "Cinematic lighting", "Neon-lit", "Soft diffused light"
  • Motion: "Timelapse of...", "Slow motion", "Gentle camera drift", "Gradually transitions"
  • Style: "Shot on 35mm film", "Documentary style", "Clean minimal aesthetic"
  • Negative: Always implicitly avoids "worst quality, blurry, jittery, watermark, text, logo"

Keep prompts under 200 words. Be specific about the scene.

Good Prompts
# Atmospheric b-roll
"Aerial drone shot slowly flying over turquoise ocean waves breaking on white sand, golden hour sunlight, cinematic"

# Product/tech scene
"Close-up of hands typing on a mechanical keyboard, shallow depth of field, soft desk lamp lighting, cozy atmosphere"

# Abstract background
"Dark moody abstract background with flowing blue light streaks, subtle geometric grid, bokeh particles floating, cinematic tech atmosphere"

# Animate a portrait
"Professional headshot, subtle natural head movement, confident warm expression, studio lighting, shallow depth of field"

# Animate a slide/screenshot
"Gentle subtle particle effects floating across a presentation slide, soft ambient light shifts, very slight camera drift"
Bad Prompts
# Too vague
"A cool video"

# Too many competing ideas
"A cat riding a skateboard while juggling fire on the moon during a thunderstorm"

# Describing text/UI (model can't render text reliably)
"A website showing the text 'Welcome to our platform'"

Video Production Use Cases

B-Roll Clips

Generate atmospheric 5s shots for cutaways between narrated scenes:

uv run tools/ltx2.py --prompt "Futuristic holographic interface, glowing data visualizations, clean workspace, cinematic" --output broll_tech.mp4
uv run tools/ltx2.py --prompt "Aerial view of European city at golden hour, modern architecture" --output broll_europe.mp4
Animated Slide Backgrounds

Feed a slide screenshot and add subtle motion:

uv run tools/ltx2.py --prompt "Gentle particle effects, soft ambient light shifts, very slight camera drift" --input slide.png --output animated_slide.mp4
Animated Portraits

Bring still headshots to life:

uv run tools/ltx2.py --prompt "Subtle natural head movement, warm expression, professional lighting" --input headshot.png --output animated_portrait.mp4
Stylized Character Cameo (SadTalker Alternative)

For non-realistic faces — fantasy characters, masked figures, heavy beards, helmets, illustrations — SadTalker often produces uncanny or broken lip sync because it's trained on photoreal humans. LTX-2 image-to-video is frequently a better choice when lip-sync precision isn't critical (the viewer's brain fills in the gap as long as something is moving). Prompt for motion + atmosphere, not phonemes:

uv run tools/ltx2.py \
  --input character_portrait.png \
  --prompt "Ancient warrior speaks slowly with gravitas, beard shifts subtly, glowing aura pulses, embers drift past, slow head movement, cinematic close-up, mystical atmosphere" \
  --width 768 --height 768 \
  --output character_speaking.mp4

When LTX-2 wins over SadTalker:

  • Stylized / illustrated / fantasy characters
  • Heavy facial hair or accessories obscuring the mouth
  • Masked or helmeted figures
  • Short cameo lines where atmosphere matters more than precision
  • Dramatic VO rather than dialogue

When SadTalker still wins:

  • Photoreal human presenters
  • Full sentences where mouth shape needs to match phonemes
  • Tutorials / talking-head explainers where the viewer is effectively reading lips
Branded Intro/Outro

Generate abstract motion backgrounds for title cards:

uv run tools/ltx2.py --prompt "Dark moody background with flowing blue and coral light streaks, bokeh particles, cinematic tech atmosphere, no text" --output intro_bg.mp4
Combining with Other Tools

LTX-2 generates raw clips. Combine with the rest of the toolkit:

Workflow Tools
Generate clip → upscale ltx2.py → upscale.py
Generate clip → add to Remotion ltx2.py → use as <OffthreadVideo> in composition
Generate image → animate flux2.py → ltx2.py --input
Generate clip → extract audio ltx2.py → ffmpeg -i clip.mp4 -vn audio.wav
Generate clip → add voiceover ltx2.py → mix with qwen3_tts.py output

Technical Details

  • Model: LTX-2.3 22B DiT (Lightricks), bf16
  • GPU: A100-80GB on Modal (~$4.68/hr)
  • Inference: ~2.5 min per clip (768x512, 121 frames, 30 steps)
  • Cost: ~$0.20-0.25 per 5s clip
  • Cold start: ~60-90s (loading ~55GB weights)
  • Output: H.264 MP4 with synchronized ambient audio (24fps)
  • Max duration: ~8s (193 frames) per clip
Known Limitations
  • Training data artifacts: ~30% of generations may have unwanted logos/text from training data. Re-run with different --seed.
  • Text rendering: Cannot reliably generate readable text in video. Use Remotion overlays instead.
  • Max duration: ~8s per clip. Longer content needs stitching.
  • Audio: Generated audio is ambient/environmental only. Use voiceover/music tools for speech and music.
  • License: Community License — free under $10M revenue, commercial license needed above that.

Setup

# 1. Create Modal secret for HuggingFace (one-time)
uv run modal secret create huggingface-token HF_TOKEN=hf_your_token

# 2. Deploy (downloads ~55GB of weights, takes ~10 min)
uv run modal deploy docker/modal-ltx2/app.py

# 3. Save endpoint URL to .env
echo "MODAL_LTX2_ENDPOINT_URL=https://yourname--video-toolkit-ltx2-ltx2-generate.modal.run" >> .env

# 4. Test
uv run tools/ltx2.py --prompt "A candle flickering on a dark table, cinematic" --output test.mp4

Important: HuggingFace token needs read-access scope. Accept the Gemma 3 license before deploying. Unauthenticated downloads are severely rate-limited.

1---
2name: ltx2
3description: AI video generation with LTX-2.3 22B — text-to-video, image-to-video clips for video production. Use when generating video clips, animating images, creating b-roll, animated backgrounds, or motion content. Triggers include video generation, animate image, b-roll, motion, video clip, text-to-video, image-to-video.
4---
5 
6# LTX-2.3 Video Generation
7 
8Generate ~5 second video clips from text prompts or images using the LTX-2.3 22B DiT model.
9Runs on Modal (A100-80GB). Requires `MODAL_LTX2_ENDPOINT_URL` in `.env`.
10 
11## Quick Reference
12 
13```bash
14# Text-to-video
15uv run tools/ltx2.py --prompt "A sunset over the ocean, golden light on waves, cinematic" --output sunset.mp4
16 
17# Image-to-video (animate a still image)
18uv run tools/ltx2.py --prompt "Gentle camera drift, soft ambient motion" --input photo.jpg --output animated.mp4
19 
20# Custom resolution and duration
21uv run tools/ltx2.py --prompt "..." --width 1024 --height 576 --num-frames 161 --output wide.mp4
22 
23# Fast mode (fewer steps, quicker)
24uv run tools/ltx2.py --prompt "..." --quality fast --output quick.mp4
25 
26# Reproducible output
27uv run tools/ltx2.py --prompt "..." --seed 42 --output reproducible.mp4
28```
29 
30## Parameters
31 
32| Parameter | Default | Description |
33|-----------|---------|-------------|
34| `--prompt` | (required) | Text description of the video |
35| `--input` | - | Input image for image-to-video |
36| `--width` | 768 | Video width (divisible by 64) |
37| `--height` | 512 | Video height (divisible by 64) |
38| `--num-frames` | 121 | Frame count, must satisfy `(n-1) % 8 == 0` |
39| `--fps` | 24 | Frames per second |
40| `--quality` | standard | `standard` (30 steps) or `fast` (15 steps) |
41| `--steps` | 30 | Override inference steps directly |
42| `--seed` | random | Seed for reproducibility |
43| `--output` | auto | Output file path |
44| `--negative-prompt` | sensible default | What to avoid |
45| `--lora` | none | Style LoRA preset. Currently: `crt-terminal`. |
46 
47## Style LoRAs
48 
49Style LoRAs bias the output toward a specific visual aesthetic. They're baked into the Modal image and selected per-request; switching LoRAs forces a pipeline rebuild (~60s one-time cost per container lifetime per switch).
50 
51### `crt-terminal` — CRT / pixel-art terminals
52 
53Base: LTX-2.3 22B, trained by [@lovis93](https://huggingface.co/lovis93/crt-animation-terminal-ltx-2.3-lora) (Apache 2.0).
54 
55```bash
56# Trigger word is auto-prepended — write the prompt normally
57uv run tools/ltx2.py --lora crt-terminal \
58 --prompt "a terminal typing out \"\\$ claude --continue\" character by character in glowing green pixel font, scanlines, phosphor glow, low choppy frame rate, hacker mood" \
59 --output crt_claude.mp4
60```
61 
62**What the preset changes:**
63- Prepends `crtanim,` to the prompt (the LoRA's trigger word)
64- Defaults to 1024×1024, 121 frames (the ratio it was trained on)
65- Relaxes the default negative prompt so on-screen text isn't filtered out
66 
67**Prompt pattern:** `<CRT aesthetic> → <color palette> → <animation style> → <subject> → <literal text in quotes> → <mood>`. Keep on-screen text to 1–3 words — the model can't render long strings reliably. The LoRA prefers static framing; ask for camera moves explicitly if you want them.
68 
69## Valid Frame Counts
70 
71`(n - 1) % 8 == 0`: 25 (~1s), 49 (~2s), 73 (~3s), 97 (~4s), **121 (~5s default)**, 161 (~6.7s), 193 (~8s max practical).
72 
73## Common Resolutions
74 
75| Resolution | Ratio | Notes |
76|------------|-------|-------|
77| 768x512 | 3:2 | Default, good balance |
78| 512x512 | 1:1 | Square, fastest |
79| 1024x576 | 16:9 | Widescreen |
80| 576x1024 | 9:16 | Portrait/vertical |
81 
82## Prompting Guide
83 
84LTX-2 responds well to cinematographic descriptions. Layer these dimensions:
85 
86- **Camera:** "Slow dolly forward", "Aerial drone shot", "Tracking shot", "Static wide angle"
87- **Lighting:** "Golden hour", "Cinematic lighting", "Neon-lit", "Soft diffused light"
88- **Motion:** "Timelapse of...", "Slow motion", "Gentle camera drift", "Gradually transitions"
89- **Style:** "Shot on 35mm film", "Documentary style", "Clean minimal aesthetic"
90- **Negative:** Always implicitly avoids "worst quality, blurry, jittery, watermark, text, logo"
91 
92Keep prompts under 200 words. Be specific about the scene.
93 
94### Good Prompts
95 
96```
97# Atmospheric b-roll
98"Aerial drone shot slowly flying over turquoise ocean waves breaking on white sand, golden hour sunlight, cinematic"
99 
100# Product/tech scene
101"Close-up of hands typing on a mechanical keyboard, shallow depth of field, soft desk lamp lighting, cozy atmosphere"
102 
103# Abstract background
104"Dark moody abstract background with flowing blue light streaks, subtle geometric grid, bokeh particles floating, cinematic tech atmosphere"
105 
106# Animate a portrait
107"Professional headshot, subtle natural head movement, confident warm expression, studio lighting, shallow depth of field"
108 
109# Animate a slide/screenshot
110"Gentle subtle particle effects floating across a presentation slide, soft ambient light shifts, very slight camera drift"
111```
112 
113### Bad Prompts
114 
115```
116# Too vague
117"A cool video"
118 
119# Too many competing ideas
120"A cat riding a skateboard while juggling fire on the moon during a thunderstorm"
121 
122# Describing text/UI (model can't render text reliably)
123"A website showing the text 'Welcome to our platform'"
124```
125 
126## Video Production Use Cases
127 
128### B-Roll Clips
129Generate atmospheric 5s shots for cutaways between narrated scenes:
130```bash
131uv run tools/ltx2.py --prompt "Futuristic holographic interface, glowing data visualizations, clean workspace, cinematic" --output broll_tech.mp4
132uv run tools/ltx2.py --prompt "Aerial view of European city at golden hour, modern architecture" --output broll_europe.mp4
133```
134 
135### Animated Slide Backgrounds
136Feed a slide screenshot and add subtle motion:
137```bash
138uv run tools/ltx2.py --prompt "Gentle particle effects, soft ambient light shifts, very slight camera drift" --input slide.png --output animated_slide.mp4
139```
140 
141### Animated Portraits
142Bring still headshots to life:
143```bash
144uv run tools/ltx2.py --prompt "Subtle natural head movement, warm expression, professional lighting" --input headshot.png --output animated_portrait.mp4
145```
146 
147### Stylized Character Cameo (SadTalker Alternative)
148For non-realistic faces — fantasy characters, masked figures, heavy beards, helmets, illustrations — SadTalker often produces uncanny or broken lip sync because it's trained on photoreal humans. LTX-2 image-to-video is frequently a better choice when **lip-sync precision isn't critical** (the viewer's brain fills in the gap as long as something is moving). Prompt for *motion + atmosphere*, not phonemes:
149 
150```bash
151uv run tools/ltx2.py \
152 --input character_portrait.png \
153 --prompt "Ancient warrior speaks slowly with gravitas, beard shifts subtly, glowing aura pulses, embers drift past, slow head movement, cinematic close-up, mystical atmosphere" \
154 --width 768 --height 768 \
155 --output character_speaking.mp4
156```
157 
158**When LTX-2 wins over SadTalker:**
159- Stylized / illustrated / fantasy characters
160- Heavy facial hair or accessories obscuring the mouth
161- Masked or helmeted figures
162- Short cameo lines where atmosphere matters more than precision
163- Dramatic VO rather than dialogue
164 
165**When SadTalker still wins:**
166- Photoreal human presenters
167- Full sentences where mouth shape needs to match phonemes
168- Tutorials / talking-head explainers where the viewer is effectively reading lips
169 
170### Branded Intro/Outro
171Generate abstract motion backgrounds for title cards:
172```bash
173uv run tools/ltx2.py --prompt "Dark moody background with flowing blue and coral light streaks, bokeh particles, cinematic tech atmosphere, no text" --output intro_bg.mp4
174```
175 
176### Combining with Other Tools
177 
178LTX-2 generates raw clips. Combine with the rest of the toolkit:
179 
180| Workflow | Tools |
181|----------|-------|
182| Generate clip → upscale | `ltx2.py` → `upscale.py` |
183| Generate clip → add to Remotion | `ltx2.py` → use as `<OffthreadVideo>` in composition |
184| Generate image → animate | `flux2.py` → `ltx2.py --input` |
185| Generate clip → extract audio | `ltx2.py` → `ffmpeg -i clip.mp4 -vn audio.wav` |
186| Generate clip → add voiceover | `ltx2.py` → mix with `qwen3_tts.py` output |
187 
188## Technical Details
189 
190- **Model:** LTX-2.3 22B DiT (Lightricks), bf16
191- **GPU:** A100-80GB on Modal (~$4.68/hr)
192- **Inference:** ~2.5 min per clip (768x512, 121 frames, 30 steps)
193- **Cost:** ~$0.20-0.25 per 5s clip
194- **Cold start:** ~60-90s (loading ~55GB weights)
195- **Output:** H.264 MP4 with synchronized ambient audio (24fps)
196- **Max duration:** ~8s (193 frames) per clip
197 
198### Known Limitations
199 
200- **Training data artifacts:** ~30% of generations may have unwanted logos/text from training data. Re-run with different `--seed`.
201- **Text rendering:** Cannot reliably generate readable text in video. Use Remotion overlays instead.
202- **Max duration:** ~8s per clip. Longer content needs stitching.
203- **Audio:** Generated audio is ambient/environmental only. Use voiceover/music tools for speech and music.
204- **License:** Community License — free under $10M revenue, commercial license needed above that.
205 
206## Setup
207 
208```bash
209# 1. Create Modal secret for HuggingFace (one-time)
210uv run modal secret create huggingface-token HF_TOKEN=hf_your_token
211 
212# 2. Deploy (downloads ~55GB of weights, takes ~10 min)
213uv run modal deploy docker/modal-ltx2/app.py
214 
215# 3. Save endpoint URL to .env
216echo "MODAL_LTX2_ENDPOINT_URL=https://yourname--video-toolkit-ltx2-ltx2-generate.modal.run" >> .env
217 
218# 4. Test
219uv run tools/ltx2.py --prompt "A candle flickering on a dark table, cinematic" --output test.mp4
220```
221 
222**Important:** HuggingFace token needs read-access scope. Accept the [Gemma 3 license](https://huggingface.co/google/gemma-3-12b-it-qat-q4_0-unquantized) before deploying. Unauthenticated downloads are severely rate-limited.
223 

Discussion

Alternatives

Also in Video productionSee all 320 in Content creator →