Skip to main content
Glama

Chorono

Create animations with your AI agent. Refine every layer and keyframe visually.

Chorono is an open-source, local-first 2D animation and motion graphics editor. Use Claude Code or Codex through MCP to create editable scenes, then adjust layers, keyframes, easing and timing in the browser.

  • Create with an agent or by hand. Work through MCP or use the visual editor directly.

  • Keep creative control. Refine shapes, text, particles and animation timing in the same scene.

  • Continue where you left off. Save a portable editable project and reopen it for the next revision.

The editor runs on your computer with Node.js 20+, npm, Git and a modern browser.

v0.2.0: large-scene rendering, bounded resource ownership, media loading, timeline/Scene Explorer fixes and subtree tools. Release notes · Türkçe sürüm notları · Changelog

Website · Install Chorono · Türkçe kurulum · Editable example · Documentation · Get help

See the working text animation example, kinetic typography study and Claude Code animation tutorial. Each includes a preview and an editable project to inspect.

Try an editable example

Open the first-animation example to inspect a four-second scene with eight named layers and 51 editable keyframes. Change its headline or a circle's color, save the scene, and reopen it to continue editing.

An editable Chorono scene with a headline and three colored circles

Related MCP server: aseprite-mcp

Set up and control Chorono from an agent

Claude Code or Codex can set up the editor, start it on your computer, and create editable animations through MCP. Start with the installation guide (Türkçe) or the documentation index.

1. Install on your computer

Install Node.js 20+, npm, Git, and a modern browser. In Terminal on macOS/Linux or PowerShell on Windows:

git clone https://github.com/codie1982/chorono-editor.git
cd chorono-editor
npm ci
npm run cli:build
npm run chorono -- setup
npm run chorono -- start --background --open

setup installs missing editor dependencies, builds missing outputs, prepares MCP client settings, and installs the bundled skills. The default --agent all selects Codex, Claude Code and Claude Desktop for MCP; use --agent codex, --agent claude-code or --agent claude-desktop to select one. Filesystem skills are installed for Codex and Claude Code. Claude Desktop has a separate skill import mechanism.

Use --project /path/to/animation-project on setup, start and doctor to keep animation projects separate from the editor checkout. Existing checkouts are preserved; setup never pulls or resets them. The installation guide covers paths, client settings, stopping and rebuilding.

2. Connect the browser editor

Open the URL printed by start and choose MCP → Connect this editor. Reload your client's MCP connections or start a new agent session, then check:

npm run chorono -- doctor

Readiness requires a connected editor tab as well as a running server. Reconnect after a browser reload. Ask your agent:

Use Chorono to create a scene with circles and text. Add intro, idle and outro animations, inspect preview frames, and save the editable project.

Portable projects are saved under <animation-project>/projects/. This local MCP workflow needs no model-provider API key. See troubleshooting (Türkçe) if doctor reports an incomplete connection.

3. Understand and install the agent skills

Skill

What it teaches the agent

Source

chorono-setup

Install/start the editor, configure MCP clients, diagnose connections and manage skills

SKILL.md

chorono

Create/edit scenes, keyframes and timelines; inspect preview images; validate and save editable projects

SKILL.md

The source structure keeps the main instructions short and loads topic references when needed:

skills/
├── chorono-setup/
│   ├── SKILL.md
│   └── agents/openai.yaml
└── chorono/
    ├── SKILL.md
    ├── agents/openai.yaml
    └── references/
        ├── connection.md
        ├── animation.md
        ├── interaction.md
        └── media-and-output.md

Setup already installs these skills for the selected agents. To manage only skills from a checkout after npm run cli:build:

npm run skills -- list
npm run skills -- install --dry-run
npm run skills -- install
npm run skills -- check
npm run skills -- update

Project installs go to .agents/skills/ for Codex and .claude/skills/ for Claude Code. Add --global --agent codex for a user-wide Codex install, or choose --agent claude-code. Modified copies are preserved.

Alternatively, install only the instructions directly from GitHub with the third-party skills CLI (currently requires Node.js 22.20+):

npx skills add codie1982/chorono-editor --skill chorono --skill chorono-setup -a claude-code -a codex --copy

Installing skills alone does not install/start the editor or connect MCP. Continue with steps 1–2. See the agent skills guide (Türkçe) for scope, updates and the difference between installation methods.

The standalone CLI source is packages/cli (@codie1982/chorono). This quick start works from GitHub without relying on an npm release. For local tarballs and maintainer packaging, see the distribution guide.

⚡ Headline Feature: GPU-Accelerated Rendering

WebGL2-accelerated rendering (feature/gpu-particle-renderer-v1):

  • Particles via WebGL instanced quads — every particle in an emitter draws in a single GPU draw call

  • 9 SDF particle shapes — Circle, Soft Circle, Rectangle, Rounded Rectangle, Line, Triangle, Star, Smoke Puff, Flame Blob — all anti-aliased in-shader (fwidth)

  • GPU post-effects — separable Gaussian blur shared by blur, glow, and shadow

  • After Effects-quality motion blur — accumulation of many equal-weight sub-frame samples (smooth smear, not discrete ghosts)

  • Automatic CPU fallback — graceful degradation to Canvas 2D when WebGL is unavailable

  • Smart GPU compositor — correct source-over / additive / screen / multiply blending against the scene below

  • Hardened — event system on every class, error handling, SSR-safe GPU capability probing, WebGL context-loss recovery

Performance (particle render, Apple M2, real measurement)

GPU offloads the render; particle simulation (spawn/evaluate) stays on CPU.

Particles   CPU render   GPU render   speedup
   1,000      1.9 ms       0.01 ms      ~140×
  10,000      4.9 ms       0.12 ms       ~42×
  50,000     49.5 ms       0.6 ms        ~84×

At ~50k particles the CPU draw alone (49.5 ms) blows the 16.6 ms/60 FPS budget; the GPU draw stays sub-millisecond.


✨ Complete Feature Set

🤖 AI-Powered Animation Studio

Agent Loop & Intelligent Planning

  • Natural language animation creation — Describe your animation: "Mavi daire ekle, soldan sağa kay, fade in yap" → instant keyframes

  • Multi-turn agent loop — AI reasons → mutates scene → verifies → continues (max 5 turns, 30 tools)

  • Context-aware AI — Scene state, layer visibility, timeline position fed to every agent turn

  • Read & Mutate tools — Separate action types; AI can inspect before deciding next steps

  • Intent classification — Zero-cost system prompt analysis (no LLM round-trip)

  • Quality scoring — Automatic overlap detection, off-screen layers, composition balance check

  • High-level animation actions — create_stagger_animation, center_layer, align_layers, fit_to_canvas, create_loop_animation

Flexible AI Backends

  • Anthropic Claude — Native tool-use with caching support

  • OpenAI GPT-4o — tool_use_id round-trip compatible

  • Custom providers — Ollama, Groq, Together, Azure, local models

  • Fallback rendering — Graceful degradation if API unavailable

🎨 Advanced Editing Tools

Spline Object System (3ds Max-style)

  • Editable paths — Circle, Rectangle, Line, Ellipse, Arc, Donut, N-gon, Star

  • Point editing — Corner, smooth, bezier, bezier-corner types

  • Segment operations — Insert anchors (De Casteljau), delete, reverse, open/close

  • Text-to-spline — Convert text outlines to editable splines via OpenType.js

  • Hit-testing — Point, handle, segment, and contour selection with visual feedback

Smart Selection Engine

  • Select Similar — Match by scale, rotation, edge distance, type, opacity

  • Select by Transform — Rule-based selection (AND/OR/NOT logic)

  • Canvas tools — Box, Lasso, Circle, Paint selection modes

  • Inside vs Touching — 3ds Max Window/Crossing containment toggle

  • Non-intrusive — Selection state lives in UI layer, doesn't mutate scene

Clone & Array System

  • Clone tool — Live instances; source edits propagate automatically

  • Array patterns — Linear, Grid, Radial, Path, and Repeater (non-destructive)

  • Path array — Arc-length distribution along Bézier paths

  • Instance resolver — Render & hit-test aware of instancing hierarchy

  • Bake support — Convert instance to independent copy

Transform Tools

  • Gizmos — Move, rotate, scale with live visual feedback

  • Multi-select rotation/scale — Shared pivot (centroid) for multiple layers

  • Snap guides — Vertex, angle, scale, smart guides with numeric display

  • Transform history — Every gizmo operation undoable

⏱️ Professional Timeline & Animation

Advanced Timeline Features

  • Out-of-range modes — Constant, Cycle, Loop, Ping-pong, Linear interpolation

  • Work area & markers — Playback regions, navigation markers (Cmd+click to create)

  • Keyframe tools — Slide by frame, range select, stagger dialog, spreadsheet editor

  • Ruler interactions — Shift+drag for range selection, visual feedback

Parameter Wiring (17+ Preset Formulas)

  • Drive any property — Link layers via expressions and scene parameters

  • Formula categories — Clamp, Remap, Range, Curve, Phase, Modulo

  • Live preview — Real-time feedback of wired values

  • Broken-wire detection — Visual warnings for invalid references

  • Dock panel — Dedicated wiring panel with enable/edit/delete controls

  • Track header indicators — Show which parameters are wired

State Machines (FSM)

  • Node-graph editor — Visual state/transition design (SVG-based)

  • Per-state timelines — Each state references its own Timeline (Rive/Unity Animator model)

  • Guard conditions — Parameter-based transition rules (no explicit trigger needed)

  • Blend support — Smooth animation blending between states

  • Runtime player — ChronoPlayer with multi-state playhead

  • Export ready — Full .json serialization for headless playback

  • Sub-mode toggle — [● Animation] [○ State Machine] within single canvas

🎬 Scripting & Automation

JavaScript-Based Scripting (No Custom DSL)

  • Full undo/redo — Scripts operate through command system (automatic undo)

  • Scene API — Add layers, update properties, delete, group

  • Timeline API — Create tracks, keyframes, modifiers and independent animations

  • Event definitions — Author triggers, bindings, wires and state-machine transitions

  • Expression evaluator — Runtime property calculation with parameter context

Authoring Scripts (Editor-Time)

  • JavaScript handles — const card = scene.add('rect')

  • Command wrapping — Every script mutation wrapped in undoable command

  • Game engine foundation — Extensible for future engine workflows

Interactive Runtime & Console

  • Headless ChronoPlayer — Standalone animation playback (no UI)

  • Manual Script Console — Run trusted local authoring code; agents use isolated MCP scripts

  • Trigger system — Time-based, event-based, and manual triggers

✨ Animation Effects & Modifiers

Signal Modifiers (Procedural Animation)

  • Arithmetic — Sine, Pulse, Quantize, Offset, Scale, Clamp

  • Noise — Fractal, Jitter, Perlin noise-driven variation

  • Time manipulation — TimeWarp (slow/fast), EaseCurve, Multiplier

Physics Simulation

  • Spring — Oscillation with damping (frequency, damping ratio)

  • Decay — Exponential falloff

  • Elastic — Overshoot oscillation

  • Bounce — Elastic collision simulation

  • Overshoot — Anticipation + follow-through

GPU Post-Effects

  • Separable Gaussian blur — Shared by blur, glow, and shadow

  • Motion blur — After Effects-style accumulation (smooth smear)

  • CSS filter fallback — Graceful degradation on non-GPU browsers

  • Real-time preview — Effect strength and quality adjustable

🎭 Particle Effects (GPU-Powered)

Polymorphic Emitter System

  • 6 emission shapes — Point, Line, Circle, Rectangle, Path, Source Layer

  • 9 particle types — Circle, Soft Circle, Rectangle, Rounded Rectangle, Line, Triangle, Star, Smoke Puff, Flame Blob

  • Scene-layer emission — Emit from any layer's geometry (live motion)

  • Dedicated dock tab — Separate particle controls from main properties

Real-Time Controls

  • Density, speed, lifetime — All animatable via keyframes

  • Rotation, scale, color — Per-particle parameters

  • Blend modes — Normal, Screen, Additive, Multiply

  • Particle preview — In-modal SVG ghost preview with preset browser

Advanced Features (V2+)

  • LifeGradient editor — Animate color/opacity over particle lifetime

  • Preset browser — Curated particle effect library

  • Multi-source emitter — Emit from multiple layer geometries

  • Custom shapes — Polygon, N-gon, spiral, helix

  • Spawn velocity fields — Direction and speed variation

  • Tangent-follow orientation — Particles align to motion

📁 Asset Management & Import

Universal Import Pipeline

  • File formats — Images (JPG, PNG, WebP, etc.), video (MP4, WebM), audio (MP3, WAV), SVG, Lottie, dotLottie, Chorono scenes

  • Clipboard support — Paste images directly from clipboard

  • Asset registry — Centralized collection, inventory, orphan cleanup

  • Preview & preflight — Single-file modal preview before import

  • Atomic transactions — All-or-nothing import (undo fully supported)

Security

  • SVG sanitization — Strip scripts, XXE protection, external-ref blocking

  • HTTPS-only validation — No mixed-content imports

  • URL validator — Prevent data: and javascript: URIs

🔄 Composition & Layout Tools

Align & Distribute

  • 6 align operations — Left, Right, Top, Bottom, Center H/V

  • 3 reference modes — Selection bounds, Canvas bounds, Key Object

  • Distribute centers/spacing — Equal distribution with gap control

  • Pack & tidy — Auto-arrange with configurable spacing

  • Smart guides — Live center, edge, spacing overlays (CSS-filter fallback)

  • Auto-key — Automatically add keyframes when aligning animated layers

Context-Aware Menus

  • Right-click actions — LayerPanel, SceneCanvas, AssetsPanel, ParametersPanel, EventsPanel

  • Quick access — Add Layer, Fit/Zoom, Delete, Duplicate workflows


🌐 SDKs & Integrations

Web SDK (@chorono/web-sdk)

Embed animations in any website:

<script src="https://cdn.chorono.io/web-sdk/latest.js"></script>

<div id="animation-container"></div>

<script>
  const player = new ChronoPlayer({
    container: '#animation-container',
    sceneUrl: 'https://cdn.example.com/my-animation.json',
    autoplay: true,
    loop: true
  });
</script>

Features:

  • Lightweight bundle — ~45KB (gzipped), lazy-loaded WebGL/Canvas

  • Event system — play, pause, seek, complete events

  • Property binding — Drive DOM attributes with animation values

  • Headless playback — ChronoPlayer with zero UI

  • Responsive — Auto-scale to container

  • Browser support — Chrome, Firefox, Safari 12+, Edge, mobile browsers

API:

player.play();
player.pause();
player.seek(timeMs);
player.setPlaybackRate(1.5);
player.setProperty('layer.id', { opacity: 0.5 });
player.on('complete', () => console.log('Done!'));

Runtime (@chorono/runtime)

Headless playback for Node.js and CLI:

npm install @chorono/runtime

See npm package for latest version.

Features:

  • Headless ChronoPlayer — Standalone animation playback (no UI)

  • Server-side rendering — Render frames to PNG/WebP for video generation

  • CLI tool — Export scenes to MP4, GIF, or frame sequences

  • Full Scene API — Manipulate scenes programmatically

  • Event system — Listen to animation events

Android SDK (chorono-android)

Native animation playback on Android:

// Gradle
dependencies {
    implementation 'io.chorono:chorono-android:1.0.0'
}

// Usage
val player = ChronoPlayer(context)
player.loadScene(uri)  // File, Uri, or Stream
player.play()

// Listen to events
player.onEvent { event ->
    when(event) {
        is PlayEvent -> Log.d("Chorono", "Playing")
        is CompleteEvent -> Log.d("Chorono", "Finished")
    }
}

// Control playback
player.pause()
player.seek(2000)  // ms
player.setPlaybackRate(1.5)

Features:

  • Native Canvas rendering — Android Canvas API (CPU) + OpenGL ES 3.0 (GPU particles optional)

  • Efficient — Frame-skipping on low-end devices, adaptive quality

  • Kotlin-first API — Coroutines support, lifecycle-aware

  • File & Network — Load from assets, Uri, InputStream

  • Scene composition — Merge multiple scenes, layer visibility control

  • Event forwarding — Animation events to app logic

More Platforms (Coming Soon)

Repository

Platform

Language/Framework

chorono-ios-sdk

iOS / macOS

Swift

chorono-macos

macOS native

Swift

chorono-flutter

iOS + Android

Flutter/Dart

chorono-react-native

iOS + Android

React Native

chorono-kmp

iOS + Android

Kotlin Multiplatform

chorono-desktop

Windows / Linux / macOS

Electron

chorono-qt

Embedded / Desktop

Qt / C++

chorono-python

Server / scripting

Python

chorono-node

Server / CLI

Node.js

chorono-embed

Lightweight embed

Vanilla JS

chorono-wechat

WeChat Mini Program

JS

chorono-tizen

Samsung Smart TV

Tizen JS

chorono-webos

LG Smart TV

webOS JS

chorono-harmony

Huawei devices

HarmonyOS

chorono-core

Cross-platform engine

C++

chorono-gpu

GPU rendering module

WGSL / GLSL

chorono-runtime

Headless playback

TypeScript

MCP Server (chorono-mcp)

The local MCP server is implemented in this repository. It connects Claude Desktop, Claude Code and Codex to the actual editor, with isolated QuickJS scripting, multi-timeline control, PNG previews, portable project persistence and the native ActionRegistry tools.

Run npm run mcp:build, npm run mcp:setup, then npm run dev:mcp (or build and npm run start:mcp). Open http://127.0.0.1:2000, then click MCP → Connect this editor. Generated client configurations are in .chorono/client-configs/. See the MCP setup and tool reference for configuration, all capabilities, security boundaries and smoke tests.

Claude Desktop, Cursor, VS Code Copilot integration:

  • Native tools — Layer, keyframe, path, spline, particle, parameter and state-machine actions

  • Live scene — Tools read and mutate a connected browser tab with revision checks and undo/redo

  • Isolated scripting — QuickJS memory/time limits, atomic edits and commit-without-replay plans

  • Multiple animations — Explicit timelines, modifiers, controllers, preview isolation and runtime controls

  • Persistence — Portable scene JSON with embedded local media, runtime JSON, SVG and image sequence exports

For code-driven scene design, scripts can read a complete detached scene.snapshot(), inspect layer.data / layer.get(path), and preserve nested settings with layer.patch(...). Script-selected timelines also govern clone/array animation copies. Existing state machines, parameters, bindings, triggers and wires can be edited without rebuilding the scene. Native audio clip helpers share the editor's trim/split/gain commands. Animated layer data is applied before rendering, including particles, repeaters, shape geometry, typography, effects and masks. See the scripting guide (Türkçe) for actual APIs, typed values, limits and the dry-run/commit workflow. Three.js/modeling support is separate future work.


🚀 Getting Started

Prerequisites

  • Node.js 20+ and npm

  • Git

  • Modern browser with WebGL2 support (Chrome, Firefox, Safari 15+, Edge)

Installation

git clone https://github.com/codie1982/chorono-editor.git
cd chorono-editor
npm ci
npm run dev

Open http://localhost:2000 (the dev server runs on port 2000)

This starts the manual editor. For agent control, follow Set up and control Chorono from an agent, which also configures MCP and installs skills. Stop any running Next server before installing dependencies or building.

Environment Setup (Optional — AI Features)

Provider keys are for the editor's built-in AI panel. The external Claude/Codex MCP workflow above uses the model client and needs no provider key in the editor.

ANTHROPIC_API_KEY=sk-...
OPENAI_API_KEY=sk-...

📖 Architecture

Core Data Model

ChronoScene → Layer → Timeline → Track → Keyframe

GPU Subsystem

src/lib/render/gpu/
├── GPUCapabilities.ts                  # WebGL2/WebGL1 + extension detection (SSR-safe)
├── GPUCompositor.ts                    # Identity-transform blend & blit to 2D canvas
├── GPUEvents.ts                        # Shared typed event emitter base
├── particles/
│   ├── ParticleGPUBackend.ts           # Abstract backend
│   ├── WebGLInstancedQuadBackend.ts    # Instanced-quad particle renderer
│   ├── WebGLParticleShader.ts          # 9-shape SDF shaders (WebGL2/1)
│   └── ParticleBufferPacker.ts         # Per-frame instance staging buffer
└── effects/
    ├── GPUEffectShaders.ts             # Blur + motion-blur GLSL
    ├── GPUImageEffects.ts              # Separable Gaussian blur engine
    └── GPUMotionBlur.ts                # Accumulation motion-blur engine

