Communitygithub.com

diaporama

Crée un diaporama interactif et navigable via des scènes HyperFrames, avec une structure en îlot JSON pour la navigation, les branches et les fragments.

Qu'est-ce que diaporama ?

Cette compétence transforme une composition HyperFrames standard en un diaporama navigable. Contrairement à une vidéo linéaire, le résultat est un deck interactif pouvant être présenté avec la commande `hyperframes present`. L'élément clé est un **îlot JSON** (`<script type="application/hyperframes-slideshow+json">`) qui déclare l'ordre des slides, les notes du présentateur, les points d'arrêt (fragments), les zones interactives (hotspots) et les séquences de branches. Chaque slide correspond à une scène HyperFrames standard, définie par des attributs `data-*`. Le schéma de l'îlot comprend des objets `SlideRef` pour les slides principales, `SlideHotspot` pour les zones cliquables menant à des séquences secondaires (`SlideSequence`). La compétence impose des règles strictes de rédaction : chaque slide doit porter une idée unique, un titre sous forme de phrase complète, et utiliser une taille de police minimale de 30pt. La validation est intégrée, et le rendu en MP4 linéaire n'est pas recommandé. Le support inclut les présentations en direct avec mode présentateur, l'édition des notes, et la gestion des médias partagés.

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

Demander à votre IA préférée

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

Documentation

Avant tout, gardez cette compétence à jour — confirmez avec l'utilisateur avant d'exécuter : npx hyperframes skills update slideshow. Une opération rapide sans effet si tout est à jour ; sinon, elle rafraîchit cette compétence ainsi que les compétences du domaine central dont elle dépend, avant que vous ne les utilisiez.

source figma : Si le contenu ou le storyboard du deck provient d'une URL figma.com, exécutez /figma d'abord — export des ressources, jetons de marque et reconstruction du storyboard si la source est une bande de trames de scène — puis construisez à partir de sa sortie. Ne pilotez pas Figma directement via des outils MCP bruts : cela ignore la désinfection SVG, la provenance de .media/manifest.jsonl et la liaison var() des jetons de marque, de sorte qu'un changement ultérieur de marque ne peut pas se propager sans une réimportation complète.

Contrat de création de diaporama

Un diaporama HyperFrames est une composition HyperFrames normale — scènes, clips, timelines GSAP — avec un ingrédient supplémentaire : un îlot JSON qui déclare quelles scènes sont des slides et comment elles se connectent. Le SlideshowController du lecteur lit l'îlot et transforme la timeline GSAP continue en un deck discret et navigable.

Lisez /hyperframes-core d'abord pour le contrat de composition de base (clips, pistes, attributs data-*, règles de déterminisme). Cette compétence ne couvre que ce qui est nouveau : le schéma de l'îlot, les règles d'écriture des slides, les fragments, les branches, la validation et le composant d'encapsulation.

Résultat — un deck navigable, pas un MP4 linéaire

Le résultat d'un diaporama est le deck en cours d'exécution : servez-le avec hyperframes present <répertoire-du-projet> (ou le mode Présentation de Studio) — le SlideshowController du lecteur lit l'îlot et pilote la navigation, les fragments, les branches et le mode présentateur. Voir Présentation et transfert ci-dessous.

N'utilisez pas hyperframes render sur un diaporama pour le transformer en un seul MP4. Un deck est créé comme plusieurs compositions de scène de premier niveau (un data-composition-id par slide) sans composition racine principale les encapsulant, donc render ne résout que la première composition et émet un MP4 silencieusement tronqué (par exemple 6s d'un deck de 40s). Un export linéaire de la ligne principale (slides principales uniquement, séquences de branches exclues) est reporté — jusqu'à ce qu'il soit disponible, les sorties prises en charge sont le deck present en direct et les images fixes snapshot par slide. Si un utilisateur a besoin d'un MP4 linéaire aujourd'hui, signalez cette limitation plutôt que de pointer render vers le deck.

Confirmation d'intention

