Communitygithub.com

heygen-com/hyperframes

Le contrat de composition HyperFrames — construisez un projet rendu. Utilisez-le pour la structure de composition, les attributs de timing `data-*`, `class="clip"`, les pistes, les sous-compositions, les variables, la lecture multimédia gérée par le framework, les règles de rendu déterministe et la validation. Lisez-le avant d'écrire du HTML de composition.

Qu'est-ce que hyperframes ?

HyperFrames est un framework open-source pour réaliser des vidéos à partir de HTML, animées avec GSAP (ou d'autres runtimes d'animation), et rendues de manière déterministe et reproductible. Cette compétence constitue le contrat technique central : elle définit comment structurer un projet de composition HyperFrames, y compris les attributs de timing `data-*`, le rôle des pistes et des clips, les sous-compositions, les variables et les règles strictes pour garantir un rendu image par image. Elle prend en charge les compositions autonomes et les sous-compositions, avec des détails essentiels pour éviter les bugs silencieux : ne pas animer les propriétés de visibilité des clips, ne pas utiliser de nombres aléatoires non seedés, et respecter les règles de déterministe. La compétence s'appuie sur une suite de documents de référence et d'outils CLI (`hyperframes-cli`), et est conçue pour les développeurs et les agents IA qui construisent des compositions vidéo complexes sans être piégés par les pièges courants.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/heygen-com/hyperframes/tree/main/skills/hyperframes-core

Demander à votre IA préférée

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

Documentation

Installation de plugins : Avant les commandes de configuration ou de mise à jour, suivez les règles d'exécution des plugins lorsque cette compétence se trouve dans un plugin HyperFrames. Les installations autonomes conservent les instructions de mise à jour ci-dessous.

HyperFrames Core

Pièges pour les agents (à lire en premier) :

  • Centrer avec flex/inset, pas avec CSS transform: translate(-50%,-50%) sur un nœud que vous animez ensuite avec GSAP x/y. Lint : gsap_css_transform_conflict. Utilisez fromTo ou xPercent/yPercent.
  • N'ajoutez pas de tl.set(..., {visibility:"hidden"}) pour la sortie de scène. Le runtime masque déjà les clips chronométrés. Les fondus d'opacité sur les nœuds internes (ou opacity sur .clip) sont suffisants. Les arrêts bruts de légendes sont une règle différente.
  • window.__timelines["id"] doit correspondre au data-composition-id racine.
  • Après render, lisez la deuxième ligne du résumé : beginframe vs screenshot, mode GPU, timings des étapes. screenshot + software gpu sur Linux est le chemin lent.

HyperFrames rend des vidéos à partir de HTML. Une composition est un fichier HTML dont le DOM déclare le timing avec des attributs data-*, dont le runtime d'animation est accessible, et dont la lecture multimédia est gérée par le framework.

Cette compétence est le contrat technique : comment construire un projet hyperframes. Le corps ci-dessous est le guide de construction ; les détails par sujet vivent dans references/ (index suivant), lisez à la demande. Les documents de processus (brief, storyboard, review, production, dispatch, frame-worker) se trouvent dans /hyperframes → references/. Les autres préoccupations se trouvent dans les compétences de domaine sœurs — hyperframes-animation, hyperframes-creative, media-use, hyperframes-cli, hyperframes-registry. La carte des capacités dans /hyperframes indique ce que couvre chaque compétence.

Références