src/lib/render/renderMotionBlurAccumulated.ts   # Motion-blur orchestration

Key Modules

  • src/lib/core/ — Data model (Layer, Timeline, ChronoScene)

  • src/lib/editor/ — Commands and state management

  • src/lib/ai/ — AI integration (ActionRegistry, AgentLoop)

  • src/lib/render/ — Canvas + GPU rendering pipeline

  • src/components/ — UI panels and canvas

🧪 Testing

npm test                    # Run all tests
npm test -- --watch       # Watch mode
npm test -- --coverage    # Coverage report

1,000+ tests (1,086) covering core features, GPU buffer/transform logic, particle physics, and animation.

🛠️ Development

Build

npm run build
npm start

⚠️ Critical: Never run next build while dev server is running — it corrupts .next/.

Code Style

  • OOP with abstract base classes

  • Private properties + getter/setters

  • Event emission for all new classes

  • Self-documenting code (minimal comments)


📚 Documentation

Browse the documentation index for the full guide list.

Guide

English

Türkçe

Computer installation and MCP connection

Installation

Bilgisayara kurulum

Skill structure, installation and updates

Agent skills

Ajan skill'leri

Connection and installation problems

Troubleshooting

Sorun giderme

First animation in the editor

Getting started

Başlangıç

JavaScript scene authoring

Scripting

Betik yazımı

Technical references: MCP tools and limits, CLI and skill distribution, and CLI package.

🎯 Active Branches & Roadmap

Core Features (Main)

Feature

Status

Highlights

GPU Particle Renderer

✅ Ready

10K+ particles @ 60 FPS, 9 SDF shapes, motion blur

State Machines (FSM)

✅ Ready

Node-graph editor, guard conditions, timeline per-state

Parameter Wiring

✅ Ready

17+ presets, broken-wire detection, track-header indicators

AI Agent Loop

✅ Ready

Multi-turn reasoning, read/mutate tools, intent classification

Spline Object System

✅ Ready

8 primitives, point editing, text-to-spline conversion

Smart Selection

✅ Ready

Select Similar/Transform, canvas tools, Inside/Touching toggle

Clone & Array

✅ Ready

Live instances, 5 array patterns, instance resolver

JavaScript Scripting

✅ Ready

Full reads, safe patches, timelines, interaction definitions, native audio helpers

In Progress

Branch

Feature

ETA

feature/gpu-particle-renderer-v1

GPU blur + motion blur post-effects

Next

feature/particle-effect-engine-bl13

Particle v2 (LifeGradient editor, presets, custom shapes)

Sprint 2

feat/text-element-typography

Per-character animation framework

Sprint 3

feat/align-distribute-tools

Advanced composition (smart guides, auto-key)

Sprint 3

🔜 Editor Modes — Coming Soon

Chorono is built on a multi-mode architecture. The 2D Animation mode is production-ready today. Additional modes are under active development:

Mode

Description

Status

🎨 Drawing Mode

Vector illustration tools, brush engine, freehand paths

Coming Soon

🎮 Game Engine Mode

GameObjects, physics, collision, state-machine-first workflow

Coming Soon

🎬 Video Editor Mode

Clip timeline, transitions, color grading, multi-track audio

Coming Soon

🧊 3D Modeling Mode

Three.js-based 3D objects, cameras, lighting, GLTF export

Coming Soon

Each mode shares the same AI panel, scripting API, state machine system, and SDK export pipeline — only the scene object type, tools, and renderer change.

Planned (Next Quarter)

Feature

Description

Effort

Particle V2+

Preset browser, physics fields, GPU trails

3 weeks

Runtime Console

DevTools-style debugging

2 weeks

Export formats

MP4, GIF, Lottie, SVG sequences

4 weeks

Drawing Mode

Brush engine + vector illustration

6 weeks

Game Engine Mode

Physics + collision + GameObject system

8 weeks

Support

For installation or animation problems, include your operating system, Node.js version, agent client, steps to reproduce, and the expected and actual behavior. If relevant, include the output of npm run chorono -- doctor. Remove API keys, tokens and other private information before sharing logs or project files.

🤝 Contributing

Read CONTRIBUTING.md for development setup, validation commands and the PR process. Please follow our Code of Conduct.

Use the bug report, feature request or first animation feedback form. The required Tests and builds check must pass before changes can merge into main.

📄 License

MIT License


Made with ❤️ by the Chorono team
One platform. Every screen. Every creative tool.

Available Tools

65 tools
add_bindingB

Add a linear binding that remaps a source (parameter or layer property) onto a target (layer property / timeline progress / parameter) via inputMin→outputMin … inputMax→outputMax.

Inputs: sourceType (required), targetType (required), id, clamp, +15 more.

add_keyframesA

Add keyframes to animate a layer property. Auto-creates timeline + track if missing.

TRACK TARGET FORMAT: "layers.{layerId}.{property}"

