Skip to content

Sequence v1.0.0: Keyframe animation engine#2272

Open
KenanMillet wants to merge 21 commits into
Roll20:masterfrom
KenanMillet:Sequence-v1.0.0
Open

Sequence v1.0.0: Keyframe animation engine#2272
KenanMillet wants to merge 21 commits into
Roll20:masterfrom
KenanMillet:Sequence-v1.0.0

Conversation

@KenanMillet

Copy link
Copy Markdown
Contributor

First stable release of Sequence, a keyframe animation engine for Roll20 tokens.

What it does

Record token movements and attribute changes, then play them back with smooth interpolation, easing curves, expression-driven values, and looping. Recordings are stored as handouts and are fully portable between campaigns.

Highlights

  • 8 built-in examples — spin, hover, pulse, orbit, shake, torch-flicker, rgb-cycle, boss-phase-2. Generate and play from chat with !sequence example.
  • Expression engine — keyframe values can be mathematical expressions using orig, prev, t, sin, cos, rand, freeze, color functions, and more.
  • String animation — Levenshtein-based lerp for text attributes (name, tooltip). Supports typing effects with easing.
  • UDL lighting — Animate both legacy and Updated Dynamic Lighting properties.
  • Unit functionscell(n) for grid cells, unit(n) for map-scale distance, get("attr") for cross-attribute access.
  • Per-attribute segments — Lerp engine tracks each attribute independently, so mixed keyframes work correctly.
  • Attribute groups — Position (left/top), size (width/height), and lighting attrs are co-recorded for correct interpolation.
  • Extensible — Other scripts can register custom attributes, functions, constants, easing curves, and examples via the extension API.
  • Choreograph integration — Lifecycle hooks, sync participant, and shared examples for multi-token orchestration.

Commands

record, stop, play, preview, pause, resume, list, edit, delete, example, example!, snapshot, man, gen-dev-docs, and more. Full command list in README.

Files

  • Sequence/Sequence.js — main script
  • Sequence/1.0.0/Sequence.js — versioned copy
  • Sequence/script.json — One-Click metadata
  • Sequence/README.md — user documentation
  • Sequence/TODO.md — roadmap

Dependencies

None (standalone). Integrates with Choreograph and SelectManager when available.

Examples: spin, hover, pulse, orbit, shake, torch-flicker, rgb-cycle, boss-phase-2

Engine fixes:
- Per-attribute lerp segments (no longer blocked by unrelated keyframes)
- parseFloat numeric initialState values (fixes string math)
- Batch obj.set() for all core attrs (fixes lighting updates)
- Resolve expressions in runningStates pre-computation
- Fix Color objects in _wrapNode (prototype preservation)
- Duck-type Color coercion (lerpColor, batchSet, evalExpr)
- Duration derived from resolved keyframe times (not stored)

New features:
- registerString type with levenshtein-based string lerp
- get() expression function (cross-attribute access)
- cell()/unit() expression functions (grid/map-scale conversion)
- round/floor/ceil accept optional step argument
- UDL lighting attributes registered (bright_light_distance, etc.)
- Example namespacing (source/name keys, no collisions)
- Archived example handouts
- Play/Loop buttons in example list, example! output, stopped menu
- [open] link in playback menu
- registerColor parse detects expressions
…s, drop fn shorthand from public API, detail struct.args
@KenanMillet KenanMillet changed the title Sequence v1.0.0 — Keyframe animation engine Sequence v1.0.0: Keyframe animation engine Jun 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant