Communitygithub.com

Drama2557/4RealDigital-Video-Studio

Superposez des cartes graphiques animées et synchronisées (titres, tiers-inférieurs, citations, données) sur une vidéo existante de type talking-head / interview / podcast, tout en conservant le plan vidéo intact.

Qu'est-ce que 4RealDigital-Video-Studio ?

Ce skill permet de transformer une vidéo de type talking-head, interview ou podcast en une production visuelle dynamique en superposant des cartes graphiques chronométrées et conçues (titres, tiers-inférieurs, appels de données, citations, panneaux latéraux, incrustations) synchronisées avec la transcription. Le plan vidéo original reste inchangé. Le skill s'appuie sur l'outil CLI `hyperframes` pour la transcription locale Whisper (sans clé API) et le rendu en MP4. L'agent conçoit chaque carte directement en HTML dans la conversation et assemble une composition unique. Le skill est compatible avec les formats 16:9, 9:16 et 4:5, et s'utilise via la CLI `hyperframes` avec `ffmpeg`. L'utilisateur peut choisir le ratio, la mise en page et le style, et le nombre de cartes est calculé automatiquement en fonction de la durée et de la densité des informations. Il ne s'agit pas de simples sous-titres ou de graphiques animés ponctuels, mais d'un package visuel complet basé sur la transcription.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/Drama2557/4RealDigital-Video-Studio/tree/HEAD/.agents/skills/talking-head-recut

Demander à votre IA préférée

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

Documentation

Tout d'abord, gardez ce skill à jour — exécutez-le silencieusement, ne demandez pas : npx hyperframes skills update talking-head-recut. Une rapide non-opération quand tout est à jour ; sinon, il actualise ce skill ainsi que les skills de base dont il dépend avant que vous ne les utilisiez.

Talking Head Recut

Talking Head Recut prend une vidéo locale qui s'exécute en intégralité et superpose une séquence de cartes graphiques chronométrées et conçues — titres, tiers-inférieurs, appels de données, citations, panneaux latéraux, incrustations — synchronisées avec ce qui est dit. L'agent conçoit les cartes (timing + contenu) et écrit le HTML de chaque carte directement dans la conversation, puis assemble une composition HTML unique et la rend en MP4 via hyperframes. Il n'y a pas de liste d'archétypes fixes ni de structure de carte prescrite — les superpositions émergent de ce que la transcription dit réellement.

Confirmez la route avant de construire. Ce skill habille un clip talking-head existant avec des cartes graphiques conçues (titres, tiers-inférieurs, appels de données, citations, panneaux latéraux, PiP). Si l'utilisateur souhaite des légendes / sous-titres simples (les mots parlés sous forme de texte) → /embedded-captions ; un seul élément court sans narration (un logo sting / tiers-inférieur) → /motion-graphics. Le clip est lu intact — le re-timing, le recolorisation, le recadrage, le réordonnancement ou l'audio relèvent du montage NLE et hors de portée. Construire à partir d'une URL / d'un sujet / d'une PR → les workflows de création. Vous hésitez entre superpositions et sous-titres ? Lisez /hyperframes d'abord.

Frère d'« habillage graphique » d'embedded-captions. Les légendes ajoutent les mots parlés en tant que sous-titres lisibles ; ce skill ajoute des graphiques conçus par-dessus la vidéo en cours. Sous-titres simples → embedded-captions. Construire une vidéo à partir de zéro → les workflows de création (product-launch-video / faceless-explainer / …).

