Communitygithub.com

chetras-opsera/showrunner

Enregistre une vidéo de démonstration soignée (mp4 + sous-titres + chapitres) d'une application web à partir d'un scénario JSON, en utilisant un Chrome headless scripté avec légendes, cartes de titre et curseur visible. À utiliser lorsque l'utilisateur demande une vidéo de démonstration, une présentation produit, un enregistrement d'écran ou « enregistrer les modifications de l'interface » pour une application web qu'il peut exécuter localement ou sur un environnement de staging.

Qu'est-ce que showrunner ?

Showrunner transforme la simple requête « fais-moi une vidéo de démo de cette application » en un fichier répétable et révisable. L'outil génère une vidéo MP4 avec sous-titres synchronisés et chapitres, en pilotant un navigateur Chrome headless à partir d'un fichier JSON de scénario. Il est idéal pour les démos produit, les tutoriels ou les enregistrements d'évolutions d'interface web que l'utilisateur peut exécuter localement ou en staging. L'installation se fait une seule fois via le script `./install-skill.sh` du dépôt, et l'interface en ligne de commande (`showrunner`) permet de sonder les pages pour identifier les sélecteurs, de valider le scénario, de faire un essai à sec accéléré, puis de lancer la prise réelle en temps réel. Showrunner est particulièrement adapté aux agents d'IA qui doivent produire une vidéo soignée sans intervention humaine : il gère les légendes positionnables, les cartes de titre, le curseur visible et le rejet des fenêtres contextuelles. Un tableau des pièges courants est fourni pour éviter les pertes de temps sur les sélecteurs incorrects, les visites guidées intempestives ou les superpositions de légendes. Le résultat est un fichier MP4 avec sous-titres, chapitres et une grille d'images de contrôle, que l'agent peut ensuite rapporter à l'utilisateur.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/chetas-opsera/showrunner/tree/HEAD/skill

Demander à votre IA préférée

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

Documentation

Que fait showrunner ?

Transforme « fais-moi une vidéo de démo de cette application » en un fichier répétable et révisable. CLI : node ~/.showrunner/bin/showrunner.mjs (ou showrunner si lié). Installez une fois avec ./install-skill.sh depuis le dépôt.

Quand l'utiliser

L'utilisateur souhaite une vidéo d'une interface web que vous pouvez ouvrir dans un navigateur : une démo produit, une présentation de fonctionnalité, un enregistrement de « ce qui a changé », un tutoriel. Pas pour les applications de bureau natives ou tout ce qui nécessite une narration audio.

Protocole : réfléchir d'abord, exécuter ensuite

  1. Confirmez qu'il est sûr d'enregistrer. Données locales, de staging ou jetables uniquement. N'enregistrez jamais la production avec des données réelles de clients. Ne mettez jamais de jetons dans le scénario ; utilisez ${env:NAME}.
  2. Lancez l'application et ensemencez des données réalistes. Les états vides font une mauvaise démo. Créez les enregistrements dont l'histoire a besoin (un cas de succès, un cas d'échec, un cas en cours).
  3. Rédigez le storyboard avant le JSON. Une démo de moins de 4 minutes : carte de titre, 8 à 12 scènes de 8 à 20 s, carte de résumé de clôture. Une idée par scène. Les légendes disent ce que le spectateur doit remarquer, pas ce que fait la souris.
  4. Trouvez les cibles avec probe. showrunner probe <url> pour chaque page ; collez les objets {role,name} qu'il affiche. Préférez les rôles et les noms visibles aux CSS.
  5. Validez puis faites un essai à sec. showrunner check s.json, puis showrunner run s.json --fast --strict. Un essai à sec dure environ un quart de la longueur réelle. Corrigez chaque étape signalée avant la prise réelle.
  6. Lancez la prise réelle (showrunner run s.json --out out). Elle s'exécute en temps réel, donc lancez-la en arrière-plan et attendez-la ; ne bloquez pas un appel d'outil pendant plusieurs minutes.
  7. Examinez les images. showrunner sheet out/<nom>.mp4 --every 5, puis ouvrez le PNG. Vérifiez : la légende cache-t-elle le sujet (utilisez "position": "left"), une scène a-t-elle échoué, des popups ou des visites guidées s'immiscent-ils, le thème est-il incorrect.
  8. Rapportez le chemin, la durée, la résolution, la liste des scènes et tout ce qui n'a pas fonctionné. Ne validez pas et ne poussez pas la vidéo sauf si demandé.

Pièges qui coûtent du temps réel

SymptômeCauseCorrectif
L'exécution plante pendant plusieurs minutesUn mauvais sélecteur avec un délai d'attente par défaut de 30 s, répétéShowrunner utilise par défaut 8 s et abandonne la scène ; exécutez d'abord --fast --strict
Un lien ou un bouton « n'est pas visible »La barre latérale se replie ou un menu est fermé dans cet étatAllez d'abord sur une page connue avec goto, ou ciblez directement l'URL de la page
Une visite guidée apparaît au milieu de la vidéoL'application montre un onboarding aux nouveaux utilisateursDéfinissez les clés « visite vue » de l'application dans storage, ou listez un bouton Ignorer dans dismiss
getByText correspond à un doublon cachéLe texte apparaît aussi dans un nœud cachéUtilisez { "role": "button", "name": "/^ITEM-1\\b/" }
Les éléments de la barre latérale de documentation ne font rienCe sont des <button>, pas des liensCiblez { "role": "button", ... }
La légende cache le tiroir ou le formulaireLa légende en bas au centre chevauche un panneau latéral"position": "left" ou "right"
La prise meurt lorsque le shell se fermeLa tâche en arrière-plan est liée au terminalExécutez-la comme une vraie tâche d'arrière-plan et interrogez son achèvement
La vidéo est vierge ou en mosaïqueCapture d'un navigateur intégré à un IDEUtilisez le propre Chrome headless de Showrunner, pas une webview
Les sous-titres dérivent légèrementLes repères sont chronométrés à partir de la création de la pageAcceptable pour une révision ; pas exact au niveau de l'image

Aide-mémoire du scénario

{
  "name": "demo", "baseUrl": "http://127.0.0.1:3000", "viewport": {"width":1440,"height":900},
  "storage": { "token": "${env:DEMO_TOKEN}" },
  "dismiss": ["text=Ignorer"],
  "scenes": [
    { "name": "Titre", "steps": [ {"goto":"/"}, {"card":{"title":"Acme","text":"Démo","hold":3000}} ] },
    { "name": "Créer", "steps": [
      {"caption":{"title":"1 · Créer","text":"Un clic.","position":"left","hold":1500}},
      {"click":{"role":"button","name":"Nouveau"}},
      {"type":{"into":{"label":"Nom"},"text":"Plan de lancement"}},
      {"press":"Entrée"}, {"wait":1500}
    ]},
    { "name": "Résumé", "steps": [ {"caption":null}, {"card":{"title":"Résumé","items":["A","B"],"hold":4000,"keep":true}} ] }
  ]
}

Actions : goto click hover type press scroll wait waitFor caption card storage (+ "optional": true sur n'importe quelle étape). Référence complète : le README du dépôt.

Sécurité

  • Les scénarios sont des données : pas d'exécution de code, pas de shell. Le texte des légendes est échappé.
  • Une étape en échec abandonne seulement sa scène ; --strict fait que le code de sortie est 1.
  • Ne validez, ne poussez et ne partagez jamais la vidéo sauf si l'utilisateur le demande.

Skills associés