Versión Actual:
0.1.0| Consulta el historial completo enVERSIONS.md
Este repositorio contiene la arquitectura completa, el código fuente y la documentación técnica de un sistema autónomo e interactivo para la creación de videos verticales en formato 9:16 (1080x1920) ejecutado 100% en local, sin costes de APIs externas ni dependencias en la nube, optimizado específicamente para hardware NVIDIA de última generación (RTX 5080 con aceleración NVENC).
- Visión General y Objetivos
- Especificaciones del Hardware y Entorno
- Arquitectura Secuencial y Gestión de VRAM
- Estructura del Proyecto y Directorios
- Desglose Técnico de las 6 Fases
- Fase 1: Generación de Guion por Escenas (Ollama / Qwen 2.5)
- Fase 2: Síntesis de Voz Neural (Kokoro-82M TTS a 24kHz)
- Fase 3: Transcripción y Subtítulos Dinámicos Hormozi (Whisper STT / ASS)
- Fase 4: Motor de Clips de Video Cinemáticos e IA (Wan 2.2 / ComfyUI / Stock)
- Fase 5: Ensamblaje y Renderizado por Hardware (FFmpeg NVENC)
- Fase 6: Gestión, Metadatos SEO, Publicación y Limpieza
- Mecanismo de Auto-Reinvocación de Entorno Virtual
- Guía de Instalación y Configuración
- Script de Arranque y Modos de Ejecución
- Parámetros de Configuración (
.env) - Control de Versiones y Changelog
El objetivo de este proyecto es automatizar por completo el flujo de creación de contenido audiovisual en formato vertical (YouTube Shorts, Instagram Reels, TikTok) manteniendo el control total del proceso:
- 0% Dependencia de la Nube: Toda la inferencia de lenguaje, síntesis de voz, reconocimiento acústico, generación visual y renderizado se realiza localmente.
- Producciones Completas de 150 a 300 Segundos (2.5 a 5 Minutos): Historias virales con tensión creciente, misterios o noticias y crónicas científicas explicadas en profundidad.
- Entre 15 y 20 Escenas por Video (10 a 15 Segundos por Escena): Cada producción cuenta con entre 15 y 20 escenas visuales independientes, dinámicas y sincronizadas al ritmo de la narración.
- Guiones Estructurados Escena por Escena: Generación de guion modular con desglose narrativo y prompt visual individual para cada escena, garantizando coherencia argumental de inicio a fin.
- Subtítulos Virales Dinámicos: Subtítulos palabra por palabra estilo Alex Hormozi quemados directamente sobre el video con tipografía Impact, borde negro de 5px, resaltado amarillo chillón y animación pop.
- Rendimiento Extremo: Renderizado acelerado por hardware gracias al codificador NVENC de la RTX 5080.
- Limpieza Automática de Temporales: Purga inteligente de archivos intermedios en
temp/al finalizar la producción.
| Componente | Especificación Técnica |
|---|---|
| GPU | NVIDIA GeForce RTX 5080 (16 GB GDDR7 VRAM, núcleos Tensor 5ª gen, arquitectura Blackwell) |
| Drivers GPU | NVIDIA Driver 580.173.02 con soporte para CUDA 13.0 |
| Aceleración Hardware | Codificadores NVENC dedicados: h264_nvenc, hevc_nvenc, av1_nvenc |
| Memoria RAM | 64 GB DDR5 del sistema |
| Sistema Operativo | Linux (Ubuntu 24.04 / 22.04 LTS de 64 bits) |
| Python | Python 3.12.3 en entorno virtual aislado (./venv) |
| FFmpeg | FFmpeg 6.1.1 compilado con --enable-libass y soporte de NVENC |
| LLM Server | Ollama local en http://localhost:11434 con modelo cuantizado qwen2.5:7b |
| Diffusion Server | ComfyUI local en http://127.0.0.1:8188 (Wan 2.2 TI2V-5B Text-to-Video) |
Para garantizar que los 16 GB de VRAM de la RTX 5080 nunca se saturen ni sufran fragmentación de memoria (OOM), el pipeline opera bajo un patrón de ejecución estrictamente secuencial.
graph TD
subgraph FASE 1: LLM
A["Ollama: Qwen 2.5 (7B/14B)"] -->|Genera Guion 15-20 Escenas| B["Descarga Ollama (keep_alive: 0)"]
end
subgraph LIMPIEZA 1
B --> C["gc.collect() + torch.cuda.empty_cache() (0.0 MiB VRAM)"]
end
subgraph FASE 2: TTS
C --> D["Kokoro-82M TTS (CUDA)"]
D -->|Genera Audio 24kHz .wav| E["del pipeline"]
end
subgraph LIMPIEZA 2
E --> F["gc.collect() + torch.cuda.empty_cache() (10.0 MiB VRAM)"]
end
subgraph FASE 3: STT
F --> G["Whisper-Timestamped (CUDA)"]
G -->|Alinea palabras -> Subtítulos ASS| H["del model"]
end
subgraph LIMPIEZA 3
H --> I["gc.collect() + torch.cuda.empty_cache() (10.0 MiB VRAM)"]
end
subgraph FASE 4: VISUAL
I --> J["ComfyUI Wan 2.2 / Stock / Motor Cinemático"]
J -->|Genera 15-20 clips MP4 9:16| K["POST /free en ComfyUI"]
end
subgraph LIMPIEZA 4
K --> L["gc.collect() + torch.cuda.empty_cache() (10.0 MiB VRAM)"]
end
subgraph FASE 5: RENDER
L --> M["FFmpeg con h264_nvenc (NVENC Hardware)"]
M -->|Ensambla Video + Audio + BGM + ASS| N["Exporta Video a ./generated/"]
end
subgraph FASE 6: PUBLICACIÓN & LIMPIEZA
N --> O["Manual Pipeline: Archivo, Metadatos SEO o Drive"]
O --> P["cleanup_temp_directory(): Purga temp/"]
end
/home/sajitario/pipeline_ia/
├── start # Script ejecutable de arranque y monitorización de servicios
├── auto_pipeline.py # Script principal no asistido / modo por lotes
├── manual_pipeline.py # Asistente interactivo guiado paso a paso por consola
├── test.py # Suite de pruebas automatizadas integrales (8 fases)
├── VERSIONS.md # Registro oficial de versiones y especificaciones
├── GUIDE_USE.md # Guía práctica de uso paso a paso
├── GUIDE_FUNCION.md # Guía técnica de arquitectura interna y funcionamiento
├── .env.example # Plantilla de configuración con variables de entorno
├── README.md # Documentación y contexto integral del sistema
├── venv/ # Entorno virtual de Python con todas las dependencias
├── ComfyUI/ # Repositorio y servidor local de ComfyUI (Wan 2.2)
├── assets/ # Recursos y multimedia
│ ├── music/ # Pistas de música de fondo (.mp3, .wav)
│ └── stock/ # Clips de video locales predescargados (.mp4)
├── temp/ # Archivos temporales (purgados automáticamente al terminar)
├── generated/ # Salida de videos finales renderizados (.mp4)
└── published/ # Carpeta de videos aprobados con metadatos SEO (.txt)
- Motor: Ollama con el modelo
qwen2.5:7b(o14b). - Estructura Escena por Escena: El generador divide la historia en 15 a 20 escenas consecutivas. Cada escena contiene:
ESCENA X:NARRACIÓN:Párrafo de 28 a 38 palabras en español conversacional (10 a 15 segundos por escena).VISUAL:Prompt descriptivo en inglés cinematográfico 9:16 para la generación visual de esa escena específica.
- Duración Total: 150 a 300 segundos (~350 a 690 palabras narradas).
- Liberación de Memoria: Llama a
/api/generateconkeep_alive: 0para descargar inmediatamente el LLM de la VRAM tras la inferencia.
- Motor:
hexgrad/Kokoro-82Mejecutado sobre PyTorch CUDA. - Formato: Audio sin compresión en formato
.wava frecuencia de muestreo de 24.000 Hz. - Calibración Dinámica: Ajuste automático de la velocidad de locución (
tts_speed) para alcanzar la duración exacta pedida. - Voces Soportadas:
ef_dora,em_alex,em_santa,af_bella,am_adam.
- Motor:
whisper_timestamped(modelobaseen GPU). - Alineación Temporal: Extrae marcas de tiempo exactas por palabra con
startyenden milisegundos. - Generación de Subtítulos ASS:
- Tipografía: Fuente
Impacten tamaño 75px, con contorno negro de 5px (Outline=5) y sombra suave (Shadow=2). - Efecto Hormozi con resaltado amarillo chillón (
&H0000FFFF) y animación pop.
- Tipografía: Fuente
- Formato: Generación de 15 a 20 clips de video MP4 reales en resolución vertical 9:16 (1080x1920 @ 30 FPS) con duración individual de 10 a 15 segundos.
- Prioridad de Sourcing:
- ComfyUI API (Wan 2.2 TI2V-5B): Workflow nativo de 11 nodos conectado a la API de ComfyUI.
- Clips de Stock Locales: Si existen archivos
.mp4en./assets/stock/. - Motor Cinemático Procedural: Genera arte visual en alta resolución con gradientes y movimiento continuo multicapa (
zoompan, viñeteado, corrección de color).
- Motor: FFmpeg con aceleración NVIDIA NVENC (
h264_nvenc). - Presets de Calidad: Preset
p6, bitrate de8 Mbps, bitrate máximo de12 Mbps, espacio de coloryuv420p. - Filtros Integrados: Quemado directo de subtítulos ASS y atenuación de música de fondo (BGM ducking a
0.12).
- Salida Principal:
./generated/short_YYYYMMDD_HHMMSS_Titulo.mp4. - Módulo de Publicación: Mueve a
./published/y genera_metadata.txtcon título viral, descripción y hasta 12 hashtags optimizados. - Limpieza de Temporales:
cleanup_temp_directory()purga archivos intermedios dejando./temp/limpio.
Inicia y monitoriza en terminales independientes el servicio de Ollama y el servidor de ComfyUI:
cd ~/pipeline_ia
./start# Video de 180 segundos (3 minutos, 15 escenas de 12s cada una):
python auto_pipeline.py --topic "Los misterios sin resolver del triángulo de las Bermudas" --duration 180
# Video de 4 minutos (240 segundos, 18-20 escenas) con voz narrativa:
python auto_pipeline.py --topic "La historia secreta de la carrera espacial" --duration 240 --voice em_santa
# Video con música de fondo y nombre personalizado:
python auto_pipeline.py \
--topic "El descubrimiento del continente perdido de Zelanda" \
--duration 200 \
--bgm "./assets/music/epic.mp3" \
--output "zelandia_documental.mp4"python manual_pipeline.pyEjecuta los 8 tests de integración para comprobar GPU, Ollama, Kokoro TTS, Whisper STT, ComfyUI Wan 2.2, Motor Procedural, FFmpeg NVENC y Limpieza de temporales:
python test.py| Variable | Valor por Defecto | Descripción |
|---|---|---|
TARGET_DURATION_SEC |
180 |
Duración objetivo en segundos (150-300) |
MIN_SCENES |
15 |
Mínimo de escenas requeridas por video (15-20) |
USE_COMFYUI |
true |
Habilitar generación de video IA con Wan 2.2 |
COMFYUI_TIMEOUT |
600 |
Timeout por escena en ComfyUI (segundos) |
CLEAN_TEMP |
true |
Limpieza automática de la carpeta temp/ tras renderizar |
TTS_VOICE |
ef_dora |
Voz de síntesis Kokoro |
VIDEO_CODEC |
h264_nvenc |
Codificador acelerado por GPU |
NVENC_PRESET |
p6 |
Preset de calidad NVENC |
VIDEO_BITRATE |
8M |
Tasa de bits promedio de video |
BGM_VOLUME |
0.12 |
Atenuación de música de fondo |
El registro detallado de versiones se mantiene en VERSIONS.md:
- v0.1.0 (Actual): Soporte completo para Wan 2.2 TI2V-5B, 15-20 escenas (150-300s), guiones estructurados, calibración dinámica de duración, script
startytest.py. - v0.1.1 (Planificada): Arquitectura Image-to-Video (I2V) con contexto global de historia y optimización de framerate.