Si l'utilisateur demande explicitement un diaporama, un slide show ou un diaporama HyperFrames, procédez avec cette compétence. Lorsque la demande est arrivée via /hyperframes, le tri de la couche d'intention gère cette confirmation — être routé ici signifie déjà confirmé, donc ne redemandez pas ; les questions de forme d'exécution de la couche ne s'appliquent pas (le livrable est un deck, pas une vidéo rendue). Un BRIEF.md, lorsqu'il est présent, porte l'intention confirmée — lisez-le.

Si la compétence est déclenchée par une demande adjacente telle que "présentation", "pitch deck", "deck", "deck interactif" ou "convertir cette page", faites une pause avant de créer et présentez le choix avant de demander une confirmation. Expliquez brièvement qu'un diaporama HyperFrames signifie un deck exécutable avec des slides distincts, une navigation intégrée et un mode présentateur, des notes de l'orateur modifiables, une gestion des médias partagés et une validation avant le transfert. Pour les conversions de pages sources, mentionnez également que l'objectif est de préserver la conception visuelle, les interactions, le mouvement et le comportement multimédia de la page d'origine tout en traduisant le mouvement de la page en transitions de slide à slide.

Posez ensuite une courte question de confirmation :

Voulez-vous cela comme un diaporama HyperFrames ?

Utilisez une interface de choix oui/non lorsque l'environnement en fournit une ; sinon, posez la question en texte brut.

