一键导入
example-solid
Patterns for using Helios with SolidJS. Use when building compositions in a SolidJS environment, utilizing signals for fine-grained reactivity.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Patterns for using Helios with SolidJS. Use when building compositions in a SolidJS environment, utilizing signals for fine-grained reactivity.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Collection of agent skills for Helios video engine. Use when working with programmatic video creation, browser-native animations, or Helios compositions. Install individual skills by path for specific capabilities.
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.
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.
Learn how to use D3.js with Helios for data visualization. Use when creating charts, graphs, or data-driven animations.
Patterns for using Helios with Framer Motion. Use when you want to use Framer Motion's physics and transitions but need frame-perfect synchronization with Helios.
| name | example-solid |
| description | Patterns for using Helios with SolidJS. Use when building compositions in a SolidJS environment, utilizing signals for fine-grained reactivity. |
Integrate Helios into SolidJS components using Signals to manage frame state reactivity with high performance.
Wrap the Helios instance in a SolidJS signal to make state reactive.
// lib/createHeliosSignal.js
import { createSignal, onCleanup } from 'solid-js';
export function createHeliosSignal(helios) {
const [frame, setFrame] = createSignal(helios.getState());
const unsubscribe = helios.subscribe((state) => {
setFrame(state);
});
onCleanup(() => {
unsubscribe();
});
return frame;
}
// App.jsx
import { createEffect } from 'solid-js';
import { Helios } from '@helios-project/core';
import { createHeliosSignal } from './lib/createHeliosSignal';
// Initialize Helios (outside component or in a context)
const helios = new Helios({
duration: 10,
fps: 30,
width: 1920,
height: 1080
});
// Bind for external control
helios.bindToDocumentTimeline();
function App() {
let canvasRef;
// Create reactive accessor
const state = createHeliosSignal(helios);
createEffect(() => {
const canvas = canvasRef;
if (!canvas) return;
const ctx = canvas.getContext('2d');
const { currentFrame, width, height } = state();
// Clear
ctx.clearRect(0, 0, width, height);
// Draw
ctx.fillStyle = '#446b9e';
const x = (currentFrame / (10 * 30)) * width;
ctx.fillRect(x, height / 2 - 50, 100, 100);
});
return (
<canvas
ref={canvasRef}
width={1920}
height={1080}
style={{ width: '100%', height: 'auto' }}
/>
);
}
export default App;
Integrate three with Helios by synchronizing the render loop via createEffect.
// App.jsx
import { createEffect, onCleanup, onMount } from "solid-js";
import * as THREE from "three";
import { Helios } from "@helios-project/core";
import { createHeliosSignal } from "./lib/createHeliosSignal";
// Singleton initialization pattern
if (!window.helios) {
window.helios = new Helios({
fps: 30,
duration: 10,
width: 1920,
height: 1080
});
}
export default function App() {
let canvasRef;
const state = createHeliosSignal(window.helios);
onMount(() => {
// 1. Setup Three.js Scene
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ canvas: canvasRef, antialias: true });
// 2. Create Objects
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;
// 3. Sync Render Loop
createEffect(() => {
const s = state();
const t = s.currentTime;
// Update animation state based on time
cube.rotation.x = t * 0.5;
cube.rotation.y = t * 0.5;
renderer.render(scene, camera);
});
// 4. Cleanup
onCleanup(() => {
renderer.dispose();
geometry.dispose();
material.dispose();
});
});
return <canvas ref={canvasRef} style={{ width: '100%', height: '100%' }} />;
}
createEffect: Use createEffect to trigger imperative canvas drawing logic whenever the Helios signal updates.onCleanup to remove the Helios subscription when the component unmounts.examples/solid-animation-helpers/src/lib/createHeliosSignal.jsexamples/solid-canvas-animation/examples/solid-threejs-canvas-animation/