FichierLisez-le pour…
references/minimal-composition.mdcommencer par le plus petit squelette de composition rendu
references/composition-patterns.mdchoisir entre monolithique et modulaire ; structurer un index.html modulaire ; choisir un archétype de sous-comp
references/data-attributes.mdrechercher n'importe quel attribut data-* (racine / clip / hôte sous-comp / alias hérités) ; utiliser class="clip"
references/tracks-and-clips.mdcomprendre ce que data-track-index contrôle (et ne contrôle pas), le z-index, le timing d'un clip par rapport à un autre ; lister chaque piste et clip avec npx hyperframes timeline
references/creator-editing-recipes.mdcopier des recettes d'édition fiables (couper/rogner/réorganiser/rechronométrer/geler/caméra/masque/fondu enchaîné/audio) et leurs limites
references/sub-compositions.mdcâbler une sous-composition (attributs hôte, <template>, variables par instance) et animer à l'intérieur
references/variables-and-media.mddéclarer des variables ; placer <video>/<audio>, régler le volume, rogner
references/determinism-rules.mdconstruire une timeline accessible ; interdictions de déterminisme ; mise en page / ajustement du texte
references/full-screen-motion.mdcréer un mouvement plein écran avec des arrière-plans partagés
references/tailwind.mdtravailler dans un projet Tailwind v4 (init --tailwind ; le contrat d'exécution diffère de Studio en v3)

Pour les spécificités du runtime d'animation (API GSAP, Lottie, Three.js, etc.), allez sur hyperframes-animation → adapters/<runtime>.md.

Construire une composition

Deux formes racines (non interchangeables)

  • Autonome (index.html de premier niveau) : le <div data-composition-id="…"> racine se trouve directement dans <body>, pas de wrapper <template>. Envelopper une racine autonome masque tout le contenu et lint le rejette (standalone_composition_wrapped_in_template, erreur).
  • Sous-composition (chargée via data-composition-src) : enveloppez la racine dans <template>. C'est la forme à écrire : le chargeur accepte également un document complet et utilise son <body> par défaut, mais la forme avec template est celle que les exemples et les outils supposent.

⚠ Règle de transport : pour une sous-composition avec template, l'assembleur ignore le <head> <style>/<script> du fichier lui-même (packages/core/src/compiler/compositionAssembly.ts, porte hasTemplate), alors placez <style>/<script> à l'intérieur du template. <link> est remonté dans tous les cas. ⚠ Convention d'ID hôte : donnez à l'emplacement hôte, au template interne et à la clé window.__timelines["<id>"] le même id. Un id local différent est pris en charge (l'assembleur utilise par défaut la première racine du fichier) mais le décalage est silencieux, donc faites-les correspondre sauf si vous avez une raison de ne pas le faire.

Forme du fichier, câblage de l'hôte et liste de contrôle avant rendu → references/sub-compositions.md.

La racine doit être dimensionnée (bug de mise en page silencieux)

La racine autonome définit width/height : 100%. La taille du canevas est data-width/data-height. Le runtime applique ces pixels à la racine de la composition. Ne codez pas en dur 1920px/1080px sur #root. Squelette → references/minimal-composition.md.

Une seule timeline en pause

Chaque composition enregistre exactement une gsap.timeline({ paused : true }) à window.__timelines["<id>"] (clé = data-composition-id racine). La construire à l'intérieur d'un callback asynchrone (document.fonts.ready) est pris en charge ; ce qui compte est que vous enregistrez seulement après la fin de la construction. La durée de rendu est le data-duration de la racine, pas la longueur de la timeline : une timeline qui dépasse est coupée, et une timeline qui se termine tôt conserve sa dernière image. Omettez le data-duration racine et la durée est déduite à la place (timeline, fenêtre multimédia ou adaptateur). Vous n'avez pas besoin de window.__timelines = window.__timelines || {} : le runtime crée le registre avant que vos scripts en ligne ne s'exécutent, et lint ne le demande plus. N'imbriquez pas manuellement de sous-timelines dans l'hôte ; le runtime imbrique automatiquement les timelines enfants enregistrées. Contrat complet (y compris les runtimes non-GSAP) → references/determinism-rules.md + hyperframes-animation/adapters/.md.

Pièges de lint de premier passage (un échec de construction garanti)

Règles que lint attrape, mais seulement après coup. Écrivez-les correctement du premier coup :

  • N'associez jamais un transform CSS initial avec un tween GSAP sur la même propriété — la valeur CSS et le début du tween se battent et lint le rejette avec gsap_css_transform_conflict. Définissez l'état initial dans le tween avec gsap.fromTo(el, { x : -40 }, { x : 0 }) au lieu d'un CSS transform : translateX(-40px).
  • Ne mettez jamais crossorigin sur <video>/<audio>. lint le rejette inconditionnellement avec media_crossorigin_breaks_preview (erreur), y compris pour la lecture canvas/WebGL/WebAudio. Il n'y a pas de contournement.
  • Ne donnez jamais à un <video data-start> un ancêtre qui porte également data-start. lint le rejette avec video_nested_in_timed_element (erreur). Chronométrez le wrapper ou la vidéo, pas les deux.
  • Chaque <audio> a besoin d'un id. lint le rejette avec media_missing_id, et un <audio> sans id n'est jamais pris en charge par le mélangeur, donc le rendu est silencieux.
  • N'animez jamais un .clip avec autoAlpha ou visibility — lint le rejette avec gsap_animates_clip_element. Animez un enfant à la place.
  • Un font-family CSS nommé a besoin d'un @font-face dans le fichier vers un fichier local livré, ou lint déclenche font_family_without_font_face.
  • La sous-composition #root utilise width/height : 100% (ou inset : 0), pas du 1920px/1080px codé en dur. La taille du canevas est data-width/data-height.

Une erreur de lint désactive également les audits de mise en page et de contraste : check signale alors 0 échantillon(s) et 0/0 vérifications de texte, ce qui ressemble à un fichier propre mais signifie que rien n'a été exécuté. Corrigez les erreurs de lint avant de faire confiance à ces chiffres.

Règles non négociables (bugs silencieux que les portes automatisées peuvent manquer)

Révélées ici ; raisonnement complet dans la référence liée. Ne violez pas :

  • Pas d'horloges au moment du rendu / Math.random non seedé / réseau / état d'entrée ; pas de repeat : -1 (utilisez un nombre fini). → determinism-rules.md
  • N'animez jamais display, visibility ou autoAlpha sur un élément .clip. Le framework gère la visibilité du clip, et lint le rejette (gsap_animates_clip_element). Animez un enfant à la place. → determinism-rules.md
  • Pas de <br> dans le texte du corps ; les éléments transformés doivent être de niveau bloc + dimensionnés ; les décoratifs absolus pulsés ont besoin d'une marge de sécurité. → determinism-rules.md
  • Les <video>/<audio> sont trouvés par une requête plate du document, donc le framework les cherche et les décode à n'importe quelle profondeur d'imbrication (y compris à l'intérieur d'un <template> ou wrapper de sous-comp). Une limite dure : lint erre si un <video data-start> se trouve à l'intérieur d'un autre élément simple qui porte également data-start, et l'échec est réel (mauvaises trames source, puis le clip disparaît au milieu du slot), donc placez le timing sur le wrapper ou sur la vidéo, jamais les deux. Les hôtes de sous-composition sont exemptés : les médias à l'intérieur d'une sous-composition rendent correctement. L'autre mise en garde concerne les timelines, pas le placement : une timeline de sous-comp ne peut pas animer les éléments racine de l'hôte. → variables-and-media.md
  • Gardez chaque id unique sur la page assemblée (préfixez les ids de sous-comp avec l'id de la composition, #<id>-hero) afin que votre propre CSS #id et les appels getElementById se résolvent. L'injection de trames n'en dépend plus : le compilateur appose un data-hf-render-id unique au document sur chaque video[src]/audio[src]/img[src]. Les médias qui utilisent des enfants <source> au lieu d'un attribut src ne sont pas marqués, donc les ids uniques comptent toujours là. → composition-patterns.md
  • Un remplissage plein écran sur la racine de la composition est correct sur un rendu normal. Il est supprimé uniquement sur le chemin composite en couches (contenu HDR, ou une composition utilisant des transitions shader), où le moteur force chaque racine de composition transparente pour que la couche en dessous apparaisse. Si votre composition utilise des transitions shader ou des médias HDR, placez le remplissage sur un enfant à pleine largeur (position:absolute; inset:0). → composition-patterns.md

Modifier des compositions existantes

  • Lisez d'abord les fichiers. Préservez le timing, les pistes, les IDs, les variables, les chemins multimédias non liés.
  • Pour connaître ce qui se trouve sur la timeline d'un projet (pistes, clips, débuts, fins, ce qui est joué), exécutez npx hyperframes timeline [--json] au lieu de lire index.html et chaque fichier de sous-composition.
  • Faites correspondre les IDs de composition et les clés de timeline existants.
  • Ajouter un clip : définissez intentionnellement son data-start/data-duration par rapport aux clips qui l'entourent. data-track-index est un couloir d'affichage Studio, pas une contrainte de timing, donc il n'a pas besoin d'être libre.
  • Un clip qui se termine après le data-duration racine est coupé : étendez le data-duration racine jusqu'à la fin du clip dans la même modification (lint avertit clip_ends_past_root_duration).
  • data-hidden sur n'importe quel élément de composition le masque à la fois dans l'aperçu et le rendu, remplaçant sa fenêtre temporelle ; il est non destructif/réversible et activé par l'icône en forme d'œil de la timeline Studio.
  • Ajouter une sous-composition : vérifiez son data-composition-id interne avant de câbler l'hôte.

Validation

Utilisez hyperframes-cli pour les détails des commandes

  • npx hyperframes check réussit (0 résultats à travers lint, exécution, mise en page, mouvement et contraste)
  • Projets avec sous-compositions : npx hyperframes snapshot --at <midpoints> et inspectez chaque image
  • npx hyperframes preview --background pour la révision (l'utilisateur peut éditer n'importe quoi dans la timeline Studio, et le serveur survit à la commande invoquante)
  • npx hyperframes render seulement après l'approbation de l'utilisateur

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

general-video

>

heygen-com/animejs

Anime.js adapter patterns for HyperFrames. Use when writing Anime.js animations or timelines inside HyperFrames compositions, registering animations on window.__hfAnime, making Anime.js seek-driven and deterministic, or translating Anime.js examples into render-safe HyperFrames HTML.

heygen-com/claude-design-hyperframes

Use when running inside Claude Design specifically. Produces a valid, brand-accurate HyperFrames video draft using pre-valid skeletons. For Claude Code / Cursor / Codex, use the `hyperframes` skill instead.

heygen-com/contribute-catalog

Author a new HyperFrames registry block (caption style, VFX block, transition, lower third) or component (text effect, overlay, snippet) and ship it as an upstream PR to the hyperframes repo. Use ONLY when the user wants to CONTRIBUTE to the public catalog — for in-project caption/transition authoring use the `hyperframes` skill, for installing existing registry items use the `hyperframes-registry` skill.

heygen-com/css-animations

CSS animation adapter patterns for HyperFrames. Use when authoring CSS keyframes, animation-delay based timing, animation-fill-mode, animation-play-state, or CSS-only motion that HyperFrames must seek deterministically during preview and rendering.

heygen-com/gsap

GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo). Use when writing GSAP animations in HyperFrames compositions.

heygen-com/hyperframes

Leaves sweep through the frame and part to reveal the headline. HyperFrames block, 1920×1080, 12s, 11 variables.

heygen-com/hyperframes

Render-correctness doctrine for scene-to-scene seams in HyperFrames launch videos — the prerequisites that make transitions composite correctly on the master timeline. Load when assembling the master timeline / index.html, when a white flash appears at a cut or crossfade seam (especially on dark films), when reasoning about why a transition opacity dip shows through, or when verifying the render-side mechanics of how overlapping scene wrappers blend. Covers the opaque stage-ground (#root background) white-flash guard and how the injector overlaps wrappers, holds final frames, ping-pongs tracks, and stamps lint-clean template code onto the master timeline. Does NOT contain the per-transition catalog — see the transition registry for individual transition entries.

heygen-com/hyperframes

The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]

heygen-com/hyperframes

Glass shards fly in through fog and tile themselves into the headline. HyperFrames block, 1920×1080, 12.16s, 19 variables.

heygen-com/hyperframes

A single feature card orbits a dot sphere on approved Blender camera motion. HyperFrames block, 1920×1080, 10s, 4 variables.

heygen-com/hyperframes

A wireframe portal bursts open, the title comes through, then its letters swap into a second phrase. HyperFrames block, 1920×1080, 8s, 9 variables.

heygen-com/hyperframes

An orbiting camera follows an ice logo as it breaks apart, reforms into two text moments, and fades. HyperFrames block, 1920×1080, 22.5s, 216 variables.

heygen-com/hyperframes

House-style oversized macOS cursor technique for HyperFrames launch videos. Load whenever a scene involves cursors or a pointer-led action, when kicking off a UI scene, when igniting a morph/transition/typing run with a click, or when a scene reads as static, dead, or stale and needs a cheap high-yield source of motion to carry the viewer's eye and segment them out of the stale state. Covers cursor size/look (incl. brand-motif cursors), the off-screen entry law, tip-targeting and the click tap, click-ignites-the-next-beat, and exit / cross-scene handoff.

heygen-com/hyperframes

name: embedded-captions

heygen-com/hyperframes

A chain of bevelled cuboids rides a travelling wave as a content carousel. HyperFrames block, 1920×1080, 6.666666666666667s, 40 variables.

heygen-com/hyperframes

A tiled headline surface flips cell by cell under a sweeping depth field to reveal the rear headline. HyperFrames block, 1920×1080, 8s, 18 variables.

heygen-com/hyperframes

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

heygen-com/hyperframes

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

heygen-com/hyperframes

GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene video feel like ONE continuous camera move instead of a stack of independently-animated slides. Covers the vector law (how you exit determines how you enter, incl. the Z scale-sign rule), the film's current, carrier elements, causal motion, the Seam Gate (build-gate enforcement), the ban on idle wobble (motion must PERFORM, not breathe), stillness-before-climax, and the sustained-motion routes. Routes to the low-level technique skills (cut-the-curve — the full catalog incl. waterfall entry + nudge curve, oversized-cursor, seam-craft). These rules SUPERSEDE generic / upstream motion guidance. [continuity, direction, vector, momentum, seam, transition, ease, performance, idle-motion, narrative-motion, film-grammar]

Skills associés