Communitygithub.com

Video Reel Studio

Orquestador que convierte una frase en un video vertical completo: redacta el briefing, elige el modo (talking reel, montaje, podcast, motion film, demo web/app, solo portada), ejecuta el pipeline de principio a fin, delega auditorías en árabe y visuales con contexto fresco, y no entrega mientras una compuerta automatizada falle.

¿Qué es Video Reel Studio?

Video Reel Studio es un orquestador avanzado para agentes de IA que transforma una única frase del usuario en un video vertical publicable. Actúa como supervisor sobre cinco skills especializados (video-ad-editor, montage-video, podcast-video, motion-video y thumbnail-video), gestionando cada etapa del pipeline: desde la redacción del brief y la detección del modo de video (talking reel, montaje, podcast, motion, demo web o portada), hasta la generación de captions, miniaturas, verificación de calidad y cumplimiento de gates automatizadas. Está diseñado para ejecutarse en Windows y macOS, adaptando comandos y rutas automáticamente. Su valor radica en que elimina la necesidad de intervención manual en tareas técnicas repetitivas: el agente decide el estilo visual basado en un pack de estilos, audita el contenido en árabe, verifica loudness, picos verdaderos, zona segura, y no entrega el producto final hasta que todas las compuertas de calidad estén aprobadas. Además, incluye un onboarding opcional de identidad de marca (colores, tipografía, tono) que se guarda para proyectos futuros.

Compatible con✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/MostaDaoud/video-reel-studio/tree/HEAD/skill/video-reel-studio

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Video Reel Studio — Un supervisor, compuertas estrictas

Este skill no dibuja ni edita por sí mismo. Es un supervisor sobre cinco skills existentes:

SkillEl supervisor lo usa para
video-ad-editorTodos los scripts (scripts/), reel con habla, captions, portada
montage-videoMontaje de clips sin habla al ritmo
podcast-videoDos cámaras → reels o episodio 16:9
motion-videoPelícula animada desde texto (motor motion/)
thumbnail-videoPortada del reel y thumbnail de YouTube

Raíz de los scripts: .opencode/skills/video-ad-editor/ — pasa rutas completas.

Plataformas: Windows y Mac

El skill está escrito para funcionar en ambas. La diferencia está toda en cómo invocar las herramientas, no en la lógica:

WindowsMac
Pythonpythonpython3
Scripts .sh& "C:\Program Files\Git\bin\bash.exe" … (⛔ No bash normal = WSL)bash …
ChromeC:\Program Files\Google\Chrome\Application\chrome.exe/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
3DGL=gpu (ANGLE/D3D11)Metal automático
RutasD:/work/x o D:\work\x/Users/you/work/x

Antes de cualquier trabajo, una vez por sesión:

python scripts/preflight.py        # Mac: python3

Verifica: Python, ffmpeg/ffprobe, node, bash, Chrome, numpy/scipy, los skills hermanos, la fuente, y la carpeta de identidades — y muestra el comando de instalación correcto para cada sistema (winget en Windows, brew en Mac). La compuerta G-2.

Los scripts mismos detectan la plataforma automáticamente: _vision.py elige herramientas de Apple en Mac y alternativas abiertas en Windows, y _chrome_flags.js elige Metal en Mac y SwiftShader en otros, y 31_device3d.js y motion/render.js buscan Chrome en ambas rutas del sistema.

El trato: una frase → archivo listo

El usuario te da un archivo o enlace y una frase. Tú manejas todos los pasos. No le des comandos, ni preguntes sobre nada que puedas revisar tú mismo. Pregunta solo una pregunta cuando la decisión sea de gusto, no técnica (qué ángulo, qué hook, qué frase quitar).

Comandos egipcios — si dice esto, ese es el modo

Si diceModo
«منتج الفيديو ده» · «حوّله لريل» · «اقصّ السكتات» · «هات الكابشن»talking-reel
«اعمل مونتاج من المقاطع دي» · «ركّبهم على الأغنية»montage
«اعمل ريلات من الحلقة» · «عندي كاميرتين» · «الحلقة كاملة»podcast
«اعمل فيديو موشن من النص ده» · «اشرح بالحركة» · «موشن جرافيكس»motion
«اشرح الموقع ده بفيديو» · «ديمو للتطبيق» · «اللينك ده»web-demo
«اعمل كوفر» · «ثمبنيل يوتيوب» · «صورة مصغرة»cover-only
«عايز أعدّل بنفسي» · «اعمله كاب كت» · «افتح الاستوديو»Modo base + CapCut/Estudio

