make-video
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 to frame updates. Covers Helios class instantiation, signals, animation helpers, and DOM synchronization.
Claude Code
$ npx -y skills add BintzGavin/helios --skill core --agent claude-code
Codex
$ npx skills add BintzGavin/helios --skill core -a codex -y
Cursor
$ npx skills add BintzGavin/helios --skill core -a cursor -y
Gemini CLI
$ npx skills add BintzGavin/helios --skill core -a gemini-cli -y
GitHub Copilot
$ npx skills add BintzGavin/helios --skill core -a github-copilot -y
OpenCode
$ npx skills add BintzGavin/helios --skill core -a opencode -y
Windsurf
$ npx skills add BintzGavin/helios --skill core -a windsurf -y
name: helios-core description: Core API for Helios video engine. Use when creating compositions, managing timeline state, controlling playback, or subscribing to frame updates. Covers Helios class instantiation, signals, animation helpers, and DOM synchronization.
The `Helios` class is the headless logic engine for video compositions. It manages timeline state, provides frame-accurate control, and drives animations.
import { Helios } from '@helios-project/core';
// Create instance
const helios = new Helios({
duration: 10, // seconds
fps: 30,
width: 1920,
height: 1080,
inputProps: { text: "Hello World" }
});
// Subscribe to state changes
const unsubscribe = helios.subscribe((state) => {
console.log(`Frame: ${state.currentFrame}, Props:`, state.inputProps);
});
// Control playback
helios.play();new Helios(options: HeliosOptions)
interface HeliosOptions {
duration: number; // Duration in seconds (must be >= 0)
fps: number; // Frames per second (must be > 0)
width?: number; // Canvas width (default: 1920)
height?: number; // Canvas height (default: 1080)
initialFrame?: number; // Start frame (default: 0)
loop?: boolean; // Loop playback (default: false)
autoSyncAnimations?: boolean; // Auto-sync DOM animations (WAAPI) to timeline
animationScope?: HTMLElement; // Scope for animation syncing
inputProps?: Record<string, any>; // Initial input properties
schema?: HeliosSchema; // JSON schema for inputProps validation
playbackRate?: number; // Initial playback rate (default: 1)
volume?: number; // Initial volume (0.0 to 1.0)
muted?: boolean; // Initial muted state
audioTracks?: Record<string, AudioTrackState>; // Initial track state
availableAudioTracks?: AudioTrackMetadata[]; // Headless track metadata
captions?: string | CaptionCue[]; // SRT string or cue array
markers?: Marker[]; // Initial timeline markers
playbackRange?: [number, number]; // Restrict playback to [startFrame, endFrame]
driver?: TimeDriver; // Custom time driver (mostly internal use)
}helios.getState(): Readonly<HeliosState>
interface HeliosState {
width: number;
height: number;
duration: number;
fps: number;
currentFrame: number;
currentTime: number;
loop: boolean;
isPlaying: boolean;
inputProps: Record<string, any>;
playbackRate: number;
volume: number;
muted: boolean;
audioTracks: Record<string, AudioTrackState>;
availableAudioTracks: AudioTrackMetadata[];
captions: CaptionCue[];
activeCaptions: CaptionCue[];
markers: Marker[];
playbackRange: [number, number] | null;
}
type AudioTrackState = {
volume: number;
muted: boolean;
}helios.play() // Start playback helios.pause() // Pause playback helios.seek(frame: number) // Jump to specific frame helios.setPlaybackRate(rate: number) // Change playback speed (e.g., 0.5, 2.0) // Set Playback Range (Loop/Play only within these frames) helios.setPlaybackRange(startFrame: number, endFrame: number) helios.clearPlaybackRange()
helios.setDuration(seconds: number) // Update total duration helios.setFps(fps: number) // Update frame rate (preserves current playback time) helios.setLoop(shouldLoop: boolean) // Toggle looping
helios.setSize(width: number, height: number) // Update canvas dimensions
helios.setAudioVolume(volume: number) // Set volume (0.0 to 1.0) helios.setAudioMuted(muted: boolean) // Set muted state // Track-specific control // Use data-helios-track-id="myTrack" on DOM elements to group them helios.setAudioTrackVolume(trackId: string, volume: number) helios.setAudioTrackMuted(trackId: string, muted: boolean) // Advanced: Audio Visualization Hooks // Get the shared AudioContext (if supported by driver) await helios.getAudioContext(); // Get a MediaElementAudioSourceNode for a specific track await helios.getAudioSourceNode(trackId); // Audio Fades: // Use data-helios-fade-easing="quad.in" (or linear, cubic, sine, etc.) // on DOM elements to control fade curve.
// Update input properties (triggers subscribers) // Validates against schema if one was provided in constructor helios.setInputProps(props: Record<string, any>)
// Set captions using SRT string or CaptionCue array helios.setCaptions(captions: string | CaptionCue[])
Manage timeline markers for key events.
interface Marker {
id: string;
time: number; // Time in seconds
label?: string;
color?: string;
metadata?: Record<string, any>;
}
helios.setMarkers(markers: Marker[])
helios.addMarker(marker: Marker)
helios.removeMarker(id: string)
helios.seekToMarker(id: string)type HeliosSubscriber = (state: HeliosState) => void;
// Callback fires immediately with current state, then on every change
const unsubscribe = helios.subscribe((state: HeliosState) => {
// Render frame based on state
});
// Cleanup
unsubscribe();Bind Helios to `document.timeline` when the timeline is driven externally (e.g., by the Renderer or Studio).
// Start polling document.timeline (or __HELIOS_VIRTUAL_TIME__ in Renderer) helios.bindToDocumentTimeline() helios.unbindFromDocumentTimeline() // Stop polling
Register asynchronous checks that the Renderer must await before capturing frames (e.g., loading fonts, models, or data).
// Register a promise that resolves when ready helios.registerStabili
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…
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.
Chart.js integration patterns for Helios. Use when creating animated data visualizations with Chart.js.
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,…