Files
effectcraft/docs/scripting-parity.md
T
vangel76andClaude Opus 5.5 7085816c98 #773: run repeating app.scheduleTask tasks until cancelTask
Problem: app.scheduleTask(code, delay, true) queued the task and then
skipped it (eval_with_tasks: `if repeat { continue; }`), so repeating
tasks - what ScriptUI panels use for polling and refreshing - never ran.
One-shot tasks scheduled by handlers or in the Script Console never ran
either.

Fix: tasks live per script context (crates/script/src/tasks.rs) with a
due time. Frontends run the due ones every frame through the new
ScriptUi::run_tasks hook (the egui app does; agents and headless hosts
use the `script.runTasks` command). Script-host threads get a Tick
message, inline hosts (Script Console, web) run in their kept context.
A repeating task runs every `delay` ms until app.cancelTask, until it
throws (reported once, then cancelled), or until its owner goes: the
script's last window closing, or - for scripts without windows and the
console - the project being closed or replaced (ScriptUi::project_epoch).
Bounds: at least 50 ms between runs, at most 64 pending tasks per
script, one run per pass (no catch-up bursts), task code nested too
deeply is refused, the engine's loop and recursion limits apply. Ticks
only reach the hosts of the session that scheduled them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 12:56:09 +02:00

4.2 KiB
Raw Blame History

Expressions and scripting parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-10 · Change: major (first expressions and scripting checklist against After Effects 2026 26.5) · Target: Adobe After Effects 2026

Expressions and ExtendScript are how After Effects work is automated and how much of it is built: rigs, templates, studio pipelines. They are also what carries over from After Effects today, while .aep projects can't. Architecture: architecture.md §5 and §5a; extension points: plugins.md; overall numbers: target-app-parity.md.

Breadth ≈ 93%, ready ≈ 65% (estimated). The object models are written from Adobe's public Expression Language Reference and Scripting Guide (behaviour only, AGENTS.md §2) and tested with our own scripts; no real-world script library has been run against both apps.

Feature After Effects 2026 EffectCraft Status Evidence / gap
Expression language JavaScript engine (default) and Legacy ExtendScript JavaScript (boa) with legacy array maths (value + [10, 0]) good crates/expr tests; no separate Legacy ExtendScript engine mode
Expression object model thisComp, thisLayer, wiggle, loopOut, valueAtTime, sampleImage, footage(), text style API… Same members, from the reference good crates/expr/src/tests.rs; behaviour of edge cases unmeasured (G1)
Expression editing Inline field, error bar, pick whip, Expression Language menu, external editors Inline field that grows, error bar, pick whips (property and value), language menu partial External editor support (#364)
Expression performance Cached, multi-frame Per-thread boa contexts unknown No benchmark
Scripting object model app, Project, items, layers, properties, keys, eases, render queue, TextDocument, Shape, markers, File/Folder, Socket, app.settings Same classes, edits run through undoable engine commands; match names table good crates/script tests (≈ 10 test files)
ScriptUI Dialogs, palettes, dockable panels, resource strings, onDraw / ScriptUIGraphics Same, dockable panels reopen at launch good ui_scriptui, tests_ui*
app.scheduleTask / cancelTask One-shot and repeating tasks (polling, panel refresh) until cancelTask Same: repeating tasks run every delay ms (at least 50 ms, at most 64 pending per script) until cancelTask, until they throw (reported once, then cancelled), or until their owner goes: a script's last window closing, or the project closing for scripts without windows; frontends tick them every frame, agents with script.runTasks good tests_tasks.rs (#773); one-shot tasks of a script file still run right after it, not after their delay
Scripts menu, ScriptUI Panels folder yes yes same plugins.md
Startup / Shutdown folders yes not run missing plugins.md
#include, #target directives yes a script starting with one doesn't parse missing plugins.md; common in real scripts
.jsxbin yes no out of scope No public specification
Keyboard shortcuts for scripts yes no missing plugins.md
Command-line rendering aerender yes effectcraft-cli render, script, exec same purpose apps/effectcraft-cli
Essential Graphics scripting hooks addToMotionGraphicsTemplate… yes (M13.7) good —
Agent control (MCP, control channel, every command) none yes beyond agents.md, control-protocol.md; list_effects omits parameter types and ranges (#441)
Real-world script corpus — none run gap Run popular free scripts (the 11 sample scripts After Effects ships are a good start, run as behaviour tests, never copied)

Estimate

≈ 20–40 h: #include / #target and Startup / Shutdown folders 4–8 h, script shortcuts 2–4 h, a corpus of public scripts and expressions with the fixes it finds 10–20 h, an expression performance benchmark 4–8 h.

Revision history

Date Change Summary
2026-10-10 major First expressions and scripting checklist