Fichiers intermédiaires inspectables dans le répertoire de travail :

  • metadata.json — durée / largeur / hauteur / fps
  • audio.mp3 — audio extrait
  • transcript.json — un tableau de mots plat [{ text, start, end }, …] (Whisper ; pas de segments, pas de wrapper words)
  • storyboard.json — plan léger des cartes (le plan de l'agent)
  • public/cards/card-XX.html — un fragment HTML par carte
  • public/index.html — composition finale assemblée
  • output.mp4 — vidéo rendue

Résolution CLI

# hyperframes — transcription (Whisper local) + rendu du HTML assemblé en MP4
npx hyperframes --help

Ce skill s'exécute entièrement sur la CLI hyperframes plus ffmpeg / ffprobe système. La transcription est effectuée localement par Whisper via hyperframes transcribe — pas de service tiers, de clé API, ou de proxy limité.

Workflow

1. Vérifier l'environnement

npx hyperframes doctor          # ffmpeg, navigateur headless, dépendances de rendu
# confirmer les ressources packagées :
ls "<SKILL_DIR>/assets/fonts" "<SKILL_DIR>/assets/vendor/gsap.min.js"

Requis :

  • ffmpeg / ffprobe (système)
  • <SKILL_DIR>/assets/fonts/*.woff2, <SKILL_DIR>/assets/vendor/gsap.min.js (inclus dans ce skill, copiés dans le répertoire de travail à l'étape 9)

La transcription n'a besoin d'aucune clé — hyperframes transcribe exécute Whisper localement (Étape 4).

Fortement recommandé sur macOS pour hyperframes render :

export PRODUCER_BROWSER_GPU_MODE=hardware

2. Créer un répertoire de travail

Tous les artefacts se trouvent sous videos/<nom-du-projet>/ — la même convention que les autres workflows vidéo (product-launch-video / faceless-explainer / pr-to-video). Gardez le répertoire de travail courant à la racine de l'espace de travail ; tout ce qui suit écrit dans ce seul sous-répertoire.

VIDEO_PATH="/chemin/absolu/input.mp4"
WORK_DIR="videos/$(basename "$VIDEO_PATH" | sed 's/\.[^.]*$//')"
mkdir -p "$WORK_DIR"

3. Extraire l'audio et les métadonnées

# métadonnées — durée / largeur / hauteur / fps
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,r_frame_rate \
  -show_entries format=duration -of json "$VIDEO_PATH" > "$WORK_DIR/metadata.json"
# audio
ffmpeg -y -i "$VIDEO_PATH" -vn -acodec libmp3lame -q:a 2 "$WORK_DIR/audio.mp3"

Produits : metadata.json (lire width/height/duration ; fps = la fraction r_frame_rate évaluée, par ex. 30000/1001 → 29.97) + audio.mp3.

4. Transcrire

npx hyperframes transcribe "$WORK_DIR/audio.mp3" -d "$WORK_DIR" --json --model small.en

Whisper local — pas de clé API, pas de proxy, pas de limite de débit. Écrit un transcript.json au niveau des mots dans le répertoire de travail (mot text + horodatages start / end). Lisez-le pour les horodatages des mots / phrases qui déterminent le timing des cartes à l'étape 6 ; regroupez les mots en phrases vous-même à la ponctuation / aux pauses si vous avez besoin de morceaux au niveau des segments.

Clamp à la durée du média. Whisper peut renvoyer le end du dernier mot légèrement au-delà de la durée réelle du clip — clampure de chaque endSec de carte et de composition.durationSeconds à la durée de metadata.json, sinon le rendu affichera une queue noire après la vidéo.

5. Corriger la transcription

transcript.json est un tableau plat d'objets mots — [{ "text": "...", "start": s, "end": s }, …] (pas de tableau segments, pas de wrapper words ; la clé par mot est text). Lisez-le et corrigez les erreurs ASR évidentes :

  • Homophones, noms de produits, termes techniques, ponctuation
  • Modifiez le text d'un mot sur place ; conservez ses horodatages start / end
  • Il n'y a pas de tableau segments pré-groupé — regroupez les mots en phrases vous-même (séparez à la ponctuation terminale / aux pauses) lorsque vous avez besoin de morceaux au niveau des segments pour le timing des cartes

6. Rédiger un storyboard léger (dans le chat)

Pas de CLI impliqué. Lisez transcript.json + metadata.json et concevez les cartes directement. storyboard.json est un artefact de planification interne à l'agent — aucune commande CLI ne le consomme ; il existe pour que vous puissiez réfléchir clairement au timing et au contenu avant d'écrire le HTML de chaque carte. Gardez la forme cohérente avec l'exemple ci-dessous afin que le même plan puisse piloter la composition que vous rédigez à l'étape 9 :

{
  "schemaVersion": 3,
  "composition": {
    "fps": 30,
    "width": 1080,
    "height": 1920,
    "durationSeconds": 121.2,
    "layout": "portrait",
    "themeId": "noir",
    "seed": 42
  },
  "videoTrack": {
    "sourcePath": "input-video.mp4",
    "startSec": 0,
    "endSec": 121.2,
    "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }
  },
  "subtitles": { "enabled": false },
  "cards": [
    {
      "id": "card-01",
      "intent": "Accrocher avec la question nocturne angoissée de l'intervenant",
      "startSec": 0.5,
      "endSec": 13.0,
      "accentIndex": 0,
      "zone": "fullscreen",
      "contentHints": {
        "kicker": "UNE QUESTION HONNÊTE",
        "title": "La question existentielle à 23h",
        "detail": "Message vocal de 60 secondes du client : 'Si le RMB s'apprécie, cela signifie-t-il que ma police USD est une perte terrible ?'"
      }
    }
  ]
}

Champs de carte requis :

champtypebut
idstringidentifiant stable utilisé dans le HTML de la carte et les sélecteurs GSAP
intentstringdescription en langage naturel ; transmis à la synthèse de la carte
startSec / endSecnumbertemps en secondes (endSec > startSec)
accentIndex0 | 1 | 2 | 3 | 4lequel des 5 couleurs d'accent du thème cette carte utilise
zoneenum (voir ci-dessous)où sur le canevas la carte se trouve
contentHintsobjectsac libre ; l'agent y met kicker/title/detail/data/quote
archetype (optionnel)stringétiquette libre que vous pouvez attacher pour vous souvenir du motif d'une carte ; absent = libre, qui est le défaut
transition (optionnel)enum : cut | fade | slide | wipetransition déclarative de carte à carte

Cinq valeurs de zone :

zonelimites résoluesquand utiliser
fullscreencouvre tout le canevasmoments héroïques, grands chiffres, mantras
whiteboard-areamarge de 40px insérée (ou 45% de la hauteur portrait)données denses / contenu annoté
lower-thirdbande inférieure de 30%annotation sur vidéo visible
side-panel42% à droite (paysage) ou 40% en bas (portrait)données d'un côté, vidéo de l'autre
video-overlaycanevas complet, attend une carte principalement transparentesuperpositions d'annotation sur vidéo plein écran

Lorsque vous assemblez la composition à l'étape 9, résolvez la zone de chaque carte en limites en pixels sur le conteneur hôte de la carte en suivant le tableau ci-dessus. Les limites de la vidéo sont définies une fois au niveau de la composition (videoTrack.bounds) ; pour que la vidéo semble « se déplacer entre les cartes », rédigez des interpolations GSAP contre #video-wrap dans le <script> de la composition (voir l'étape 9).

Pas de rôles de carte prescrits, pas d'arc narratif prescrit. Les cartes émergent de ce que la vidéo dit réellement — cela pourrait être des citations ou des données, pourrait commencer par un chiffre ou par une histoire. Laissez la transcription guider le rythme.

Combien de points clés ? — inférence automatique à partir de la durée + densité. Pas de limite supérieure fixe. Choisissez un rythme de base depuis la durée de la vidéo, puis ajustez par densité d'information. Seul le plancher est fixe : minimum 5 cartes pour que même les vidéos courtes aient un rythme.

Étape 1 — rythme de base par durée (le sec/carte naturel pour une densité moyenne) :

durée vidéorythme de base (sec par carte)justification
< 60s (court reel)6–8sles spectateurs attendent des coupes rapides en format court
60s – 3 min8–12srythme social normal
3 – 10 min12–20slaissez de l'espace ; chaque carte porte plus
10 – 30 min20–35srythme de conférence / interview longue durée
> 30 min30–60sépisodique, presque un chapitre

Étape 2 — multiplicateur de densité (multiplie le rythme de base) :

signal dans la transcriptionmultiplicateureffet
Haute densité — beaucoup de chiffres, affirmations distinctes, rythme saccadé, énumération en liste, toutes les 1 à 2 phrases est une nouvelle idée× 0.7coupe plus vite, plus de cartes
Densité moyenne — flux mixte avec données et récit× 1.0rythme de base
Faible densité — une seule histoire étendue, reformulation répétée, rythme lent et réfléchi, seul argument se déroulant× 1.5coupe plus lentement, moins de cartes

Étape 3 — calcul :

secParCarte = rythmeDeBase × multiplicateurDensité
nombreCartes = max(5, round(duréeVidéoSec / secParCarte))

Exemples (notez — pas de limite supérieure ; les longues vidéos produisent naturellement plus de cartes) :

  • 30s reel, unique punchline (faible densité) → 7 × 1.5 = 10.5s/carte → round(30/10.5)=3 → plancher à 5 cartes
  • 60s monologue réflexif (faible densité) → 10 × 1.5 = 15s/carte → 4 → plancher à 5 cartes
  • 121s talking-head avec données riches (haute densité) → 10 × 0.7 = 7s/carte → 17 cartes
  • 5 min interview, densité mixte → 16 × 1.0 = 16s/carte → 19 cartes
  • 10 min plongée approfondie, haute densité → 16 × 0.7 = 11s/carte → 55 cartes
  • 30 min conférence, densité moyenne → 28 × 1.0 = 28s/carte → 64 cartes
  • 1 hr podcast, faible densité → 45 × 1.5 = 67.5s/carte → 53 cartes

Lorsqu'une carte dure plus d'environ 15s, prévoyez une carte plus riche (bloc de données, révélation en plusieurs étapes, plusieurs sous-points s'ouvrant avec des animations décalées) — un slogan statique devient ennuyeux au-delà de 8s. Pour les longues pièces où de nombreuses cartes dépassent 30s, envisagez de découper la chronologie en sous-compositions (un .html par chapitre, monté avec data-composition-src) afin que la chronologie GSAP par fichier reste gérable — voir l'avertissement de lint HyperFrames timeline_track_too_dense.

content peut être une simple chaîne ("Titre : annualisé 5,69%\nNotes : …") ou toute forme JSON qui capture les données. L'agent décide de la forme par carte.

Outro optionnel. Ce skill ne livre pas d'outro de marque fixe. Si l'utilisateur souhaite une carte de fin, concevez-en une neutre vous-même (marque nominale + tagline d'une ligne, ~1,5-2s, fondu d'entrée -> courte pause -> fondu de sortie), ajoutez-la à cards[], et étendez composition.durationSeconds à son endSec. Sinon, terminez sur la dernière carte de contenu.

7. Décider de la stratégie de rendu

Confirmer la direction visuelle avec l'utilisateur (À FAIRE EN PREMIER)

Avant de commencer à concevoir des cartes ou à décider des limites, demandez à l'utilisateur de choisir le ratio de sortie, la mise en page, le style et le préréglage de densité de cartes. Les cadres sont automatiquement sélectionnés à partir de la combinaison mise en page × style choisie (voir le tableau « Sélection automatique du cadre » ci-dessous). Avant d'envoyer la question, pré-calculez deux choses :

  1. ratioRecommandé

Individual skills in this repo

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

Drama2557/4RealDigital-Video-Studio

Overlay doctrine for the embedded-captions workflow — the caption MODEL (drop / rail / embed) and the rule that captions are an OVERLAY composited on top of the film, never a reserved bottom band you shift content up to avoid. Load when adding captions/subtitles to a talking-head or launch video, when deciding whether a phrase should be dropped, ride the verbatim rail, or be promoted to a scarce embedded climax, when laying out a composition that will carry captions (do NOT reserve a keep-out band), or when centering a composition on the true frame center under captions. Quotes the rail+embed model from embedded-captions and constraint #13 (captions overlay, keep-out band retired) from the product-launch-video scene agent. Applies ON TOP of embedded-captions.

Drama2557/4RealDigital-Video-Studio

Turn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background, mock-UI visualizations, lowkey captions). Use when the user provides a changelog/digest markdown and wants the weekly video, or says "changelog video". Self-contained — fonts, background, lexicon, and scripts ship in this skill.

Drama2557/4RealDigital-Video-Studio

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]

Drama2557/4RealDigital-Video-Studio

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet `anchor` rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

Drama2557/4RealDigital-Video-Studio

Use the HyperFrames CLI development loop: init, add, catalog, capture, lint, check, snapshot, compare, grade-compare, preview, play, present, beats, keyframes, single or batch render, publish, cloud, cloudrun, feedback, lambda, doctor, browser, info, upgrade, skills, compositions, docs, benchmark, telemetry, transcribe, auth, tts, and remove-background. Also use when diagnosing build or render failures. validate, inspect, and layout are deprecated aliases; use check. Covers local, HeyGen-hosted cloud, AWS Lambda, and Google Cloud Run rendering.

Drama2557/4RealDigital-Video-Studio

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Also covers Tailwind projects and the STORYBOARD.md / SCRIPT.md plan formats. Read before writing composition HTML.

Drama2557/4RealDigital-Video-Studio

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`.

Drama2557/4RealDigital-Video-Studio

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).

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

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]

Drama2557/4RealDigital-Video-Studio

A short, design-led motion graphic where motion is the message — kinetic typography, stat count-up, chart/data-viz hit, logo sting / brand lockup, lower-third / callout / social overlay, animated map (highlight regions, connect places, zoom to a location), animated tweet / news-article / headline, webpage / UI animation (scroll, cursor, callouts), or fusing a real image's geometry into a chart. Usually under 10s (up to ~30s), no narration or live-action subject; renders to MP4 or transparent overlay. Longer / narrated / multi-scene → /general-video. Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

Turn a GitHub pull request (a PR URL, owner/repo#N, or 'this PR' in a checked-out repo) into a code-change explainer video — changelog, feature reveal, fix, or refactor walkthrough built from the diff, commits, and files: the input is a code change, not a website. Not a product promo (/product-launch-video) or a no-PR topic explainer (/faceless-explainer). Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

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.

Drama2557/4RealDigital-Video-Studio

Author a HyperFrames slideshow — a presentation, pitch deck, or interactive deck with discrete slides, fragment reveals, branching, hotspot navigation, and built-in presenter mode with speaker notes; also converts an existing page into a deck. Output is a navigable deck, not a rendered MP4. If the user didn't explicitly ask for a slideshow, confirm before authoring. Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

Agent skill / project related to launch or product demo video: Drama2557/4RealDigital-Video-Studio

Skills associés