Communitygithub.com

hyperframes-keyframes

Les keyframes sont un contrat de pose : états visibles, identité de sujet continue, exécution sécurisée avec seek, pixels vérifiés.

Qu'est-ce que hyperframes-keyframes ?

Ce skill, `hyperframes-keyframes`, définit les règles et mécanismes pour créer des animations visuelles précises et vérifiables dans le cadre du système HyperFrames. Il s'agit d'un composant essentiel qui se concentre sur le mouvement visuel, laissant l'assemblage des clips, les coupes franches et le timing temporel à `/hyperframes-core` et la gestion audio à `/hyperframes-audio`. Le skill formalise un « contrat de pose » qui garantit que chaque animation a un sujet nommé, des états finaux définis et une identité de sujet continue pendant toute la durée de l'animation. Les utilisateurs peuvent ainsi créer des zooms, des reframes, des panoramiques et des transitions complexes tout en étant certains que l'animation se comportera de manière déterministe lors de la lecture avec seek. Le skill prend en charge plusieurs bibliothèques d'animation, notamment GSAP, les keyframes CSS, Anime.js et WAAPI, fournissant à chacune des squelettes et des directives précises. Il insiste particulièrement sur la vérification via des outils CLI tels que `hyperframes lint` et `hyperframes keyframes`, et propose des diagnostics via des captures d'écran et des tests `--shot`. Il spécifie clairement les canaux de rendu autorisés (transformations, opacité, clip-path, etc.) et interdit les canaux de mise en page, les minuteries asynchrones ou les déclencheurs aléatoires qui compromettraient la reproductibilité.

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

Demander à votre IA préférée

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

Documentation

HyperFrames Keyframes

Les keyframes sont un contrat de pose : états visibles, identité de sujet continue, exécution sécurisée avec seek, pixels vérifiés.

Utilisez hyperframes-animation pour les recettes de scène générales. Utilisez hyperframes-cli pour la documentation complète des commandes. N'utilisez references/keyframe-patterns.md qu'en cas de doute sur le mécanisme d'implémentation, et non pour le style visuel.

Limite de l'édition créateur

Les keyframes gèrent le mouvement visuel, pas l'assemblage des clips. Les coupes franches de plage source, le rognage, l'épissage et le réordonnancement appartiennent à /hyperframes-core : créez un élément multimédia par plage conservée, placez-le avec data-start et data-duration, et sélectionnez son décalage source avec data-media-start. Les plages adjacentes forment une coupe franche. Un fondu enchaîné utilise des clips qui se chevauchent sur différentes pistes avec des keyframes d'opacité visuelle ; les fondus sonores utilisent /hyperframes-audio.

Demande du créateurMécanisme véridique
Punch-in / punch-outKeyframe scale avec x/y ou translation en pourcentage sur un wrapper visuel/crop non temporisé à l'intérieur du clip. Utilisez un tween court/set pour un punch sec et un tween pour un mouvement fluide.
Zoom ou recadrage fluide multi-étatGardez un wrapper sujet actif et créez plusieurs états de zoom/recadrage comme une échelle de pose avec un easing par segment.
Panoramique, recadrage ou mouvement caméra Ken BurnsAnimez la translation du wrapper ainsi que l'échelle. La géométrie est créée ; il ne s'agit pas de suivi facial ou de recadrage sémantique automatique.
Mouvements de caméra enchaînésEnchaînez des beats de transformation étiquetés sur une timeline sécurisée avec seek.
Cut de raccord ou whip pan/hyperframes-animation gère la transition visuelle ; /hyperframes-registry fournit les primitives ; les keyframes préservent la géométrie, la direction et la vélocité créées. Il n'y a pas de découverte automatique de frames de raccord.
Recadrage et masque de reframeInterpolez clip-path ou un masque sur un wrapper visuel intérieur pour recadrer/reframer sans changer le temps source. Les keyframes de polygone peuvent former une transition polygone/masque.
Cut de volet directionnel ou cut iris/révélationAnimez une limite de masque/clip sur des clips visuels qui se chevauchent ; /hyperframes-animation gère la chorégraphie de la transition.
Transition split-screenGardez les deux clips visuels placés par le core, puis keyframez leurs wrappers de crop/masque intérieurs et la géométrie du séparateur.
Retiming source constant/hyperframes-core possède data-playback-rate normalisé (0.1..5) pour une image correcte à la sortie et un son avec préservation de la hauteur. Il est constant pour tout l'élément multimédia.
Rampes de vitesse sourceNon pris en charge : il n'y a pas d'enveloppe de taux de lecture variable dans le temps. Prétraitez un actif multimédia dérivé, puis placez-le via le core.
Freeze / holdUne pose visuelle, une frame source finale ou une sous-composition terminée peut être maintenue. Le freeze arbitraire au milieu de la source n'est pas pris en charge ; prétraitez un segment fixe/dérivé, placez-le comme son propre clip, puis reprenez avec une autre plage source.

