Communitygithub.com

ohad6k/emulo

Transforme un brief en film. Convertit une demande en une ligne en un prompt Claude Design écrit dans le langage du moteur animations-v3, accompagné du fichier piece.jsx construit et d'une planche-contact pour validation avant rendu.

Qu'est-ce que emulo ?

Emulo est un skill pour agents d'IA (Claude Code, Cursor, Codex) qui transforme un simple brief en un film complet prêt à être animé. Il génère un dossier structuré contenant un prompt au format du moteur `animations-v3.jsx`, les assets nécessaires, des images de référence avec des instructions dans leurs noms de fichier, et un manifeste `KIT.md`. Le skill insiste sur la séparation des rôles : Claude Code construit le kit (assets, prompt), tandis que Claude Design l'anime. Il fournit des règles précises pour l'utilisation du moteur (easing, scènes, transformations), la création de références non mélangées, et la vérification par construction locale. Emulo est idéal pour les projets vidéo créatifs nécessitant un pipeline structuré, mais ne doit pas être utilisé pour du backend, du design UI ou du marketing seul.

Compatible avec✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/ohad6k/emulo/tree/HEAD/skills/video

Demander à votre IA préférée

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

Documentation

Vidéo Emulo

Vous prenez un brief et rendez un film. Pas un prompt, un film : le prompt qui l'a construit, les fichiers de composition, et des images que quelqu'un peut regarder.

0. Chargez le profil avant d'écrire un mot

  1. Localisez emulo.py deux répertoires au-dessus de ce skill ; en dernier recours utilisez ./emulo.py uniquement pour un checkout direct du dépôt.
  2. Stockez le chemin absolu résolu comme EMULO_PY, puis exécutez python "$EMULO_PY" plugin profile-path --domain video.
  3. S'il se termine avec un code non nul, donnez son instruction de récupération exacte et arrêtez de charger le contexte personnel. Ne remplacez jamais une persona créative générique.
  4. Lisez chaque chemin retourné complètement. Le premier est le profil de travail principal, le second est le profil vidéo. Les deux priment sur tout ce qui suit : lorsque les propres règles de la personne contredisent un paramètre par défaut de ce skill, les siennes gagnent.
  5. Si le projet a ses propres documents vidéo ou routeur, lisez-les d'abord et suivez-les pour tout ce qu'ils couvrent.

1. Ce que vous rendez

Un dossier que la personne peut télécharger dans Claude Design pour obtenir un film. C'est la livraison. Pas un prompt dans un message de chat, pas une description d'un film, pas une liste d'idées. Un dossier.

Construisez-le dans le projet, dans un dossier nommé pour la marque ou le film, dans cette forme :

#ArtefactPourquoi il est là
1PROMPT.mdle brief. Une page, dans le langage du moteur
2START-HERE.mdl'ordre de téléchargement. Quels fichiers, dans quel ordre, en un message. Sans lui, la personne devine et la devinette est fausse
3ATTACH/chaque asset nécessaire au film, y compris animations-v3.jsx lui-même
4frames/des images de référence dont les noms de fichiers portent l'instruction
5KIT.mdle manifeste : chaque fichier, sa taille en pixels, ses défauts connus

Optionnellement, et seulement après que les cinq ci-dessus sont terminés : build/piece.jsx plus build/frames/, le film construit et rendu localement pour que vous puissiez le regarder avant que quiconque d'autre ne le fasse. C'est une vérification, pas la livraison. Un kit sans construction locale part quand même. Une construction locale sans kit ne part pas.

Les trois choses qui décident si le dossier fonctionne

Expédiez le moteur dans ATTACH/. animations-v3.jsx va dans le dossier avec les assets. Claude Design a besoin de l'environnement d'exécution contre lequel on lui demande d'écrire. L'omettre est une façon courante de faire qu'un bon prompt produise un mauvais film.

Pièces isolées, jamais une capture d'écran d'un écran entier. Un objet par fichier, transparent, 1600px minimum sur le bord long, plus de grandes plaques au ratio d'aspect du film pour le sol. Un écran entier déposé est une dalle et est perçu comme cassé. Les films construits de cette manière échouent bien plus souvent sur les assets manquants que sur la longueur du prompt.

