mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
* chore(skills): remove 1,685 lines of redundant and irrelevant skill content - Remove 5 GSAP references irrelevant to HyperFrames (scrolltrigger, plugins, react, frameworks, utils) — no scroll, no frameworks, no interactive plugins in video compositions - Remove shader-setup.md and shader-transitions.md — duplicated by @hyperframes/shader-transitions package (packages/shader-transitions/) - Remove marker-highlight.md and examples.md — JS library docs superseded by css-patterns.md (deterministic, GSAP-driven, fully seekable) - Trim CLAUDE.md to dev-only instructions — move product docs (transcription, TTS, player) to skills where they belong - Deduplicate house-style.md typography/motion sections — point to dedicated references instead of repeating rules - Clean up stale references to deleted files across SKILL.md and catalog.md - Update gsap skill description to reflect HyperFrames-only scope Skills: 5,230 → 3,714 lines (29% reduction) CLAUDE.md: 204 → 50 lines (75% reduction) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(skills): update broken marker-highlight.md references in captions.md Point to css-patterns.md instead of deleted marker-highlight.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(skills): update stale shader CSS rule to reference package API BG_COLOR was from the old manual setup. Now it's bgColor in the @hyperframes/shader-transitions init() config. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(skills): address 6 doc gaps surfaced by eval agents P0: Document HyperShader as IIFE global name in shader-transitions README P1: Replace async fetch() with sync XHR in effects.md audio data loading (fetch violates synchronous timeline construction rule in SKILL.md) P1: Change <div> to <span> in css-patterns.md marker highlight patterns (<div> inside <p> is invalid HTML, breaks layout in inline contexts) P2: Clarify bgColor as fallback color in shader-transitions README P2: Add data-start to Composition Clips table in SKILL.md (root composition element needs data-start="0", linter enforces it) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(templates): update init templates to match trimmed skill scope - Remove ScrollTrigger/plugins/React/Vue/Svelte from gsap skill description - Replace class="clip" with accurate pattern examples in skill intro text (class="clip" is still in Key Rules where it belongs) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(skills): remove contradictory 5:1 contrast threshold from house-style house-style.md said 5:1 minimum, but hyperframes validate enforces WCAG AA (4.5:1 normal text, 3:1 large text). Now defers to validate instead of stating a conflicting number. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
123 lines
5.7 KiB
Markdown
123 lines
5.7 KiB
Markdown
# @hyperframes/shader-transitions
|
|
|
|
WebGL shader transitions for HyperFrames compositions. Renders GPU-accelerated scene-to-scene transitions using fragment shaders, driven by GSAP timelines.
|
|
|
|
## Install
|
|
|
|
```bash
|
|
npm install @hyperframes/shader-transitions
|
|
```
|
|
|
|
Or load directly via CDN:
|
|
|
|
```html
|
|
<script src="https://cdn.jsdelivr.net/npm/@hyperframes/shader-transitions/dist/index.global.js"></script>
|
|
```
|
|
|
|
## Usage
|
|
|
|
```typescript
|
|
import { init } from "@hyperframes/shader-transitions";
|
|
|
|
const tl = init({
|
|
bgColor: "#0a0a0a",
|
|
accentColor: "#ff6b2b",
|
|
scenes: ["scene-1", "scene-2", "scene-3"],
|
|
transitions: [
|
|
{ time: 3, shader: "domain-warp", duration: 0.8 },
|
|
{ time: 8, shader: "light-leak", duration: 0.7 },
|
|
],
|
|
});
|
|
```
|
|
|
|
The `init()` function captures each scene to a WebGL texture at transition time, crossfades between them using the selected shader, and returns a GSAP timeline. If WebGL is unavailable, it falls back to hard cuts.
|
|
|
|
### With an existing timeline
|
|
|
|
Pass your own GSAP timeline to layer transitions onto it:
|
|
|
|
```typescript
|
|
const tl = gsap.timeline({ paused: true });
|
|
// ... add your scene animations ...
|
|
|
|
init({
|
|
bgColor: "#000",
|
|
scenes: ["intro", "demo", "outro"],
|
|
transitions: [
|
|
{ time: 5, shader: "cinematic-zoom" },
|
|
{ time: 12, shader: "glitch", duration: 0.5 },
|
|
],
|
|
timeline: tl,
|
|
});
|
|
```
|
|
|
|
## Available shaders
|
|
|
|
| Shader | Description |
|
|
| --------------------- | ---------------------------------------------------- |
|
|
| `domain-warp` | Organic noise-based warp with glowing edge |
|
|
| `ridged-burn` | Ridged noise burn with sparks and heat glow |
|
|
| `whip-pan` | Horizontal motion blur simulating a fast camera pan |
|
|
| `sdf-iris` | Circular iris wipe with glowing ring edge |
|
|
| `ripple-waves` | Concentric ripple distortion radiating from center |
|
|
| `gravitational-lens` | Warping gravity well with chromatic aberration |
|
|
| `cinematic-zoom` | Radial zoom blur with chromatic fringing |
|
|
| `chromatic-split` | RGB channel separation expanding from center |
|
|
| `glitch` | Digital glitch with block displacement and scanlines |
|
|
| `swirl-vortex` | Spiral rotation with noise-based warping |
|
|
| `thermal-distortion` | Heat shimmer rising from the bottom |
|
|
| `flash-through-white` | Flash to white then reveal the next scene |
|
|
| `cross-warp-morph` | Noise-driven morph blending both scenes |
|
|
| `light-leak` | Warm cinematic light leak with lens flare |
|
|
|
|
## API
|
|
|
|
### `init(config): GsapTimeline`
|
|
|
|
| Option | Type | Required | Description |
|
|
| --------------- | -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `bgColor` | `string` | yes | Fallback background color (hex) for scene capture. Use the composition's body/canvas background — individual scenes set their own `background-color` via CSS. |
|
|
| `accentColor` | `string` | no | Accent color (hex) for shader glow effects |
|
|
| `scenes` | `string[]` | yes | Element IDs of each scene, in order |
|
|
| `transitions` | `TransitionConfig[]` | yes | Transition definitions (see below) |
|
|
| `timeline` | `GsapTimeline` | no | Existing timeline to attach transitions to |
|
|
| `compositionId` | `string` | no | Override the `data-composition-id` for timeline registration |
|
|
|
|
### `TransitionConfig`
|
|
|
|
| Option | Type | Default | Description |
|
|
| ---------- | ------------ | ---------------- | -------------------------------- |
|
|
| `time` | `number` | — | Start time in seconds |
|
|
| `shader` | `ShaderName` | — | Shader name from the table above |
|
|
| `duration` | `number` | `0.7` | Transition duration in seconds |
|
|
| `ease` | `string` | `"power2.inOut"` | GSAP easing function |
|
|
|
|
### `SHADER_NAMES`
|
|
|
|
Array of all available shader name strings, useful for validation or building UIs.
|
|
|
|
```typescript
|
|
import { SHADER_NAMES } from "@hyperframes/shader-transitions";
|
|
// ["domain-warp", "ridged-burn", "whip-pan", ...]
|
|
```
|
|
|
|
## Distribution
|
|
|
|
| Format | File | Use case |
|
|
| ------ | ---------------------- | ------------------------------------------- |
|
|
| ESM | `dist/index.js` | Bundlers (Vite, webpack, etc.) |
|
|
| CJS | `dist/index.cjs` | Node.js / require() |
|
|
| IIFE | `dist/index.global.js` | `<script>` tag, CDN (global: `HyperShader`) |
|
|
|
|
All formats include source maps. TypeScript definitions included.
|
|
|
|
## Related packages
|
|
|
|
- [`@hyperframes/core`](../core) -- types, parsers, runtime
|
|
- [`@hyperframes/engine`](../engine) -- rendering engine
|
|
- [`hyperframes`](../cli) -- CLI
|
|
|
|
## License
|
|
|
|
MIT
|