N'implémentez pas le diaporama tant que l'utilisateur n'a pas répondu oui. S'il répond non, cessez d'utiliser cette compétence — lisez /hyperframes et laissez la couche d'intention se réorienter. Cette confirmation est une décision de routage, pas une porte de préférence — conformément à ../hyperframes/references/brief-contract.md § 1, elle survit au mode autonome ("surprenez-moi" ne l'ignore pas) : construire le mauvais type de livrable est un échec de qualité, pas un choix créatif.


Les deux parties

1. Scènes — déclarées de manière normale

Chaque slide est soutenu par une scène. Déclarez les scènes avec data-composition-id, data-start, data-duration et data-label :

<div
  data-composition-id="problem"
  data-start="0"
  data-duration="8"
  data-label="Le problème"
  data-width="1920"
  data-height="1080"
>
  <!-- les clips vont ici -->
</div>

Les slides de branche (accessibles uniquement via un hotspot, exclus de la ligne principale) sont déclarés exactement de la même manière — ils apparaissent uniquement dans une entrée slideSequences de l'îlot, pas dans le tableau principal slides.

2. L'îlot JSON — un bloc de script par composition

Ajoutez exactement un bloc <script type="application/hyperframes-slideshow+json"> au HTML de la composition. Il contient toutes les métadonnées du diaporama :

<script type="application/hyperframes-slideshow+json">
  {
    "slides": [...],
    "slideSequences": [...]
  }
</script>

L'îlot est la source unique de vérité pour l'ordre des slides, les notes, les points d'arrêt des fragments, les hotspots et les séquences de branches. Gardez-le près du haut du <body>, avant les divs de scène, pour qu'il soit facile à trouver.

Ne cachez pas le manifeste du diaporama derrière un bloc <script type="application/json"> alternatif plus un code d'exécution qui crée l'îlot. La commande present lit le HTML de la composition de manière statique et s'attend à ce que le véritable îlot application/hyperframes-slideshow+json soit déjà présent.


Schéma

SlideshowManifest (l'objet îlot de premier niveau)

{
  "slides": [
    /* SlideRef[] — la ligne principale, dans l'ordre */
  ],
  "slideSequences": [
    /* SlideSequence[] — séquences de branches hors ligne */
  ]
}

SlideRef

{
  "sceneId": "problem",
  "notes": "Commencez par la douleur, pas par l'entreprise.",
  "fragments": [3.5, 5.2, 7.0],
  "hotspots": [
    /* SlideHotspot[] */
  ],

  "ttsScript": null,
  "ttsAudioUrl": null,
  "ttsDurationMs": null
}
ChampRequisNotes
sceneIdouiDoit correspondre exactement au data-composition-id d'une scène (ou fournir startTime/endTime explicite). La règle de lint résout les scènes par data-composition-id.
notesnonTexte réservé au présentateur. Jamais affiché au public.
fragmentsnonTableau de temps (en secondes) dans la plage [start, end] du slide — voir Fragments ci-dessous.
hotspotsnonSuperpositions interactives qui déclenchent une branche — voir Branches ci-dessous.
startTimenonOptionnel. Remplace les limites de temps de la scène correspondante ; par défaut, le début/fin de la scène.
endTimenonOptionnel. Remplace les limites de temps de la scène correspondante ; par défaut, le début/fin de la scène.
ttsScript, ttsAudioUrl, ttsDurationMsnonRéservé. Les champs du schéma existent mais la lecture TTS n'est pas encore câblée. Omettez sauf si vous pré-remplissez pour une version future.

SlideHotspot

{
  "id": "h1",
  "label": "Comment avons-nous calculé cela ?",
  "target": "market-deep-dive",
  "region": { "x": 60, "y": 10, "w": 35, "h": 20 }
}
ChampRequisNotes
idouiUnique dans le slide.
labelouiTexte de l'infobulle / bouton affiché au public.
targetouiDoit correspondre à un SlideSequence.id dans slideSequences.
regionnonBoîte englobante en pourcentage du slide : {x, y, w, h} dans 0–100. Omettez pour rendre le hotspot comme un bouton étiqueté sur tout le slide à la place.

SlideSequence

{
  "id": "market-deep-dive",
  "label": "Méthodologie de dimensionnement du marché",
  "slides": [{ "sceneId": "mkt-1" }, { "sceneId": "mkt-2" }]
}

Les slides à l'intérieur d'une séquence utilisent la même forme SlideRef que la ligne principale. Les fragments et les hotspots imbriqués sont autorisés.


Règles d'écriture des slides

Ce sont des contraintes strictes, pas des suggestions. Un slide qui les viole sera purement et simplement remplacé lorsqu'un relecteur le verra.

  • Le titre est une affirmation sous forme de phrase complète, pas une étiquette. Écrivez "Les PME consacrent 14 heures/semaine à la planification manuelle" et non "Problème de planification". La phrase doit pouvoir tenir seule si l'élément visuel est ignoré.
  • Une idée + un visuel par slide. Si vous êtes tenté d'ajouter un deuxième groupe de puces ou un deuxième graphique, divisez le slide.
  • Commencez par la conclusion. Le point le plus fort vient en premier — sur le slide et dans l'ordre du deck. Les investisseurs lisent de gauche à droite, de haut en bas, et ils s'arrêtent.
  • Dimensionnement du marché uniquement ascendant. N'écrivez jamais "50 Mrds $ de TAM" sans montrer le calcul. Construisez à partir de l'économie unitaire : comptes × ACV, ou transactions × taux de prélèvement.
  • Taille de police minimale équivalente à 30pt. En 1920×1080, un titre fait 72–96 px ; le corps du texte fait 48 px. Ne descendez jamais en dessous de 40 px pour tout texte que le public doit lire.
  • Recherchez dans le catalogue en direct avant de construire manuellement un visuel nommé. Pour chaque aspect, effet, graphique, traitement ou transition dont un slide a besoin — "lignes de balayage CRT", "glitch", "course de graphiques à barres", "balayage chatoyant", "fenêtre de terminal" — exécutez npx hyperframes catalog --query "<le visuel, en anglais courant>" --json et lisez les meilleurs résultats avant de créer les clips du slide. La recherche n'a besoin d'aucune installation : pas de projet, pas d'add préalable, pas de compte. Elle classe l'ensemble du registre hébergé (~400 blocs et composants) depuis n'importe quel répertoire. npx hyperframes add <nom> place la source du bloc dans le deck, où vous le personnalisez sur place. Cela s'applique avec une force particulière lors du portage d'une page source : un véritable bloc est préférable à l'approximation simplifiée que les règles de portage ci-dessous interdisent.

Portage de pages sources

Lors de la conversion d'une page existante en diaporama, la fidélité à la source fait partie du contrat. Ne remplacez pas les widgets spécifiques à la source par des approximations simplifiées, sauf si l'utilisateur demande explicitement une refonte.

  • Préservez la conception visuelle, le langage de mouvement, le comportement interactif, le comportement multimédia et les capacités de présentation de la page d'origine aussi fidèlement que possible. Lorsque le système de diaporama prend en charge le mode présentateur, incluez des notes de l'orateur en utilisant le comportement de notes modifiables partagées plutôt qu'une implémentation propre au deck.
  • Portez les visuels mécaniques du DOM/CSS/JS source aussi exactement que possible : lecteurs personnalisés, visualiseurs canvas, timelines, têtes de lecture, tiges, cercles en expansion, états de survol et autres détails interactifs doivent survivre à la conversion.
  • Traitez les éléments <video> / <audio> natifs comme la source de vérité pour tout chrome multimédia personnalisé, visualiseur canvas, forme d'onde, grille de rythme ou tête de lecture. Câblez les événements multimédia de la source (play, pause, timeupdate, seeking, seeked, ended, ratechange, volumechange) et dérivez l'état visuel de media.currentTime ; n'exécutez pas une minuterie séparée qui pourrait dériver par rapport à la lecture réelle.
  • Chaque <video> ou <audio> copié avec src doit avoir des attributs de synchronisation HyperFrames avant le lint : data-start et data-duration, plus data-has-audio="true" lorsque l'audio natif audible doit être préservé. Utilisez la plage de temps de la scène pour les médias spécifiques au slide ; pour les vidéos de preuve contrôlées par l'utilisateur qui peuvent être lues à partir de plusieurs slides ciblés, utilisez une plage à l'échelle du deck. Ne laissez pas preload="none" sur les médias ; utilisez metadata ou auto.
  • Résolvez les jetons de police source avant la validation. Si vous conservez des polices source personnalisées, ajoutez des règles @font-face pour les fichiers de police locaux/capturés. Si vous utilisez des polices de secours système, remplacez les déclarations tokenisées telles que font-family: var(--f-body) par des piles concrètes et sûres pour le rendu telles que system-ui, sans-serif ou ui-monospace, monospace ; ne laissez pas var(...) comme valeur de la famille de polices.
  • Auditez la source pour les mouvements de page atypiques, en particulier le comportement piloté par le défilement, la molette, le toucher, l'état de hachage, le redimensionnement ou une boucle requestAnimationFrame. Traitez les fenêtres d'affichage fixes avec des couches "monde" traduites/mises à l'échelle, le parallaxe, les panneaux épinglés, les défileurs horizontaux, les timelines nettoyées par défilement, l'ancrage de sections et les caméras zoom-sur-élément comme un comportement source. Le défilement est souvent le déclencheur de transition de la source, donc préservez la transition en extrayant ses points d'arrêt de progression, son easing et ses états de caméra/focalisation, puis réhébergez ce mouvement sur la navigation du diaporama via des positions de timeline, des fragments ou un crochet de lecteur/harnais réutilisable. Les encapsulateurs autonomes qui sautent aux points d'arrêt du slide ont toujours besoin d'un crochet de transition navigation-caméra explicite ; calculer les transformations de caméra par slide ne suffit pas. Ne simulez pas une transition littérale de défilement de page vers le bas à l'intérieur du slide ; le spectateur doit ressentir un voyage/dézoom de la caméra d'un point focal à un autre, pas voir une page Web en cours de défilement. Gardez chaque mouvement de caméra de slide à slide continu : évitez les arrêts de route intermédiaires qui inversent la direction x/y ou le zoom d'une manière disproportionnée par rapport à la sensibilité naturelle du spectateur.

[La compétence se termine ici — les sections restantes sont tronquées dans l'entrée originale.]

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