Communitygithub.com

MostaDaoud/video-reel-studio

Orchestrateur qui transforme une phrase en une vidéo verticale terminée : rédige le brief, choisit le mode (talking reel, montage, podcast, motion film, web/app demo, cover only), exécute le pipeline vidéo-publicitaire de bout en bout, délègue les audits visuels et de légendes en arabe à un contexte frais, et refuse la livraison tant qu'une barrière automatisée échoue (source, cut, légendes, images, loudness, true peak, safe zone, package). Utilisez lorsque l'utilisateur dit «منتج الفيديو ده», «حوّله لريل», «اعمله كاب كت», «اعمل كوفر», «ثمبني

Qu'est-ce que video-reel-studio ?

Video Reel Studio est un orchestrateur d'IA conçu pour automatiser la création de vidéos verticales (reels, couvertures, podcasts, etc.) à partir d'une simple phrase ou d'un fichier. Contrairement à un outil de montage direct, ce skill agit comme un superviseur de cinq autres skills spécialisés (comme `video-ad-editor`, `montage-video`, etc.) et exécute un pipeline strict en huit étapes, de la vérification de l'environnement (`preflight.py`) à la livraison finale. Il prend en charge Windows et macOS avec des chemins et commandes adaptés automatiquement. Les fonctionnalités clés incluent un système de "gates" (barrières de qualité automatisées) qui bloque la livraison si des vérifications échouent (source, coupe, légendes, images, loudness, pic vrai, zone de sécurité, paquet). L'utilisateur peut également configurer son identité de marque (couleurs, police, ton) en option via un onboarding rapide de 7 questions. Le mode de la vidéo est déduit de la commande de l'utilisateur (ex: «حوّله لريل» → mode `talking-reel`, «اعمل كوفر» → `cover-only`). Le pipeline gère tout, du brief initial à l'audit visuel, avec un accent sur les légendes arabes fidèles à la parole et des formats optimisés pour mobile (fichiers ≤29 Mo, -14 LUFS, pic ≤ -1.0 dBTP).

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Video Reel Studio — Un seul superviseur, des portes strictes

Ce skill ne dessine pas et ne monte pas lui-même. C'est un superviseur au-dessus de cinq skills existants :

SkillUtilisé par le superviseur pour
video-ad-editorTous les scripts (scripts/), reel de parole, légende, couverture
montage-videoMontage de clips sans parole sur le rythme
podcast-videoDeux caméras → reels ou épisode 16:9
motion-videoFilm d'animation à partir d'un texte (moteur motion/)
thumbnail-videoCouverture du reel et miniature YouTube

Racine des scripts : .opencode/skills/video-ad-editor/ — passez des chemins complets.

Plateformes : Windows et macOS

Le skill est écrit pour fonctionner sur les deux. Toute la différence réside dans comment appeler les outils, pas dans la logique :

WindowsmacOS
Pythonpythonpython3
Scripts .sh& "C:\Program Files\Git\bin\bash.exe" … (⛔ pas 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 automatique
CheminsD:/work/x ou D:\work\x/Users/you/work/x

Avant tout travail, une fois par session :

python scripts/preflight.py        # macOS : python3

Vérifie : Python, ffmpeg/ffprobe, node, bash, Chrome, numpy/scipy, les skills frères, la police, et le dossier identité — et affiche la commande d'installation correcte pour chaque système (winget sur Windows, brew sur macOS). La porte G-2.

Les scripts eux-mêmes détectent la plateforme automatiquement : _vision.py choisit les outils Apple sur macOS et les alternatives open source sur Windows, et _chrome_flags.js choisit Metal sur macOS et SwiftShader ailleurs, et 31_device3d.js et motion/render.js cherchent Chrome dans les chemins des deux systèmes.

Le contrat : une phrase → fichier prêt

L'utilisateur vous donne un fichier ou un lien et une phrase. C'est vous qui gérez toutes les étapes. Ne lui donnez pas d'ordres, et ne lui demandez pas ce que vous pouvez vérifier vous-même. Posez une seule question quand la décision est esthétique et non technique (quel angle, quel hook, quelle phrase supprimer).

Commandes en égyptien — s'il dit ça, c'est ce mode

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

Il n'est pas obligé de mentionner le mode. Si la phrase contient un verbe + un fichier, vous déduisez le mode de ce tableau et continuez.

Le pipeline rapide

#ÉtapeSortiePorte
-2Vérification de l'environnement : preflight.py (Windows/macOS)Rapport d'outilsG-2
-1Identité (optionnel) : demandez d'abord — enregistrée / nouvelle / défauttheme.json + brand.mdG-1
0Lisez la demande et écrivez brief.jsonpromesse + mode + duréeG0
1Source : copie, vérification des trames, éclairagesrc.movG1
2Coupe + transcription + correction + légendescut.json a.json caps.jsonG2 · G3 · G3b
3Conception : animations, scènes, aperçuscenes*.js + sheet.jpgG4b
4Rendu completout/ = durée×30G4
5Encodage + master + traductionad-master.mp4 .srtG5
6Couverture + miniature + aperçu mobilecover.jpg …G6 · G6b
7Rapport de livraisongates.mdG8

Détails et commandes précises ← references/pipeline.md. Rôles et quand passer à un agent ← references/roles.md. Chaque condition de porte et ses limites ← references/gates.md. Direction artistique : avant la première scène, choisissez un style depuis styles/pack.json (10) — python scripts/style_pack.py apply "<work>" <id> — le style contrôle le mouvement et la texture, et la marque contrôle la couleur ← references/styles-adapted.md.

-1a) L'agent et le modèle — avant l'identité