No es necesario que mencione el modo. Si la frase contiene verbo + archivo, tú infieres el modo de esta tabla y continúas.

La línea rápida

#FaseSalidaCompuerta
-2Revisión del entorno: preflight.py (Windows/Mac)Informe de herramientasG-2
-1Identidad (opcional): Pregunta primero — guardada / nueva / por defectotheme.json + brand.mdG-1
0Lee la solicitud y escribe brief.jsonpromise + mode + lengthG0
1Fuente: copiar, revisar frames, iluminaciónsrc.movG1
2Corte + transcripción + corrección + captionscut.json a.json caps.jsonG2 · G3 · G3b
3Diseño: movimientos, escenas, previsualizaciónscenes*.js + sheet.jpgG4b
4Renderizado completoout/ = duración × 30G4
5Codificación + máster + traducciónad-master.mp4 .srtG5
6Portada + thumbnail + previsualización móvilcover.jpg …G6 · G6b
7Informe de entregagates.mdG8

Detalles y comandos exactos ← references/pipeline.md. Roles y cuándo delegar a un agente ← references/roles.md. Cada condición de compuerta y sus límites ← references/gates.md. Dirección artística: Antes de la primera escena, elige un estilo de styles/pack.json (10) — python scripts/style_pack.py apply "<work>" <id> — el estilo rige el movimiento y la textura, la marca rige el color ← references/styles-adapted.md.

-1a) El agente y el modelo — antes de la identidad

ai.json se escribe antes que nada: el agente se conoce del entorno (tú trabajas dentro de él), así que no preguntes por él. Pregunta solo una pregunta si el modelo no está claro:

«¿En qué modelo vas a trabajar? Solo el nombre — para ajustar el tamaño de las escenas y la revisión sobre él.»

RespuestaEfecto inmediato
Modelo potente + vision6–8 escenas, momentos de profundidad, revisión visual con agente secundario
Potente sin vision4–6 escenas, revisión solo numérica + ojo del usuario en sheet.jpg
Rápido/barato3–5 escenas de patrones fijos, una previsualización, cada compuerta una vez
Contexto pequeñoDivide la transcripción en ventanas, no leas todo el texto
  • El agente: opencode · claude-code · codex · cursor · gemini-cli — y preflight.py compara la etiqueta del proyecto con ai.json.
  • Si las capacidades no se conocen, déjalas null → el skill tomará precauciones (números + ojo).
  • Detalles y matriz completa ← references/ai-fit.md.

-1b) Identidad — onboarding opcional (no lo fuerces)

En la primera solicitud de video, antes de cualquier script, haz solo una pregunta:

«Antes de empezar: ¿preparamos tu identidad una vez (5 minutos: colores, tipografía, tono, prohibiciones), o usamos una identidad guardada, o seguimos con la predeterminada y la cambiamos después?»

Su respuestaQué haces
«Hay una identidad guardada»python scripts/onboard.py list ← menciona el nombre ← apply <work> <slug>
«Prepárala»Las siete preguntas ← new ← card ← muestra la tarjeta ← apply
«Sigue con la predeterminada»No preguntes de nuevo en el mismo proyecto; la predeterminada: #0B0C0C · #F4F2EE · #19C3AE · Cairo · chunk
«Estoy ocupado»Empieza el video y ofrece la identidad después de la primera entrega
  • Las siete preguntas (nombre, handle, audiencia, tono, llamado, colores, prohibiciones) ← references/onboarding.md.
  • ¿Tiene imágenes/logos? Extrae la paleta con scripts/00_theme_refs.py en lugar de adivinar.
  • G-1: Contraste ink/bg ≥ 4.5, acc/bg ≥ 3, onAcc/acc ≥ 4.5. onboard.py new rechaza guardar si falla.
  • La identidad se guarda en ~/.config/opencode/brands/<slug>.json y se usa en todos los proyectos posteriores.

⛔ Prohibido iniciar el onboarding sin preguntar, o detener el proyecto por los colores, o hacer más de 7 preguntas.

G0 — El brief (no lo saltes)