Lors de l'édition conjointe de l'image et du son, chargez /hyperframes-core, ce skill pour le mouvement visuel, et /hyperframes-audio pour les fondus, fondus enchaînés, l'automatisation du volume, le ducking/carve, ou les effets sur les pistes placées.

Un traitement de transition visuelle ou de recadrage n'est pas un rognage temporel ou un épissage de source. /hyperframes-core gère la timeline, le timing des clips et les plages source ; les keyframes ne font qu'animer la transition visible ou le recadrage sur les wrappers à l'intérieur de ces clips. Pour les recettes copiables combinant image et son, utilisez /hyperframes-core → references/creator-editing-recipes.md.

Procédure

  1. Identifiez le sujet animé, les états visibles, l'état final et la durée d'exécution.
  2. Choisissez le plus petit mécanisme qui prouve l'invite. Lisez references/keyframe-patterns.md uniquement si le mécanisme n'est pas clair.
  3. Créez des keyframes sécurisées avec seek dans la durée d'exécution déclarée. Construisez de manière synchrone et enregistrez l'instance de la timeline.
  4. Vérifiez avec hyperframes lint, hyperframes check, hyperframes keyframes, un --shot ciblé, et des captures d'écran aux moments de preuve.
  5. Si la preuve échoue, corrigez les keyframes source et relancez le plus petit diagnostic qui a échoué avant le rendu.

Contrat

  • Nommez le sujet en mouvement.
  • Nommez les poses nécessaires pour prouver le mouvement prévu, y compris l'état final.
  • Keyframez les canaux visibles, pas l'état d'aide caché.
  • Préservez l'identité de l'objet lorsque la continuité est importante.
  • Faites un fondu enchaîné uniquement lorsque le mouvement prévu est un remplacement ou une dissolution.
  • Maintenez les états lisibles ou sémantiques assez longtemps pour être vus.
  • La frame finale fait partie de l'animation, pas du nettoyage.
  • Ne revenez pas à la position de repos sauf demande contraire.
  • Ne terminez pas sur du noir sauf demande contraire.
  • Si vous modifiez une scène de démarrage, préservez la mise en page, la copie, les actifs, les couleurs et l'état final, sauf si une refonte est demandée.

Règles d'exécution

GSAP :

  • construisez de manière synchrone au chargement de la page
  • utilisez gsap.timeline({ paused: true })
  • enregistrez comme window.__timelines[compositionId]
  • la clé d'enregistrement doit correspondre à data-composition-id
  • n'appelez pas tl.play() pour un mouvement critique pour le rendu
  • gardez les répétitions finies

Keyframes CSS :

  • durée finie et nombre d'itérations fini
  • délai déterministe
  • animation-fill-mode: both
  • utilisez data-start lorsque le timing appartient à un clip

Anime.js :

  • créez de manière synchrone
  • autoplay: false
  • durée et boucles finies
  • poussez chaque instance dans window.__hfAnime

WAAPI :

  • duration finie
  • fill: "both"
  • construction déterministe
  • la surface textuelle ne liste pas WAAPI ; vérifiez avec --shot (qui cherche WAAPI) et des captures d'écran

N'utilisez jamais pour un mouvement critique pour le rendu :

  • Date.now()
  • performance.now()
  • Math.random() non ensemencé
  • déclencheurs de survol/défilement
  • minuteries
  • timelines créées de manière asynchrone
  • requestAnimationFrame non enregistré
  • boucles infinies

Squelette GSAP

const root = document.querySelector("[data-composition-id]");
const compositionId = root.dataset.compositionId;
const tl = gsap.timeline({ paused: true });

tl.addLabel("state-a", 0);
tl.to(".subject", {
  keyframes: [
    { x: 0, opacity: 1, duration: 0.2 },
    { x: 120, opacity: 1, duration: 0.4, ease: "power2.out" },
    { x: 100, opacity: 1, duration: 0.2, ease: "power2.inOut" },
  ],
  ease: "none",
});

window.__timelines = window.__timelines || {};
window.__timelines[compositionId] = tl;

Utilisez des étiquettes pour les états sémantiques. Utilisez des paramètres de position au lieu de délais enchaînés. Utilisez immediateRender: false pour les tweens from()/fromTo() ultérieurs qui touchent la même propriété.