AVAILABLE PROPERTIES: opacity → 0.0 - 1.0 transform.x → pixels (horizontal position) transform.y → pixels (vertical position) transform.scaleX → 1.0 = 100% transform.scaleY → 1.0 = 100% transform.rotationDeg → degrees style.fill.color → "#rrggbb" hex string (SNAP — does NOT interpolate) style.fill.opacity → 0.0 - 1.0 style.stroke.width → pixels style.cornerRadius → pixels text.fontSize → pixels text.letterSpacing → pixels effects.blur → 0 - 100

EXAMPLES: target: "layers.bg_circle.opacity" target: "layers.title_text.transform.y" target: "layers.logo.transform.scaleX"

Inputs: target (required), keyframes (required), timelineId (required), requestId, +2 more.

add_layerB

Add a new layer to the scene. Set a meaningful id (e.g. "bg_rect", "title_text") — you will use this id in add_keyframes track targets.

Inputs: id (required), name (required), type (required), x, +56 more.

add_modifierC

Add a track modifier: sine, pulse, quantize, offset, scale, clamp, wave, noise, fractalNoise, jitter, timeWarp, bounce, elastic, overshoot, decay, spring.

Inputs: target (required), modifier (required), timelineId (required), requestId, +2 more.

add_parameterA

Add a scene parameter — a named runtime value (number/boolean/color/string) that triggers, bindings, wires, and state-machine guards can read and write.

Inputs: id (required), max, min, name, +5 more.

add_parameter_wireA

Add an expression-driven wire. The source value is bound as source (alias s) in a whitelist expression — map/clamp/lerp/min/max/abs/round/floor/ceil/sin/cos/tan/sqrt/pow/smoothstep — e.g. "map(source,0,1,0,360)". Source/target are scene params (propertyPath = param id, no layerId) or layer properties (layerId + dot-path).

Inputs: expression (required), sourceProperty (required), targetProperty (required), id, +12 more.

add_particle_emitterB

Add a particle emitter. Pick a preset by friendly name — confetti, sparkle, magic, smoke, fire, snow, rain, rocket — then optionally override count / durationMs / loop / position. Use for "confetti", "fireworks", "falling snow", etc.

Inputs: id (required), x, y, loop, +7 more.

add_pathA

Create a bezier path layer from an array of [x,y] points. role="visual" draws a stroke; role="motion" is an invisible guide for assign_motion_path. Points are in layer-local px; set x/y to position the path.

Inputs: id (required), points (required), x, y, +8 more.

add_sm_stateB

Add a state to a state machine. Each state plays one timeline while active. The first state added becomes the initial state automatically.

Inputs: id (required), name (required), smId (required), timelineId (required), +4 more.

add_sm_transitionA

Connect two states with a transition. Fires on event, when guard holds, or both. Use from="*" for a transition that applies from any state.

Inputs: to (required), from (required), smId (required), id, +9 more.

add_splineA

Create an editable spline primitive (circle/ellipse/rectangle/line/arc/donut/ngon/star). Use over add_layer shapes when the user wants an editable vector path (points/handles). Each kind takes its own geometry params (radius, sides, angles…).

Inputs: id (required), kind (required), x, y, +24 more.

add_triggerA

Add an event→action rule. When eventType fires (optionally on a layer/timeline), run one action (play/pause/seek a timeline, setParam, emitEvent…). Add an optional condition (condPath/condOp/condValue) to gate it. For click events, the layer must be tappable (set_interactive); for drag events, draggable.

Inputs: eventType (required), actionType (required), id, label, +18 more.

apply_script_planA

Commit a previously prepared script plan exactly once, retaining generated object ids. Refuses a stale scene revision.

Inputs: planId (required), requestId, sessionId, expectedRevision.

array_layerA

Lay out copies of a layer in a pattern: "linear" (row/column via moveX/moveY), "grid" (columns×rows), "radial" (count around a circle: radius + angles), or "path" (distribute along a path layer). count includes the source. cloneMode copy|instance.

Inputs: layerId (required), pattern (required), rows, count, +26 more.

assign_motion_pathB

Make a layer travel along a path layer (followPath). Set animateMs to auto-animate progress 0→1 over that duration. orientToPath rotates the layer to face the path tangent.

Inputs: layerId (required), pathLayerId (required), animateMs, requestId, +6 more.

bake_trackC

Bake procedural animation/modifiers into editable linear keyframes.

Inputs: target (required), timelineId (required), fps, requestId, +3 more.

batch_actionsB

Apply ordered native tools atomically as ONE undo step. run_script and transport/file tools cannot be nested here.

Inputs: actions (required), requestId, sessionId, expectedRevision.

clear_sceneB

Remove all layers and timelines from the scene (fresh start). Use before generating a complete new animation from scratch.

Inputs: requestId, sessionId, expectedRevision.

clone_layerA

Duplicate a layer. mode="copy" makes independent copies; mode="instance" makes live instances that mirror the source visual (editing the source updates them). count = number of NEW copies, each offset by (offsetX, offsetY) from the last.

Inputs: layerId (required), mode, count, offsetX, +4 more.

clone_timelineC

Duplicate an animation including keyframes, curves, modifiers, events and segments with a new timeline id.

Inputs: newId (required), timelineId (required), requestId, sessionId, +1 more.

