¿Qué hace Premium Video Skill — v3.3 (Anchor Grid + Sound)?
==================================================
Una habilidad de orquestación para agentes senior que convierte un guion de voz en un video corto premium de HyperFrames con:
- Cuadrícula de anclaje (kicker → hero → body → chip → presentador, fijada en la parte inferior)
- Tipografía cinética (animación escalonada palabra por palabra)
- Animaciones SVG (diagramas técnicos con elementos en movimiento)
- Tarjetas de evidencia con efecto glassmorphism + tercios inferiores + pantallas finales
- Transiciones con motion blur
- Sistema de sonido completo (síntesis de SFX, hoja de señales, mezcla de audio)
- Validación de contrato de diseño (gate prepare.py)
- Pipeline reproducible (scenes.sh → prepare.py → build_index.py)
Pipeline (el orden no es negociable)
guion de voz
│
▼
generate.py → new_scene.py → prepare.py → build_index.py
(analizar) (archivos de escena) (validar) (HTML raíz + transiciones)
│ │
▼ ▼
npx hyperframes lint → npx hyperframes render
(gate 0 errores) (salida MP4)
│
▼
python3 scripts/gen_sfx.py # sintetizar SFX (una vez)
python3 scripts/mix_audio.py # VO + señales + base → master.wav
ffmpeg mux → final.mp4
Paso a paso
# 1. Generar composiciones de escena + HTML raíz desde el guion de voz
python3 generate.py --script my_script.txt --topic Tor --output index.html
# 2. Gate de validación (contraste, tipo, zona segura, ritmo de campo)
python3 scripts/prepare.py
# 3. Lint (debe tener 0 errores)
npx hyperframes lint
# 4. Vista previa y renderizado
npx hyperframes preview
npx hyperframes render
# 5. Pipeline de audio
python3 scripts/gen_sfx.py # sintetizar 14 SFX desde cero
python3 scripts/mix_audio.py # VO + señales + base → master.wav
ffmpeg -i rendered.mp4 -i renders/master.wav \
-c:v copy -c:a aac -shortest final.mp4
Cuadrícula de Anclaje (fijada en la parte inferior, invariante)
Cada escena usa la misma mitad inferior — solo la mitad superior se recompone:
| Ancla | Elemento | Posición | Animación |
|---|---|---|---|
| 1 | Kicker | Superior izquierda | Deslizar hacia arriba desde y:-26, fundido 0.32s |
| 2 | Hero | Banda superior (1–3 palabras) | Escala 1.3→1, deriva 44px→0, deriva lenta hacia arriba |
| 3 | Cuerpo | Tarjeta / odómetro / líneas | Deslizar hacia arriba 56px→0, escala 0.95→1 |
| 4 | Chip | Área inferior (3–6 palabras) | Deslizar hacia arriba 30px→0, fundido 0.26s |
| 5 | Presentador | Inferior derecha, recortado por el marco | Escala 0.92→1, y:46→0, fundido 0.34s |
El fotograma 0 es un póster — la escena 1 (data-cover="1") se abre completamente compuesta.
Ciclo de Seis Colores de Fondo
Dos escenas vecinas nunca comparten un campo de fondo:
acento → fondo → tinta → secundario → terciario → cuaternario
prepare.py falla la compilación si dos escenas consecutivas comparten un campo.
Todos los pares texto/fondo cumplen con WCAG ≥ 4.5:1 de contraste.
Sistema de Sonido
Síntesis de SFX (sin descargas, sin licencias)
python3 scripts/gen_sfx.py crea 14 efectos de sonido:
| SFX | Uso |
|---|---|
pop.wav | Cada corte de escena |
click.wav / key.wav | Elementos UI, marcado de lista |
chime.wav | Revelación / puntuación |
ping.wav | Notificación |
notify.wav | Llamada a la acción (CTA) |
riser.wav | Grandes giros antes del corte |
impact.wav | Impacto visual fuerte |
whoosh.wav | Movimiento rápido |
error.wav | Error / rechazado |
Hoja de Señales — assets/sfx/cues.json
Desplazamientos relativos a la sección (soportan regrabaciones de VO):
{ "at": "scenes", "file": "pop.wav", "gain": 0.5 }
{ "at": "vo2-0.30", "file": "riser.wav", "gain": 0.3 }
{ "at": "vo9+0.55", "file": "notify.wav", "gain": 0.4 }
Mezcla de Audio — scripts/mix_audio.py
- VO + señales SFX + base musical →
renders/master.wav - Mide la sonoridad con
ebur128, corrige a -14 LUFS - Pico verdadero ≤ -1 dBTP
alimiterconlevel=false(evita la trampa del auto-nivel)- Base al 0.15 de volumen → -29 LUFS (~13 LU por debajo de -16 LUFS de VO)
- Sin compresión por sidechain — la diferencia de nivel es la compresión
Temas Técnicos (animación automática + evidencia)
Cuando el guion contiene una palabra clave reconocida, el orquestador inserta:
| Componente | Tratamiento |
|---|---|
| Diagrama SVG | Flujo nodo-enlace con elemento en movimiento + animateMotion |
| Superposición de evidencia | Tarjeta glassmorphism con insignias de fuente |
| Transición | Motion blur antes de la animación |
| Señal de audio | SFX "whoosh" al inicio de la animación |
Reconocidas: tor, onion, vpn, proxy, isp, relay, network, packet, encryption, cybersecurity, dns, cdn, blockchain, ai, machine learning, y más.
Formatos de Guion de Entrada
Texto plano (auto-temporizado ~145 ppm)
¿El mismo currículum en todas partes? Por eso te rechazan.
Adáptalo por empresa.
Lee la **descripción del puesto**.
Un currículum no sirve para todas las empresas. Personaliza y consigue ser preseleccionado.
Segmentos con marcas de tiempo
[0-4s] ¿El mismo currículum en todas partes? Por eso te rechazan.
[4-10s] Adáptalo por empresa.
[10-14s] Lee la **descripción del puesto**.
Énfasis: **palabra** → alineado a la derecha, color de marca, peso 950, animación pop.
Archivos
| Archivo | Propósito |
|---|---|
generate.py | Punto de entrada CLI |
orchestrator.py | Pipeline: analizar → detectar → descomponer → generar escenas → construir raíz |
design_system.py | Tokens de diseño, reglas de alineación, validación |
PARAMS.json | El ÚNICO archivo de diseño que editas |
scripts/prepare.py | Gate de validación + inyección de tokens |
scripts/new_scene.py | Generador de composiciones de escena con cuadrícula de anclaje |
scripts/build_index.py | HTML raíz con temporización contigua + transiciones adaptativas |
scripts/gen_sfx.py | Síntesis de SFX desde cero |
scripts/mix_audio.py | VO + señales + base → master.wav |
assets/sfx/cues.json | Hoja de señales relativa a la sección |
scenes.sh | Plantilla de lista de escenas reproducible |
compositions/_scene-base.html.tmpl | Esqueleto de cuadrícula de anclaje |
compositions/wipe.html | Transición con motion blur |
skill.md · skill.json | Documentación + esquema |
Requisitos
- Python 3 (biblioteca estándar)
- HyperFrames CLI:
npx hyperframes init / preview / render / lint - Node.js ≥ 22, FFmpeg
- ffprobe (para medición de audio)
Licencia
MIT — constrúyelo, compártelo, vende videos con él.