# LTX-2 (audio + video)

LTX-2 (enero de 2026) es el modelo fundacional de video de segunda generación de Lightricks y el primer modelo de pesos abiertos que produce **audio sincronizado junto con video** en una sola pasada hacia adelante. Con 19.000 millones de parámetros genera clips con efectos foley, audio ambiental y discurso con sincronización labial sin necesitar un modelo de audio separado. La arquitectura se basa en la ventaja de velocidad del LTX-Video original mientras expande drásticamente la capacidad.

Alquilar una GPU en [Clore.ai](https://clore.ai/) es la forma más práctica de ejecutar un modelo de 19.000 millones de parámetros: no se requiere comprar una GPU de $2,000, solo inicia una máquina y comienza a generar.

## Características clave

* **Generación de audio nativa** — efectos foley, ambiente ambiental y diálogo con sincronización labial producidos conjuntamente con los fotogramas de video.
* **19.000 millones de parámetros** — columna vertebral transformer significativamente más grande que LTX-Video v1, ofreciendo detalles más nítidos y movimiento más coherente.
* **Texto a Video + Imagen a Video** — ambas modalidades son compatibles con salida de audio.
* **Hasta resolución 720p** — salida de mayor fidelidad que el modelo v1.
* **Espacio latente audiovisual conjunto** — un VAE unificado codifica tanto video como audio, manteniéndolos alineados temporalmente.
* **Pesos abiertos** — lanzado bajo una licencia permisiva para uso comercial.
* **Integración con Diffusers** — compatible con el ecosistema de Hugging Face `diffusers` ecosistema.

## Requisitos

| Componente      | Mínimo                      | Recomendado |
| --------------- | --------------------------- | ----------- |
| VRAM de GPU     | 16 GB (con descarga en CPU) | 24+ GB      |
| RAM del sistema | 32 GB                       | 64 GB       |
| Disco           | 50 GB                       | 80 GB       |
| Python          | 3.10+                       | 3.11        |
| CUDA            | 12.1+                       | 12.4        |
| diffusers       | 0.33+                       | última      |

**Recomendación de GPU de Clore.ai:** Un **RTX 4090** (24 GB, \~0,5–2 $/día) es el mínimo para una generación cómoda de 720p con audio. Para cargas por lotes o iteración más rápida, filtra por **dual-4090** o **A6000** (48 GB) anuncios en el mercado de Clore.ai.

## Inicio rápido

```bash
# Instalar dependencias
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install diffusers transformers accelerate sentencepiece
pip install imageio[ffmpeg] soundfile scipy

# Verificar GPU
python -c "import torch; print(torch.cuda.get_device_name(0), torch.cuda.get_device_properties(0).total_mem // 1024**3, 'GB')"
```

## Ejemplos de uso

### Texto a Video con Audio

```python
import torch
from diffusers import LTXPipeline
from diffusers.utils import export_to_video
import soundfile as sf

# Cargar LTX-2 (asegúrate de tener el ID de modelo correcto cuando se publique)
pipe = LTXPipeline.from_pretrained(
    "Lightricks/LTX-Video-2",
    torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
pipe.enable_model_cpu_offload()

prompt = (
    "Un herrero martillando metal incandescente sobre un yunque, chispas volando, "
    "golpeteo rítmico del martillo sobre el acero, ruido ambiental del taller"
)

output = pipe(
    prompt=prompt,
    negative_prompt="silencioso, borroso, baja calidad",
    num_frames=121,
    width=1280,
    height=720,
    num_inference_steps=40,
    guidance_scale=7.0,
    generator=torch.Generator("cuda").manual_seed(42),
)

# Exportar fotogramas de video
export_to_video(output.frames[0], "blacksmith.mp4", fps=24)

# Exportar audio si está disponible
if hasattr(output, "audio") and output.audio is not None:
    sf.write("blacksmith_audio.wav", output.audio, samplerate=16000)
    print("Audio guardado por separado — multiplexar con ffmpeg:")
    print("  ffmpeg -i blacksmith.mp4 -i blacksmith_audio.wav -c:v copy -c:a aac output.mp4")

print("Hecho: blacksmith.mp4")
```

### Imagen a Video con audio sincronizado de labios

```python
import torch
from PIL import Image
from diffusers import LTXImageToVideoPipeline
from diffusers.utils import export_to_video

pipe = LTXImageToVideoPipeline.from_pretrained(
    "Lightricks/LTX-Video-2",
    torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
pipe.enable_model_cpu_offload()

# Imagen de retrato para sincronización labial
image = Image.open("portrait.png").resize((720, 1280))

output = pipe(
    prompt="Una persona diciendo 'Bienvenido al futuro del video con IA' con enunciación clara, fondo neutro",
    image=image,
    num_frames=121,
    num_inference_steps=40,
    guidance_scale=7.0,
)

export_to_video(output.frames[0], "talking_head.mp4", fps=24)
```

### Escena ambiental con Foley

```python
import torch
from diffusers import LTXPipeline
from diffusers.utils import export_to_video

pipe = LTXPipeline.from_pretrained(
    "Lightricks/LTX-Video-2", torch_dtype=torch.bfloat16
).to("cuda")

# Prompt rico en audio — describe los sonidos explícitamente
prompt = (
    "Lluvia cayendo sobre un techo de chapa en una aldea tropical, "
    "trueno retumbando a lo lejos, pájaros brevemente cantando entre truenos, "
    "charcos ondulando en un camino de tierra"
)

output = pipe(
    prompt=prompt,
    num_frames=121,
    width=1280,
    height=720,
    num_inference_steps=40,
    guidance_scale=6.5,
)

export_to_video(output.frames[0], "rain_scene.mp4", fps=24)
```

## Consejos para usuarios de Clore.ai

1. **Describe los sonidos explícitamente** — la rama de audio de LTX-2 responde a indicios de audio en el prompt. "Fuego crepitante", "pasos en grava", "murmullo de la multitud" generan mejor foley que descripciones vagas.
2. **La descarga en CPU es esencial** — con 19.000 millones de parámetros, el modelo necesita `enable_model_cpu_offload()` en tarjetas de 24 GB. Presupuesta 64 GB de RAM del sistema.
3. **Almacenamiento persistente** — el punto de control del modelo ocupa \~40 GB. Monta un volumen persistente de Clore.ai y configura `HF_HOME` para evitar volver a descargar en cada reinicio del contenedor.
4. **Multiplexar audio + video** — si la canalización produce audio por separado, combínalos con: `ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac final.mp4`.
5. **solo bf16** — el modelo de 19.000 millones fue entrenado en bf16; fp16 causará inestabilidad numérica.
6. **Procesamiento por lotes en tmux** — siempre ejecútalo dentro de `tmux` en alquileres de Clore.ai para sobrevivir a desconexiones SSH.
7. **Comprobar ID del modelo** — como LTX-2 se ha lanzado recientemente (ene 2026), verifica el ID exacto del modelo en HuggingFace en la [página de Lightricks en HF](https://huggingface.co/Lightricks) antes de ejecutar.

## Solución de problemas

| Problema                         | Solucionar                                                                                                                                 |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `OutOfMemoryError`               | Habilite `pipe.enable_model_cpu_offload()`; asegúrate de ≥64 GB de RAM del sistema                                                         |
| No hay audio en la salida        | La generación de audio puede requerir una bandera explícita o diffusers actualizado; consulta la ficha del modelo para la API más reciente |
| Desincronización audio/video     | Remultiplexar con ffmpeg: `ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -shortest out.mp4`                                          |
| Generación muy lenta             | El modelo de 19.000 millones exige mucha potencia de cómputo; se esperan \~2–4 min por clip de 5 segundos en una RTX 4090                  |
| Salidas NaN                      | Usa `torch.bfloat16` — fp16 no es compatible con esta escala de modelo                                                                     |
| Error de espacio en disco        | El modelo ocupa \~40 GB; asegúrate de tener ≥80 GB de espacio libre antes de descargar                                                     |
| `ModuleNotFoundError: soundfile` | `pip install soundfile` — necesario para la exportación de audio WAV                                                                       |