ai.json est écrit avant toute chose : l'agent est connu de l'environnement (vous travaillez à l'intérieur), donc ne demandez pas. Posez une seule question si le modèle n'est pas clair :

«Sur quel modèle allez-vous travailler ? Juste le nom — pour ajuster la taille des scènes et la révision.»

RéponseEffet immédiat
Modèle puissant + vision6–8 scènes, moments de profondeur, révision visuelle avec un agent secondaire
Puissant sans vision4–6 scènes, révision uniquement par chiffres + œil de l'utilisateur sur sheet.jpg
Rapide/économique3–5 scènes à partir de modèles fixes, un seul aperçu, chaque porte une fois
Contexte petitDivisez la transcription en fenêtres, ne lisez pas tout le texte
  • Agent : opencode · claude-code · codex · cursor · gemini-cli — et preflight.py compare le marqueur du projet à ai.json.
  • Si les capacités ne sont pas connues, laissez null → le skill prend des précautions (chiffres + œil).
  • Détails et matrice complète ← references/ai-fit.md.

-1b) Identité — Onboarding optionnel (ne l'imposez pas)

Première demande vidéo, avant tout script, posez une seule question :

«Avant de commencer : préparons votre identité une fois pour toutes (5 minutes : couleurs, police, ton, interdits), ou on utilise une identité enregistrée, ou on continue avec les valeurs par défaut et on change plus tard ?»

Sa réponseCe que vous faites
«Il y a une identité enregistrée»python scripts/onboard.py list ← mentionnez le nom ← apply <work> <slug>
«Prépare-la»Les sept questions ← new ← card ← affichez la carte ← apply
«Continue avec le défaut»Ne demandez plus dans le même projet ; défaut #0B0C0C · #F4F2EE · #19C3AE · Cairo · chunk
«Occupé»Commencez la vidéo, et proposez l'identité après la première livraison
  • Les sept questions (nom, handle, public, ton, appel à l'action, couleurs, interdits) ← references/onboarding.md.
  • Il a des images/logo ? Extrayez la palette avec scripts/00_theme_refs.py au lieu de deviner.
  • G-1 : Contraste ink/bg ≥ 4.5, acc/bg ≥ 3, onAcc/acc ≥ 4.5. onboard.py new refuse l'enregistrement en cas d'échec.
  • L'identité est sauvegardée dans ~/.config/opencode/brands/<slug>.json et utilisée dans chaque projet ultérieur.

⛔ Interdit de commencer l'onboarding sans demander, ou d'arrêter le projet à cause des couleurs, ou de poser plus de 7 questions.

G0 — Le brief (à ne pas sauter)

Écrivez <work>/brief.json avant tout script. Modèle : assets/brief.template.json.

  • promise = ce que le spectateur comprend dans les 3 premières secondes. Une seule phrase. Si vous ne pouvez pas l'écrire, c'est que vous n'avez pas compris la demande.
  • mode parmi les six. Si la demande peut correspondre à deux modes, choisissez le plus proche de l'intention de l'utilisateur et dites-lui en une phrase ce que vous avez compris.
  • length_s = une plage réaliste (reel 45–90 s ; les clips longs → plusieurs reels, pas un seul reel).
  • must_keep = noms et chiffres qui ne doivent pas être supprimés ou modifiés.

Porte G0 : les trois sont présents ? Si non, une question puis continuez.

Direction : Qui décide

C'est vous qui dirigez. N'attendez pas d'autorisation pour chaque étape, et ne confiez pas le travail à un agent qui vous gérerait.

  • Vérifiez vous-même tout ce qui est technique : durée, trames, audio, taille, zone de sécurité.
  • Déléguez le jugement seulement quand un jugement est meilleur avec une mémoire fraîche : révision de l'arabe, révision des images.
  • L'agent lit et juge seulement — il n'écrit pas et ne dessine pas. Modèle de prompt dans references/roles.md.

Les portes : fail-closed

python scripts/gate_runner.py "<work>" --safe
  • Affiche un tableau, écrit gates.json + gates.md, et sort avec un code 1 s'il y a un blocage.
  • Pas de livraison avec un blocage ouvert. Et pas de «on essaie et on voit».
  • Budget de deux tentatives par porte. La troisième = la raison n'est pas comprise → arrêtez-vous et demandez à l'utilisateur avec une preuve (capture d'écran + texte de la porte).
  • Interdit de désactiver une porte ou de passer --maxmb ou d'ignorer un avertissement «parce que c'est petit». C'est de la falsification.

Les règles strictes

  1. Les légendes sont une copie fidèle de ses paroles — n'inventez pas, ne supprimez pas un mot sans raison, et la correction conserve le nombre de mots.
  2. La zone de sécurité d'abord — pas de texte dans y 0–150 ni y 1620–1920, ni dans la colonne des boutons à droite.
  3. Les couleurs viennent uniquement de theme.json ; zéro modification de couleur sur son image sans son accord.
  4. Chaque chiffre à l'écran vient de facts.md ou de ses paroles — pas de chiffre de votre cru.
  5. Pas de publication ni de planification. Livraison sous forme de fichiers.
  6. La couverture est obligatoire — première image, et lisible en taille mobile (cover_phone.jpg).
  7. Taille et volume font partie de la qualité : ≤29 Mo, −14 LUFS, pic ≤ −1.0 dBTP.

Modes de fonctionnement

  • Reel de parole (par défaut) : talking-reel — la vidéo complète reste en plein écran, et les graphiques sont dans la ceinture supérieure ou derrière.
  • Clips sans parole : montage — nécessite 10–20 clips + piste audio. Ne réutilise pas le même plan.
  • Podcast : podcast — deux caméras. Le hook écrit est obligatoire.
  • Film d'animation : motion — sans commentaire par défaut (audio.py --no-bed --lufs -20). 3D nécessite GL=gpu.
  • Site/Application : web-demo — 27_web_capture.js puis 30_demo.js (ou 31_device3d.js).
  • Couverture seulement : cover-only.

Rapport de livraison

Deux lignes, puis un tableau court :

Durée · Coupes · Taille · Volume · Pic
Portes 7/7 ✅ (ou avertissement acceptable + sa raison)
Fichiers : mp4 · srt · txt · cover.jpg
Rien n'a été publié.

Économie de jetons

  • Une commande par étape, pas 41 commandes séparées.
  • Une seule feuille de plans (sheet.jpg) au lieu de 6 images.
  • Ne lisez pas un fichier entier : grep -n pour la fonction, tail -5 pour le log.
  • Les références seulement quand nécessaire — ce fichier + une référence adaptée à l'étape.
  • N'affichez pas d'image sauf pour une question visuelle qu'il n'y a pas d'autre moyen de répondre.

Échecs attendus (ne soyez pas surpris)

SymptômesCauseSolution
UnicodeEncodeErrorÉcriture sans utf-8 sur WindowsLancez PYTHONUTF8=1 (les scripts sont corrigés, mais ne comptez pas dessus)
Le 3D se figeChemin Chrome / chemin /workCHROME correct + GL=gpu (corrigé dans 31_device3d)
Légende en retard / coupéeLa coupe a changé après les légendesRelancez 02_captions.py puis G3
Pic élevé après compressionAAC augmente le picalimiter dans le chemin de la couverture ou 06c_loudfix.sh
La transcription hallucineDialecte / terme anglais02a_whisper_check.py --fix puis corrigez avec un nombre de mots fixe

Skills associés