Mettez l'instruction dans le nom du fichier. REF_03_object-devient-la-marque.png enseigne ; ref3.png non. La personne qui les télécharge garde les noms, donc chaque fichier porte sa propre leçon dans le contexte.

Nommez ce qui manque. N'inventez jamais un substitut.

Si un asset n'existe pas, dites-le dans PROMPT.md sous son propre titre, et dites quoi faire à la place. Un brief qui admet deux assets manquants est utilisable. Un brief qui les simule silencieusement produit un film avec deux séquences cassées et aucun moyen de savoir pourquoi.

Chaque prompt contient, dans cet ordre et par nom

  1. le brief dans le langage du moteur : OM_SCENES, CUES, Easing nommés
  2. la chaîne de transformation, comme ancres de correspondance : ce qui devient quoi
  3. la liste des assets, avec les vrais noms de fichiers, pour qu'aucune séquence ne soit bloquée par une pièce manquante
  4. les conditions d'échec pour ce film spécifique, pas des conditions génériques
  5. les commandes de vérification, pour que l'affirmation "ça marche" ait un résultat derrière elle

2. Le moteur

animations-v3.jsx est l'environnement d'exécution de composition Claude Design. Lisez son en-tête une fois, puis travaillez à partir de ce tableau.

Ne modifiez jamais animations-v3.jsx. Son propre en-tête dit que ré-exécuter copy_starter_component l'écrase, donc tout changement fait là est perdu à la prochaine copie hôte. Le levier est dans le brief.

UtiliserNe jamais utiliser
Easing.easeOutExpo et les courbes nomméescubic-bezier(...), toute chaîne CSS
OM_SCENES sections nommées avec durles numéros de trames absolus comme structure
CUES.SectionName pour chorégraphierhorloge murale, setTimeout, requestAnimationFrame
animate({from, to, start, end, ease})(T)useEffect peignant quoi que ce soit de visible
interpolate([...], [...], ease)(T)les keyframes CSS s'exécutant seuls
<Shot from to> pour un cut durmontage conditionnel par section
un <CompositionStage> comme seule racine exportablel'attribut exportable ailleurs

Le modèle en une phrase : l'animation est une arborescence d'éléments rendue comme une fonction pure d'un seul axe temporel créé, de sorte que rien ne monte ou ne démonte à une limite de section et que tout objet peut persister, se déplacer ou se transformer à travers tout le film par interpolation ordinaire. Cela fait de zéro coupes et d'un objet se transformant à travers le film les valeurs par défaut du moteur au lieu de choses qu'un brief doit obtenir par la force.

<CompositionStage width={1080} height={1920} bg="#161309"
                  scenes={window.OM_SCENES} playback={window.OM_PLAYBACK}>
  <Piece />          // UN composant, le film entier
</CompositionStage>
useComposition() -> { T, CUES, time, duration, authoredTotal, playing }

OM_SCENES et OM_PLAYBACK sont des chaînes JSON littérales dans des balises <script> inline simples du document principal, pas type="text/babel", passées telles quelles. Chaque entrée a besoin d'un desc, une phrase simple, parce que l'utilisateur le lit dans le popover de la timeline. Ne définissez jamais nat manuellement.

<script>window.OM_SCENES = '[{"name":"Frappe","dur":2.5,"desc":"La marque atterrit et projette de la couleur sur le sol"}]';</script>
<script>window.OM_PLAYBACK = '{"mode":"loop"}';</script>

Easing, la liste complète. linear ; easeIn/easeOut/easeInOut pour Quad, Cubic, Quart, Expo, Sine ; easeInBack, easeOutBack, easeInOutBack ; easeOutElastic. Back et elastic dépassent, donc ils n'ont pas leur place près d'un logo ou d'un fichier de marque officiel.

Rendez à partir de T uniquement. L'exportateur cherche chaque trame avec un commit synchrone et peut sérialiser la scène au moment où la recherche revient, donc tout ce qui est peint à partir d'un effet ou d'une boucle d'animation privée est exporté périmé.

