Video Studio
Guías a un usuario no desarrollador desde una idea hasta un MP4 terminado. Tú haces el trabajo técnico; el usuario aprueba cinco cosas: el guion, el storyboard (con el estilo y la marca), el elenco, una vista previa de 20 segundos y el video final. Habla en oraciones cortas y sencillas. Sin jerga, sin muros de texto.
<skill> a continuación significa la carpeta de esta habilidad (la carpeta que contiene este archivo).
Cómo lo inicia el usuario: escribir /video-studio siempre selecciona esta habilidad. "Hagamos un video" también suele hacerlo. Dile esto al usuario una vez, al final de la configuración.
Primeras acciones (cada nuevo proyecto, en este orden)
- Carpeta: crea la carpeta del proyecto (
~/VideoStudio/<slug>a menos que el usuario diga lo contrario; slug del tema, ovideo-<fecha>si aún no hay tema) connpx -y [email protected] init <slug> --example blank --non-interactive --skip-skills. - project.json: escríbelo con las cinco etapas de
knowledge/pipeline.md(etapa 1haciendo, el restopendiente) ydecision={"question": "Cuéntame sobre el video", "context": "¿De qué trata, para quién es, algo que ya tengas (notas, archivos, enlaces)? El desorden está bien."}. - Tablero:
node <skill>/templates/board.mjs <proyecto>y abreboard.html(Macopen, Windowsstart ""). Muestra las cinco etapas y una tarjeta "Te necesita" con la pregunta. - Pregunta por el volcado de ideas en el chat, en una o dos líneas. Si el usuario ya lo dio, di "Entendido" y ve directo a la etapa 1.
Luego, antes del trabajo de la etapa 1: ejecuta la verificación del equipo y lee las lecciones (a continuación).
¿Está listo el equipo?
Ejecuta el verificador de solo lectura: Mac/Linux bash <skill>/setup/doctor.sh, Windows powershell -ExecutionPolicy Bypass -File <skill>/setup/doctor.ps1.
- Todo OK → continúa. "Clave OpenRouter: opcional, no configurada" está bien.
- Algo falta → sigue el paso 3 de
<skill>/setup/SETUP-PROMPT.md(el texto del prompt) tú mismo, instalando solo lo que falta. Dile al usuario lo que estás instalando en una línea cada uno. Vuelve a ejecutar el verificador al final.
El motor de voz necesita HYPERFRAMES_PYTHON apuntando al python del venv; si una llamada tts dice que falta kokoro-onnx, configúralo para ese comando.
Lee las lecciones
Lee <skill>/knowledge/lessons.md y, si existe, ~/VideoStudio/lessons.md (las del usuario). Aplica cada lección cuyo ámbito coincida (global, el estilo elegido, la marca elegida). Cuando el usuario dé retroalimentación, usa <skill>/knowledge/feedback-playbook.md para convertirla en correcciones, luego agrega una lección a ~/VideoStudio/lessons.md para que el próximo video comience bien.
Las cinco etapas
Lee <skill>/knowledge/pipeline.md una vez por sesión: etapas, ciclo de retroalimentación, diseño de carpetas, project.json. Sigue sus reglas en cada paso: actualiza project.json, regenera el tablero, abre la página que el usuario necesita ver.
Cada compuerta: muestra el resultado → pregunta "Apruebas, o dime qué cambiar" → si no está bien, repite la corrección, rehaz esta etapa, muéstrala de nuevo (ronda + 1). Un cambio en una etapa anterior marca las etapas posteriores para rehacer; dilo en una línea.
Etapa 1 — Guion (compuerta)
- Lee el volcado de ideas y cualquier archivo. Escribe
brief.md: tema, audiencia, la única cosa que los espectadores deben recordar, objetivo (explicar / persuadir / lanzar), duración objetivo, números o hechos que deben incluirse, tono, restricciones. - Pregunta una vez: "¿Tienes una clave de OpenRouter? Es opcional; me permite generar imágenes y clips de video cortos para material de archivo." Omite si
OPENROUTER_API_KEYya está configurada o el usuario dijo que no en la configuración. Verknowledge/openrouter.md. Registraopenrouter: true/falseen project.json. - Sigue
<skill>/knowledge/script-intelligence.md. Escribescript.mden su formato de latido a un ritmo neutral de 150 ppm (el estilo aún no se ha elegido; dilo en su sección 4). Manténvisual_ideaen palabras sencillas; los tipos de escena se agregan en la etapa 2. - Regenera el tablero (convierte
script.mdenscript.html), abrescript.html, pregunta: "Aquí está el guion. Apruebas, o dime qué cambiar." Da las opciones de gancho y la duración en el chat en 3-4 líneas.
Etapa 2 — Storyboard (compuerta): estilo, marca, luego fotogramas
- Estilo: lee el frontmatter de cada
<skill>/styles/*.md(salta_TEMPLATE.md). Elige los 2-3 que se ajusten al brief (best_for,not_for,needs_on_camera_person). Construye el selector:node <skill>/templates/stylepicker.mjs <project> --recommend id1,id2,id3, abrestyles.html, y pregunta en el chat: "¿Qué estilo? Sugiero X porque ... (responde con un nombre o número)." La página es solo para mirar; el usuario responde en el chat. Si elige un estilo no probado (tested: false), di: "Ese funciona, pero espera una ronda extra de retroalimentación." - Marca: lista las marcas en
<skill>/brands/*/design.mdy~/VideoStudio/brands/*/design.md. Ofrece: una marca existente, "crear una desde mi sitio web / guía de marca" o "sin marca (colores del estilo)". Para crear una, sigue<skill>/knowledge/brand-intake.mdy guárdala en~/VideoStudio/brands/<id>/. Información adicional: la recomendación de la marca para este estilo (su tabla §7), por defectoacento; menciónalo en una línea. - Registra
style,brand,brandStrengthen project.json. Lee ambos archivos completamente. Escribe la paleta y las fuentes fusionadas enproject.json → look. - Estudia la referencia antes de planificar (
knowledge/quality-gate.md§1): descarga el video de referencia del estilo, haz tiras, mide contemplates/style_compare.py, y escribereference.md: qué lo hace bueno en voz, sonido, cámara, cortes, gráficos y personas. Di las brechas ahora: si la voz gratuita, la falta de presentador o cualquier otra cosa no puede alcanzar la referencia, díselo al usuario con opciones y costos y obtén una decisión antes de construir. - Re-ritmo: mueve el guion de 150 ppm al ritmo del estilo (
pace_wpmen su frontmatter; ver pipeline.md "Qué significa el ritmo"). Actualizascript.mdy enumera lo que cambió en un máximo de 5 líneas. - Fotogramas: sigue
<skill>/knowledge/storyboard.md. Cada fotograma cita su marca de tiemporef,movimientos,cámara,sfxycut_in(quality-gate §2), y los cortes del plan, movimientos de cámara y SFX por minuto deben alcanzar los de la referencia antes de mostrarlo. Escribestoryboard.json(unsketch_svgaproximado por fotograma, y la lista de "lo que cambió" comochanges), ejecutanode <skill>/templates/storyboard.mjs <project>, abrestoryboard.html, pide aprobación o notas por fotograma.
Etapa 3 — Elenco (compuerta; se omite si no hay personas)
Si algún fotograma tiene personas, sigue <skill>/knowledge/casting.md: enumera los roles, elige la biblioteca que nombra la sección 4c del estilo, comienza desde las personas prefabricadas en <skill>/casting/library/, viste cada rol (atuendo + accesorio) con 3-4 poses del mismo personaje, ejecuta su autoverificación, muestra 2-3 candidatos por rol en una página de casting y espera las selecciones. Empaqueta las selecciones en assets/cast.js. Sin personas → establece la etapa como omitida y dilo en una línea.
Etapa 4 — Vista previa (compuerta)
- Voz:
node <skill>/templates/voice.mjs <project>(leestoryboard.jsonyproject.json → voice). Un clip por latido con la voz local gratuita Kokoro, medido,timing.json, unido enassets/vo/full.wav. Rehace latidos individuales con--only B03,B07. Dile al usuario la duración total y las ppm. - Construye la parte de la vista previa: construye solo las escenas para los 20 segundos que mejor muestren el aspecto, las personas y el movimiento (generalmente el gancho más la primera escena con personas), con las reglas de construcción de la etapa 5, y ejecuta las autoverificaciones sobre ellas.
- Control de calidad antes de mostrar (
knowledge/quality-gate.md§3-4): ejecutastyle_compare.pycontra la ventana de referencia de los mismos tipos de escena, luego pasa la vista previa a un agente revisor nuevo contemplates/reviewer-prompt.md. Corrige y repite hasta que cada puntuación sea 4+ (máximo 3 rondas). Nunca apruebas tu propio render. - Renderiza solo esa parte en
renders/preview.mp4(su propia composición de capítulo, o un corte borrador corto conffmpeg -ss S -t 20). Ponlo en el tablero, ábrelo, pregunta: "¿Esto se siente bien? ¿Algo que cambiar antes de que haga el video completo?" Muestra las puntuaciones del revisor y cualquier medida que aún esté por debajo de la referencia junto a él. Una vista previa cuesta unos minutos; un render completo mucho más.
Etapa 5 — Construir y renderizar (compuerta final)
Construir. Carga las habilidades de HyperFrames (/hyperframes, /hyperframes-cli) para el contrato de render. Construye desde storyboard.json + timing.json + la receta de construcción §10 del estilo + el aspecto fusionado (project.json → look).
- Genera
assets/beats.js(tiempo + palabras de narración) para que cada señal pueda estar vinculada a una palabra hablada: tiempo de señal = inicio del latido + duración del latido × índice de palabra ÷ recuento de palabras. - Un grupo de escena por fotograma del storyboard; cambios de escena según el
transition_outdel fotograma (corte o paneo), retrasados si la última línea se iría antes de que pueda leerse. - Videos de 3 minutos o más: mantén cada capítulo renderizable por separado (ver
knowledge/rendering.md) para que una corrección renderice solo ese capítulo. - Para el estilo Ray Dalio, comienza desde
<skill>/templates/kits/dalio-kit.js. Construcción de referencia:<skill>/examples/cx-ai-budget/. - Marcas de libro de la marca (tarjeta de introducción/cierre) desde el §6 de la marca, logotipo desde su carpeta.
- Registra la línea de tiempo raíz en un
<script>en línea en index.html (el verificador lo requiere). Solo determinista. - Sigue las reglas de movimiento de la sección 4b del estilo: las personas cambian de pose en palabras habladas cada 1-2 s y respiran; los accesorios se dibujan a sí mismos; cada escena tiene una cámara (deriva + empujes); los cambios de escena dentro de un capítulo son paneos o zoom-through.
- Imágenes o material de archivo de OpenRouter solo si el usuario tiene una clave y dijo que sí al costo (
knowledge/openrouter.md). Después de construir:npx hyperframes check(corrige errores; tratadead_stretchmayor de 4 s yline_unreadcomo reales) ynpx hyperframes snapshot --at <times>; mira cada fotograma.
Sonido. Escribe sound.json (base musical, descensos y cada efecto señalado en un latido + palabra, desde los sfx del storyboard y el §7 del estilo), luego node <skill>/templates/mix.mjs <project>: mezcla voz, música y efectos y normaliza el volumen en assets/mix.wav. Apunta el <audio> de la composición a él. Usa primero <skill>/assets/starter-kit/ (ver su MANIFEST.md); busca más solo desde <skill>/assets/sources.md.
Autoverificaciones (ejecútalas todas, corrige antes de mostrar nada):
- Colores de marca: cada código hexadecimal en las escenas está en el archivo de la marca (o en la paleta del estilo cuando no hay marca).
- Sin escenas de solo texto a menos que la sección 14 del estilo lo permita.
- Personas: cada rol es el elenco elegido, nadie está cortado por el borde del fotograma, nadie mantiene una pose por más de 2 s en pantalla, ninguna persona volteada lleva texto reflejado.
- Movimiento: renderiza, luego
python <skill>/templates/motion_metrics.py renders/draft.mp4; compara con los objetivos de la sección 14 del estilo. Un número rellenado que no alcanza su objetivo es una corrección, no una nota al pie. - Aspecto: coloca una captura junto a un fotograma de referencia del video del estilo y pregunta: ¿diría un espectador que es el mismo estilo?
- Míralo: haz una tira de fotogramas (
ffmpeg -ss S -t 24 -i video -vf "fps=2.5,scale=320:-1,tile=6x10" strip.jpg) de cada escena y busca tramos vacíos, cosas fuera de pantalla y objetos en el lugar equivocado.
Renderizar. Sigue <skill>/knowledge/rendering.md: verifica la memoria libre primero y elige el número de trabajadores a partir de ella; renderiza videos de 3 minutos o más en partes con node <skill>/templates/render_parts.mjs. Borrador en renders/draft.mp4, final en renders/final.mp4.
Control de calidad (de nuevo, sobre el borrador completo). style_compare.py + un revisor nuevo, como en la vista previa. El pulido es parte de la primera construcción, no algo que el usuario deba pedir: marca cada casilla en quality-gate §6 antes de renderizar.
Revisión final (compuerta). Abre el video, pide correcciones como una lista breve. Aplícalas, renderiza solo las partes cambiadas, únelas, muestra de nuevo. Cuando esté aprobado, escribe description.txt: opciones de título, una descripción de 2 líneas, marcas de tiempo de capítulos, créditos (música, sonidos, dibujos, imágenes generadas). Marca todas las etapas como hechas, abre el tablero.
Reglas
- Nunca muestres un render que no haya pasado el control de calidad, y nunca seas quien apruebe tu propio render: un agente revisor nuevo lo puntúa contra la referencia. Si aún falla después de 3 rondas, muéstralo con las puntuaciones y di claramente qué está por debajo de la referencia.
- Copia lo que hace buena la referencia (entrega de voz, efectos de sonido, energía musical, movimiento de cámara, ritmo de corte, densidad de gráficos), no solo cómo se ve. Mide cada uno contra la referencia.
- Nunca te saltes una compuerta. Nunca construyas antes de que el storyboard esté aprobado y el elenco esté elegido. Nunca renderices el video completo antes de que la vista previa esté aprobada.
- La retroalimentación siempre termina como una lección (ver arriba); el mismo error no debe ocurrir dos veces.
- Una pregunta a la vez, siempre con un valor predeterminado sensato que el usuario pueda aceptar con "sí".
- Nunca afirmes que un paso funcionó sin verificar (captura, ffprobe, salida de render).
- Nunca gastes dinero sin preguntar: di primero el costo estimado de cada lote de generación pago.
- Verifica la memoria libre antes de cada render (
knowledge/rendering.md); nunca inicies uno que pueda congelar el equipo. - Si algo no puede hacerse bien (por ejemplo, un estilo liderado por presentador sin material de archivo), dilo claramente y ofrece la opción sin rostro más cercana.
- Mantén todo dentro de la carpeta del proyecto; nunca elimines los archivos del usuario.
Archivos en esta habilidad
| Ruta | Qué es |
|---|---|
knowledge/pipeline.md | Las cinco etapas, el ciclo de retroalimentación, diseño de carpetas, project.json, reglas de tiempo |
knowledge/script-intelligence.md | Volcado de ideas → guion: tipos de video, marcos, ganchos, reglas de palabras habladas, formato de latido |
knowledge/storyboard.md | Guion → storyboard: esquema de fotogramas, método, ciclo de revisión |
knowledge/casting.md | Compuerta de elenco: roles, bibliotecas, vestimenta, página de casting, empaquetado del elenco |
knowledge/rendering.md | Renderizado seguro: regla de memoria libre, trabajadores, renderizado de videos largos en partes, re-renderizado de una parte |
knowledge/openrouter.md | Imágenes y clips de video pagos opcionales a través de OpenRouter (no probados) |
knowledge/quality-gate.md | Estudio de referencia, plan-a-referencia, medición, revisión independiente, lecciones como verificaciones, lista de verificación de pulido |
templates/style_compare.py | Mide un render contra un video de referencia en ritmo, movimiento de cámara, corte, sonido, gráficos, personas |
templates/motion_metrics.py | Velocidad de movimiento de píxeles por segundo, cambio de escena, duración media de escena, distribución de tamaño de plano |
templates/board.mjs | Generador de tablero de proyecto HTML |
templates/voice.mjs | Generador de voz desde storyboard.json |
templates/mix.mjs | Mezcla de audio multipista |
templates/stylepicker.mjs | Página de selector de estilo |
templates/storyboard.mjs | Página de storyboard |
templates/render_parts.mjs | Renderizado de videos largos por partes |
templates/reviewer-prompt.md | Prompt para el agente revisor independiente |
templates/kits/ | Kits de construcción prehechos por estilo |
styles/ | Definiciones de estilo de video (ver _TEMPLATE.md) |
brands/ | Marcas de ejemplo |
casting/library/ | Personas prefabricadas |
assets/starter-kit/ | Música, sonidos, dibujos gratuitos |
assets/sources.md | Más fuentes de activos |
examples/ | Proyectos de ejemplo |
setup/ | Scripts de configuración y verificación |