Formes de keyframes

  • Keyframes tableau : échelle de pose avec durée/easing par étape.
  • Keyframes en pourcentage : timing exact à l'intérieur d'un tween.
  • Tableaux de propriétés : changements multi-arrêts compacts.
  • ease: "none" sur le parent lorsque chaque arrêt porte son propre easing.
  • easeEach lorsque chaque segment doit partager la même sensation.

Ne copiez pas les distances numériques ou les timings des exemples. Dérivez-les de la géométrie et de la durée réelles de la composition.

Pour un sujet se déplaçant entre deux boîtes, préférez un seul tween de transformation continue ou FLIP. Divisez x/y/scale en plusieurs keyframes avec easing uniquement lorsque le spectateur doit ressentir des beats distincts ; chaque segment change de vélocité et peut être perçu comme un accroc.

Canaux

Préférez les canaux visuels/compositeur : x/y/z, xPercent/yPercent, scale, rotationX/Y/Z, skew, transformOrigin, svgOrigin, opacity, autoAlpha, clip-path, masques, variables CSS, valeurs SVG path/dash, transformations de caméra, uniforms de shader.

Évitez les canaux de mise en page/cycle de vie : top/left/right/bottom, width/height, margin/padding, display, visibility, création DOM tardive, superpositions d'aide effectuant le mouvement du sujet.

Pour les changements de visibilité, utilisez autoAlpha sur la timeline GSAP enregistrée avec seek, ou un tl.set() de durée nulle à une limite explicite. Ciblez uniquement un élément non clip ou un wrapper à l'intérieur du clip ; ne ciblez jamais .clip lui-même. Ne faites jamais de tween de durée sur la propriété visibility brute, et ne faites jamais de tween sur display.

Choix du mécanisme

Choisissez le plus petit mécanisme qui prouve l'invite :

BesoinMécanisme
Même sujet change de boîte ou de hiérarchieélément partagé / FLIP
Le sujet parcourt un chemin visiblechemin de voyage
Le trait grandit ou tracedessin de trait
Une forme devient une autre formeinterpolation de forme
La limite de révélation est visibleclip, masque, ou uniforme de shader
Plusieurs éléments bougent avec un ordrestagger / délai indexé
Le texte lui-même bougesubdivision de ligne, mot, caractère ou bande
La surface se plie, s'étire ou se recadrecontre-transformation parent/enfant
L'interface a des étatsmachine d'état explicite
La scène a de la profondeurDOM 3D, Three.js, ou keyframes de caméra/objet WebGL

Les mécanismes peuvent se combiner, mais chacun doit clarifier l'idée. La décoration n'est pas une preuve.

Timing

  • Anticipation uniquement lorsqu'elle clarifie la cause ou la direction.
  • L'accélération quitte le repos.
  • La preuve de pic montre le mécanisme de manière indubitable.
  • Le suivi (follow-through) vend l'énergie et la direction.
  • Le dépassement (overshoot) uniquement lorsque le sujet doit sembler élastique ou tactile.
  • Le voyage à vitesse constante sur un chemin nécessite généralement ease: "none".
  • Les états d'interface discrets nécessitent généralement un ease-out brusque.
  • Les éléments répétés ont besoin de décalages ordonnés, pas d'un timing identique.
  • Les verrouillages finaux ont besoin de maintiens plus longs que les poses de transition.
  • La fluidité signifie une vélocité continue sur le même sujet.
  • Ne chevauchez pas les tweens qui écrivent la même propriété de transformation, sauf si le chevauchement est intentionnel et vérifié.
  • Évitez d'animer de grands changements de clip-path/masque pendant que la même surface héroïque est également mise à l'échelle ou voyage ; utilisez des révélations imbriquées après que le mouvement principal s'est stabilisé.

Texte

Préservez les boîtes de ligne, l'espacement des mots, la lisibilité et l'ajustement final. Si le texte se déplace à l'intérieur, déplacez les glyphes ou les bandes masquées, pas seulement les décorations autour du texte. Prenez des captures des frames lisibles.

SVG

Pour la croissance d'un trait, préférez DrawSVGPlugin, puis stroke-dasharray/stroke-dashoffset. Pour l'interpolation de forme, préférez MorphSVGPlugin ; convertissez les primitives en chemins si nécessaire et divisez les silhouettes complexes en parties plus simples.

3D

L'échelle seule est une fausse profondeur. Utilisez la perspective sur un parent stable, transform-style: preserve-3d, le voyage en z, la rotation, le mouvement de la caméra/du monde, l'occlusion et l'ordre des couches lorsque les objets se croisent.