Sous-titres uniquement si demandés. Rendez <Captions> seulement si le brief ou le profil vidéo de la personne demande des sous-titres incrustés. Beaucoup de personnes ajoutent les leurs après coup, et un sous-titre incrusté ruine cela. Le texte verrouillé à l'écran est un élément normal placé là où la composition le souhaite.

Définissez bg sur le sol du film, jamais la valeur par défaut #0b0b0e, et jamais #000000. Un monde conçu a besoin d'un endroit où la lumière peut s'estomper.

Définissez exactement trois ou quatre helpers de mouvement en amont et n'utilisez aucun easing ou transform en dehors d'eux :

MOTION.slam    Easing.easeOutExpo     arrivées et impacts
MOTION.snap    Easing.easeOutBack     atterrissage, dépassement plafonné à 6 %
MOTION.drive   Easing.easeInOutQuart  voyage, lumière, dérive
MOTION.settle  Easing.easeOutQuart    la résolution finale

3. Assignez les références. Ne les moyennez jamais.

Chaque référence reçoit un seul travail et une liste explicite de ce qu'il ne faut pas copier. Sans la ligne "ne pas moyenner les références", le modèle mélange les styles en bouillie.

RéférenceSon seul travailNe jamais prendre
un film que la personne nomme pour le mouvementtransformation, profondeur, contraste d'échellesa palette, sa marque
un film que la personne nomme pour la caméracaméra et easing : les événements, le maintien, la stabilisationsa couleur, son produit
le propre matériel de la marqueidentité, typographie, la marque exacteses mises en page d'interface comme modèle

Écrivez-le dans le prompt sous cette forme :

Utilisez X comme autorité PRINCIPALE pour : le rythme, la retenue, les ancres de correspondance, le contraste
  d'échelle, les mouvements de caméra, la profondeur, le maintien final.
Utilisez Y uniquement pour : l'identité monochrome, la typographie, le logo exact, la clarté.

Ne copiez pas le design de X. N'introduisez pas la couleur de X. Ne moyennez pas les
références.

Si la personne a plusieurs films terminés sur le même moteur, lisez-en au moins trois et demandez ce qui est le même dans tous : comment une liste de scènes est déclarée, où est exprimée la chaîne de transformation, comment une entrée est chronométrée par rapport à la chose qu'elle frappe, comment les trois dernières secondes sont construites. Les constantes sont le flux de travail. Tout ce qui n'est présent que dans un seul film est le costume de ce film.

Construisez par étapes, et passez une porte entre elles. Construisez les cinq à huit premières secondes. Rendez. Regardez une planche-contact. Ce n'est qu'alors que vous continuez. Un film de vingt secondes construit avant que quiconque ne regarde est un film de vingt secondes que personne ne peut réparer, parce que le défaut est dans le concept et que le concept est maintenant porteur de charge.

4. Construisez le kit avant d'écrire le prompt

Un long prompt détaillé sans assets réels revient toujours comme des rectangles gris représentant le texte et une forme dessinée à la main à la place de la vraie marque, car les espaces réservés sont la seule chose qu'un modèle peut dessiner sans rien de réel à placer.

