make-video
Make videos drawn with code: motion graphics, launch and explainer videos, animated shorts, animated charts and data, logo…
Patterns for using Helios with Svelte. Use when building compositions in a Svelte environment, utilizing Svelte stores for reactive frame updates.
Claude Code
$ npx -y skills add BintzGavin/helios --skill svelte --agent claude-code
Codex
$ npx skills add BintzGavin/helios --skill svelte -a codex -y
Cursor
$ npx skills add BintzGavin/helios --skill svelte -a cursor -y
Gemini CLI
$ npx skills add BintzGavin/helios --skill svelte -a gemini-cli -y
GitHub Copilot
$ npx skills add BintzGavin/helios --skill svelte -a github-copilot -y
OpenCode
$ npx skills add BintzGavin/helios --skill svelte -a opencode -y
Windsurf
$ npx skills add BintzGavin/helios --skill svelte -a windsurf -y
name: example-svelte description: Patterns for using Helios with Svelte. Use when building compositions in a Svelte environment, utilizing Svelte stores for reactive frame updates.
Integrate Helios into Svelte components using Svelte Stores to manage frame state reactivity efficiently.
Wrap the Helios instance in a readable store to make state reactive.
// lib/store.js
import { readable } from 'svelte/store';
export const createHeliosStore = (helios) => {
return readable(helios.getState(), (set) => {
// Set initial value
set(helios.getState());
// Subscribe to updates
const unsubscribe = helios.subscribe((state) => {
set(state);
});
return unsubscribe;
});
};<!-- App.svelte -->
<script>
import { onMount, onDestroy } from 'svelte';
import { Helios } from '@helios-project/core';
import { createHeliosStore } from './lib/store';
let canvas;
let ctx;
const duration = 5;
const fps = 30;
// Initialize Singleton
const helios = new Helios({ duration, fps });
helios.bindToDocumentTimeline();
// Expose to window
if (typeof window !== 'undefined') window.helios = helios;
// Create Store
const heliosStore = createHeliosStore(helios);
// Reactive Drawing Statement
$: if (ctx && $heliosStore) {
draw($heliosStore.currentFrame);
}
function draw(frame) {
const width = canvas.width;
const height = canvas.height;
// Clear
ctx.clearRect(0, 0, width, height);
// Draw
const progress = frame / (duration * fps);
ctx.fillStyle = '#ff3e00';
ctx.fillRect(progress * width, height / 2 - 50, 100, 100);
}
onMount(() => {
ctx = canvas.getContext('2d');
canvas.width = 1920;
canvas.height = 1080;
// Initial draw
draw(helios.currentFrame.peek());
});
</script>
<canvas bind:this={canvas}></canvas>
<style>
canvas {
display: block;
width: 100%;
height: 100%;
}
</style>For Svelte 5, use the `$state` rune to create a reactive state class.
// lib/helios.svelte.ts
import { Helios } from '@helios-project/core';
export class HeliosState {
currentFrame = $state(0);
fps = $state(0);
duration = $state(0);
isPlaying = $state(false);
constructor(helios) {
this.fps = helios.fps;
this.duration = helios.duration;
this.isPlaying = helios.isPlaying;
helios.subscribe((state) => {
this.currentFrame = state.currentFrame;
this.isPlaying = state.isPlaying;
});
}
}<!-- App.svelte -->
<script>
import { Helios } from '@helios-project/core';
import { HeliosState } from './lib/helios.svelte.js';
const helios = new Helios({ duration: 10, fps: 30 });
const state = new HeliosState(helios);
// Reactivity works automatically with state properties
$effect(() => {
console.log(`Current Frame: ${state.currentFrame}`);
});
</script>
<div>Frame: {state.currentFrame}</div>For audio visualization, use a **derived store** to compute analysis data (RMS, Waveform) reactively based on the current frame.
// lib/audio.js
import { derived } from 'svelte/store';
export function createAudioStore(bufferStore, heliosStore) {
return derived(
[bufferStore, heliosStore],
([$buffer, $heliosState]) => {
if (!$buffer || !$heliosState) return { rms: 0, waveform: [] };
const data = $buffer.getChannelData(0);
const sampleRate = $buffer.sampleRate;
const time = $heliosState.currentFrame / $heliosState.fps;
// Analyze window around current time
const center = Math.floor(time * sampleRate);
const windowSize = 1024;
// ... (FFT logic or simple time-domain analysis) ...
return { rms: 0.5, waveform: [] }; // Mock result
}
);
}<script>
import { createAudioStore } from './lib/audio';
// ... setup heliosStore and bufferStore ...
const audioStore = createAudioStore(bufferStore, heliosStore);
$: if (ctx && $audioStore) {
const { rms, waveform } = $audioStore;
// Draw using rms/waveform
}
</script>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,…