Skip to content
Video & Audio
Skill

/threejs

Patterns for using Helios with Three.js and React Three Fiber. Use when creating 3D animations or integrating WebGL scenes.

From plugin
helios
13035 skills1 MCP

Claude Code

$ npx -y skills add BintzGavin/helios --skill threejs --agent claude-code

SKILL.md

threejs.SKILL.md
name: example-threejs
description: Patterns for using Helios with Three.js and React Three Fiber. Use when creating 3D animations or integrating WebGL scenes.

Three.js Composition Patterns

Integrate Helios with Three.js to drive 3D animations frame-by-frame. This ensures deterministic rendering and perfect synchronization.

Quick Start (React Three Fiber)

The key is to disable the R3F internal loop (`frameloop="never"`) and drive the scene update manually via the `advance()` method in a Helios subscription.

1. Setup Component

import React, { useState, useEffect } from 'react';
import { Canvas } from '@react-three/fiber';
import { Helios } from '@helios-project/core';

// Singleton Helios instance
const helios = new Helios({
  fps: 30,
  duration: 10,
  width: 1920,
  height: 1080
});

if (typeof window !== 'undefined') {
    window.helios = helios; // Expose for Player/Renderer
}

export default function App() {
  const [r3fState, setR3fState] = useState(null);

  useEffect(() => {
    if (!r3fState) return;

    // Subscribe to Helios ticks
    const unsubscribe = helios.subscribe((state) => {
      // Calculate time in seconds
      const timeInSeconds = state.currentFrame / state.fps;

      // Manually advance R3F state
      // This updates the clock and renders the scene
      r3fState.advance(timeInSeconds);
    });

    return unsubscribe;
  }, [r3fState]);

  return (
    <Canvas
      frameloop="never" // Disable automatic loop
      onCreated={(state) => setR3fState(state)} // Capture R3F state
      gl={{ antialias: true }}
    >
      <Scene />
    </Canvas>
  );
}

2. Scene Component

Use `useFrame` as usual, but it will only fire when `advance()` is called.

import { useRef } from 'react';
import { useFrame } from '@react-three/fiber';

function Scene() {
  const meshRef = useRef();

  useFrame((state, delta) => {
    // state.clock.elapsedTime is now synced with Helios
    const time = state.clock.elapsedTime;

    if (meshRef.current) {
        meshRef.current.rotation.x = time;
        meshRef.current.rotation.y = time * 0.5;
    }
  });

  return (
    <mesh ref={meshRef}>
      <boxGeometry />
      <meshStandardMaterial color="orange" />
    </mesh>
  );
}

Quick Start (Vanilla Three.js)

For vanilla Three.js, you simply call `renderer.render()` inside the Helios subscription.

import * as THREE from 'three';
import { Helios } from '@helios-project/core';

// Setup Helios
const helios = new Helios({ duration: 5, fps: 30 });
window.helios = helios;

// Setup Three.js
const canvas = document.getElementById('canvas');
const renderer = new THREE.WebGLRenderer({ canvas });
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, 1920 / 1080, 0.1, 1000);
const cube = new THREE.Mesh(new THREE.BoxGeometry(), new THREE.MeshBasicMaterial({ color: 0x00ff00 }));
scene.add(cube);

// Animation Loop
helios.subscribe((state) => {
  const time = state.currentFrame / state.fps;

  // Update logic
  cube.rotation.x = time;
  cube.rotation.y = time;

  // Render
  renderer.render(scene, camera);
});

Optimization Tips

  • **Antialiasing:** Enable it in `WebGLRenderer` or `<Canvas>` for better quality, but be aware of performance cost.
  • **Shadows:** If using shadows, ensure they update correctly. In `frameloop="never"`, you might need to mark shadows as needing update if they are static.
  • **GLTF Loading:** Use `waitUntilStable` or ensure assets are loaded before rendering starts. Helios waits for `window.load` by default in 'dom' mode, but 'canvas' mode relies on the canvas being ready.

Source Files

  • Example: `examples/react-three-fiber/`
  • Example: `examples/threejs-canvas-animation/`
Read more
@bintzgavin
Ships withhelios

Programmatic video creation with web technologies you already know. CSS animations just work.

13035 skills1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
130
Star history of BintzGavin/helios on GitHub, a chart by star-history.com

Other skills on helios.

make-video

make-video

Make videos drawn with code: motion graphics, launch and explainer videos, animated shorts, animated charts and data, logo…

@bintzgavin@bintzgavinInstall Skill
core

core

Core API for Helios video engine. Use when creating compositions, managing timeline state, controlling playback, or subscribing…

@bintzgavin@bintzgavinInstall Skill
animated-video-philosophy

animated-video-philoso…

Story-first motion design philosophy for animated video: motion must earn its place; arc (establish, complicate, resolve); show…

@bintzgavin@bintzgavinInstall Skill
motion-styles

motion-styles

Opt-in library of established visual styles for code-drawn Helios videos: style cards (colour rules, type, motion grammar, a…

@bintzgavin@bintzgavinInstall Skill
canvas

canvas

Patterns for using Helios with Vanilla Canvas API. Use when building high-performance 2D/3D animations without frameworks.

@bintzgavin@bintzgavinInstall Skill

More skills from other plugins.

captions-overlay

captions-overlay

Overlay doctrine for captions in HyperFrames videos — the caption MODEL (drop / rail / embed) and the rule that captions are an…

@heygen-com@heygen-comInstall Skill
acestep

acestep

AI music generation with ACE-Step 1.5 — background music, vocal tracks, covers, stem extraction for video production. Use when…

@calesthio@calesthioInstall Skill
seedance-antislop

seedance-antislop

This skill should be used when a Seedance 2.0 prompt contains generic AI filler, hollow superlatives, vague cinematic language,…

@emily2040@emily2040Install Skill

Questions about threejs.

Which coding agents can use threejs?
threejs installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.