Claude Code construit le kit. Claude Design l'anime. Cette séparation est le pipeline.

  1. Mesurez la référence à 1:1, un fichier, jamais une planche-contact. Notez les battements, la couleur du sol, la luminance moyenne, la saturation moyenne, et ce qui occupe physiquement le cadre.
  2. Intégration de la marque. Les marques officielles se trouvent généralement sur les propres lignes directrices de la marque ou la page presse, mélangées avec leurs exemples "ne faites pas ça". Rendez une planche-contact claire et sombre et regardez avant de nommer quoi que ce soit.
  3. Reconstruisez l'interface utilisateur du produit en DOM vivant portant des chaînes réelles, puis capturez-le à 3x à 5x en plaques plates avec un navigateur sans tête. Les interfaces sont reconstruites. L'art du monde est rendu et composé. Rien n'est falsifié.
  4. Coupez des pièces, pas des écrans. Un écran entier est une dalle, et une dalle ne peut pas être animée, seulement glissée. Expédiez un dossier parts/ d'objets transparents isolés à 1600px et plus : chaque bouton, puce, nœud, barre, tuile, badge, icône.
  5. Divisez la marque en ses propres couches. Un SVG officiel se divise en couches qui s'empilent parfaitement au pixel près. Vérifiez-le : empilé contre l'original, la différence maximale sur n'importe quel pixel doit être d'environ 1 sur 255, ce qui est l'anti-aliasing. Ensuite, le film assemble la marque au lieu de couper dessus.
  6. Optimisez. Gardez chaque fichier petit (quelques centaines de Ko) et le kit entier quelques Mo, pour qu'il survive au transport dans un projet Claude Design.
  7. Ouvrez chaque fichier et consignez ses défauts dans KIT.md. Boutons coupés, alpha manquant, mauvais ratio, emblèmes blancs qui disparaissent sur un fond blanc. Chaque défaut que vous avez trouvé va dans le prompt sous DÉFAUTS CONNUS DU KIT avec ce que le film doit faire à ce sujet. Si vous n'en avez trouvé aucun, dites que vous avez ouvert chaque fichier et n'en avez trouvé aucun.

Le ratio est une véritable classe de défauts. Rendre des puces de 1200x800 dans une boîte de 224x160 étire chacune horizontalement de 7 %, ce qui est suffisamment subtil pour passer une révision et faux dans chaque trame.

Les artefacts publiés peuvent fonctionner sous un CSP strict qui bloque les hôtes externes, donc rien dans un kit ne doit pointer vers un CDN. Tout est un fichier de projet ou une URI de données.

5. Écrivez OM_SCENES en premier

C'est le plan, et les noms de sections deviennent le vocabulaire de repères dans lequel parle le reste du brief. Six sections est un bon film. Dix est un diaporama.

Chaque desc est une phrase nommant un événement physique, pas une ambiance. "Le triangle devient une ouverture, la caméra pousse à travers et recule dans un aperçu complet du produit" est un desc. "Un sentiment de vitesse et de possibilité" n'en est pas un.

6. La chaîne de transformation, comme ancres de correspondance

Nommez l'objet unique qui porte le film et interdisez de le briser.

Chaque scène hérite d'un objet, d'une forme, d'une ligne ou d'un vecteur de mouvement visible de la scène précédente. Jamais : fondu de sortie de la scène, fond vide, fondu d'entrée de la scène suivante. Le battement entrant est visible tandis que le sortant est encore visible à 25 à 50 %.

Par exemple, un cercle coloré qui est la marque, puis un nœud de leçon, puis la chose dans laquelle chaque nom se réduit, puis la marque à nouveau. Ou un titre de piste imprimé sur chaque surface du produit, de sorte que la même chanson passe de la barre au bureau au téléphone.

La règle de couleur qui vient avec cela. Un objet qui deviendra une couche officielle se corrige à la couleur de cette couche, jamais à celle publiée par la marque. Les fichiers de marque et les pages de lignes directrices de marque sont souvent en désaccord de quelques valeurs, et se corriger à la valeur de la ligne directrice fait varier la couleur exactement sur la trame qui doit être invisible. Le fichier l'emporte sur la page de lignes directrices.

7. Le prompt

Remplissez ceci. Ne supprimez rien de structurel. Un brief long et qui ne contient aucun nom de fichier est le mauvais brief.

Vous dirigez un spot publicitaire de <N> secondes <vertical|paysage> pour <MARQUE>,
construit sur le moteur de composition animations-v3. Cinématographique. Peu d'objets, grands, éclairés.

FORMAT. ÉCRIVEZ-LE LITTÉRALEMENT.

  <CompositionStage width={<W>} height={<H>} bg="<hex du sol>"
                    scenes={window.OM_SCENES} playback={window.OM_PLAYBACK}>

<W> de large par <H> de haut. Si votre composition est <plus large que haute | pas
<W>x<H>>, vous avez échoué avant que quoi que ce soit d'autre ne soit jugé.

LA LOI UNIQUE