Utilisez un ou deux angles de diagnostic qui exposent la relation de profondeur. Si la preuve sous angle ne montre aucun croisement de profondeur, améliorez le z/la caméra/l'occlusion.

Canvas / WebGL

Keyframez la position de la caméra, la cible de la caméra, la transformation de l'objet, l'opacité du matériau, les uniforms du shader et l'intensité du post-traitement via un état déterministe. Rendez à partir du temps HyperFrames. Utilisez --ghost car les boîtes de marqueur ne peuvent pas voir le mouvement interne du canvas.

Preuve CLI

npx hyperframes lint
npx hyperframes check
npx hyperframes keyframes .
npx hyperframes keyframes . --json
npx hyperframes keyframes . --runtime all
npx hyperframes keyframes . --selector "<selector>" --shot "<file>" --samples <n>
npx hyperframes keyframes . --selector "<selector>" --shot "<file>" --layout strip --from <t0> --to <t1>
npx hyperframes keyframes . --shot "<file>" --ghost --angle <angle>
npx hyperframes snapshot . --at <times>

Choisissez <selector> pour le véritable sujet animé. Choisissez <times> pour la première frame, les poses de preuve, le final-moins-maintien, et le final exact. Choisissez <angle> uniquement lorsque la profondeur doit être prouvée.

OutilProuve
keyframescibles, arrêts explicites, chemins, traces, mouvement parent/enfant composé, arrêts CSS, enregistrement Anime
--shotfantômes (ghosts), forme de la route, espacement temporel, projection DOM 3D, preuve de sélecteur ciblé
--layout stripmouvement sur place, chevauchements, contact, échelle/opacité subtiles, vagues de texte
--ghostcanvas, WebGL, mouvement de shader, 3D rendu
snapshot --atmasques, lisibilité du texte, état complet, verrouillage final, queues de noir/réinitialisation

Si la preuve du sélecteur semble erronée :

  1. relancez --json
  2. trouvez la cible animée réelle
  3. photographiez cette cible
  4. prenez des captures de frames complètes
  5. faites confiance aux pixels peints plutôt qu'aux logs

Lecture diagnostique

flat signifie qu'il n'y a pas de poses intermédiaires explicites. keyframes signifie qu'il y a des arrêts explicites. max est le temps total en secondes couvert par des keyframes. count est le nombre d'arrêts globaux. calls sont les points d'appel de la timeline. startAt et endAt sont les bords du window de la composition. offset est la position du clip sur la timeline core. empty signifie qu'aucune animation réelle n'est enregistrée. startsAtRun est le premier temps de la composition dans lequel ce clip a des keyframes. firstFrame et lastFrame sont les temps de début et de fin de la cible dans la timeline. target est ce qui est animé.

Lisez flat/keyframes pour repérer les keyframes accidentelles ``

[Le reste du texte est tronqué pour la traduction ; le contenu complet et fidèle doit être traduit de la même manière.]

Individual skills in this repo

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

embedded-captions

>

faceless-explainer

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.

figma

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.

general-video

>

hyperframes

>

hyperframes-animation

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition

hyperframes-audio

>

hyperframes-cli

>

hyperframes-core

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class=

hyperframes-creative

Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use `hyperframes-animation`.

hyperframes-registry

Install, discover, and wire registry blocks and components into HyperFrames compositions. Use when running hyperframes add or hyperframes catalog, installing one item or every block matching a tag, wiring an installed item into index.html, or working with hyperframes.json. Covers discovery, install locations, block sub-composition wiring, component snippet merging, and authoring a new block or component to contribute upstream (idea → scaffold → validate → PR).

jasonfast123/hyperframes-skills

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.

media-use

Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.

motion-graphics

>

music-to-video

Turn a music track (an audio file, a video to pull audio from, or a track generated from a mood brief) into a beat-synced video — lyric video, slideshow, or kinetic promo. The music drives all pacing; any user-supplied images/videos are cut onto the same beat grid, and a complete video needs zero assets. Narrated pieces → the input-matched workflow (see /hyperframes). Unclear → /hyperframes.

pr-to-video

Turn a GitHub pull request (a PR URL, owner/repo#N, or

remotion-to-hyperframes

Port an existing Remotion (React) composition

slideshow

>

talking-head-recut

Package an existing talking-head / interview / podcast video with timed, designed GRAPHIC OVERLAY cards — kinetic titles, lower-thirds, data callouts, quotes, side panels, picture-in-picture — synced to the transcript, on a 16:9 / 9:16 / 4:5 canvas of your choice; the clip plays untouched underneath. Trigger on

Skills associés