Escribe <work>/brief.json antes de cualquier script. La plantilla: assets/brief.template.json.

  • promise = lo que el espectador entiende en los primeros 3 segundos. Una frase. Si no puedes escribirla, entonces no entendiste la solicitud.
  • mode de los seis. Si la solicitud admite dos modos, elige el más cercano a la intención del usuario y dile en una frase lo que entendiste.
  • length_s = rango realista (reel 45–90 s; videos largos → varios reels, no un solo reel).
  • must_keep = nombres y números que no pueden eliminarse ni transformarse.

Compuerta G0: ¿Están los tres presentes? Si no, una pregunta y luego continúa.

Liderazgo: quién decide

Tú eres quien dirige. No esperes permiso en cada paso, ni delegues el trabajo a un agente que te maneje a ti.

  • Revisa por ti mismo todo lo técnico: duración, frames, audio, tamaño, zona segura.
  • Delega el juicio solo cuando sea mejor con memoria limpia: revisión del árabe y revisión de imágenes.
  • El agente lee y juzga solo — no escribe ni dibuja. La plantilla del prompt está en references/roles.md.

Las compuertas: fail-closed

python scripts/gate_runner.py "<work>" --safe
  • Imprime una tabla, escribe gates.json + gates.md, y sale con 1 si hay un blocker.
  • No hay entrega con ningún blocker abierto. Y no hay "probemos y veamos".
  • Presupuesto de dos intentos por compuerta. El tercero = la causa no se entiende ← detente y pregunta al usuario con evidencia (captura + texto de la compuerta).
  • Prohibido desactivar una compuerta o subir --maxmb o ignorar un warn "porque es pequeño". Eso es falsificación.

Las reglas estrictas

  1. Los captions son copia fiel de su habla — no inventes, ni elimines una palabra sin razón, y la corrección mantiene el número de palabras.
  2. La zona segura primero — sin texto en y 0–150 ni y 1620–1920, ni en la columna de botones de la derecha.
  3. Los colores solo de theme.json; cero ajuste de color en su imagen sin su aprobación.
  4. Cada número en pantalla proviene de facts.md o de su habla — ningún número inventado por ti.
  5. No hay publicación ni programación. La entrega son archivos.
  6. La portada es obligatoria — primer frame, y legible en tamaño móvil (cover_phone.jpg).
  7. El tamaño y el volumen son parte de la calidad: ≤29 MB, −14 LUFS, pico ≤ −1.0 dBTP.

Modos de operación

  • Reel con habla (predeterminado): talking-reel — el video completo ocupa toda la pantalla, y los gráficos van en la zona superior o detrás.
  • Clips sin habla: montage — necesita 10–20 clips + pista de audio. No reutiliza la toma.
  • Podcast: podcast — dos cámaras. El hook escrito es obligatorio.
  • Motion film: motion — sin voz en off por defecto (audio.py --no-bed --lufs -20). 3D necesita GL=gpu.
  • Sitio web/aplicación: web-demo — 27_web_capture.js luego 30_demo.js (o 31_device3d.js).
  • Solo portada: cover-only.

Informe de entrega

Dos líneas, luego una tabla corta:

Duración · Cortes · Tamaño · Volumen · Pico
Compuertas 7/7 ✅ (o warn aceptable + su motivo)
Archivos: mp4 · srt · txt · cover.jpg
No se ha publicado nada.

Economía de tokens

  • Un comando por fase, no 41 comandos separados.
  • Una hoja de tomas (sheet.jpg) en lugar de 6 imágenes.
  • No leas el archivo completo: grep -n para la función, tail -5 para el registro.
  • Las referencias solo cuando se necesiten — este archivo + una referencia adecuada para la fase.
  • No muestres una imagen excepto para una pregunta visual que no tenga otra forma de responderse.

Fallos esperados (no te sorprendas)

SíntomasCausaSolución
UnicodeEncodeErrorEscribir sin utf-8 en WindowsEjecuta PYTHONUTF8=1 (los scripts están corregidos, pero no confíes)
3D se cuelgaRuta de Chrome/ruta /workCHROME correcto + GL=gpu (corregido en 31_device3d)
Captions atrasados/cortadosEl corte cambió después de los captionsVuelve a ejecutar 02_captions.py y luego G3
Pico alto después de la compresiónAAC eleva el picoalimiter en la ruta de la portada o 06c_loudfix.sh
La transcripción alucinaÁrabe dialectal/término en inglés02a_whisper_check.py --fix y luego corrige con número de palabras fijo

Skills relacionados