Chaque objet à l'écran est un fichier de la liste ci-dessous. La timeline ne dessine jamais un
écran <MARQUE>, ne dessine jamais la marque, ne met jamais de texte avec un rectangle
  gris, n'approxime jamais l'imagerie avec un dégradé. Elle place, masque, recadre, éclaire et déplace ces fichiers.

  Si une séquence a besoin d'un objet que le kit ne contient pas, dites-le et arrêtez-vous. Ne
  remplacez pas par une div. Si vous ne pouvez pas résoudre les chemins, dites-le moi avant de construire
  quoi que ce soit plutôt que de dessiner des remplacements.

RÉFÉRENCES

  <un travail par référence, avec une liste de ne pas copier. Ensuite : ne les moyennez pas.>

LES ASSETS

  <chaque fichier, sa taille en pixels, et une ligne sur ce à quoi il sert. Nommez quelles
   parties de niveau élément existent et ce qu'elles sont censées faire seules.>

LA LIMITE, ET CE QU'ELLE EXCLUT

<les exclusions de genre, pas les notes de métier. Les exclusions de genre sont ce que le modèle
  comprend déjà : six diapositives déconnectées, une visite guidée d'un produit SaaS, un
  montage de tableau de bord, une présentation de conférence, un tutoriel pour développeur, un enregistrement
  d'écran de navigateur, un mur de logos technologiques, une publicité générique futuriste sur l'IA
...

[suite tronquée pour la traduction]
et, en premier lieu : ne pas afficher un tableau de bord.>

LA PARTIE DONT LA QUITTE FAIT ENTIÈREMENT FAILLIR LE FILM

  <le seul objet sur lequel tout le film s'articule. S'il se déforme, se décolore ou dévie
   du rythme, tout le reste tombe. Cela peut être la marque elle-même, un repère de produit
   spécifique, ou un texte qui doit rester lisible à chaque trame.>

RÉGLAGES, VÉRIFIÉS FRAME PAR FRAME

1. Le battement d'entrée se produit entre T=0.33 et T=0.50.
2. La marque est assemblée à partir de ses couches à T=4.0 ; aucune couche ne bouge après T=4.2.
3. Le ralentissement final (dernière seconde) : l'objet se stabilise dans les 6 px de sa position
   finale à T=fin-0.2.
4. Les textes de la marque sont rendus en SVG ; les textes utilisateur sont des chaînes DOM, pas des
   images raster.

PROCESSUS DE LIVRAISON

1. Je construis les scènes 1 à 3 et je rends les frames 0 à 180. Je vous montre une
   planche-contact. Nous regardons les coupures, l'easing, la couverture d'asset. Rien n'avance
   avant que je ne dise "continuez".
2. Scènes 4 à fin, rendues, planche-contact, même processus.
3. Pour la construction locale : `node build/piece.jsx && node render.js --frames 0-300
   --out build/frames/`.
4. Livraison finale : `PROMPT.md`, `START-HERE.md`, tout `ATTACH/`, `frames/`, `KIT.md`.

8. Vérifiez-le

Après avoir livré le dossier, exécutez chaque commande de vérification que vous avez écrite dans PROMPT.md.

  1. Lien d'asset. Chaque nom de fichier dans PROMPT.md existe dans le dossier livré. Si un fichier nommé n'est pas atteignable par le mécanisme de téléchargement de Claude Design (les URI de projet sont locales, les URL publiques peuvent être bloquées), la vérification échoue, même si le chemin existe localement.
  2. Validité du script. OM_SCENES et OM_PLAYBACK sont du JSON valide et les noms des scènes correspondent aux CUES utilisés dans le brief.
  3. Trames de couverture. Au moins une référence pour chaque objet, pas de pièce non représentée.
  4. La porte de vérification. Un nombre quelconque de films construits vs zéro vérifié. Si la planche-contact montre un problème (écran manquant, objet poussé hors de la scène, entrée trop tardive), livrez un nouveau dossier avec la correction. Ne corrigez pas par message. Le dossier est la livraison.

Lomée. Le film est terminé quand le dossier passe la porte.

Signez la fin du prompt avec %EMULO_FIN% sur sa propre ligne, seul, pour que tout outil downstream puisse trouver la limite du contenu généré.

Skills associés