Concepts
Backstage organizes animation around a small set of ideas. Once these click, the Studio UI and the @unseenco/backstage API feel consistent.
Objects
Everything you animate is an object. An object can mirror a Three.js mesh, a DOM element, or a virtual value that never appears on screen.
You create objects with sheet.object(name, props) (or helpers such as autoAddObject from @unseenco/backstage/threejs).
Props
Objects are made of props. Each prop has a type (number, rgba, compound, …) and can be tweaked in the Details Panel or sequenced on the timeline.
Props update from:
- The Studio (Details Panel, gizmos from extensions)
- Your code (
onValuesChange,onChange, …)
Sheets
A sheet groups objects that animate together. One sheet has one sequence (timeline) today; multi-sequence sheets are a future direction.
const sheet = project.sheet('Main')
const hero = sheet.object('Hero', { x: 0 })
sheet.sequence.play()Sheet instances
Reuse the same animation for multiple on-screen instances by passing an instance id as the second argument to project.sheet():
const submit = project.sheet('Button', 'submit')
const cancel = project.sheet('Button', 'cancel')
submit.sequence.play() // does not affect cancelSequence variants
The same sheet can switch between independent timelines (for example mobile vs desktop). See Sheet sequence variants.
Sheet-level props
Some values belong to the sheet, not a visible object (global fog, layout toggles, shared parameters). Use sheet.props(config) instead of inventing a dummy object. Sheet props do not appear in sheet.getObjects() and share one hidden carrier object in the outline.
See Sheets.
Sequences
Each sheet’s sequence holds keyframes for all sequenced props on that sheet. The Sequence Editor (dope sheet) is where you add keyframes, edit curves, and set focus ranges.
Extensions
Extensions add Studio UI and workflows: toolbar buttons, panes, viewport gizmos. @unseenco/backstage/threejs/extension and built-in GSAP clip authoring in Studio are the main extension-style workflows in this monorepo; you can author your own via the Studio API. See GSAP and Three.js.
What we skip here
Projects (save files), prop type constructors, and playback APIs are covered in the manual and API reference.