Communitygithub.com

Elis3omndz/Claude_Skills

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. Read before writing composition HTML.

Claude_Skills 是什么?

Claude_Skills is a Claude Code agent skill that 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. Read before writing composition HTML.

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Elis3omndz/Claude_Skills/tree/HEAD/.claude/skills/hyperframes-core

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Plugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.

HyperFrames Core

Agent pitfalls (read first):

  • Center with flex/inset, not CSS transform: translate(-50%,-50%) on a node you then GSAP x/y. Lint: gsap_css_transform_conflict. Use fromTo or xPercent/yPercent.
  • Do not add a scene-exit tl.set(..., {visibility:"hidden"}). The runtime already hides timed clips. Opacity fades on inner nodes (or opacity on .clip) are enough. Caption hard-kills are a different rule.
  • window.__timelines["id"] must match the root data-composition-id.
  • After render, read the summary's second line: beginframe vs screenshot, GPU mode, stage timings. screenshot + software gpu on Linux is the slow path.

HyperFrames renders video from HTML. A composition is an HTML file whose DOM declares timing with data-* attributes, whose animation runtime is seekable, and whose media playback is owned by the framework.

This skill is the technical contract — how to build one hyperframes project. The body below is the build guide; per-topic detail lives in references/ (index next), read on demand. Process docs (brief, storyboard, review, production, dispatch, frame-worker) live in /hyperframes → references/. Other concerns live in the sibling domain skills — hyperframes-animation, hyperframes-creative, media-use, hyperframes-cli, hyperframes-registry. The capability map in /hyperframes says what each one covers.

References

FileRead it to…
references/minimal-composition.mdstart from the smallest renderable composition skeleton
references/composition-patterns.mdchoose monolithic vs modular; structure a modular index.html; pick a sub-comp archetype
references/data-attributes.mdlook up any data-* (root / clip / sub-comp host / legacy aliases); use class="clip"
references/tracks-and-clips.mdunderstand what data-track-index does (and does not) control, z-index, time a clip relative to another; list every track and clip with npx hyperframes timeline
references/creator-editing-recipes.mdcopy truthful cut/trim/reorder/retime/freeze/camera/mask/crossfade/audio editing recipes and their limits
references/sub-compositions.mdwire a sub-composition (host attrs, <template>, per-instance vars) and animate inside it
references/variables-and-media.mddeclare variables; place <video>/<audio>, set volume, trim
references/determinism-rules.mdbuild a seekable timeline; determinism bans; layout / text fit
references/full-screen-motion.mdauthor full-frame motion with shared backgrounds
references/tailwind.mdwork in a Tailwind v4 project (init --tailwind; runtime contract differs from Studio's v3)

For animation runtime specifics (GSAP API, Lottie, Three.js, etc.) go to hyperframes-animation → adapters/<runtime>.md.

Building a composition

Two root forms (not interchangeable)

  • Standalone (top-level index.html): root <div data-composition-id="…"> sits directly in <body>, no <template> wrapper. Wrapping a standalone root hides all content and lint rejects it (standalone_composition_wrapped_in_template, error).
  • Sub-composition (loaded via data-composition-src): wrap the root in <template>. This is the shape to write: the loader also accepts a plain full document and falls back to its <body>, but the templated form is what the examples and tooling assume.

⚠ Transport rule: for a templated sub-composition the assembler drops the file's own <head> <style>/<script> (packages/core/src/compiler/compositionAssembly.ts, the hasTemplate gate), so put <style>/<script> inside the template. <link> is hoisted either way. ⚠ Host-id convention: give the host slot, the inner template, and the window.__timelines["<id>"] key the same id. A different local id is supported (the assembler falls back to the first root in the file) but the mismatch is silent, so match them unless you have a reason not to.

File shape, host wiring, and the pre-render checklist → references/sub-compositions.md.

Root must be sized (silent layout bug)

The standalone root authors width/height: 100%. Canvas size is data-width/data-height. The runtime stamps those pixels onto the composition root. Do not hardcode 1920px/1080px on #root. Skeleton → references/minimal-composition.md.

One paused timeline

Each composition registers exactly one gsap.timeline({ paused: true }) at window.__timelines["<id>"] (key = root data-composition-id). Building it inside an async callback (document.fonts.ready) is supported; what matters is that you register only after the build completes. Render length is the root's data-duration, not the timeline's length: a timeline that runs past it is cut off, and one that ends early holds its last frame. Omit the root data-duration and the length is inferred instead (timeline, media window, or adapter). You do not need window.__timelines = window.__timelines || {}: the runtime creates the registry before your inline scripts run, and lint no longer asks for it. Don't manually nest sub-timelines into the host; the runtime auto-nests registered child timelines. Full contract (incl. non-GSAP runtimes) → references/determinism-rules.md + hyperframes-animation/adapters/.

First-pass lint gotchas (a guaranteed first build failure)

Rules that lint does catch, but only after the fact. Write them right the first time:

  • Never pair a CSS initial transform with a GSAP tween on the same property — the CSS value and the tween's start fight and lint rejects it with gsap_css_transform_conflict. Set the initial state inside the tween with gsap.fromTo(el, { x: -40 }, { x: 0 }) instead of a CSS transform: translateX(-40px).
  • Never put crossorigin on <video>/<audio>. lint rejects it unconditionally with media_crossorigin_breaks_preview (error), including for canvas/WebGL/WebAudio readback. There is no suppression.
  • Never give a <video data-start> an ancestor that also carries data-start. lint rejects it with video_nested_in_timed_element (error). Time the wrapper or the video, not both.
  • Every <audio> needs an id. lint rejects it with media_missing_id, and an id-less <audio> is never picked up by the mixer, so the render is silent.
  • Never tween a .clip with autoAlpha or visibility — lint rejects it with gsap_animates_clip_element. Animate a child instead.
  • A named CSS font-family needs an in-file @font-face to a shipped local file, or lint fires font_family_without_font_face.
  • Sub-composition #root uses width/height: 100% (or inset: 0), not hardcoded 1920px/1080px. Canvas size is data-width/data-height.

A lint error also switches off the layout and contrast audits: check then reports 0 sample(s) and 0/0 text checks, which reads like a clean file but means nothing ran. Clear lint errors before you trust those numbers.

Non-negotiable rules (silent bugs automated gates may miss)

Surfaced here; full rationale in the linked reference. Do not violate:

  • No render-time clocks / unseeded Math.random / network / input-state; repeat: -1 only under a finite root data-duration (export clips to it — otherwise use a finite count). → determinism-rules.md
  • Never tween display, visibility, or autoAlpha on a .clip element. The framework owns clip visibility, and lint rejects it (gsap_animates_clip_element). Animate a child instead. → determinism-rules.md
  • No <br> in body text; transformed elements must be block-level + sized; pulsing absolute decoratives need peak clearance. → determinism-rules.md
  • <video>/<audio> are found by a flat document query, so the framework seeks and decodes them at any nesting depth (including inside a sub-comp <template> or wrapper). One hard limit: lint errors if a <video data-start> sits inside another plain element that also has data-start, and the failure is real (wrong source frames, then the clip vanishes mid-slot), so put the timing on the wrapper or on the video, never both. Sub-composition hosts are exempt: media inside a sub-composition renders correctly. The other caveat is timelines, not placement: a sub-comp timeline can't animate host-root elements. → variables-and-media.md
  • Keep every id unique across the assembled page (prefix sub-comp ids with the composition id, #<id>-hero) so your own #id CSS and getElementById calls resolve. Frame injection no longer depends on it: the compiler stamps a document-unique data-hf-render-id on every video[src]/audio[src]/img[src]. Media that uses <source> children instead of a src attribute is not stamped, so unique ids still matter there. → composition-patterns.md
  • A full-screen fill on the composition root is fine on a normal render. It is dropped only on the layered-composite path (HDR content, or a composition using shader transitions), where the engine forces every composition root transparent so the layer beneath shows through. If your composition uses shader transitions or HDR media, put the fill on a full-bleed child (position:absolute; inset:0). → composition-patterns.md

Editing existing compositions

  • Read the files first. Preserve unrelated timing, tracks, IDs, variables, media paths.
  • To know what is on a project's timeline (tracks, clips, starts, ends, what plays), run npx hyperframes timeline [--json] instead of reading index.html and every sub-composition file.
  • Match existing composition IDs and timeline keys.
  • Adding a clip: set its data-start/data-duration intentionally against the clips around it. data-track-index is a Studio display lane, not a timing constraint, so it does not need to be free.
  • A clip that ends past the root data-duration is cut off: extend the root data-duration to the clip's end in the same edit (lint warns clip_ends_past_root_duration).
  • data-hidden on any composition element hides it in BOTH preview and render, overriding its time window; it is non-destructive/reversible and toggled by Studio's timeline eye icon.
  • Adding a sub-composition: verify its internal data-composition-id before wiring the host.

Validation

Use hyperframes-cli for command details

  • npx hyperframes check passes (0 findings across lint, runtime, layout, motion, and contrast)
  • Projects with sub-compositions: npx hyperframes snapshot --at <midpoints> and eyeball each frame
  • npx hyperframes preview --background for review (the user can edit anything in Studio's timeline, and the server survives the invoking command)
  • npx hyperframes render only after the user approves

Individual skills in this repo

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

Elis3omndz/Claude_Skills

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.

Elis3omndz/Claude_Skills

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.

Elis3omndz/Claude_Skills

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's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

Elis3omndz/Claude_Skills

Use when audio already placed in a HyperFrames composition needs to be mixed: fade-in/fade-out, crossfade, track gain or volume, volume automation, ducking, a music bed that fights a voiceover (voiceover carve), effects on a track (EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser, bitcrush), automation envelopes drawn on a track's volume or any effect parameter, or one submix bus carrying a chain, a fader and an automation clock for several tracks at once (`<hf-audio-group>`). Don't use for sourcing or generating audio — finding BGM, SFX, or making a voiceover is `/media-use`. Don't use for clip timing or track layout, which is `/hyperframes-core`.

Elis3omndz/Claude_Skills

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

Elis3omndz/Claude_Skills

Use when a HyperFrames composition needs a punch-in, punch-out, zoom, reframe, Ken Burns treatment, camera move, visual match/whip handoff, or other seek-safe 2D/3D keyframes; also for GSAP, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, text trails, 3D depth, or `hyperframes keyframes` diagnostics. Don't use for broad scene strategy, brand design, media sourcing, captions, or general video planning.

Elis3omndz/Claude_Skills

Use when working with a person on a HyperFrames project in Studio: first, whether their message asks for a change at all (questions, loose ideas and "don't change anything" get an answer and a plan, not an edit); for a new film, the plan, storyboard and build order that the HyperFrames launch films follow; and how the timeline should be laid out so it reads well (one caption track, one element kind per track, every scene a sub-composition) and where captions and key content may sit (safe zones). Don't use for how to perform an individual edit (split, trim, retime, volume, copy, swap): that is `creator-editing-recipes.md` in `/hyperframes-core`.

Elis3omndz/Claude_Skills

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.

Elis3omndz/Claude_Skills

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.

Elis3omndz/Claude_Skills

Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.

Elis3omndz/Claude_Skills

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.

相关技能