configure_particlesC

Update emitter and particle settings, gradients, physics and lifetime properties.

Inputs: config (required), layerId (required), requestId, sessionId, +1 more.

control_playbackB

Play, pause, stop or seek the editor; select a timeline and set speed. timelineIds isolates animations in the live viewport; [] restores all animations.

Inputs: action (required), speed, timeMs, requestId, +4 more.

control_runtimeB

Set live runtime parameters and dispatch a state-machine event. Events enable runtime test ticks so transitions/blends work while paused; testMode:false stops test ticks.

Inputs: event, testMode, machineId, requestId, +3 more.

create_objectB

Create ANY registered object kind, including shapes, text, group, media, spline, path, repeater or particle emitter. patch is a Partial. Discover kinds and properties with get_capabilities.

Inputs: kind (required), patch, requestId, sessionId, +1 more.

create_state_machineA

Create a state machine that switches between timelines based on events/guards. Create the per-state timelines FIRST, then this, then add_sm_state for each state. Use for interactive / multi-state scenarios (hover→active, idle→walk→run, 4 seasons…).

Inputs: id (required), name, requestId, sessionId, +1 more.

create_timelineA

Create an animation timeline. You MUST create a timeline before calling add_keyframes. Set a meaningful id (e.g. "intro", "loop_anim") — you will reference it in add_keyframes.

Inputs: id (required), durationMs (required), loop, autoplay, +5 more.

delete_layerC

Remove a layer from the scene.

Inputs: layerId (required), requestId, sessionId, expectedRevision.

delete_timelineB

Delete one timeline. Refuses timelines referenced by state machines.

Inputs: timelineId (required), requestId, sessionId, expectedRevision.

describe_layerB
Read-only

Detailed dump of one layer (transform, opacity, size, style, type-specific data).

Inputs: layerId (required), requestId, sessionId, expectedRevision.

describe_timelineB
Read-only

List a timeline's tracks and their keyframes (target, times, values).

Inputs: timelineId (required), requestId, sessionId, expectedRevision.

edit_entityB

Add/update/remove parameters, triggers, bindings, parameterWires or stateMachines by id. Use for advanced guards, transitions, formula wiring and runtime behavior.

Inputs: id (required), operation (required), collection (required), value, +3 more.

evaluate_at_timeB
Read-only

Compute animated property values at a given time (ms). Optionally filter to one target path (e.g. "layers.ball.transform.y"). Use to VERIFY an animation.

Inputs: timeMs (required), target, requestId, sessionId, +1 more.

evaluate_frameC
Read-only

Evaluate timelines, bindings, parameter wiring and runtime parameters at a requested time. Returns property values without rendering pixels.

Inputs: timeMs, requestId, sessionId, parameters, +2 more.

export_runtimeC

Save validated and optimized runtime JSON in the export directory.

Inputs: name, requestId, sessionId, expectedRevision.

export_sequenceC

Render a frame sequence ZIP using the editor. Bounded to 300 frames per call. Does not include audio.

Inputs: fps, name, requestId, sessionId, +2 more.

export_svgC

Save an SVG export using the existing vector exporter.

Inputs: name, timeMs, requestId, sessionId, +1 more.

get_capabilitiesB
Read-only

Discover all tools, object kinds, particle presets, limits and the exact script API.

Inputs: requestId, sessionId, expectedRevision.

get_runtimeB
Read-only

Read current runtime parameters, state-machine states, active timelines and playback state.

Inputs: requestId, sessionId, expectedRevision.

get_sceneA
Read-only

Read the live editor scene plus revision, selected timeline and playhead. Read before editing existing work.

Inputs: requestId, sessionId, expectedRevision.

get_scene_jsonA
Read-only

Full ChronoScene JSON. Use sparingly (large) — prefer list_layers / describe_*.

Inputs: requestId, sessionId, expectedRevision.

group_layersC

Group selected layer ids in one undoable operation.

Inputs: layerIds (required), requestId, sessionId, expectedRevision.

import_assetB

Import a media asset supplied as base64 file content using the existing import pipeline. No arbitrary local paths or server-side URL fetches.

Inputs: data (required), name (required), mimeType (required), requestId, +2 more.

list_assetsA
Read-only

List uploaded media assets (image/video/audio) with their ids. Use to find a valid assetId before add_layer type=image/video/audio. AI cannot upload files.

Inputs: requestId, sessionId, expectedRevision.

list_layersB
Read-only

List all layers in the scene (terse): id, type, name, visibility. Use to discover what exists before editing.

Inputs: requestId, sessionId, expectedRevision.

list_projectsC
Read-only

List saved project files inside the project directory.

Inputs: requestId, sessionId, expectedRevision.

list_sessionsB
Read-only

List explicitly connected Chorono editor tabs. Use sessionId when several tabs are open.

Inputs: requestId, sessionId, expectedRevision.

list_timelinesB
Read-only

List all animations, their duration, loop settings, tracks, segments and events.

Inputs: requestId, sessionId, expectedRevision.

load_projectA

Load a saved project by file name into the current editor as one undoable change.

Inputs: name (required), requestId, sessionId, expectedRevision.

patch_objectA

Patch any Layer fields: text, typography, transforms, effects, masks, repeater, visibility, stroke, geometry or particle configuration. Nested objects replace their existing value; read describe_layer first.

Inputs: patch (required), layerId (required), requestId, sessionId, +1 more.

redoC

Redo one editor transaction.

Inputs: requestId, sessionId, expectedRevision.

remove_trackC

Remove an animation track from an explicit timeline.

Inputs: target (required), timelineId (required), requestId, sessionId, +1 more.

render_previewA
Read-only

Return an actual PNG frame. With no timeMs/timelineIds/parameters, captures the current live state including state machines. For deterministic time-based state-machine previews specify timelineIds. parameters overrides values for this frame only.

Inputs: width, timeMs, requestId, sessionId, +3 more.

run_scriptA

Execute synchronous JavaScript in isolated QuickJS. Only scene API is available; no Node, DOM, fetch, imports or filesystem. All edits are atomic. dryRun returns a planId which apply_script_plan commits without rerunning code.

Inputs: code (required), dryRun, requestId, sessionId, +1 more.

save_projectB

Save a portable scene JSON with local blob media embedded. Files stay inside the configured project directory. Returns exact path, bytes, revision and hash.

Inputs: name, overwrite, requestId, sessionId, +1 more.

set_initial_stateC

Set which state a state machine starts in.

Inputs: smId (required), stateId (required), requestId, sessionId, +1 more.

set_interactiveA

Make a layer interactive: tappable (fires click triggers) and/or draggable (fires drag events). Drag can follow the cursor, drive a parameter (setsParameter), or scrub a timeline (scrubsTimeline).

Inputs: layerId (required), dragAxis, tappable, dragRange, +7 more.

set_keyframesB

Add or replace keyframes on an explicit timeline and layer property. Supports customBezier with {type:"customBezier",bezier:{cx1,cy1,cx2,cy2}}. Easing belongs to the starting keyframe.

Inputs: layerId (required), property (required), keyframes (required), timelineId (required), +3 more.

trim_pathA

Reveal only part of a layer's stroke (line-draw / progress effect). start/end/offset are 0–1. Animate the reveal by keyframing layers..style.stroke.trim.end.

Inputs: layerId (required), end, start, offset, +3 more.

undoC

Undo one editor transaction.

Inputs: requestId, sessionId, expectedRevision.

ungroup_layerB

Ungroup a group and preserve children transforms and animation.

Inputs: layerId (required), requestId, sessionId, expectedRevision.

update_compositionC

Change canvas composition settings (size, duration, framerate, background color).

Inputs: width, height, frameRate, requestId, +4 more.

update_layerB

Update properties of an existing layer. Only provide fields you want to change.

Inputs: layerId (required), x, y, loop, +55 more.

update_timelineC

Set timeline duration, looping, pingPong, autoplay, work area, layer membership, markers, segments or events.

Inputs: patch (required), timelineId (required), requestId, sessionId, +1 more.

update_trackB

Set track fields: keyframes, outOfRange, easeCurve, timeWarp, multiplierCurve, multiplierAmplitude, procedural waveform/noise controller, or complete modifier stack.

Inputs: patch (required), target (required), timelineId (required), requestId, +2 more.

validate_sceneB
Read-only

Validate scene structure and return runtime-export diagnostics.

Inputs: requestId, sessionId, expectedRevision.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    C2.7/5.0

    Scored across 65 tools

    Disambiguation2/5

    Many tools overlap: add_layer/create_object/add_spline/add_path all create visual objects; update_layer/patch_object/edit_entity all mutate layers or entities; add_keyframes/set_keyframes/update_track/add_modifier overlap animation editing. list_layers/describe_layer/get_scene_json/get_scene and evaluate_at_time/evaluate_frame are also easy to confuse despite some descriptive boundaries.

    Naming Consistency3/5

    Most names are snake_case verb_noun, but verb families are inconsistent (add vs create vs set; update vs patch vs edit; get vs describe vs list). Abbreviations like add_sm_state and set_initial_state, plus get_scene vs get_scene_json, reduce predictability across 65 tools.

    Tool Count1/5

    65 tools far exceed a well-scoped MCP surface and include many redundant or low-level alternatives to run_script/batch_actions. This is an extreme count for the apparent purpose, with overlapping clusters rather than distinct earned tools.

    Completeness4/5

    The surface covers scene/layer/timeline editing, animation, modifiers, particles, runtime behavior, state machines, export, persistence, assets, validation and undo. Minor lifecycle gaps remain, such as deleting saved projects/assets and full audio/video export, but core workflows are well covered.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Local MCP server for automating Spine projects via the official CLI, enabling AI tools to inspect, export, import, and add animations to .spine files.
      16
      13 npm
      23
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for safe local automation of Aseprite, providing tools to create, inspect, edit, save, and export pixel art documents through the official Aseprite CLI and controlled Lua scripts.
      113 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A local MCP server that runs inside Blockbench, enabling Codex and other MCP clients to control and inspect Blockbench projects through 95 tools for modeling, animation, UV editing, painting, and more.
      1
      GPL 3.0
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables MCP clients to create and edit pixel art and animations through a local-first editor, sharing the same project, editing commands, and undo history with the GUI.
      -