make-video
Make videos drawn with code: motion graphics, launch and explainer videos, animated shorts, animated charts and data, logo…
Workflow for creating a podcast visualizer with multi-track audio mixing and DOM-based synchronization. Use when building audio-reactive compositions.
Claude Code
$ npx -y skills add BintzGavin/helios --skill podcast-visualizer --agent claude-code
Codex
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a codex -y
Cursor
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a cursor -y
Gemini CLI
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a gemini-cli -y
GitHub Copilot
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a github-copilot -y
OpenCode
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a opencode -y
Windsurf
$ npx skills add BintzGavin/helios --skill podcast-visualizer -a windsurf -y
name: example-podcast-visualizer description: Workflow for creating a podcast visualizer with multi-track audio mixing and DOM-based synchronization. Use when building audio-reactive compositions.
This workflow demonstrates how to build a podcast visualizer that mixes multiple audio tracks (e.g., background music, voiceover) and drives visualizations based on timing.
<!-- Background Music (Loops, Starts at 0s) --> <audio src="music.mp3" loop data-helios-offset="0"></audio> <!-- Voiceover (Starts at 2s) --> <audio src="voice.wav" data-helios-offset="2"></audio> <!-- Muted Track (For analysis only) --> <audio src="sfx.wav" muted></audio>
const helios = new Helios({
duration: 60,
fps: 30,
autoSyncAnimations: true // Required for DOM audio sync
});
// React to time
helios.subscribe((state) => {
const time = state.currentFrame / state.fps;
if (time >= 2) {
showVoiceVisualizer();
}
});The Helios Renderer (in `dom` mode) automatically discovers `<audio>` and `<video>` elements in your DOM and mixes them into the final video.
Control when audio starts playing relative to the timeline using `data-helios-offset`.
<!-- Starts playing at T=5 seconds --> <audio src="intro.mp3" data-helios-offset="5"></audio>
Use `helios.subscribe` to drive visual elements based on `currentFrame`. Since audio is handled by the browser/Renderer, you just need to ensure your visuals match the expected timing.
helios.subscribe(({ currentFrame, fps }) => {
const time = currentFrame / fps;
// Simple time-based trigger
if (time > 10 && time < 20) {
// Animate visualizer
}
});In the browser (Studio/Player), `data-helios-offset` is **NOT** automatically applied by the standard `<audio>` element. The `DomDriver` attempts to sync it, but precise start/stop behavior for offsets might vary compared to the frame-perfect Renderer.
**Workaround:** For perfect preview sync, you may need custom logic to `play()/pause()` audio elements in your `subscribe` loop, or rely on the Renderer verification.
Ensure your audio formats (MP3, WAV, AAC) are supported by the browser and FFmpeg.
Programmatic video creation with web technologies you already know. CSS animations just work.
Make videos drawn with code: motion graphics, launch and explainer videos, animated shorts, animated charts and data, logo…
Core API for Helios video engine. Use when creating compositions, managing timeline state, controlling playback, or subscribing…
Story-first motion design philosophy for animated video: motion must earn its place; arc (establish, complicate, resolve); show…
End-to-end production plan template for feeling-first cinematic product promos: brief interrogation, 45s beat structure (cold…
Opt-in library of established visual styles for code-drawn Helios videos: style cards (colour rules, type, motion grammar, a…
Patterns for using Helios with Vanilla Canvas API. Use when building high-performance 2D/3D animations without frameworks.
Overlay doctrine for captions in HyperFrames videos — the caption MODEL (drop / rail / embed) and the rule that captions are an…
AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction for video production. Use when…
This skill should be used when a Seedance 2.0 prompt contains generic AI filler, hollow superlatives, vague cinematic language,…