mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-13 15:09:03 +00:00
Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#617)
Progress docs per craftrules standards/progress-docs.md: target-app parity, gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, and feature, format, hardware, UI and localization parity docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1446e27d85
commit
1e61b4e04b
16 files changed
+1076
-158
No files matched your search
@@ -114,7 +114,9 @@ as PhotoCraft does with `cargo xtask corpus`.
|
||||
|
||||
## See also
|
||||
|
||||
- [docs/gaps.md](docs/gaps.md): where EffectCraft falls short of After Effects and the prioritised workstreams (G1–G9); read it before choosing work
|
||||
- [ROADMAP.md](ROADMAP.md): stage, headline numbers and what's next
|
||||
- [docs/gaps.md](docs/gaps.md): every known shortfall against After Effects, ranked, and the prioritised workstreams (G1–G9); read it before choosing work
|
||||
- [docs/target-app-parity.md](docs/target-app-parity.md): the parity numbers and how they were measured, with the per-area docs it links (UI, file formats, hardware, localization, effects, scripting); progress docs follow [craftrules `standards/progress-docs.md`](https://github.com/storytold/craftrules/blob/main/standards/progress-docs.md)
|
||||
- [CONTRIBUTING.md](CONTRIBUTING.md): setup, gates, commits, how to add things
|
||||
- [docs/architecture.md](docs/architecture.md): layers, data model, commands, pipeline
|
||||
- [docs/testing.md](docs/testing.md): oracle tests, criteria, benchmarks
|
||||
|
||||
@@ -6,7 +6,7 @@ EffectCraft is a clean-room, open-source, pure-Rust motion graphics and visual e
|
||||
`plan/` is maintainer-local (gitignored). Public equivalents: [`ROADMAP.md`](ROADMAP.md), [`docs/`](docs/).
|
||||
1. Read `plan/STATUS.md` (current milestone, next task, running agents, blockers).
|
||||
2. Read the task in `plan/execution-plan.md` §3, the relevant section of `plan/architecture.md`, and the crate README/docs you touch. Feature ids: `plan/aftereffects/feature-catalog.md`; effects: `plan/aftereffects/effects-list.md`; UI reference: `plan/aftereffects/README.md`.
|
||||
3. Read [`docs/gaps.md`](docs/gaps.md): the honest assessment of where we fall short and the prioritised workstreams. Fidelity, reliability and stability (G1–G3) come before new features.
|
||||
3. Read [`docs/gaps.md`](docs/gaps.md): every known shortfall, ranked, and the prioritised workstreams; the numbers are in [`docs/target-app-parity.md`](docs/target-app-parity.md). Fidelity, reliability and stability (G1–G3) come before new features.
|
||||
4. Follow the autonomous operation protocol (`plan/execution-plan.md` §7). Don't stop to ask.
|
||||
|
||||
## Non-negotiables
|
||||
|
||||
@@ -234,8 +234,10 @@ what breaks. It isn't yet a replacement for After Effects on client work. In par
|
||||
Settings ▸ Roto Brush) and face tracking can use Google's MediaPipe Face Landmarker (an optional
|
||||
3.8 MB download in Settings ▸ Face Tracking). Neither is compared with After Effects yet.
|
||||
|
||||
The [ROADMAP](ROADMAP.md) has the plan and [docs/gaps.md](docs/gaps.md) the full, honest
|
||||
assessment. The web build ([docs/web.md](docs/web.md)) runs the full app in the browser.
|
||||
EffectCraft is in **alpha**: about 91% of After Effects' features exist, and we estimate it is
|
||||
about 45% of the way to replacing After Effects for professional work. The [ROADMAP](ROADMAP.md)
|
||||
has the plan, [docs/target-app-parity.md](docs/target-app-parity.md) the measurement and
|
||||
[docs/gaps.md](docs/gaps.md) every known shortfall. The web build ([docs/web.md](docs/web.md)) runs the full app in the browser.
|
||||
[Bug reports](https://github.com/storytold/effectcraft/issues) are the most useful thing you can
|
||||
send us right now.
|
||||
|
||||
|
||||
+134
-64
@@ -1,74 +1,144 @@
|
||||
# Roadmap
|
||||
# EffectCraft Roadmap
|
||||
|
||||
**Stage: alpha** · next: beta, ~30 points of "ready for real work" and ~350–620 h away
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (full re-measure against After Effects 2026 26.5; standard progress-docs layout) · **Target:** Adobe After Effects 2026 (26.5.0.89)
|
||||
|
||||
EffectCraft aims to do what After Effects does, with the same panels, menus and behaviour, written
|
||||
from scratch in Rust. This page is the one-page summary; the evidence is in
|
||||
[docs/target-app-parity.md](docs/target-app-parity.md), the work list in
|
||||
[docs/gaps.md](docs/gaps.md), and the plan in [docs/roadmap.md](docs/roadmap.md).
|
||||
|
||||
## Headline numbers
|
||||
|
||||
| | Value | Kind |
|
||||
|---|---|---|
|
||||
| **Feature breadth** | **≈ 91%** | Estimated, weighted by area; the self-graded 92-item checklist says ≈ 99% |
|
||||
| **Ready for real work** | **≈ 45%** (40–50%) | Estimated; one live fidelity measurement so far |
|
||||
| **Mainstream practitioner** | **≈ 47%** | Estimated: the typical motion designer's weekly work ([how](docs/target-app-parity.md#mainstream-practitioner-and-essentials-user)) |
|
||||
| **Essentials user** | **≈ 52%** | Estimated: core features only ([how](docs/target-app-parity.md#essentials-user)) |
|
||||
| Remaining to **beta** | **≈ 350–620 Opus 5.5 agent-hours** | Estimated |
|
||||
| Remaining to **full parity** | **≈ 850–1,500 Opus 5.5 agent-hours** | Estimated; ≈ 70% parallelises |
|
||||
|
||||
| Audience | Ready % | Hours to ~95% | Work that dominates |
|
||||
|---|---:|---:|---|
|
||||
| Full target | ≈ 45% | ≈ 850–1,500 h | `.aep`, fidelity corpus, bug backlog, performance, formats, hardware, localization |
|
||||
| Mainstream practitioner | ≈ 47% | ≈ 280–530 h | `.aep` exchange, stability, everyday fidelity and bugs, preview speed |
|
||||
| Essentials user | ≈ 52% | ≈ 150–300 h | Opening tutorial `.aep` files, start-up stability, core bugs, preview with sound |
|
||||
|
||||
About 60–70% of these hours parallelise ([detail](docs/target-app-parity.md#readiness-by-audience)).
|
||||
|
||||
Hours are one Opus 5.5 agent working sequentially, calibrated on this repository's history
|
||||
([how](docs/target-app-parity.md#calibration-of-the-hours)).
|
||||
|
||||
### Stage
|
||||
|
||||
**Alpha**, because all six core workflows of the [alpha gate](docs/roadmap.md#alpha-gate)
|
||||
(set up, animate, text and shapes, composite, preview, save and deliver) work end to end on macOS
|
||||
and the work saves and reopens, and ready for real work (≈ 45%) is above the ≈ 40% bar. But: After Effects projects (`.aep`) can't be opened, which
|
||||
alone rules out beta; fidelity against After Effects is measured for one narrow case (scalar ease,
|
||||
168 samples); 134 issues are open, eight of them crash reports. Beta needs ≈ 75% ready and `.aep`
|
||||
opening reliably: the `.aep` owner decision and importer (80–160 h), the fidelity harness and
|
||||
P0/P1 corpus (60–100 h), the crash and bug backlog (40–80 h), performance (40–70 h),
|
||||
Linux/Windows reliability (30–50 h) and depth in animation, masks, effects and text (100–160 h).
|
||||
|
||||
## By dimension
|
||||
|
||||
| Dimension | % | Hours | Doc |
|
||||
|---|---:|---:|---|
|
||||
| Features: breadth | 91% | — | [target-app-parity.md](docs/target-app-parity.md#by-feature-area) |
|
||||
| Features: ready for real work | 50% | 360–660 | [target-app-parity.md](docs/target-app-parity.md#by-feature-area) |
|
||||
| UI/UX fidelity | 65% | 60–120 | [ui-parity.md](docs/ui-parity.md) |
|
||||
| File formats | 50% | 130–230 | [file-format-parity.md](docs/file-format-parity.md) |
|
||||
| Hardware | 40% | 60–120 | [hardware-parity.md](docs/hardware-parity.md) |
|
||||
| Localization | 12% | 60–110 + review | [localization-parity.md](docs/localization-parity.md) |
|
||||
| Performance | 35% | 50–100 | [gaps.md](docs/gaps.md#g5-performance-at-real-world-scale) |
|
||||
| Stability | 45% | 40–80 | [gaps.md](docs/gaps.md#g3-stability-and-a-green-main) |
|
||||
| Platforms | 65% | 30–60 | [gaps.md](docs/gaps.md#g2-real-user-reliability-on-every-platform) |
|
||||
| Ecosystem and plug-ins | 20% | 40–80 | [plugins.md](docs/plugins.md), [scripting-parity.md](docs/scripting-parity.md) |
|
||||
| AI features | 35% | 40–80 | [gaps.md](docs/gaps.md) |
|
||||
| Agent control (beyond After Effects) | ahead | — | [agents.md](docs/agents.md) |
|
||||
|
||||
## Features
|
||||
|
||||
| Area | Breadth | Ready | Hours |
|
||||
|---|---:|---:|---:|
|
||||
| Project, footage and import | 92% | 55% | 25–45 |
|
||||
| Compositions, layers and compositing | 98% | 60% | 30–55 |
|
||||
| Animation: keyframes, graph editor, motion paths, puppet | 97% | 55% | 35–60 |
|
||||
| Expressions and scripting ([detail](docs/scripting-parity.md)) | 93% | 65% | 20–40 |
|
||||
| Shapes, masks and roto | 93% | 45% | 30–50 |
|
||||
| Text and typography | 94% | 50% | 20–35 |
|
||||
| Effects and animation presets ([detail](docs/effects-parity.md)) | 85% | 40% | 70–130 |
|
||||
| 3D (Classic and Advanced) | 82% | 35% | 35–65 |
|
||||
| Tracking and AI-assisted tools | 80% | 35% | 35–70 |
|
||||
| Preview and cache | 92% | 40% | 25–50 |
|
||||
| Render queue and export | 85% | 55% | 25–45 |
|
||||
| Audio | 85% | 45% | 6–12 |
|
||||
|
||||
Weights and evidence per row: [target-app-parity.md](docs/target-app-parity.md#by-feature-area).
|
||||
|
||||
## Languages
|
||||
|
||||
UI strings translated out of ≈ 3,900 (detail: [localization-parity.md](docs/localization-parity.md)).
|
||||
|
||||
| Language | Status | % |
|
||||
|---|---|---:|
|
||||
| English | full | 100% |
|
||||
| Simplified Chinese | partial (menus, part of the panels) | 28% |
|
||||
| Spanish | menus only | 16% |
|
||||
| Hindi | none | 0% |
|
||||
| Arabic | none | 0% |
|
||||
| French | none | 0% |
|
||||
| Portuguese (Brazil) | menus only | 16% |
|
||||
| Indonesian | none | 0% |
|
||||
| Japanese | partial (menus, part of the panels) | 26% |
|
||||
| German | none | 0% |
|
||||
| Korean | none | 0% |
|
||||
| Vietnamese | none | 0% |
|
||||
|
||||
Also shipped: Traditional Chinese (partial, 28%) and Ukrainian (partial, 26%). No language has had
|
||||
native-speaker review.
|
||||
|
||||
## Upcoming
|
||||
|
||||
Ranked; detail in [docs/roadmap.md](docs/roadmap.md) and [docs/gaps.md](docs/gaps.md).
|
||||
|
||||
| | Next | Hours |
|
||||
|---|---|---:|
|
||||
| 1 | Fix the open crash reports; run `cargo xtask ci` on every pull request (G3) | 15–30 |
|
||||
| 2 | Fidelity harness against After Effects: rendered frames, a corpus case per P0/P1 feature (G1) | 60–100 |
|
||||
| 3 | Real-user reliability on Linux and Windows; the open mask, effect, text and 3D bugs (G2) | 100–190 |
|
||||
| 4 | `.aep` / `.aepx` import, after the owner's clean-room decision (G4) | 80–160 |
|
||||
| 5 | Performance: benchmarks at 1080p / 4K, real-time cached playback, hardware video (G5) | 50–100 |
|
||||
| 6 | Localization depth: effect names, all panels, French / German / Korean (G9) | 60–110 |
|
||||
|
||||
Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
|
||||
|
||||
## Progress log
|
||||
|
||||
- 2026-10-10: Full parity re-measure against After Effects 2026 26.5 (installed bundle, 26.2–26.5
|
||||
release notes, repository counts): breadth ≈ 91%, ready ≈ 45%, stage alpha. Progress docs
|
||||
follow the shared standard: `docs/parity.md` became `docs/target-app-parity.md`; new
|
||||
`docs/roadmap.md`, `localization-parity.md`, `file-format-parity.md`, `hardware-parity.md`,
|
||||
`ui-parity.md`, `effects-parity.md` and `scripting-parity.md`.
|
||||
- 2026-10-10: Spanish (#460) and Brazilian Portuguese (#217) menu translations.
|
||||
- 2026-10-10: Japanese now translates the interface below the menu bar too: `crates/ui-egui/src/i18n/ui.rs` has a Japanese table with the same 396 rows as the Chinese ones (panels, dialogs, buttons and tooltips; the shape test keeps the three catalogs listing the same source strings). Menus were already Japanese.
|
||||
- 2026-10-09: Ukrainian now covers all 396 current panel-catalog strings, including dialogs, buttons and tooltips, alongside its menu translation. The catalog keeps the same source keys and placeholder counts as the Chinese catalogs; missing or engine-generated text still falls back to English.
|
||||
- 2026-10-09: Settings ▸ General ▸ Language now translates the interface below the menu bar as well: panels, dialogs, buttons and tooltips read their text through `crates/ui-egui/src/i18n/ui.rs`, keyed by the English source string. Simplified and Traditional Chinese are complete (384 strings); Japanese rows can follow in the same file. A test fails when a converted panel gains a hard-coded string, and another keeps the catalog free of unused rows.
|
||||
- 2026-10-08: `effectcraft-cli render --out` resolves a relative path against the working directory, like `--project` (it used the project's folder, which doubled a path that already named it). Render Queue outputs set in a project are unchanged.
|
||||
- 2026-10-08: Long-press a grouped toolbar button to choose its tools, including Horizontal/Vertical Type; releasing the hold keeps the menu open. Existing point/paragraph text creation is unchanged.
|
||||
|
||||
- 2026-10-06: Settings ▸ General ▸ Language persists English/Japanese menu labels (`general.language`); native UI reuses installed Japanese font fallback, with no bundled CJK font. Dialog and panel contents remain English.
|
||||
- 2026-10-05: Honest assessment ([docs/gaps.md](docs/gaps.md)): breadth ≈ 99% by our own checklist, real use ≈ 30–50%; workstreams G1–G9.
|
||||
- 2026-10-04: Checklist audit at `d39c0e8`: 89 done / 3 partial / 0 missing of 92 features.
|
||||
- 2026-10-01: First commit.
|
||||
|
||||
EffectCraft aims to do what After Effects does, with the same panels, menus and behaviour, written
|
||||
from scratch in Rust. This is where it stands. The milestones overlap; several are worked on at
|
||||
once.
|
||||
## Revision history
|
||||
|
||||
| | Milestone | State |
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| M0 | Skeleton: crates, compositor, the After Effects style shell, control channel, `cargo xtask` | Done (web build: [docs/web.md](docs/web.md)) |
|
||||
| M1 | Keyframes: temporal and spatial interpolation, Easy Ease, roving, velocity | Done |
|
||||
| M2 | Compositing: 38 blend modes, track mattes, parenting, adjustment layers | Done |
|
||||
| M3 | Project operations: settings dialogs, layer commands, `.ecproj`, undo, After Effects menu bar | Done (unsaved-changes prompts, Solid / Layer Settings, lock-aware layer commands, safe project files; View ▸ New Viewer still opens only the one locked viewer) |
|
||||
| M4 | Preview: precomps, motion blur, cached playback | Done (Preserve frame rate / resolution when nested, one motion blur gate, RAM preview fixes, Cache Frames When Idle, motion blur of collapsed precomps and of animated shape / text content, content-keyed RAM preview frames) |
|
||||
| M5 | Timeline depth: graph editor, keyframe clipboard and dialogs, time remapping, pick-whips, expression editor | Done |
|
||||
| M6 | Shapes, masks and footage: shape operators, masks and the pen tool, video and image import | Done |
|
||||
| M7 | 3D: 3D layers, cameras, lights, shadows, depth of field, 3D views and camera tools | In review |
|
||||
| M8 | Expressions with the After Effects object model | Done |
|
||||
| M9 | Text and effects: text animators, layer styles, 306 effects (all 298 of After Effects') incl. time and audio effects | Done (range, wiggly and expression selectors, per-character 3D, text on a path) |
|
||||
| M10 | Export: render queue, H.264, ProRes, image sequences, GIF, audio | Done |
|
||||
| M11 | Animation tools: audio playback, meters and waveforms, Lottie import and export, presets, Motion Sketch, Wiggler, Smoother | Done |
|
||||
| M12 | Performance: layer cache, parallel and GPU compositing, disk cache, motion tracking (done); GPU versions of the remaining CPU-only effects | Mostly done |
|
||||
| M13 | Puppet tools, paint, Roto Brush, motion tracking, a plug-in API, Timeline depth | Done (trained models, open source, downloaded on demand, in a swappable model module: MobileSAM for Roto Brush 2.0 / 3.0, MediaPipe Face Landmarker for face tracking) |
|
||||
| M15 | The web app (WebAssembly, WebGPU) | Done: browser storage, Web Audio, renders and analyses in Web Workers, viewer frames and GPU effects in frame workers with their own WebGPU devices, the disk cache in the Origin Private File System, a storage manager, offline install ([docs/web.md](docs/web.md)) |
|
||||
| M14 | Built for agents: MCP server, command-line tool, control channel; Settings, keyboard shortcut editor, auto-save and crash recovery ([docs/preferences.md](docs/preferences.md)) | Done |
|
||||
|
||||
## How far from full parity
|
||||
|
||||
There are two honest answers, and they are far apart. The full assessment, with the evidence, is
|
||||
in [docs/gaps.md](docs/gaps.md).
|
||||
|
||||
- **Breadth: ≈ 99%.** Almost every After Effects feature exists: 89 of 92 catalogued features
|
||||
done and 3 partial, all 306 effects implemented, 280 of them on the GPU
|
||||
([docs/parity.md](docs/parity.md)). This is our own checklist, graded by the agents that built
|
||||
the features.
|
||||
- **Real use: ≈ 30–50% (estimated, not yet measured).** Whether someone who uses After Effects for
|
||||
a living can do client work in EffectCraft. What holds it back:
|
||||
- **Fidelity is unmeasured.** No test compares our output with After Effects itself, and users
|
||||
are still finding behaviour bugs in features marked done.
|
||||
- **After Effects projects can't be opened.** EffectCraft can't read `.aep` / `.aepx` files,
|
||||
and third-party After Effects plug-ins can't run.
|
||||
- **Reliability is uneven across platforms.** Early Linux users hit basic problems: viewer
|
||||
panning, panel docking, drag-and-drop import. A Windows user found the font menus offered only
|
||||
the bundled fonts (fixed 6 October: they list every installed font). Reports of 6 October
|
||||
covered drag and drop between panels, a Render Queue menu that ignored clicks, angle
|
||||
revolutions, and preview with audio and with little video memory (all fixed 7 October).
|
||||
- **AI tools are new.** Roto Brush's trained model (MobileSAM, M13.35) and face tracking's
|
||||
(MediaPipe Face Landmarker, M13.36) are optional downloads, not yet compared with After
|
||||
Effects.
|
||||
|
||||
## Where we're going
|
||||
|
||||
In priority order (details and "done" criteria in [docs/gaps.md](docs/gaps.md)):
|
||||
|
||||
| | Workstream | Why |
|
||||
|---|---|---|
|
||||
| G1 | Measure fidelity against After Effects: a corpus of test projects rendered and sampled in both apps, scored per feature | Turns every estimate into a measurement; a feature that behaves differently is not done |
|
||||
| G2 | Real-user reliability on macOS, Windows and Linux; fix every open user issue | Basic workflows must work everywhere before more features matter |
|
||||
| G3 | Stability: a green gate on the current toolchain, fuzzing of every input | A crash loses people's work |
|
||||
| G4 | Open After Effects projects (`.aep` / `.aepx`, pending an owner decision on clean-room scope); relinking moved footage | The biggest barrier to switching |
|
||||
| G5 | Performance benchmarks at 1080p and 4K on real-world-sized projects | Unknown today |
|
||||
| G6 | Media depth: encoder efficiency, camera and phone formats | Files are larger than from mature encoders; camera formats are unverified |
|
||||
| G7 | Learned models: Roto Brush (M13.35: MobileSAM) and face tracking (M13.36: MediaPipe Face Landmarker), open source, optional downloads, swappable model module; next, measure them | Quality against After Effects is unmeasured |
|
||||
| G8 | Plug-in ecosystem on our WebAssembly plug-in API | After Effects plug-ins can't run here |
|
||||
| G9 | Localisation, accessibility, user documentation | Reach beyond English-speaking power users |
|
||||
|
||||
Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
|
||||
| 2026-10-10 | minor | Hours to ≈ 95% for each audience |
|
||||
| 2026-10-10 | minor | Headline adds mainstream practitioner (≈ 47%) and essentials user (≈ 52%) |
|
||||
| 2026-10-10 | minor | Stage checked against the new core-workflow gate (all six pass; still alpha) |
|
||||
| 2026-10-10 | major | Rewritten to the shared progress-docs standard: stage, two numbers, dimensions, features, languages, upcoming, progress log; milestones moved to docs/roadmap.md |
|
||||
| 2026-10-05 | major | Two numbers (breadth vs real use) and workstreams G1–G9 |
|
||||
@@ -185,13 +185,13 @@ fn capabilities(s: &mut Session, _: &Value) -> Result<Value> {
|
||||
"parity": {
|
||||
"target": "Adobe After Effects 2026",
|
||||
"summary": PARITY,
|
||||
"doc": "docs/parity.md",
|
||||
"doc": "docs/target-app-parity.md",
|
||||
},
|
||||
}))
|
||||
}
|
||||
|
||||
/// The headline of `docs/parity.md` (kept in sync by hand at each audit).
|
||||
const PARITY: &str = "≈94% weighted feature parity (80 done / 12 partial / 0 missing of 92 features); 298 of 298 After Effects 2026 effects present";
|
||||
/// The headline of `docs/target-app-parity.md` (kept in sync by hand at each re-measure).
|
||||
const PARITY: &str = "≈91% feature breadth and ≈45% ready for real work (estimated parity with After Effects 2026 26.5, stage alpha); all After Effects effects present (306 registered)";
|
||||
|
||||
fn state(s: &mut Session, _: &Value) -> Result<Value> {
|
||||
Ok(serde_json::to_value(&s.state).unwrap_or_default())
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//! File ▸ Import ▸ Vanishing Point (.vpe): present in the menu like After Effects', but always
|
||||
//! disabled. The `.vpe` exchange format Photoshop's Vanishing Point filter writes has no public
|
||||
//! specification, and EffectCraft implements formats only from published specs (clean room), so
|
||||
//! the entry explains that instead of importing. See docs/parity.md.
|
||||
//! the entry explains that instead of importing. See docs/file-format-parity.md.
|
||||
|
||||
use serde_json::Value;
|
||||
|
||||
|
||||
+10
-2
@@ -1,5 +1,7 @@
|
||||
# Architecture
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (crate table checked against `crates/`: effect count 306, VP9 inter frames) · **Target:** Adobe After Effects 2026
|
||||
|
||||
EffectCraft is a stack of small Rust crates. The engine knows nothing about the user interface;
|
||||
the egui frontend, the command-line tool and the MCP server all sit on top of the same `Session`
|
||||
and drive it through the same command registry.
|
||||
@@ -16,7 +18,7 @@ cpal or muda. Everything in L0 to L4, the egui UI and the web app also build for
|
||||
| L0 | `time` | `Tick` (254 016 000 000 per second), rational frame rates incl. NTSC, SMPTE and drop-frame timecode |
|
||||
| L0 | `geom` | Vectors, matrices, quaternions, the layer transform (anchor, position, scale, orientation, rotation) |
|
||||
| L0 | `color` | sRGB and linear, HSL/HSV, luminance, the 38 blend modes, label colors |
|
||||
| L0 | `vp9enc` | VP9 intra-frame encoder (profile 0, 8-bit 4:2:0; lossless at quality 100) for WebM export, from the VP9 bitstream specification |
|
||||
| L0 | `vp9enc` | VP9 encoder (profile 0, 8-bit 4:2:0, key and inter frames with motion search, loop filter and rate control; lossless at quality 100) for WebM export, from the VP9 bitstream specification |
|
||||
| L0 | `opusenc` | Opus encoder: RFC 6716 SILK (NB/MB/WB), hybrid (SWB/FB) and CELT (FB) modes chosen by bitrate and application (audio / voice), 48 kHz 20 ms packets, mono/stereo, and the RFC 7845 `OpusHead`, for WebM export audio |
|
||||
| L0 | `hevcenc` | HEVC (H.265) encoder from ITU-T H.265: Main / Main 10 4:2:0, IDR + P slices (quarter-pel motion, merge/AMVP), CABAC, deblocking, bitrate or constant-QP rate control, for MP4 (`hvc1`) export |
|
||||
| L0 | `av1enc` | AV1 encoder from the AV1 bitstream specification: Main profile 8/10-bit 4:2:0, key + inter frames (quarter-pel motion), deblocking, for MP4 (`av01`) and WebM export |
|
||||
@@ -27,7 +29,7 @@ cpal or muda. Everything in L0 to L4, the egui UI and the web app also build for
|
||||
| L1 | `path` | Bezier paths, path operators (trim, offset, round corners, zig zag, twist, merge…), stroking, coverage masks |
|
||||
| L2 | `project` | The document: items, compositions, layers, the property tree, render queue model, `.ecproj` serde |
|
||||
| L2 | `text` | Fonts, shaping, layout, per-glyph geometry, text animators and selectors |
|
||||
| L2 | `effects` | The effect registry (241 effects) and their CPU implementations |
|
||||
| L2 | `effects` | The effect registry (306 effects) and their CPU implementations |
|
||||
| L2 | `svg` | SVG import (W3C SVG 1.1/2 static subset: shapes, paths, transforms, `use`, CSS, gradients) and rasterisation at any scale |
|
||||
| L2 | `pdf` | PDF, PDF-compatible Illustrator (`.ai`) and EPS (PostScript subset) vector footage into the `svg` render tree: paths, fills, strokes, shadings, tiling patterns, clipping, text (embedded TrueType / CFF / Type 1 / Type 3 fonts; the bundled `text` fonts for the standard 14), images, blend modes, soft masks, optional-content layers |
|
||||
| L2 | `model` | 3D models for Advanced 3D: glTF 2.0 (`.gltf`/`.glb`) and OBJ/MTL import (meshes, PBR metallic-roughness materials and textures, node hierarchy, skins, animations), parametric primitives, extruded/bevelled outline meshes and polygon triangulation |
|
||||
@@ -675,3 +677,9 @@ The before frame times were dominated by an O(layers²) menu build per visible t
|
||||
by every panel deep-cloning the active comp each frame. Left for later: per-layer structural
|
||||
sharing (so a one-layer edit doesn't copy its comp), a binary or compact project format (pretty
|
||||
JSON parsing is now the bulk of open), and rendering 5,000-layer comps faster.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Status line added; crate table checked against `crates/` (every crate listed); effect count and VP9 encoder description corrected |
|
||||
@@ -0,0 +1,67 @@
|
||||
# Effects parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first effects parity checklist: presence, GPU, fidelity and presets against After Effects 2026 26.5) · **Target:** Adobe After Effects 2026
|
||||
|
||||
Effects are the deepest single area of After Effects. This page separates the four questions
|
||||
that a single "306 of 306" hides: does each effect exist, does it run fast, does it look like
|
||||
After Effects', and does the preset library exist. The per-effect catalogue is the generated
|
||||
[effects.md](effects.md); the overall numbers are in [target-app-parity.md](target-app-parity.md).
|
||||
|
||||
## Summary
|
||||
|
||||
| Question | Value | Kind |
|
||||
|---|---|---|
|
||||
| Effects present | **306** registered, 3,014 parameters; all of After Effects' effects by name (298 at the M9.11 count) plus Obsolete and our own | Measured: registry, [effects.md](effects.md). After Effects 26.5's `Plug-ins/Effects` holds 306 `.plugin` bundles in 231 entries (one bundle can hold several effects, so this is a cross-check, not a match) |
|
||||
| Parameter names, order, popups, units, defaults | aligned in M9.12 | Agent-checked against After Effects' documentation, not against a live dump |
|
||||
| On the GPU | **280** (92%) | Measured: registry flags; GPU vs CPU agreement tested per effect |
|
||||
| 32-bit float, no clamping | 306 | Measured: registry flags |
|
||||
| **Rendered output matches After Effects** | **unmeasured** | No effect is compared with an After Effects render yet. `effectcraft_effects::fidelity::compare_frames` exists for the corpus ([fidelity/README.md](fidelity/README.md)); simulation effects are pinned by golden hashes of our own output (M13.27) |
|
||||
| Animation presets | **8** original text-animator presets against After Effects' **621** `.ffx` presets | Measured: `crates/engine/presets/text_animators.json`; the After Effects `Presets` folder |
|
||||
| 26.x additions | Curl Noise (26.3) present (#463 open); effect colour labels and the rebuilt Effect Controls (26.5) missing | Release notes |
|
||||
|
||||
**Breadth ≈ 85%** (presets weigh in; the effects themselves are ≈ 100%). **Ready ≈ 40%**: until a
|
||||
corpus compares renders, each effect is assumed to differ somewhere, and users keep confirming it.
|
||||
|
||||
## By category (from [effects.md](effects.md))
|
||||
|
||||
| Category | Effects | On the GPU | Known differences or bugs |
|
||||
|---|---:|---:|---|
|
||||
| 3D Channel | 8 | 8 | Cryptomatte selection can't be set in the UI and the GPU path is slow (#473); multi-layer EXRs decoded twice (#474) |
|
||||
| Audio | 13 | 0 | CPU by design (applied in the mixdown) |
|
||||
| Blur & Sharpen | 16 | 15 | Gaussian Blur interaction and output to be measured first ([fidelity/ae-2026-acceptance.md](fidelity/ae-2026-acceptance.md)) |
|
||||
| Channel | 13 | 13 | — |
|
||||
| Color Correction | 40 | 40 | Apply Color LUT (#514); 32-bpc blending differences affect looks (#494); ACES 2.0 / OCIO 2.5 (26.5) |
|
||||
| Distort | 39 | 35 | Mesh Warp can't be dragged in the viewer (#303); CC Power Pin Unstretch (#534, community fix pending); Liquify has no viewer brush |
|
||||
| Expression Controls | 9 | 9 | — |
|
||||
| Generate | 26 | 25 | Fractal on the CPU (needs f64), Reset doesn't work (#526); Write-on drops marks when animated (#536, fix pending) |
|
||||
| Immersive Video | 12 | 12 | — |
|
||||
| Keying | 12 | 12 | Key Cleaner approximated; wire-removal Frame Offset (#533, fix pending) |
|
||||
| Matte | 6 | 4 | Mocha shape reads our documented JSON, not Mocha's format |
|
||||
| Noise & Grain | 13 | 12 | Curl Noise (#463); Match Grain on the CPU |
|
||||
| Obsolete | 9 | 9 | — |
|
||||
| Paint | 1 | 0 | Tablet pressure not read ([hardware-parity.md](hardware-parity.md)) |
|
||||
| Perspective | 10 | 9 | Chromatic Aberrations pan/tilt crash (#580) |
|
||||
| Simulation | 18 | 18 | Particle Playground lacks Particle Exploder, text particles, ephemeral mapper; CC Particle World camera fixed (#397) |
|
||||
| Stylize | 25 | 25 | Motion Tile output size (#369) |
|
||||
| Text | 2 | 2 | — |
|
||||
| Time | 8 | 8 | Pixel Motion Blur averages frames, ignores Vector Detail (#535, fix pending) |
|
||||
| Transition | 17 | 17 | — |
|
||||
| Utility | 9 | 7 | — |
|
||||
|
||||
Third-party bundles in After Effects (Cineware, Mocha AE) are out of scope; Keylight is
|
||||
implemented under a generic name ("Key Light").
|
||||
|
||||
## Estimate
|
||||
|
||||
**≈ 70–130 h**: a fidelity corpus case per effect at default and one non-default setting, compared
|
||||
with After Effects renders, and the fixes they turn up (40–80 h, most of it parallel, but every
|
||||
reference render needs After Effects on the owner's Mac); an original preset library covering
|
||||
After Effects' preset categories (Behaviors, Backgrounds, Shapes, Synthetics, Text, Transitions,
|
||||
Image effects) 20–40 h; the open effect bugs 10–20 h. Moving Fractal and the analysis effects to
|
||||
the GPU is performance, not parity.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First effects parity checklist |
|
||||
@@ -0,0 +1,117 @@
|
||||
# File format parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first per-format table, measured against the After Effects 2026 26.5 bundle and this repository's import/export registries) · **Target:** Adobe After Effects 2026
|
||||
|
||||
Every format After Effects reads or writes, with EffectCraft's support. After Effects' list comes
|
||||
from its installed bundle (26.5.0.89: `Info.plist` `CFBundleDocumentTypes`, `Plug-ins/Format`,
|
||||
`Resources/usd_plugins`) and its public documentation; ours from `crates/media/src/lib.rs`
|
||||
(`STILL_EXTENSIONS`, `VIDEO_EXTENSIONS`, `MODEL_EXTENSIONS`, FilmCraft's `AUDIO_EXTENSIONS`),
|
||||
`crates/engine/src/commands/file.rs` (`DATA_EXTENSIONS`) and `OutputFormat::ALL` in
|
||||
`crates/project/src/render_queue.rs`. Video codecs come from FilmCraft's pure-Rust crates
|
||||
([architecture.md](architecture.md)).
|
||||
|
||||
**Overall ≈ 50%** (estimated, weighted by use): modern delivery and interchange formats are
|
||||
strong, but After Effects' own project, template and preset formats, which decide whether
|
||||
existing work moves over, are 0%.
|
||||
|
||||
Fidelity key: **exact** (bit-exact or within a stated tolerance of a reference), **good** (round
|
||||
trips and renders, checked by tests, not against After Effects), **partial** (named limitations),
|
||||
**none**.
|
||||
|
||||
## After Effects' own formats
|
||||
|
||||
| Format | After Effects | EffectCraft read | Write | Fidelity / notes | Tested by |
|
||||
|---|---|---|---|---|---|
|
||||
| Project `.aep` | R/W (native) | none | none | Main file format; needs an owner decision on clean-room scope (#190, #248: py-aep as an external converter). Blocks beta | — |
|
||||
| XML project `.aepx` | R/W | none | none | Same decision as `.aep` | — |
|
||||
| Templates `.aet` / `.aetx` | R/W | none | none | Own `.ectemplate` (Home ▸ Templates, Save as Template) | `templates.rs` tests |
|
||||
| Motion Graphics template `.mogrt` | W (and R in Premiere) | none | none | Own `.ectemplate` Essential Graphics templates; FilmCraft rejects our `.fcgt` export (#611) | `essential.rs` tests |
|
||||
| Animation preset `.ffx` | R/W, 621 bundled | none | none | Own JSON `.ecpreset`; `.ffx` is out of clean-room scope (AGENTS.md §2) | `animation.rs` tests |
|
||||
| Render Settings / Output Module templates `.ars` / `.aom` | R/W | none | none | Templates are stored in the project and settings instead | `render_templates.rs` tests |
|
||||
| Scripts `.jsx` | R (run) | yes | — | After Effects object model and ScriptUI ([scripting-parity.md](scripting-parity.md)) | `crates/script` tests |
|
||||
| Binary scripts `.jsxbin` | R (run) | none | — | No public specification: out of scope | — |
|
||||
| Motion graphics JSON `.mgjson` | R (data) | none | none | Media Browser lists it; import accepts only `.json` / `.csv` / `.tsv` data | — |
|
||||
| Captions `.aecap`, graphics `.aegraphic` | R/W | none | none | — | — |
|
||||
| Native `.ecproj` | — | yes | yes | Versioned JSON; schema migrations tested; absolute footage paths, no relinking (gap 18) | engine project tests |
|
||||
|
||||
## Footage: stills
|
||||
|
||||
| Format | After Effects | Read | Write | Fidelity / notes |
|
||||
|---|---|---|---|---|
|
||||
| PNG | R/W | yes | yes (sequence) | good |
|
||||
| JPEG | R/W | yes | yes (sequence) | good |
|
||||
| TIFF | R/W | yes | yes (sequence) | good |
|
||||
| OpenEXR (multi-layer, Cryptomatte) | R/W | yes | yes (32-bit sequence) | good; HTJ2K compression fails (#482); EXRs without an unnamed RGB layer decode twice (#474) |
|
||||
| Photoshop PSD / PSB | R (footage, composition) / W (layers, sequence) | yes (layers, groups, masks, styles, smart objects) | Save Frame As ▸ Photoshop Layers; no Photoshop sequence output | good, from Adobe's published spec |
|
||||
| Illustrator `.ai`, PDF, EPS | R | yes (vector, Continuously Rasterize, Create Shapes) | — | partial: no JPX / JBIG2 images, no Illustrator procset EPS |
|
||||
| SVG | R | yes | — | good; pasting SVG/AI as shape layers (26.3) missing |
|
||||
| GIF | R/W | yes | yes (animated) | good |
|
||||
| BMP | R | yes | — | good |
|
||||
| WebP | — | yes | — | beyond After Effects |
|
||||
| Targa `.tga` | R/W | none | none | Media Browser lists it but import refuses (gap 17) |
|
||||
| DPX / Cineon `.dpx` `.cin` | R/W | none | none | Same; common in film VFX |
|
||||
| Radiance `.hdr` | R/W | none | none | Same |
|
||||
| SGI, PICT, ElectricImage, RLA/RPF images | R | none | none | Legacy; RPF camera data import exists (`keys.rpfCameraImport`) |
|
||||
| Camera Raw (DNG, CR3, NEF…) | R (Camera Raw) | none | none | LightCraft has decoders that could be shared |
|
||||
| HEIF / AVIF | R (platform) | none | none | — |
|
||||
|
||||
## Footage: video and audio
|
||||
|
||||
| Format | After Effects | Read | Write | Fidelity / notes |
|
||||
|---|---|---|---|---|
|
||||
| MP4 / MOV with H.264 | R/W | yes | yes (own encoder, + AAC) | decoder bit-exact on conformance streams (FilmCraft) |
|
||||
| HEVC (H.265) | R/W | yes | yes (MP4 `hvc1`, Main / Main 10) | encoder bit-exact with ffmpeg's decode; no B-frames / SAO, larger files |
|
||||
| AV1 | R | yes | yes (MP4 `av01`, WebM) | beyond After Effects' export; no B-frames / CDEF |
|
||||
| Apple ProRes (422 family, 4444) | R/W | yes | yes | good; 4444 colour tag wrong (#340); no ProRes RAW |
|
||||
| WebM / Matroska (VP9, AV1, Opus) | R (limited) | yes, incl. VP9 alpha | yes | beyond After Effects |
|
||||
| MXF (OP1a / OP-Atom) | R/W | none (FilmCraft reads it; not wired) | none | Media Browser lists it |
|
||||
| AVI | R | none | none | Media Browser lists it |
|
||||
| DNxHD / DNxHR | R/W | unverified (FilmCraft decodes it; reachable only inside `.mov`) | none | — |
|
||||
| BRAW, R3D, ARRIRAW | R (plug-ins / SDKs) | none | none | proprietary SDKs |
|
||||
| Variable-frame-rate phone video | R | unverified | — | needs a real-media corpus |
|
||||
| WAV, AIFF | R/W | yes | yes (16-bit PCM) | good |
|
||||
| MP3, AAC / M4A, FLAC, Ogg, Opus | R | yes | AAC and Opus inside video only | MP3 layer can go silent (#324) |
|
||||
|
||||
## 3D models
|
||||
|
||||
| Format | After Effects 26 | Read | Notes |
|
||||
|---|---|---|---|
|
||||
| glTF / GLB | R | yes (meshes, PBR, skins, animations) | good |
|
||||
| OBJ / MTL | R | yes | good |
|
||||
| FBX | R (`usdFbx`) | none | gap 13 |
|
||||
| USD / USDZ | R (`usd_plugins`) | none | gap 13 |
|
||||
| STL | R (`usdStl`) | none | gap 13 |
|
||||
| Substance 3D materials `.sbsar` | R (26.0) | none | gap 13 |
|
||||
|
||||
## Interchange and data
|
||||
|
||||
| Format | After Effects | Read | Write | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Premiere Pro `.prproj` | R (import) | none | none | Out of clean-room scope pending a decision; we interchange through FCP7 XML, FCPXML, OTIO, EDL, AAF and OMF instead (beyond After Effects) |
|
||||
| Lottie JSON / dotLottie | via third-party plug-ins | yes | yes | beyond After Effects; a warnings list names what Lottie can't express |
|
||||
| JSON / CSV / TSV data | R | yes (`footage()`, data layers) | — | good |
|
||||
| LUTs (`.cube`, `.3dl`, `.csp`, `.spi1d/3d`, CDL) | R | yes (Apply Color LUT, OCIO effects) | — | Apply Color LUT bug (#514) |
|
||||
| OpenColorIO configs | R (OCIO 2.5.1, ACES 2.0 in 26.5) | yes (OCIO v2 subset, Blender configs) | — | partial: no ACES 2.0 output transforms |
|
||||
| Fonts (TTF, OTF, TTC, variable) | R | yes | — | good |
|
||||
| Mocha shapes | R (Mocha AE) | own documented JSON | — | Mocha's format is not public |
|
||||
| Vanishing Point `.vpe` | R | none | — | no public specification; the menu entry explains why |
|
||||
|
||||
## Render queue outputs (`OutputFormat::ALL`, 12)
|
||||
|
||||
H.264 MP4, HEVC MP4, AV1 MP4, ProRes MOV, WebM (VP9 or AV1 + Opus), PNG / JPEG / TIFF / OpenEXR
|
||||
sequences, animated GIF, WAV, AIFF. Missing against After Effects + Media Encoder: uncompressed
|
||||
or lossless single-file video (#372), DPX / Targa / Photoshop sequences, MXF, DNxHR, hardware
|
||||
encoders ([hardware-parity.md](hardware-parity.md)), and rendering safely over an existing file
|
||||
(#325).
|
||||
|
||||
## Estimate
|
||||
|
||||
**≈ 130–230 h**: `.aep` / `.aepx` import 80–160 h (after the owner decision), wiring TGA / DPX /
|
||||
HDR / MXF / AVI / DNx import and DPX/TGA output 10–20 h, FBX / USD / STL and Substance 25–45 h,
|
||||
relinking 6–12 h, `.mogrt`-compatible templates 15–30 h (partly parallel with the rest).
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First file format parity document, from the After Effects 26.5 bundle and this repository's import/export registries |
|
||||
+107
-40
@@ -1,44 +1,87 @@
|
||||
# Where EffectCraft falls short
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (re-measured against After Effects 2026 26.5; ranked gap list with estimates; numbers reconciled with target-app-parity.md) · **Target:** Adobe After Effects 2026 (26.5.0.89)
|
||||
|
||||
An honest assessment of how far EffectCraft is from being a real replacement for After Effects,
|
||||
and the work that closes the gap. This document is meant for contributors and agents choosing
|
||||
what to work on. The [ROADMAP](../ROADMAP.md) summarises it; [parity.md](parity.md) is the
|
||||
feature-by-feature checklist it builds on.
|
||||
|
||||
*Assessed 5 October 2026, user issues updated 8 October. Estimates marked "≈" are judgements from the evidence listed, not
|
||||
measurements. Update this file when the evidence changes.*
|
||||
what to work on. [target-app-parity.md](target-app-parity.md) holds the numbers and how they were
|
||||
measured; the [ROADMAP](../ROADMAP.md) summarises both. Estimates marked "≈" are judgements from
|
||||
the evidence listed, not measurements. Hours are Opus 5.5 agent wall-clock hours, calibrated in
|
||||
[target-app-parity.md](target-app-parity.md#calibration-of-the-hours). Update this file when the
|
||||
evidence changes.
|
||||
|
||||
## Two different questions
|
||||
|
||||
[parity.md](parity.md) reports **≈ 99%**. That number answers one question: *does each After
|
||||
Effects feature exist?* It scores a 92-item catalogue we wrote ourselves, graded by the same agents
|
||||
that built the features, with partial features counting half. As a measure of breadth it is fair,
|
||||
and the breadth is real: every one of After Effects' effects exists by name, along with the
|
||||
menus, panels, 3D, tracking, expressions, scripting and export.
|
||||
**Feature breadth ≈ 91%** answers *does each After Effects feature exist?* Every one of After
|
||||
Effects' effects exists by name, along with the menus, panels, Classic and Advanced 3D, tracking,
|
||||
expressions, scripting and export. The self-graded 92-item checklist (appendix of
|
||||
target-app-parity.md) says ≈ 99%; measuring against After Effects 26.5 itself, rather than our
|
||||
catalogue, finds what that checklist never listed: the 26.2–26.5 features (Object Matte,
|
||||
Substance materials, ACES 2.0, Proportional Scrubbing, paste SVG/AI as shapes…), the 621 bundled
|
||||
animation presets, project and template formats, and hardware encoding.
|
||||
|
||||
It does not answer the question users care about: *can someone who uses After Effects for a living
|
||||
do real work in EffectCraft?* Nobody has measured that yet. Our best estimate is **≈ 30–50%**,
|
||||
limited mainly by four things: projects we can't open, behaviour nobody has checked against After
|
||||
Effects, reliability on platforms other than macOS, and the third-party plug-ins professional
|
||||
projects depend on.
|
||||
|
||||
The checklist is also internally inconsistent: parity.md's per-area table still shows Interface
|
||||
75%, Project 68%, Animation 70% and Paint 0% next to the 99% headline. Some rows are stale; none
|
||||
of them have been reconciled.
|
||||
**Ready for real work ≈ 45%** answers *can someone who uses After Effects for a living do real
|
||||
work in EffectCraft?* It is still estimated, not measured. Four things hold it back: projects we
|
||||
can't open (`.aep`), behaviour nobody has checked against After Effects (one live comparison so
|
||||
far: scalar ease, 168 samples), reliability outside macOS, and the third-party plug-ins and
|
||||
presets professional projects depend on. It sits higher than the 5 October estimate (30–50%)
|
||||
because 179 issues were closed with regression tests between 5 and 10 October.
|
||||
|
||||
## By dimension
|
||||
|
||||
| Dimension | Estimate | Evidence |
|
||||
|---|---|---|
|
||||
| Breadth of features | ≈ 95%+ | All 306 effects, the After Effects menus and panels, Classic and Advanced 3D, tracking, expressions, scripting, render queue (parity.md) |
|
||||
| Behaves like After Effects | largely unmeasured, ≈ 60–80% | One outside contributor found four bugs in features marked done within a day (PRs #6–#10): Hold keyframes eased the motion into them, `keyInSpatialTangent` / `keyOutSpatialTangent` had the wrong names, a zero frame rate crashed, Find and Enter Full Screen shared Ctrl+F off macOS. There are about 10 After Effects reference captures in total. The first live G1 comparison now checks eight scalar Rotation/ease cases (168 samples) against AE 26.3x87 via AEsync 2.0.4: all pass after fixing overlapping temporal influences, with maximum error below 3e-11 degrees ([scores and reproduction](fidelity/README.md)). Other animation behavior and rendered frames remain unmeasured. User reports of 6 October found five more in features marked done (the Render Queue's template menu, angle revolutions, switches wiping the RAM preview, audio playback skipping frames, preview crashing when video memory ran out; all fixed 7 October) |
|
||||
| Opening existing After Effects work | ≈ 0% | `.aep` / `.aepx` projects cannot be opened. Third-party After Effects plug-ins cannot run. Expressions and the scripting object model are strong, so scripts and expressions carry over |
|
||||
| Stability | improving | 23 never-crash PRs landed on 4 October; community PRs on 7 October fixed a hang on projects whose parent chains loop (#142), a panic on non-ASCII label colours (#135), and contained GPU initialization and device failures (#139); [AGENTS.md](../AGENTS.md) "Never crash" now binds every crate. On 5 October `cargo xtask ci` failed on main under Rust 1.99's clippy (a fix is in progress) |
|
||||
| Real-user experience | ≈ 70%, uneven by platform | Issues #41–#47 (all from the Linux AppImage 0.1.1, 5 October): panning the viewer snaps back, panels can't be resized or rearranged, drag-and-drop and double-click import don't work, layer rename gets stuck, the Layer Settings arrow does nothing, the Project panel clips, the Wayland window icon is generic. Issues #63–#68 (macOS, 5 October): scaling a layer by its handles goes wrong and can stick at 0, two 3D compasses, the viewer lags while a layer is dragged (a frame renders in 20 ms but showed after ≈ 100 ms, behind RAM preview prefetch), the Discord and other links do nothing, Delete doesn't delete in the Project panel, hidden layers can be selected in the viewer. All but the last two were fixed or confirmed fixed with a test on 5–6 October (those two have community PRs); file drops still can't work on Wayland (winit has no support). The panning, rename and arrow bugs had been fixed in v0.2.0 already; nobody had told the reporter. A Windows user (6 October, on Discord) found the font menus listed only the three bundled fonts: installed fonts were read only when a project asked for one, on every platform. Fixed with a regression test on 6 October; the menus now list every installed family and its own styles, and agents get `text.fonts` / `list_fonts`. Seven reports of 6 October (Linux .deb and Windows): Project items and files couldn't be dropped on the viewer (#85), nor effects on a layer there (#88); drops in the Timeline ignored where they landed (#89); an angle's revolutions couldn't be edited (#93); toggling Audio, Lock or Shy threw away the RAM preview and playback with audio skipped frames (#103); running out of video memory panicked every frame thread and left frames stuck (#106); choosing a Render Settings template in the Render Queue did nothing (#117: any popup menu moved up to fit the window closed on the press). All seven were fixed with regression tests on 7 October. Reports of 7 October (Linux, macOS, Windows): the app opened the demo project on every launch, so a new comp landed in it (#204); a comp wider than the GPU's texture limit (11000 × 2200) at Full resolution stopped the window drawing (#201); an Intel HD Graphics 5500 couldn't start the app (#198: most likely the window's device asked for limits that GPU doesn't have, and the failure was silent); Audio Spectrum / Waveform stood still in the viewer (#209) and preview sound waited for the whole work area to cache (#208); a layer couldn't be deselected from the time graph, a shape layer's Fill and Stroke showed only with a shape tool and a drawn shape had no stroke to change, Alt+Shift+P didn't reveal Position (#205); a mask selected in the Timeline wasn't selected in the viewer, Mask Feather had no link and took negative values, the Project panel had no selection box (#203); shape layers had no Add menu for Trim Paths and the other operations, and Classic 3D comps hid Geometry Options (#206); dragging Puppet pins re-rendered the layer under the Puppet at every move (#212). All were fixed with regression tests the same day (#219–#222); the #198 fix couldn't be checked on that GPU. Reports of 8 October (browser, Windows, macOS): an empty project at 1280 × 800 with device pixel ratio 2 crashed on its first frame, because the Project panel's scroll bar clamped its thumb to a track shorter than the thumb (#231, any short panel on every platform); Media Browser ▸ Add Files… dropped a file it couldn't read without a word (#226); after the page's WebGPU device was lost, the browser editor froze on its last frame while edits went on (#225); a press in the viewer always took the topmost layer, so a selected layer behind others couldn't be dragged (#230); the language didn't follow the system's (#229); and a list of missing After Effects behaviour (#227): drawing into, copying, pasting and duplicating shape contents, Tool Creates Shape / Mask and Fill / Stroke Options, Turbulent Displace, Wave Warp and Bulge pinning all but a shape layer's bottom-right quadrant, a Spacebar hold that previewed instead of being the Hand tool, the Effect menu in Effect Controls, dropping items on New Composition and dragging over layer switches. All were fixed with regression tests the same day (#235, #237–#241); multi-monitor support and the Project panel's empty-area menu (community PR #210) remain from #227, and effect points on shape and text layers still sit half a comp off. A list of tweaks from an Intel iMac (#290): the layer bar didn't show where extended footage runs past its source, and Enable Time Remapping then ended at the extended out point; footage items had no Interpret Footage in their menu and the work area bar no menu; Label menus named the labels without their colours; the arrow keys didn't nudge layers; a straight motion path had no Bezier handles; Delete on Time Remap deleted the layer; a mask being drawn with the Pen blacked out its layer until it was closed; a doubleLine truncated
|
||||
| Performance | unknown against After Effects | Internal numbers only (e.g. Advanced 3D 290 ms/frame at 1080p on the GPU, an M4 Pro under load). Nothing benchmarked against After Effects; no large real projects (4K footage, hundreds of layers) tested |
|
||||
| Media formats | ≈ 80% | H.264, ProRes, HEVC, AV1, image sequences and audio exist. The new HEVC / AV1 encoders have no B-frames, multi-reference or SAO / CDEF, so files are larger than from mature encoders. Camera formats (BRAW, R3D, ProRes RAW, variable-frame-rate phone video) are unverified |
|
||||
| AI-assisted tools | ≈ 50% | Both tools can use trained models (pure-Rust inference, optional downloads), but nothing compares them with After Effects yet. Roto Brush 2.0 / 3.0 with MobileSAM (M13.35) scores IoU 0.989 on the base frame of our synthetic moving-disc test and ≥ 0.980 over 20 propagated frames (classic: 0.973). Face tracking with MediaPipe Face Landmarker (M13.36) matches Google's own pipeline to 0.85 px on average on a test portrait; on our synthetic clip the eyes and chin stay within 4% of the face height |
|
||||
| Maturity | early | First commit 1 October 2026. ≈ 285,000 lines of almost entirely agent-written Rust, ≈ 2,050 tests, about 30 external issue reports so far. After Effects has around 30 years of edge cases behind it |
|
||||
| Dimension | % | Hours | Evidence |
|
||||
|---|---:|---:|---|
|
||||
| Breadth of features | ≈ 91% | (below) | All 306 effects, the After Effects menus (587 entries) and panels, Classic and Advanced 3D, tracking, expressions, scripting, render queue. Missing: entries 7, 13, 14, 16 and 21 below |
|
||||
| Behaves like After Effects | ≈ 50%, mostly unmeasured | 360–660 (features) | The first live G1 comparison checks eight scalar Rotation/ease cases (168 samples) against After Effects 26.3x87 via AEsync 2.0.4: all pass after fixing overlapping temporal influences, maximum error below 3e-11 degrees ([fidelity/README.md](fidelity/README.md)). Nothing else is compared. An outside contributor found four bugs in features marked done within a day (PRs #6–#10); users have found well over a hundred more since, and 134 issues are open |
|
||||
| Opening existing After Effects work | ≈ 0% | 80–160 | `.aep` / `.aepx` / `.mogrt` / `.ffx` can't be read; After Effects plug-ins can't run. Expressions and the scripting object model are strong, so scripts and expressions carry over |
|
||||
| UI/UX fidelity | ≈ 65% | 60–120 | [ui-parity.md](ui-parity.md) |
|
||||
| File formats | ≈ 50% | 130–230 | [file-format-parity.md](file-format-parity.md) |
|
||||
| Hardware | ≈ 40% | 60–120 | [hardware-parity.md](hardware-parity.md) |
|
||||
| Localization | ≈ 12% | 60–110 + review | [localization-parity.md](localization-parity.md) |
|
||||
| Stability | ≈ 45% | 40–80 | 23 never-crash PRs landed on 4 October and the "Never crash" rules bind every crate, but crash reports are open (#580 Chromatic Aberrations pan/tilt, #591 Windows ARM64 device loss, #501 crash on startup, #426 timeline drag while playing, #341 quit on Intel Mac, #306 divider drag, #234 macOS 27 exit, #511 drag over import dialog), and no CI workflow runs `cargo xtask ci` on pull requests |
|
||||
| Real-user experience | ≈ 60%, uneven by platform | (in G2) | 179 issues closed 5–10 October, nearly all with regression tests ([log below](#real-user-report-log-510-october)); 134 open, many from Linux and Windows. Most checking still happens on macOS |
|
||||
| Performance | unknown against After Effects, ≈ 35% | 50–100 | Internal numbers only (e.g. Advanced 3D 290 ms/frame at 1080p on the GPU on an M4 Pro). Users report stutter on cached frames (#595, #304), slow scrubbing (#329), late audio (#554). No 4K / hundreds-of-layers project tested |
|
||||
| Media formats | ≈ 75% | (in file formats) | H.264, ProRes, HEVC, AV1, VP9, image sequences and audio exist. The HEVC / AV1 encoders have no B-frames, multi-reference or SAO / CDEF, so files are larger than from mature encoders. Camera formats (BRAW, R3D, ProRes RAW, variable-frame-rate phone video) are unverified |
|
||||
| AI-assisted tools | ≈ 35% | 40–80 | Roto Brush 2.0 / 3.0 with MobileSAM (M13.35) scores IoU 0.989 on the base frame of our synthetic moving-disc test and ≥ 0.980 over 20 propagated frames (classic: 0.973). Face tracking with MediaPipe Face Landmarker (M13.36) matches Google's own pipeline to 0.85 px on a test portrait. Neither is compared with After Effects; Object Matte (26.2) is missing |
|
||||
| Maturity | early | — | First commit 1 October 2026. ≈ 329,000 lines of almost entirely agent-written Rust, 2,704 tests, 313 GitHub issues. After Effects has around 30 years of edge cases behind it |
|
||||
|
||||
## Every known gap, ranked
|
||||
|
||||
**Alpha blockers: none.** Every core workflow passes the [alpha gate](roadmap.md#alpha-gate); the
|
||||
entries below are what stands between alpha and beta (gap 1 decides beta). The rough edges the
|
||||
gate lists live in gaps 5, 8, 9, 10, 11 and 17.
|
||||
|
||||
Ranked by user impact × how many users hit it. Each entry: what's missing, evidence, impact,
|
||||
estimate, the workstream (G1–G9, below) and the parity doc it belongs to. Small single-issue bugs
|
||||
are grouped by area; the issue tracker has the rest.
|
||||
|
||||
| # | Gap | Evidence | Impact | Estimate | Work · doc |
|
||||
|---:|---|---|---|---:|---|
|
||||
| 1 | **`.aep` / `.aepx` projects can't be opened** | No reader; candidate route py-aep (#248, MIT, external converter) awaits an owner decision on clean-room scope; #190 | The biggest barrier to switching: existing work, templates and client projects stay in After Effects | 80–160 h | G4 · [file-format-parity.md](file-format-parity.md) |
|
||||
| 2 | **Fidelity unmeasured** beyond scalar ease | [fidelity/](fidelity/README.md): 168 samples, one property type; `compare_frames` helper exists, no corpus | Every "done" feature may still differ; users find the differences | 60–100 h harness + P0/P1 corpus; more per feature | G1 · [target-app-parity.md](target-app-parity.md) |
|
||||
| 3 | **Open crash reports** | #580, #591, #501, #426, #341, #306, #234, #511 | A crash loses work; outranks features ([AGENTS.md](../AGENTS.md)) | 10–25 h | G3 · this file |
|
||||
| 4 | **No CI gate on pull requests** | `.github/workflows` has release, packaging-lint, FreeBSD and Windows ARM64 jobs only; `cargo xtask ci` runs locally | Regressions reach main unseen; 49 community PRs landed in one batch (#598) | 4–8 h | G3 · this file |
|
||||
| 5 | **Playback and scrubbing feel** | #595 stutter on cached frames, #304, #329 slow scrubbing, #554 / #504 / #335 audio late or crackling, #586 puppet lag | Preview is where motion designers spend their day | 25–50 h | G5 · [hardware-parity.md](hardware-parity.md) |
|
||||
| 6 | **Linux and Windows interaction bugs** | #491 multi-layer edits, #488 rename arrows, #493, #492, #467 shortcuts, #268 drag and drop, #320 workspaces not persisting, #302 docking, #613 Direct3D 12 compositor, #596 GPU not detected | Many reports come from Linux; some Windows GPUs fail to start the compositor | 25–45 h | G2 · [ui-parity.md](ui-parity.md) |
|
||||
| 7 | **Animation presets: 8 against 621** | After Effects ships 621 `.ffx` presets (Behaviors, Backgrounds, Shapes, Synthetics, Text, Transitions…); we ship 8 original text-animator presets and read only our `.ecpreset` | Presets are how many designers start; tutorials assume them | 20–40 h (original presets; `.ffx` reading is out of clean-room scope) | G8 · [effects-parity.md](effects-parity.md) |
|
||||
| 8 | **Mask and shape bugs** | #510, #513, #527 (first Intersect/Darken mask), #509 Roto Brush size, #303 Mesh Warp, #553 pen tools on motion paths | Masks are core compositing | 10–20 h | G2 · [target-app-parity.md](target-app-parity.md) |
|
||||
| 9 | **Effect behaviour bugs** | #580, #526 Fractal reset, #514 Apply Color LUT, #463 Curl Noise, #369 Motion Tile output size, #473 Cryptomatte selection, #474 multi-layer EXR decoded twice, #534–#536 community fixes pending | Each one breaks a look someone built | 10–20 h | G1/G2 · [effects-parity.md](effects-parity.md) |
|
||||
| 10 | **Colour pipeline differences** | #494 32-bpc blend modes clamp and apply opacity differently; #495 no Working Gamma 2.4; #340 ProRes 4444 tagged bt709 but sRGB-encoded; ACES 2.0 / OCIO 2.5 configs (26.5) missing; #546 / #547 viewer colour | Wrong colour in delivery is a client-visible failure | 15–30 h | G1 · [file-format-parity.md](file-format-parity.md) |
|
||||
| 11 | **Text rendering and layout** | #453 CJK text in comps, #316 paragraph alignment inverted, #483 squeezed at 4:3, #417 soft at Fit, #583 font search, #550 toolbar font options | Text is in almost every motion graphic | 10–20 h | G2 · [ui-parity.md](ui-parity.md) |
|
||||
| 12 | **3D interaction and depth** | No 3D transform gizmos (#392, #347); Z position (#489); camera aperture (#260); reflections (#261); bevel options (#315); 3D issue reopened (#307) | Advanced 3D is After Effects' growth area since 2023 | 20–35 h | G2 · [ui-parity.md](ui-parity.md) |
|
||||
| 13 | **3D model formats and materials** | After Effects 26 imports FBX, USD/USDZ, STL besides glTF and OBJ (`usd_plugins`), and Substance 3D materials with mesh displacement (26.0–26.2); we read glTF and OBJ | Product shots and 3D scenes come as FBX/USDZ | 25–45 h | — · [file-format-parity.md](file-format-parity.md) |
|
||||
| 14 | **Object Matte** (26.2, disk cache in 26.5) | Not present; MobileSAM is already in `effectcraft-segment` and could back it | The new one-click roto; Roto Brush covers part of it | 15–30 h | G7 · [target-app-parity.md](target-app-parity.md) |
|
||||
| 15 | **Hardware video decode and encode** | No VideoToolbox, NVENC, Quick Sync or VA-API; #498 asks for it; FilmCraft has VideoToolbox / NVENC / VA-API paths to borrow | 4K playback and export speed | 25–45 h | G5/G6 · [hardware-parity.md](hardware-parity.md) |
|
||||
| 16 | **Localization depth** | Menus in 6 languages; panels in 4; effect names and ~1,650 effect parameter names untranslated; French, German, Korean, Italian, Russian (After Effects ships them) absent; #599 Hangul boxes on macOS | After Effects is used heavily in Japan, China, Korea, Brazil, Europe | 60–110 h + native review | G9 · [localization-parity.md](localization-parity.md) |
|
||||
| 17 | **Media Browser lists files import refuses** | `media_browser.rs` lists TGA, DPX, HDR, AVI, MXF; `media::is_importable` has none of them; #431 any image imports as a sequence; #324 MP3 goes silent | Confusing failures on common VFX formats (DPX, TGA) | 15–30 h | G6 · [file-format-parity.md](file-format-parity.md) |
|
||||
| 18 | **Relative paths and relinking** | Projects store absolute footage paths; no relink when a project moves | Moving or sharing a project breaks it | 6–12 h | G4 · [file-format-parity.md](file-format-parity.md) |
|
||||
| 19 | **Plug-in ecosystem** | No After Effects SDK hosting (#600, #327 OpenFX, #334, #376 plug-in manager); our WebAssembly API has no third-party plug-ins | Many pro projects depend on Trapcode, Element, Saber… | 40–80 h for API growth; SDK hosting needs an owner decision | G8 · [scripting-parity.md](scripting-parity.md) |
|
||||
| 20 | **Multi-monitor and video output** | #486 multi-screen, floating panels on other screens, Mercury Transmit to video hardware (we have a second preview window only) | Two-screen setups are standard for professionals | 10–20 h | G2 · [hardware-parity.md](hardware-parity.md) |
|
||||
| 21 | **Small 26.x features** | Proportional Scrubbing (26.2), copy frame to clipboard and paste SVG/AI as shapes (26.3), variable-font filter (26.3), percentage guides and effect colour labels (26.5), the rebuilt Effect Controls (26.5) | Users of the current version expect them | 15–25 h | — · [ui-parity.md](ui-parity.md) |
|
||||
| 22 | **Encoder efficiency** | HEVC / AV1 have no B-frames, multi-reference or SAO / CDEF; Opus no FEC / DTX; #372 uncompressed single-file output; #325 render over existing file | Larger files than After Effects + Media Encoder | 20–40 h | G6 · [file-format-parity.md](file-format-parity.md) |
|
||||
| 23 | **Essential Graphics interchange** | Templates are `.ectemplate`, not `.mogrt`; #338 Scale exposes X and Y; #611 FilmCraft rejects exported `.fcgt` | Premiere editors can't use our templates | 15–30 h | — · [file-format-parity.md](file-format-parity.md) |
|
||||
| 24 | **Timeline depth requests** | #601 expand precomps in place, #602 reorderable render stack, #604 guide-only effects, #355 bulk keyframes, #425 keyframe confusion, #428 more shortcuts | Power-user speed | 15–30 h | G2 · [ui-parity.md](ui-parity.md) |
|
||||
| 25 | **Accessibility** | AccessKit is enabled in eframe and tests read focus labels, but no screen-reader pass, keyboard navigation audit or contrast check | Excludes users; After Effects supports screen readers poorly too | 15–30 h | G9 · [ui-parity.md](ui-parity.md) |
|
||||
|
||||
## Where we're going: workstreams in priority order
|
||||
|
||||
@@ -55,11 +98,11 @@ The most important missing piece: it turns every other estimate here into a meas
|
||||
- Drive After Effects through ExtendScript (see CLAUDE.md) to record property values at sampled
|
||||
times and render reference frames; render the same projects in EffectCraft headless.
|
||||
- Compare values exactly and frames with a perceptual metric; publish a per-feature fidelity
|
||||
score and a fidelity column in parity.md.
|
||||
score and a fidelity column in target-app-parity.md.
|
||||
- Clean room: After Effects output stays local in `plan/aftereffects/ref/` (gitignored). Commit
|
||||
only our projects, the harness and the scores, never After Effects frames.
|
||||
- Done when: every P0 and P1 feature has at least one corpus project, scores are reproducible from
|
||||
one command, and parity.md reports breadth and measured fidelity side by side.
|
||||
one command, and target-app-parity.md reports breadth and measured fidelity side by side.
|
||||
|
||||
### G2. Real-user reliability on every platform
|
||||
|
||||
@@ -143,6 +186,12 @@ The most important missing piece: it turns every other estimate here into a meas
|
||||
- Done when: no open bug blocks a basic workflow (import, arrange, animate, preview, render) on
|
||||
any of the three desktop platforms, and every bug users report gets triaged within a day.
|
||||
|
||||
### Real-user report log (5–10 October)
|
||||
|
||||
Kept from the 5 October assessment's "Real-user experience" row, as evidence of what users hit and what was fixed:
|
||||
|
||||
Issues #41–#47 (all from the Linux AppImage 0.1.1, 5 October): panning the viewer snaps back, panels can't be resized or rearranged, drag-and-drop and double-click import don't work, layer rename gets stuck, the Layer Settings arrow does nothing, the Project panel clips, the Wayland window icon is generic. Issues #63–#68 (macOS, 5 October): scaling a layer by its handles goes wrong and can stick at 0, two 3D compasses, the viewer lags while a layer is dragged (a frame renders in 20 ms but showed after ≈ 100 ms, behind RAM preview prefetch), the Discord and other links do nothing, Delete doesn't delete in the Project panel, hidden layers can be selected in the viewer. All but the last two were fixed or confirmed fixed with a test on 5–6 October (those two have community PRs); file drops still can't work on Wayland (winit has no support). The panning, rename and arrow bugs had been fixed in v0.2.0 already; nobody had told the reporter. A Windows user (6 October, on Discord) found the font menus listed only the three bundled fonts: installed fonts were read only when a project asked for one, on every platform. Fixed with a regression test on 6 October; the menus now list every installed family and its own styles, and agents get `text.fonts` / `list_fonts`. Seven reports of 6 October (Linux .deb and Windows): Project items and files couldn't be dropped on the viewer (#85), nor effects on a layer there (#88); drops in the Timeline ignored where they landed (#89); an angle's revolutions couldn't be edited (#93); toggling Audio, Lock or Shy threw away the RAM preview and playback with audio skipped frames (#103); running out of video memory panicked every frame thread and left frames stuck (#106); choosing a Render Settings template in the Render Queue did nothing (#117: any popup menu moved up to fit the window closed on the press). All seven were fixed with regression tests on 7 October. Reports of 7 October (Linux, macOS, Windows): the app opened the demo project on every launch, so a new comp landed in it (#204); a comp wider than the GPU's texture limit (11000 × 2200) at Full resolution stopped the window drawing (#201); an Intel HD Graphics 5500 couldn't start the app (#198: most likely the window's device asked for limits that GPU doesn't have, and the failure was silent); Audio Spectrum / Waveform stood still in the viewer (#209) and preview sound waited for the whole work area to cache (#208); a layer couldn't be deselected from the time graph, a shape layer's Fill and Stroke showed only with a shape tool and a drawn shape had no stroke to change, Alt+Shift+P didn't reveal Position (#205); a mask selected in the Timeline wasn't selected in the viewer, Mask Feather had no link and took negative values, the Project panel had no selection box (#203); shape layers had no Add menu for Trim Paths and the other operations, and Classic 3D comps hid Geometry Options (#206); dragging Puppet pins re-rendered the layer under the Puppet at every move (#212). All were fixed with regression tests the same day (#219–#222); the #198 fix couldn't be checked on that GPU. Reports of 8 October (browser, Windows, macOS): an empty project at 1280 × 800 with device pixel ratio 2 crashed on its first frame, because the Project panel's scroll bar clamped its thumb to a track shorter than the thumb (#231, any short panel on every platform); Media Browser ▸ Add Files… dropped a file it couldn't read without a word (#226); after the page's WebGPU device was lost, the browser editor froze on its last frame while edits went on (#225); a press in the viewer always took the topmost layer, so a selected layer behind others couldn't be dragged (#230); the language didn't follow the system's (#229); and a list of missing After Effects behaviour (#227): drawing into, copying, pasting and duplicating shape contents, Tool Creates Shape / Mask and Fill / Stroke Options, Turbulent Displace, Wave Warp and Bulge pinning all but a shape layer's bottom-right quadrant, a Spacebar hold that previewed instead of being the Hand tool, the Effect menu in Effect Controls, dropping items on New Composition and dragging over layer switches. All were fixed with regression tests the same day (#235, #237–#241); multi-monitor support and the Project panel's empty-area menu (community PR #210) remain from #227, and effect points on shape and text layers still sit half a comp off. A list of tweaks from an Intel iMac (#290): the layer bar didn't show where extended footage runs past its source, and Enable Time Remapping then ended at the extended out point; footage items had no Interpret Footage in their menu and the work area bar no menu; Label menus named the labels without their colours; the arrow keys didn't nudge layers; a straight motion path had no Bezier handles; Delete on Time Remap deleted the layer; a mask being drawn with the Pen blacked out its layer until it was closed; a double-click on a mask point didn't select the whole mask. AlLine truncated
|
||||
|
||||
### G3. Stability and a green main
|
||||
|
||||
- Keep `cargo xtask ci` green on the current stable toolchain. A toolchain release that breaks the
|
||||
@@ -150,7 +199,10 @@ The most important missing piece: it turns every other estimate here into a meas
|
||||
- Fuzz the inputs we don't control: project files, imported media and documents, expressions,
|
||||
scripts, control-channel and MCP requests. Every crash found becomes a regression test
|
||||
(AGENTS.md "Never crash").
|
||||
- Done when: the gate is green on stable and the fuzzers run regularly without new crashes.
|
||||
- Run the gate on every pull request in CI (gap 4): today no workflow runs the tests on PRs.
|
||||
- Fix the open crash reports first (gap 3).
|
||||
- Done when: the gate is green on stable, runs on every pull request, and the fuzzers run
|
||||
regularly without new crashes.
|
||||
|
||||
### G4. Open After Effects projects
|
||||
|
||||
@@ -163,7 +215,7 @@ The most important missing piece: it turns every other estimate here into a meas
|
||||
`.ecproj`, the way ffmpeg is used only from outside), or its format knowledge could be ported.
|
||||
The second means reading another implementation of the format, which AGENTS.md rules out
|
||||
unless the clean-room scope allows it.
|
||||
- Also in this area: relative footage paths and relinking when a project moves (parity.md, Project).
|
||||
- Also in this area: relative footage paths and relinking when a project moves (gap 18).
|
||||
- Done when: the decision is recorded and, if approved, a corpus of real-world-shaped projects
|
||||
opens with its comps, layers, keyframes, effects and expressions intact.
|
||||
|
||||
@@ -211,19 +263,34 @@ The most important missing piece: it turns every other estimate here into a meas
|
||||
ScriptUI panel bundled as an optional extension (`extensions/scriptui-panels/Ease Presets.jsx`,
|
||||
Window ▸ Ease Presets.jsx) on the public scripting API, which needed `app.settings` that last,
|
||||
per-key methods that keep the key selection, and eases reported as they play
|
||||
([plugins.md](plugins.md#bundled-extensions), [parity.md](parity.md)).
|
||||
([plugins.md](plugins.md#bundled-extensions), [target-app-parity.md](target-app-parity.md)).
|
||||
|
||||
### G9. Reach
|
||||
|
||||
- Localisation of the interface, accessibility (keyboard navigation, screen readers, contrast),
|
||||
user documentation and tutorials.
|
||||
- Localisation of the interface ([localization-parity.md](localization-parity.md)): since 6–10
|
||||
October the menus are translated into Japanese, Simplified and Traditional Chinese, Ukrainian,
|
||||
Spanish and Brazilian Portuguese, and the panel catalog covers the first four. Next: effect and
|
||||
parameter names, the remaining panel strings, French, German and Korean, and native-speaker
|
||||
review of all of them.
|
||||
- Accessibility (keyboard navigation, screen readers, contrast), user documentation and
|
||||
tutorials.
|
||||
|
||||
## For agents choosing work
|
||||
|
||||
1. Read `plan/STATUS.md` for owner blockers and running work, then this file.
|
||||
2. Prefer G1–G3 over new features. A feature that exists but behaves differently from After
|
||||
Effects is not done.
|
||||
3. When you fix a behaviour bug in a feature parity.md marks as done, add it to the evidence
|
||||
above. That is how this assessment stays honest.
|
||||
4. Don't raise parity.md's numbers without evidence: a G1 score, a user-facing check on more than
|
||||
3. When you fix a behaviour bug in a feature target-app-parity.md marks as done, add it to the evidence
|
||||
above, and update its row in the ranked list (remove it when the gap is closed). That is how this assessment stays honest.
|
||||
4. Don't raise target-app-parity.md's numbers without evidence: a G1 score, a user-facing check on more than
|
||||
one platform, or both.
|
||||
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Alpha gate checked: no alpha blockers |
|
||||
| 2026-10-10 | major | Re-measured against After Effects 2026 26.5: two numbers (breadth ≈ 91%, ready ≈ 45%), dimension table with hours, a ranked list of 25 gaps with evidence, impact, estimate and parity doc; the real-user evidence moved into a report log under G2; links follow the rename of `parity.md` to `target-app-parity.md` |
|
||||
| 2026-10-08 | minor | User issues of 6–8 October and their regression evidence |
|
||||
| 2026-10-05 | major | First honest assessment: breadth ≈ 99% vs real use ≈ 30–50%; workstreams G1–G9 |
|
||||
@@ -0,0 +1,42 @@
|
||||
# Hardware parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first hardware parity document, from the code and open issues against After Effects 2026 26.5) · **Target:** Adobe After Effects 2026
|
||||
|
||||
Each piece of hardware After Effects uses, per platform, against EffectCraft. Ours comes from the
|
||||
code at `origin/main` 1446e27 (`crates/gpu`, `crates/render`, `crates/ui-egui`) and the issue
|
||||
tracker; After Effects' from its documentation (Mercury GPU Acceleration, Multi-Frame Rendering,
|
||||
hardware-accelerated decode and encode, Mercury Transmit) and its bundle.
|
||||
|
||||
**Overall ≈ 40%** (estimated). The GPU compositor and 280 GPU effects are a real strength and run
|
||||
in the browser too; hardware video decode and encode, video-out devices, tablets and multiple
|
||||
monitors are missing, and two GPU start-up failures are open.
|
||||
|
||||
| Feature | After Effects 2026 | EffectCraft macOS | Windows | Linux | Web | Notes / evidence |
|
||||
|---|---|---|---|---|---|---|
|
||||
| GPU compositing and effects | Mercury GPU (Metal; CUDA / OpenCL / DirectX on Windows) | yes, Metal via wgpu | Vulkan yes; **Direct3D 12 fails** (FXC can't compile the `pointwise` kernel, #613) | Vulkan | WebGPU, in frame workers | 280 of 306 effects on the GPU, checked against the CPU renderer; Fractal and the analysis/tool effects stay on the CPU ([effects-parity.md](effects-parity.md)) |
|
||||
| CPU fallback and device-loss recovery | yes | yes | yes; Windows ARM64 Adreno panics after device loss (#591) | yes | yes (#225 fixed) | Out of video memory falls back to the CPU (#106) |
|
||||
| GPU detection and choice | GPU info, renderer choice | Backend Auto per comp | "GPU isn't being detected" (#596); Intel HD 5500 fix unverified (#198) | yes | yes | No settings page listing adapters yet |
|
||||
| Multi-core rendering | Multi-Frame Rendering | rayon pools; preview scheduler sized to the render pool | same | same | Web Workers, one engine per worker | No benchmark against Multi-Frame Rendering |
|
||||
| Hardware video decode | H.264 / HEVC / ProRes (Apple silicon) | none (software, FilmCraft) | none | none | none | FilmCraft has VideoToolbox, Media Foundation/DXVA and VA-API paths to borrow (gap 15) |
|
||||
| Hardware video encode | H.264 / HEVC via VideoToolbox, NVENC, Quick Sync (render queue and Media Encoder) | none | none | none | none | #498 asks for NVENC; our software encoders are slower and lack B-frames |
|
||||
| Video output devices | Mercury Transmit to AJA, Blackmagic, second display | second preview window only (Video Preview) | same | same | — | No SDI/HDMI device output |
|
||||
| HDR display | HDR monitoring on EDR / HDR displays | tone-mapped SDR view; no EDR output | no HDR output | no | no | Colour engine handles HDR maths (Rec. 2100 PQ/HLG output files) |
|
||||
| Pen tablets (pressure, tilt) | yes, for Paint and Roto | Brushes panel has pressure options, but no tablet pressure is read | same | same | same | Paint strokes store pressure per vertex; input never fills it |
|
||||
| Multiple monitors | panels and windows across screens | floating panels within one window only | same | same (#486) | — | gap 20 |
|
||||
| Touch / trackpad gestures | pinch zoom in viewers | egui pointer and scroll; no pinch-to-zoom audited | — | — | — | — |
|
||||
| Audio hardware | Core Audio / ASIO / WASAPI, device choice, latency | cpal output; preview sound late on Linux (#554) and after a start offset (#504) | cpal | cpal (ALSA) | Web Audio | No input or device latency settings |
|
||||
| Machine learning acceleration | Apple Neural Engine / GPU for Object Matte, Roto Brush 3 | CPU inference (pure Rust, rayon) | CPU | CPU | CPU | No GPU inference for MobileSAM or MediaPipe |
|
||||
| Memory management | RAM reserve, disk cache | RAM Reserved, Reduce Cache When Low on Memory, disk cache | same | same | OPFS disk cache | good |
|
||||
|
||||
## Estimate
|
||||
|
||||
**≈ 60–120 h**: Direct3D 12 and adapter start-up fixes 6–12 h; hardware decode on three platforms
|
||||
20–35 h and encode 15–30 h (borrowing FilmCraft's work); multiple monitors 10–20 h; tablet pressure
|
||||
4–8 h; HDR output 8–15 h. Needs Windows and Linux GPUs we don't have locally, and a human for
|
||||
the Adreno and Intel cases.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First hardware parity document |
|
||||
@@ -0,0 +1,89 @@
|
||||
# Localization parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first measurement of every catalog against the After Effects 2026 26.5 language set) · **Target:** Adobe After Effects 2026
|
||||
|
||||
How much of EffectCraft's interface is translated, language by language, compared with After
|
||||
Effects. [gaps.md](gaps.md) gap 16 and workstream G9 hold the work;
|
||||
[target-app-parity.md](target-app-parity.md) the overall numbers.
|
||||
|
||||
## What After Effects ships
|
||||
|
||||
The installed After Effects 2026 (26.5.0.89) bundle has 11 `.lproj` localisations: English,
|
||||
French, German, Italian, Japanese, Korean, Portuguese (Brazil), Russian, Spanish, Simplified
|
||||
Chinese (`zh_CN`) and Traditional Chinese (`zh_TW`). Each translates the whole interface,
|
||||
including effect names and parameters. It ships no Hindi, Arabic, Indonesian or Vietnamese
|
||||
interface; Arabic and Hebrew text *in layers* is supported through its Middle Eastern text engine.
|
||||
|
||||
## How EffectCraft translates
|
||||
|
||||
- **Menus:** `crates/ui-egui/src/i18n.rs`, one catalog per language keyed by
|
||||
`(command, English label)`. A test (`every_translation_key_exists_in_the_actual_menu_tree`)
|
||||
fails if any fixed menu entry is untranslated or a row is stale, so every catalog covers all
|
||||
**618** fixed entries. The generated Effect menu (effect names) is deliberately left in English.
|
||||
- **Panels, dialogs, buttons, tooltips:** `crates/ui-egui/src/i18n/ui.rs`, keyed by the English
|
||||
source string, with English fallback. Catalogs exist for Japanese, Simplified and Traditional
|
||||
Chinese and Ukrainian.
|
||||
- **Not translated anywhere yet:** effect names and their ≈ 1,650 parameter names
|
||||
(`crates/effects`), engine-generated text (property names, errors, undo labels), the Home
|
||||
screen's unwrapped literals (#574), Learn tutorials and documentation.
|
||||
- **Language choice:** Settings ▸ General ▸ Language, or Match System
|
||||
(`match_system_uses_the_system_language_where_there_is_a_catalog`).
|
||||
- **Fonts:** no bundled CJK font; the UI installs system fallbacks probed by script (Kana, Han,
|
||||
Arabic, Hebrew, Devanagari, Bengali, Gurmukhi, Gujarati, Tamil, Telugu, Kannada, Malayalam,
|
||||
Thai: `crates/ui-egui/src/theme.rs`). There is no Hangul probe, so Korean renders as boxes on
|
||||
macOS (#599). The web build has no system fonts.
|
||||
- **Script support in the interface:** egui draws text without complex shaping or right-to-left
|
||||
layout, so an Arabic or Hindi interface would render unshaped and left to right. **In text
|
||||
layers** (`crates/text`) shaping (harfrust), bidi (UAX #9), vertical text and Tate-Chu-Yoko
|
||||
work; text-layer typing goes through the IME (`viewer_text.rs` handles preedit and commit).
|
||||
|
||||
## Measurement
|
||||
|
||||
Measured 10 October 2026 at `origin/main` 1446e27 by counting catalog rows. The denominator,
|
||||
**≈ 3,900 user-visible strings**, is estimated: 618 fixed menu entries + ≈ 1,320 capitalised UI
|
||||
literals in `crates/ui-egui/src` outside tests and catalogs (a regex count, so an upper bound) +
|
||||
≈ 1,650 distinct effect parameter names + 306 effect names. Engine messages are not counted, so
|
||||
the true percentages are slightly lower.
|
||||
|
||||
| Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | To `full` |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| English | `en` | ≈ 3,900 (100%, source) | All; docs in English | — | yes | full | — |
|
||||
| Simplified Chinese | `zh-hans` | 1,081 (≈ 28%): menus 618/618, panels 463 | Panels and dialogs partly (≈ 35% of panel strings); no help, effects untranslated; Home screen literals unwrapped (#574) | System CJK fallback; Han follows the UI language; CJK text in comps renders wrongly (#453); IME in text layers | no | partial | 6–9 h + review |
|
||||
| Spanish | `es` | 618 (≈ 16%) | Menus only | Latin, fine | no | menus only | 7–10 h + review |
|
||||
| Hindi | `hi` | 0 | — | UI: Devanagari fallback font but no shaping; text layers shape Devanagari | no | none (After Effects: none) | 9–13 h + shaping in the UI |
|
||||
| Arabic | `ar` | 0 | — | UI: Arabic fallback font but no shaping and no RTL layout; text layers: bidi + shaping | no | none (After Effects: none) | 9–13 h + 15–25 h RTL UI |
|
||||
| French | `fr` | 0 | — | Latin, fine | no | none | 8–12 h + review |
|
||||
| Portuguese (Brazil) | `pt-br` | 618 (≈ 16%) | Menus only | Latin, fine | no | menus only | 7–10 h + review |
|
||||
| Indonesian | `id` | 0 | — | Latin, fine | no | none (After Effects: none) | 8–12 h + review |
|
||||
| Japanese | `ja` | 1,015 (≈ 26%): menus 618/618, panels 397 | Panels and dialogs partly (≈ 30% of panel strings) | Japanese system fallback; vertical text and Tate-Chu-Yoko in text layers; IME | no | partial | 6–9 h + review |
|
||||
| German | `de` | 0 | — | Latin, fine | no | none | 8–12 h + review |
|
||||
| Korean | `ko` | 0 | — | No Hangul fallback probe: boxes on macOS (#599) | no | none | 9–13 h + review |
|
||||
| Vietnamese | `vi` | 0 | — | Latin with stacked diacritics; untested | no | none (After Effects: none) | 8–12 h + review |
|
||||
|
||||
Other languages EffectCraft ships (2):
|
||||
|
||||
| Language | Code | UI strings translated | Status | To `full` |
|
||||
|---|---|---|---|---|
|
||||
| Traditional Chinese | `zh-hant` | 1,081 (≈ 28%): menus 618/618, panels 463 | partial | 6–9 h + review |
|
||||
| Ukrainian | `uk` | 1,015 (≈ 26%): menus 618/618, panels 397 | partial | 6–9 h + review |
|
||||
|
||||
After Effects also ships Italian and Russian, which EffectCraft does not (8–12 h each).
|
||||
|
||||
**Overall: ≈ 12%**, the average coverage of After Effects' 10 non-English languages
|
||||
(Simplified and Traditional Chinese 28%, Japanese 26%, Spanish and Portuguese 16%, French,
|
||||
German, Korean, Italian and Russian 0%). This is the localization row in
|
||||
[target-app-parity.md](target-app-parity.md#by-dimension).
|
||||
|
||||
**Effort.** One-time work first: route effect names, parameter names and engine messages through
|
||||
a catalog, wrap the remaining panel literals, and add a Hangul probe (10–20 h). Then each language
|
||||
needs ≈ 2,900 more strings (≈ 5–9 h per language at the pace of #398 and #401). Parity with After
|
||||
Effects' 10 non-English languages: **≈ 60–110 h**; the four extra languages of the standard list
|
||||
(Hindi, Arabic, Indonesian, Vietnamese) add ≈ 50–80 h, most of it right-to-left layout and
|
||||
complex shaping in the interface. Every language needs native-speaker review, which only a human
|
||||
can give; none has had it.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First localization parity document: catalog rows counted for all six languages, the twelve-language table, After Effects' 11 shipped languages from its bundle |
|
||||
@@ -0,0 +1,87 @@
|
||||
# Roadmap detail
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (new file: milestones moved from ROADMAP.md, current focus and next steps with Opus 5.5 estimates) · **Target:** Adobe After Effects 2026
|
||||
|
||||
Forward-looking detail behind the [ROADMAP](../ROADMAP.md). The work list itself, one gap at a
|
||||
time, is [gaps.md](gaps.md); the numbers are in [target-app-parity.md](target-app-parity.md).
|
||||
There is no `cargo xtask scorecard` or `cargo xtask parity` in this repository yet.
|
||||
|
||||
## Current focus
|
||||
|
||||
In this order (gap numbers from [gaps.md](gaps.md)):
|
||||
|
||||
1. **Crashes and the CI gate** (gaps 3–4, G3): fix the eight open crash reports; run
|
||||
`cargo xtask ci` on every pull request. 15–30 h.
|
||||
2. **Fidelity harness** (gap 2, G1): extend the AEsync ease oracle to rendered frames; a corpus
|
||||
case for every P0 feature, then P1. 60–100 h; needs After Effects running on the owner's Mac.
|
||||
3. **Real-user reliability** (gaps 5, 6, 8, 9, 11, G2): the open Linux and Windows interaction,
|
||||
mask, effect and text bugs, each with a scripted test. 60–120 h, parallel.
|
||||
4. **Owner decision on `.aep`** (gap 1, G4): then the importer. 80–160 h after the decision.
|
||||
5. **Performance** (gap 5, G5): benchmarks at 1080p and 4K; real-time cached playback. 40–70 h.
|
||||
|
||||
## Alpha gate
|
||||
|
||||
The core workflows of a motion designer in After Effects, checked on EffectCraft's main platform
|
||||
(macOS) from the scripted UI tests, the live After Effects ease oracle and the open issues
|
||||
(standard: craftrules `standards/progress-docs.md`, "Stages"). **All six pass, so EffectCraft is
|
||||
alpha**: each works end to end and the work saves and reopens; what's rough in them is listed, but
|
||||
none blocks the workflow.
|
||||
|
||||
| Workflow | Works end to end? | Evidence | Hours to clear the rough edges |
|
||||
|---|---|---|---|
|
||||
| 1. Set up: new comp, import footage, stills, PSD/AI and audio, arrange and trim layers | yes | `file.import` and image-sequence tests, `ui_drag_drop`, `ui_project_*`; rough: a still imports as a sequence (#431), an MP3 layer can go silent (#324), multi-file drops (#552) | 2–4 |
|
||||
| 2. Animate: keyframes, easing in the Graph Editor, motion paths, parenting | yes | 168 live samples match After Effects 26.3 ([fidelity/](fidelity/README.md)); `ui_keyframes`; rough: Graph Editor jitter and clipped buttons (#456, #457), negative rotation drag (#569) | 3–6 |
|
||||
| 3. Motion graphics: text layers with animators, shape layers with operators | yes | `ui_text_edit`, `ui_timeline_shapes`, text and shape engine tests; rough: paragraph alignment inverted (#316), CJK text in comps (#453) | 3–6 |
|
||||
| 4. Composite: masks, track mattes, blend modes, keying and effects | yes | Compositor and mask tests, 306 effects with CPU/GPU agreement; rough: mask bugs (#510, #513, #527), 32-bpc blend differences (#494), effect bugs (#580 crash, #514) | 6–12 |
|
||||
| 5. Preview with audio (RAM preview, cache) | yes | `ui_ram_preview`, `ui_live_preview`; rough: stutter on cached frames (#595, #304), late audio (#554, #504) | 10–20 |
|
||||
| 6. Save, reopen and deliver: `.ecproj`, auto-save, Render Queue to H.264 / ProRes / sequences | yes | Versioned-schema reopen tests, crash recovery, render-queue and encoder tests; rough: the macOS default output folder is `/`, so a render fails until an output path is chosen (#446), ProRes 4444 colour tag (#340), projects don't relink when moved | 1–3 |
|
||||
|
||||
The gate is not beta: beta also needs After Effects' own `.aep` projects to open (gap 1) and
|
||||
≈ 75% ready for real work.
|
||||
|
||||
## Milestones
|
||||
|
||||
The original build plan; all but M7 and M12 are done. What is left after them is measured
|
||||
against After Effects in [gaps.md](gaps.md), not as milestones.
|
||||
|
||||
| | Milestone | State |
|
||||
|---|---|---|
|
||||
| M0 | Skeleton: crates, compositor, the After Effects style shell, control channel, `cargo xtask` | Done (web build: [web.md](web.md)) |
|
||||
| M1 | Keyframes: temporal and spatial interpolation, Easy Ease, roving, velocity | Done |
|
||||
| M2 | Compositing: 38 blend modes, track mattes, parenting, adjustment layers | Done |
|
||||
| M3 | Project operations: settings dialogs, layer commands, `.ecproj`, undo, After Effects menu bar | Done |
|
||||
| M4 | Preview: precomps, motion blur, cached playback | Done |
|
||||
| M5 | Timeline depth: graph editor, keyframe clipboard and dialogs, time remapping, pick-whips, expression editor | Done |
|
||||
| M6 | Shapes, masks and footage: shape operators, masks and the pen tool, video and image import | Done |
|
||||
| M7 | 3D: 3D layers, cameras, lights, shadows, depth of field, 3D views and camera tools | In review (3D gizmos, FBX/USD, Substance still missing: gaps 12–13) |
|
||||
| M8 | Expressions with the After Effects object model | Done |
|
||||
| M9 | Text and effects: text animators, layer styles, 306 effects incl. time and audio effects | Done |
|
||||
| M10 | Export: render queue, H.264, ProRes, image sequences, GIF, audio | Done |
|
||||
| M11 | Animation tools: audio, Lottie, presets, Motion Sketch, Wiggler, Smoother | Done (preset library: gap 7) |
|
||||
| M12 | Performance: layer cache, parallel and GPU compositing, disk cache, motion tracking; GPU versions of the remaining CPU-only effects | Mostly done (benchmarks and hardware video: gaps 5, 15) |
|
||||
| M13 | Puppet, paint, Roto Brush, tracking, plug-in API, timeline depth, trained models | Done |
|
||||
| M14 | Built for agents: MCP server, CLI, control channel, Settings, shortcut editor, auto-save, crash recovery | Done |
|
||||
| M15 | The web app (WebAssembly, WebGPU) | Done |
|
||||
|
||||
## What's next, with estimates
|
||||
|
||||
| Next | Gaps | Opus 5.5 hours | Parallel? | Needs a human |
|
||||
|---|---|---:|---|---|
|
||||
| Crash fixes and a PR CI gate | 3, 4 | 15–30 | yes | GPUs for #591 / #613 |
|
||||
| G1 fidelity harness and P0/P1 corpus | 2 | 60–100 | after the harness | After Effects runs on the owner's Mac |
|
||||
| Open bug backlog (Linux, Windows, masks, effects, text, 3D) | 5, 6, 8, 9, 11, 12, 24 | 100–190 | yes | Linux / Windows testers |
|
||||
| `.aep` / `.aepx` import | 1 | 80–160 | partly | Owner decision on clean-room scope |
|
||||
| Performance benchmarks and real-time preview | 5, 15 | 50–100 | partly | — |
|
||||
| Localization depth | 16 | 60–110 | yes | Native-speaker review |
|
||||
| Preset library, 26.x features, Object Matte | 7, 14, 21 | 50–95 | yes | — |
|
||||
| Formats: VFX stills, MXF, 3D models, templates | 13, 17, 18, 22, 23 | 80–160 | yes | — |
|
||||
| Plug-in ecosystem, multi-monitor, accessibility | 19, 20, 25 | 65–130 | yes | Owner decision on SDK hosting |
|
||||
|
||||
To beta (≈ 75% ready and `.aep` opening): **≈ 350–620 h**. To full parity: **≈ 850–1,500 h**.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Alpha gate: six core workflows checked; all pass, stage stays alpha |
|
||||
| 2026-10-10 | major | New file: milestones from ROADMAP.md, current focus, next steps with estimates |
|
||||
@@ -0,0 +1,43 @@
|
||||
# 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](architecture.md) §5 and §5a;
|
||||
extension points: [plugins.md](plugins.md); overall numbers:
|
||||
[target-app-parity.md](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*` |
|
||||
| Scripts menu, ScriptUI Panels folder | yes | yes | same | [plugins.md](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](agents.md), [control-protocol.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 |
|
||||
@@ -1,16 +1,280 @@
|
||||
# Parity with After Effects
|
||||
|
||||
How close EffectCraft is to After Effects 2026, feature by feature, and how much work is left.
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (full re-measure against After Effects 2026 26.5; merged `docs/parity.md` into this file; reconciled the stale per-area rows) · **Target:** Adobe After Effects 2026 (26.5.0.89)
|
||||
|
||||
> **Read this as a measure of breadth, not of real-world readiness.** It checks whether each
|
||||
> feature exists, using our own catalogue, graded by the agents that built it. It does not measure
|
||||
> whether the feature behaves like After Effects (nothing compares the two yet), whether After
|
||||
> Effects projects open (they don't), or how the app holds up for real users on every platform.
|
||||
> Those gaps, and the work that closes them, are in [gaps.md](gaps.md). Don't raise the numbers
|
||||
> here without the evidence gaps.md asks for. The per-area table further down has stale rows that
|
||||
> have not been reconciled with the headline.
|
||||
The authoritative assessment of how close EffectCraft is to After Effects, and how much work is
|
||||
left. [gaps.md](gaps.md) lists every known shortfall one at a time; the
|
||||
[ROADMAP](../ROADMAP.md) summarises both. Deep dives: [effects-parity.md](effects-parity.md),
|
||||
[scripting-parity.md](scripting-parity.md), [file-format-parity.md](file-format-parity.md),
|
||||
[ui-parity.md](ui-parity.md), [hardware-parity.md](hardware-parity.md),
|
||||
[localization-parity.md](localization-parity.md), and the live measurements in
|
||||
[fidelity/](fidelity/README.md).
|
||||
|
||||
## Current status (audit at commit `d39c0e8`, 4 October 2026; updated 5 October for M3.9–M4.12)
|
||||
## Headline
|
||||
|
||||
| Number | Value | Kind |
|
||||
|---|---|---|
|
||||
| **Feature breadth** (does each After Effects 26.5 feature exist?) | **≈ 91%** | Estimated, weighted by area (table below). The self-graded 92-item checklist says 89 done / 3 partial (≈ 99%), but it was written before After Effects 26.2 and 26.5 and does not count animation presets, project formats or hardware; see the appendix |
|
||||
| **Ready for real work** (can an After Effects professional do client work here?) | **≈ 45%** (range 40–50%) | Estimated: 60% feature depth (≈ 50%, table below), 15% opening and delivering work files (≈ 35%), 10% performance (≈ 35%), 10% stability (≈ 45%), 5% platforms (≈ 65%) |
|
||||
| **Stage** | **alpha** | All six core workflows pass the [alpha gate](roadmap.md#alpha-gate) on macOS and ready (≈ 45%) is above the ≈ 40% bar, but `.aep` projects can't be opened, fidelity is measured for one narrow case, and 134 issues are open ([ROADMAP](../ROADMAP.md#stage)) |
|
||||
| **Mainstream practitioner** (the typical motion designer's weekly work) | **≈ 47%** | Estimated: everyday depth 72% × interaction 0.90 × stability 0.90 × file exchange 0.80 ([below](#mainstream-practitioner)) |
|
||||
| **Essentials user** (core features only) | **≈ 52%** | Estimated: core depth 77% × launch/stability 0.88 × clarity 0.90 × opening files 0.85 ([below](#essentials-user)) |
|
||||
| Remaining to **beta** (≈ 75% ready, `.aep` opens) | **≈ 350–620 Opus 5.5 agent-hours** | Estimated |
|
||||
| Remaining to **full parity** | **≈ 850–1,500 Opus 5.5 agent-hours** | Estimated |
|
||||
|
||||
### Readiness by audience
|
||||
|
||||
| Audience | Ready % | Opus 5.5 agent wall-clock hours to ~95% | Work that dominates |
|
||||
|---|---:|---:|---|
|
||||
| Full target (ready for real work) | ≈ 45% | ≈ 850–1,500 h | `.aep` import, a fidelity corpus for every feature, the bug backlog, performance, hardware video, formats, localization, ecosystem |
|
||||
| Mainstream practitioner | ≈ 47% | ≈ 280–530 h | `.aep` exchange (80–160 h), stability and crash fixes (40–80 h), fidelity of the everyday features (40–70 h), everyday-area bugs and depth (60–110 h), interaction feel (30–60 h), preview speed (25–50 h) |
|
||||
| Essentials user | ≈ 52% | ≈ 150–300 h | Opening the `.aep` files tutorials ship, basic subset (60–120 h), start-up and stability (20–40 h), core-feature bugs and clarity (30–60 h), preview with sound (20–40 h), fidelity of the core features (20–40 h) |
|
||||
|
||||
Each audience's hours are a subset of the next (essentials ≤ mainstream ≤ full). They are
|
||||
calibrated like the rest of this file ([calibration](#calibration-of-the-hours)): a behaviour bug
|
||||
with its regression test ≈ 0.1–0.3 h, a mid-size feature 1–4 h. About 60–70% parallelises across
|
||||
5–8 agents. The serial parts: the `.aep` owner decision before the importer, and the fidelity
|
||||
harness before per-feature scores. Every audience needs After Effects running on the owner's Mac
|
||||
for reference captures.
|
||||
|
||||
The previous headline (5 October: breadth ≈ 99%, real use ≈ 30–50%) moved for these reasons:
|
||||
breadth went **down** because this pass measured against 26.5 rather than our own catalogue and
|
||||
found missing features the catalogue never listed (Object Matte, Substance materials, ACES 2.0
|
||||
configs, proportional scrubbing, copy frame to clipboard, paste SVG/AI as shapes, percentage
|
||||
guides, After Effects' 621 animation presets, FBX/USD/STL models, Media Encoder-style hardware
|
||||
encoding); real use moved **up** to the upper half of the old range because the 5–10 October
|
||||
work closed 179 issues, most of them user-reported bugs fixed with regression tests, added six partial UI languages
|
||||
and a first live After Effects fidelity measurement. It is still an estimate: nothing renders a
|
||||
corpus in both apps yet.
|
||||
|
||||
## How this was measured
|
||||
|
||||
- **Target.** Adobe After Effects 2026, the copy installed on the owner's Mac:
|
||||
`CFBundleShortVersionString` 26.5.0, build 26.5.0.89. The one live fidelity comparison
|
||||
([fidelity/README.md](fidelity/README.md)) used 26.3x87.
|
||||
- **From the installed bundle (file names and listings only, per [AGENTS.md](../AGENTS.md) §2):**
|
||||
`Info.plist` `CFBundleDocumentTypes` (26 document types: `.aep`, `.aepx`, `.aet`, `.aetx`,
|
||||
`.mogrt`, `.mgjson`, `.aecap`, `.aegraphic`, `.ffx`, `.ars`, `.aom`, `.jsx`, `.psd`, `.cin`,
|
||||
`.mov`, `.pct`, `.pic`…); the `Plug-ins/Format` importers (AIFF, Animate, JPEG, OpenEXR, PNG,
|
||||
Premiere Pro import, Photoshop layers in and out, Radiance, SGI, SVG, Targa, the standard
|
||||
multi-format plug-in); `Plug-ins/Effects` (306 `.plugin` bundles in 231 entries);
|
||||
`Presets` (**621** `.ffx` animation presets); `Scripts` (11 sample scripts, Startup / Shutdown /
|
||||
ScriptUI Panels folders); `Resources/usd_plugins` (USD, FBX, glTF, OBJ, STL); `Resources/MLModels`
|
||||
(FastMask, ShotCutDetection) and tokenizer folders (Whisper, BERT, Marian); `.lproj`
|
||||
localisations (11 languages, [localization-parity.md](localization-parity.md)).
|
||||
After Effects was not launched for this pass, so there is no menu dump.
|
||||
- **From Adobe's public release notes** for 26.2 (April 2026: Object Matte, displacement on
|
||||
parametric meshes, Quick Apply, Proportional Scrubbing), 26.3 (June 2026: Advanced 3D depth of
|
||||
field, paste SVG/AI as shapes, faster mask tracker, copy frame to clipboard, Curl Noise,
|
||||
variable-font filter) and 26.5 (September 2026: percentage guides, Object Matte disk cache,
|
||||
effect colour labels, a rebuilt Effect Controls panel, ACES 2.0 through OpenColorIO 2.5.1).
|
||||
- **From this repository at `origin/main` 1446e27 (10 October 2026):** 587 menu entries in the
|
||||
After Effects-shaped menu tree (`crates/engine/src/menus.rs`), 411 registered engine commands,
|
||||
306 registered effects (280 on the GPU, [effects.md](effects.md)), 12 export formats
|
||||
(`OutputFormat::ALL`), the import extension lists (`crates/media/src/lib.rs`), 2,704 tests, ≈ 329,000
|
||||
lines of Rust, 6 UI language catalogs, and the 134 open / 179 closed GitHub issues.
|
||||
- **Presence is not parity.** A feature counts toward *breadth* when it exists and works in the
|
||||
common case; it counts toward *ready* in proportion to how much of the area a professional
|
||||
could rely on, discounted for open bugs in it, for being unmeasured against After Effects, and
|
||||
for being checked on one platform only.
|
||||
|
||||
### Calibration of the hours
|
||||
|
||||
Hours are **Opus 5.5 agent wall-clock hours**: one agent session working sequentially, tests and
|
||||
verification included. Calibrated against this repository's own history:
|
||||
|
||||
- The whole repository (≈ 329,000 lines including tests, 1,142 commits, 233 merged PRs) was built
|
||||
between 1 and 10 October 2026, typically by 4–8 agents at once: roughly 700–1,000 agent-hours,
|
||||
or ≈ 350–450 lines per agent-hour. Getting to today's ≈ 45% took that; the estimate to full
|
||||
parity is about 1–1.5× it again, because what is left is measurement, compatibility and
|
||||
long-tail behaviour rather than new code.
|
||||
- Named arcs (from the audit notes kept below): Classic 3D ≈ 2.7 h, timeline depth (graph editor,
|
||||
keyframe dialogs, time remapping, pen and masks) ≈ 2.3 h, 85 effects ≈ 1.2 h, the After Effects
|
||||
menu bar ≈ 1.3 h, layer styles ≈ 0.6 h; a wave the audit priced at 21 h took ≈ 6 agent-hours
|
||||
but landed at 80–90%.
|
||||
- Recent PRs (commit-to-merge): seven Timeline/viewer issues (#436) ≈ 0.6 h; eight tweaks from
|
||||
#290 (#383) ≈ 1 h; image-sequence import (#384) ≈ 4 h; panel i18n infrastructure plus 384
|
||||
Chinese strings (#398) ≈ 2–3 h; one 618-row menu language (#401 Ukrainian) ≈ 1.5–2 h; EXR
|
||||
beauty layer + OCIO v2 configs (#449) ≈ 1.3 h. So a user-reported behaviour bug costs ≈ 0.1–0.3 h,
|
||||
a mid-size feature 1–4 h.
|
||||
- What history can't calibrate: fidelity work (each corpus case needs After Effects running,
|
||||
which only the owner's Mac has), `.aep` import (blocked on an owner decision), and anything
|
||||
needing hardware we don't have. Those carry the widest ranges.
|
||||
- **Parallelism:** about 70% of the hours parallelise across 5–8 agents (effects fidelity,
|
||||
languages, bugs, formats are independent). Serial chains: the G1 harness before per-feature
|
||||
fidelity scores; the `.aep` decision before `.aep` work. **Needs a human:** the `.aep`
|
||||
clean-room decision, running After Effects for oracle captures, native-speaker review of every
|
||||
language, Windows/Linux GPU hardware for #591/#596/#613, and an optional decision on hosting
|
||||
After Effects SDK plug-ins.
|
||||
|
||||
## By feature area
|
||||
|
||||
Weights are the share of a typical motion designer's working time in After Effects (animation,
|
||||
compositing and effects dominate; audio is light). Hours are to full parity for the area.
|
||||
|
||||
| Area | Weight | Breadth | Ready | Hours | Biggest gaps (details in [gaps.md](gaps.md)) |
|
||||
|---|---:|---:|---:|---:|---|
|
||||
| Project, footage and import | 8% | 92% | 55% | 25–45 | No relative paths or relinking when a project moves; Media Browser lists TGA/DPX/HDR/AVI/MXF it can't import; any image imports as a sequence (#431); MP3 layer goes silent (#324); multi-file drops (#552, #351) |
|
||||
| Compositions, layers and compositing | 13% | 98% | 60% | 30–55 | 32-bpc blend modes differ from After Effects (#494); mask modes (#527, #510, #513); separated Position edits (#539, #540); expand precomps in place (#601) |
|
||||
| Animation: keyframes, graph editor, motion paths, puppet | 15% | 97% | 55% | 35–60 | Only scalar ease is measured against After Effects (168 samples); Graph Editor jitter and clipped buttons (#456, #457); bulk keyframing (#355); pen tools on motion paths (#553); puppet lag and jump (#586, #318); Proportional Scrubbing (26.2) |
|
||||
| Expressions and scripting | 7% | 93% | 65% | 20–40 | `.jsxbin`, Startup/Shutdown folders, `#include`; external editor (#364); see [scripting-parity.md](scripting-parity.md) |
|
||||
| Shapes, masks and roto | 9% | 93% | 45% | 30–50 | Several open mask bugs (#510, #513, #527); Roto Brush size (#509); Mesh Warp can't be dragged (#303); paste SVG/AI as shape layers (26.3) |
|
||||
| Text and typography | 7% | 94% | 50% | 20–35 | CJK text in comps renders wrongly (#453); paragraph alignment inverted (#316); squeezed text at 4:3 (#483); font search (#583); soft text at Fit (#417); variable-font filter (26.3) |
|
||||
| Effects and animation presets | 14% | 85% | 40% | 70–130 | All 306 effects exist, but rendered output is unmeasured against After Effects; 8 built-in presets against After Effects' 621; open effect bugs (#580 crash, #514, #526, #463, #369, #473); effect colour labels (26.5); see [effects-parity.md](effects-parity.md) |
|
||||
| 3D (Classic and Advanced) | 6% | 82% | 35% | 35–65 | No FBX/USD/STL models, no Substance materials, mesh displacement unverified; no 3D transform gizmos (#392, #347); Z position (#489); reflections (#261); camera aperture (#260); bevel options (#315) |
|
||||
| Tracking and AI-assisted tools | 5% | 80% | 35% | 35–70 | No Object Matte (26.2); Roto Brush (MobileSAM) and face tracking (MediaPipe) unmeasured against After Effects; camera-tracker view (#505) |
|
||||
| Preview and cache | 7% | 92% | 40% | 25–50 | Playback stutters on cached frames (#595, #304); slow scrubbing (#329); late audio (#554, #504, #335); no benchmark against After Effects |
|
||||
| Render queue and export | 7% | 85% | 55% | 25–45 | No hardware encoding; ProRes 4444 colour tag (#340); rendering over an existing file (#325); default macOS output location (#446); uncompressed single-file output (#372); HEVC/AV1 without B-frames |
|
||||
| Audio | 2% | 85% | 45% | 6–12 | Audio sync and crackle (#335); audio to keyframes depth |
|
||||
| **Weighted** | 100% | **≈ 91%** | **≈ 50%** | **≈ 360–660** | |
|
||||
|
||||
Feature depth (≈ 50%) feeds the overall *ready* number with the other dimensions below.
|
||||
|
||||
## By dimension
|
||||
|
||||
| Dimension | % | Hours | Evidence | Doc |
|
||||
|---|---:|---:|---|---|
|
||||
| Features, breadth | 91% | (in features) | Table above | this file |
|
||||
| Features, ready for real work | 50% | 360–660 | Table above | this file, [gaps.md](gaps.md) |
|
||||
| UI/UX fidelity | 65% | 60–120 | After Effects-shaped menus (587 entries), panels, workspaces, shortcuts; many interaction issues still open; no multi-monitor; Effect Controls not yet like 26.5's | [ui-parity.md](ui-parity.md) |
|
||||
| File formats | 50% | 130–230 | `.aep` / `.aepx` / `.mogrt` / `.ffx` can't be read; strong modern codecs (H.264, HEVC, AV1, VP9, ProRes) | [file-format-parity.md](file-format-parity.md) |
|
||||
| Hardware | 40% | 60–120 | wgpu GPU on Metal/Vulkan/Direct3D 12/WebGPU with CPU fallback; no hardware decode/encode; Direct3D 12 compositor fails (#613); no video-out hardware | [hardware-parity.md](hardware-parity.md) |
|
||||
| Localization | 12% | 60–110 + review | Average coverage of After Effects' 10 non-English languages (measured catalog rows over ≈ 3,900 strings): menus 618/618 in 6 languages, panels in 4, effects in none; After Effects ships 11 languages fully | [localization-parity.md](localization-parity.md) |
|
||||
| Performance | 35% | 50–100 | Internal numbers only; users report stutter and slow scrubbing | [gaps.md](gaps.md#g5-performance-at-real-world-scale) |
|
||||
| Stability | 45% | 40–80 | Open crash reports #580, #591, #501, #426, #341, #306, #234, #511; no CI runs the tests on pull requests | [gaps.md](gaps.md#g3-stability-and-a-green-main) |
|
||||
| Platforms | 65% | 30–60 | Releases for macOS, Windows x64/x86/ARM64, Linux, FreeBSD and the web (more than After Effects), but Linux and Windows users hit basic bugs | [gaps.md](gaps.md#g2-real-user-reliability-on-every-platform) |
|
||||
| Ecosystem and plug-ins | 20% | 40–80 | After Effects scripts and expressions mostly carry over; no After Effects SDK plug-ins, `.ffx` presets or `.mogrt`; our WebAssembly plug-in API has no third-party plug-ins yet | [plugins.md](plugins.md) |
|
||||
| AI features | 35% | 40–80 (overlaps Tracking) | Roto Brush (MobileSAM) and face tracking (MediaPipe) as optional downloads; no Object Matte; the After Effects bundle ships Whisper, BERT and Marian tokenizers and a shot-cut model we have no equivalent of | [gaps.md](gaps.md) |
|
||||
| Agent control (beyond After Effects) | ahead | — | Every command is drivable over MCP, the control channel and the CLI | [agents.md](agents.md) |
|
||||
|
||||
**Totals.** Summing the rows double-counts: AI overlaps Tracking, performance overlaps Preview,
|
||||
UI overlaps every area. With the overlaps removed: **≈ 850–1,500 h to full parity**, of which
|
||||
**≈ 350–620 h to beta**: `.aep` import (80–160 h, after the owner decision), the G1 fidelity
|
||||
harness and P0/P1 corpus (60–100 h), the open bug and crash backlog (40–80 h), performance to
|
||||
real-time preview at 1080p (40–70 h), Linux/Windows reliability (30–50 h), and feature depth in
|
||||
animation, masks, effects and text (100–160 h).
|
||||
|
||||
## Ready for real work: how the number is built
|
||||
|
||||
The full-target number is a written weighted sum, not a single judgement:
|
||||
|
||||
| Component | Weight | Value | Source |
|
||||
|---|---:|---:|---|
|
||||
| Feature depth | 60% | 50% | Weighted feature-area table above |
|
||||
| Opening and delivering work files | 15% | 35% | [file-format-parity.md](file-format-parity.md): `.aep` / `.mogrt` / `.ffx` 0%, delivery formats strong |
|
||||
| Performance | 10% | 35% | By dimension, below |
|
||||
| Stability | 10% | 45% | By dimension, below |
|
||||
| Platforms | 5% | 65% | By dimension, below |
|
||||
| **Result** | | **46.2%**, reported as **≈ 45%** (40–50%) | Rounded down to the nearest 5: no live render comparison exists yet |
|
||||
|
||||
Checked on 10 October 2026 when the mainstream and essentials numbers were added: it is unchanged.
|
||||
|
||||
## Mainstream practitioner and essentials user
|
||||
|
||||
Two narrower questions, computed the same way in every craft app (craftrules
|
||||
`standards/progress-docs.md`, "Numbers"). The stage still follows the full-target number and the
|
||||
[alpha gate](roadmap.md#alpha-gate).
|
||||
|
||||
### Mainstream practitioner
|
||||
|
||||
**≈ 47%** (estimated).
|
||||
|
||||
*Can the typical professional motion designer do their weekly work here?* Areas are the alpha-gate
|
||||
workflows and their everyday tools. Left out: third-party plug-ins and `.ffx` preset libraries,
|
||||
generative/cloud AI (Object Matte, Firefly), Adobe services and team features, specialist hardware
|
||||
(video I/O, tablets), languages other than English, and areas a typical designer uses rarely
|
||||
(Advanced 3D models, 3D camera tracking, Roto Brush). Depth is for the everyday subset of each area
|
||||
(the common effects, the common formats), which is why it sits above the full feature-area table.
|
||||
|
||||
| Area (everyday subset) | Weight | Depth | Evidence |
|
||||
|---|---:|---:|---|
|
||||
| Project and import: MOV/MP4, PNG/JPEG sequences, PSD/AI, WAV/MP3 | 10% | 75% | Import tests; #431 still imported as a sequence, #324 MP3 silence |
|
||||
| Comps, layers, blend modes, mattes, parenting, precomps | 16% | 80% | Compositor tests; #494 32-bpc blend modes, #539/#540 separated Position |
|
||||
| Keyframes, Graph Editor, easing, motion paths | 20% | 75% | 168 live samples match After Effects; #456/#457, #553, #569 |
|
||||
| Expressions: `wiggle`, `loopOut`, linking, sliders | 6% | 80% | `crates/expr` tests; no live expression oracle yet |
|
||||
| Shape layers and masks | 12% | 65% | #510, #513, #527 mask bugs; #303 Mesh Warp |
|
||||
| Text and text animators | 12% | 70% | #316 alignment inverted, #453 CJK, #583 font search |
|
||||
| Everyday effects: blurs, glow, fill/tint, curves/levels, keying, drop shadow, displacement | 10% | 70% | All present with GPU paths; unmeasured against After Effects; #514 Apply Color LUT |
|
||||
| Preview (RAM preview with audio) | 8% | 55% | #595, #304 stutter; #554, #504 late audio |
|
||||
| Render to H.264 / ProRes / PNG sequences | 6% | 75% | Encoder tests; #446 default macOS output folder, #340 ProRes 4444 tag |
|
||||
| **Average depth** | 100% | **72.2%** | |
|
||||
|
||||
Discounts for what still stops real work:
|
||||
|
||||
| Discount | Factor | Evidence |
|
||||
|---|---:|---|
|
||||
| Interaction fidelity | ×0.90 | UI parity ≈ 65% ([ui-parity.md](ui-parity.md)): Graph Editor jitter, snapping (#352), viewer zoom keys (#570), no multi-monitor (#486) |
|
||||
| Stability on real machines | ×0.90 | Eight open crash reports (#580, #591, #501, #426, #341, #306, #234, #511); Direct3D 12 compositor fails (#613); no CI on pull requests |
|
||||
| File exchange with After Effects users | ×0.80 | Can't open `.aep`, `.aepx`, `.mogrt` or `.ffx` sent by colleagues or bought as templates; PSD, AI, footage and rendered deliverables exchange fine |
|
||||
|
||||
72.2% × 0.90 × 0.90 × 0.80 = **46.8%, ≈ 47%**. It sits only just above the full number because
|
||||
the gap is not in After Effects' long tail: fidelity, stability and `.aep` exchange hit
|
||||
mainstream users as hard as specialists.
|
||||
|
||||
### Essentials user
|
||||
|
||||
**≈ 52%** (estimated).
|
||||
|
||||
*Can someone who only touches the core features (a social-media animator, a student, a
|
||||
first-time user) get their work done?* No advanced options, pro workflows or exchange edge cases.
|
||||
|
||||
| Core feature | Weight | Depth | Evidence |
|
||||
|---|---:|---:|---|
|
||||
| Launch, new project, undo, save, reopen | 10% | 85% | Versioned project reopen tests, auto-save and crash recovery |
|
||||
| Import a video, picture or song | 10% | 75% | #431 a picture imported as a sequence, #324 MP3 silence |
|
||||
| New comp; move, scale, rotate, fade and trim layers | 15% | 80% | `ui_viewer`, Timeline tests |
|
||||
| Add and style text | 10% | 70% | #316, #583 |
|
||||
| Draw shapes and simple masks | 10% | 70% | Shape tool tests; #513 mask drawing feedback |
|
||||
| Keyframes and Easy Ease | 15% | 85% | Ease measured against After Effects |
|
||||
| Apply a few common effects | 10% | 75% | Effects & Presets search, Effect Controls tests |
|
||||
| Preview with sound | 10% | 65% | #595 stutter, #554 late audio |
|
||||
| Export an MP4 | 10% | 80% | H.264 encoder tests; #446 |
|
||||
| **Average depth** | 100% | **76.75%** | |
|
||||
|
||||
| Discount | Factor | Evidence |
|
||||
|---|---:|---|
|
||||
| Launch and stability | ×0.88 | Start-up failures (#501, #234 macOS 27, #596 GPU not detected, #613 Direct3D 12); #426 timeline crash while playing |
|
||||
| Discoverability and UI clarity | ×0.90 | After Effects' dense layout reproduced faithfully; Home screen and interactive Learn tutorials help; renders fail silently on macOS until an output folder is chosen (#446); layout nitpicks (#581) |
|
||||
| Opening files people send | ×0.85 | Tutorial projects and templates arrive as `.aep` / `.mogrt`, which don't open |
|
||||
|
||||
76.75% × 0.88 × 0.90 × 0.85 = **51.7%, ≈ 52%**.
|
||||
|
||||
### User evidence (GitHub, 10 October 2026)
|
||||
|
||||
Counted from all 315 issues and their comments, excluding the maintainer account and
|
||||
agent-generated maintainer replies:
|
||||
|
||||
- **Praise:** 5 people in 5 issues say so outright: "felt almost exactly like After Effects.
|
||||
Really impressive" (#611), "performance has been excellent" (#326), "Awesome project" (#322),
|
||||
"Great work" (#293), "great tool and AE alternative" (#290). About 6 more open with "would love…"
|
||||
in a feature request.
|
||||
- **"Switched from After Effects" reports:** none found. #468 is a working motion designer's
|
||||
list of Mac issues, so people are trying it on real work.
|
||||
- **Open issues (136):** ≈ 95 are core-path bugs (masks, keyframes, timeline, preview, audio,
|
||||
text, render, crashes; this includes 15 community `fix(...)` proposals), ≈ 40 are feature
|
||||
requests or niche (plug-in hosting, OpenFX, ffmpeg export, Discord presence, Store listing,
|
||||
rigging tools). Mostly core-path bugs, which matches the discounts above.
|
||||
|
||||
## Out of scope by design
|
||||
|
||||
Adobe services (Team Projects, Libraries, Stock, Media Encoder, Dynamic Link, Frame.io,
|
||||
Exchange, Firefly), third-party bundles (Cineware / Cinema 4D, Mocha), and formats without a
|
||||
public specification or permissive data (`.prproj`, `.jsxbin`, Vanishing Point `.vpe`, the
|
||||
predefined CJK CMaps in PDF import, Kodak film emulations) are not counted against breadth.
|
||||
`.aep` / `.aepx` *are* counted: they are the main file format and decide beta.
|
||||
|
||||
---
|
||||
|
||||
## Appendix: feature-checklist audit history
|
||||
|
||||
Moved here from `docs/parity.md` on 10 October 2026 and kept as evidence. It scores the 92-item
|
||||
catalogue in `plan/aftereffects/feature-catalog.md`, graded by the agents that built the
|
||||
features; read it as breadth only. **Its per-area table ("By area", below) was stale**
|
||||
(Interface 75%, Project 68%, Animation 70%, Paint 0% next to a 99% headline) and is superseded by
|
||||
the feature-area table above; it is kept for its "biggest gaps" notes, which record what
|
||||
landed when.
|
||||
|
||||
### Checklist status (audit at commit `d39c0e8`, 4 October 2026; updated 5 October for M3.9–M4.12)
|
||||
|
||||
| Measure | Value |
|
||||
|---|---|
|
||||
@@ -53,15 +317,15 @@ Out of clean-room scope (no public specification or no permissively licensed dat
|
||||
emulations. Adobe service integrations (Team Projects, Libraries, Media Encoder, Dynamic Link,
|
||||
Frame.io, Exchange) and third-party plug-ins (Cinema 4D, Mocha) are intentionally absent.
|
||||
|
||||
### Previous audit (commit `58163a2`, 3 October 2026, evening): ≈ 98%
|
||||
#### Previous audit (commit `58163a2`, 3 October 2026, evening): ≈ 98%
|
||||
|
||||
87 done / 5 partial / 0 missing.
|
||||
|
||||
### Previous audit (commit `978e8d7`, 3 October 2026): ≈ 94%
|
||||
#### Previous audit (commit `978e8d7`, 3 October 2026): ≈ 94%
|
||||
|
||||
80 done / 12 partial / 0 missing.
|
||||
|
||||
### Previous audit (commit `fa26ad9`, 2 October 2026, late): ≈ 93%
|
||||
#### Previous audit (commit `fa26ad9`, 2 October 2026, late): ≈ 93%
|
||||
|
||||
By area: Layers 98%, Output 95%, Compositions 95%, Automation 96%, Paint 95%, Text 95%, Import 96%,
|
||||
Animation 94%, Masks 94%, Preview 94%, Interface 93%, Shapes 93%, 3D 91%, Audio 90%, Project 90%,
|
||||
@@ -80,7 +344,7 @@ thread counts — landed in M13.1 (GPU particles landed in M12.7). Render Queue
|
||||
The sections below are the original audit (morning of 2 October, ≈ 64%) and its updates, kept for
|
||||
history.
|
||||
|
||||
## Summary
|
||||
### Summary
|
||||
|
||||
| Measure | Value |
|
||||
|---|---|
|
||||
@@ -107,7 +371,7 @@ Work in progress at the time of the audit, not yet counted: motion tracking, pre
|
||||
keyboard shortcut editor, auto-save and crash recovery, paint and puppet tools, Lottie import and
|
||||
export.
|
||||
|
||||
## Update after the second wave (same day, commit `e1f7241`)
|
||||
### Update after the second wave (same day, commit `e1f7241`)
|
||||
|
||||
Motion tracking (1-, 2- and 4-point, stabilize, corner pin), paint (Brush, Clone Stamp, Eraser
|
||||
with write-on) and the puppet tools, preferences, a keyboard shortcut editor that rebinds,
|
||||
@@ -129,7 +393,7 @@ hours** at the pace observed so far and **≈ 35–40 hours** if the audit's fig
|
||||
hardest remaining systems (Roto Brush, Warp Stabilizer, the 3D camera tracker, Advanced 3D, GPU
|
||||
rendering, on-canvas text editing) are where the conservative figure is most likely to be right.
|
||||
|
||||
## Update at the end of 2 October 2026
|
||||
### Update at the end of 2 October 2026
|
||||
|
||||
A third wave landed: viewer interactions (snapping, rulers, channels, exposure, snapshots, region
|
||||
of interest, shape pen and pen-tool family, motion-path handles, graph editor transform box),
|
||||
@@ -155,7 +419,7 @@ M6.7; native macOS menus, the Composition Flowchart, Timeline column/search dept
|
||||
and every After Effects workspace in the UI-polish wave; PSD/SVG import, WebM/WAV/AIFF output and
|
||||
the disk cache in the formats wave; the 3D Camera Tracker in M12.6.)
|
||||
|
||||
## By area
|
||||
### By area (stale; superseded on 2026-10-10 by the feature-area table at the top)
|
||||
|
||||
| Area | Weighted parity | Remaining (agent-hours) | Biggest gaps |
|
||||
|---|---|---|---|
|
||||
@@ -178,7 +442,7 @@ the disk cache in the formats wave; the 3D Camera Tracker in M12.6.)
|
||||
| Tracking | ≈ 96% | 0.3 | face tracking's trained model (MediaPipe Face Landmarker, M13.36) is an optional download; without it the classical (skin model + feature components + shape model) fitter is weak on profile views and occluded faces; Rolling Shutter Ripple is approximated by Subspace Warp's mesh density (face tracking (Outline Only / Detailed Features with Face Track Points and Extract & Copy Face Measurements), Subspace Warp's content-preserving mesh warp on subspace-smoothed trajectories, and radial lens distortion (k1, k2) in the camera bundle adjustment with Undistort Footage landed in M13.3; Rolling Shutter Repair in M9.11; point tracker, mask tracking, Warp Stabilizer and the 3D Camera Tracker in M6.x / M12.5 / M12.6) |
|
||||
| Paint | 0% | 4.0 | Brush, Clone Stamp, Eraser |
|
||||
|
||||
## Effects still missing
|
||||
### Effects still missing
|
||||
|
||||
The full catalogue with GPU / 32-bpc badges and per-effect status is [effects.md](effects.md)
|
||||
(generated from the registry).
|
||||
@@ -186,7 +450,7 @@ The full catalogue with GPU / 32-bpc badges and per-effect status is [effects.md
|
||||
None: the 3D Camera Tracker landed in M12.6. Boris FX
|
||||
Mocha and Cineware are third-party and not counted.
|
||||
|
||||
### Added in M9.11 (39 effects)
|
||||
#### Added in M9.11 (39 effects)
|
||||
|
||||
| Category | Effects | Notes |
|
||||
|---|---|---|
|
||||
@@ -201,7 +465,7 @@ Mocha and Cineware are third-party and not counted.
|
||||
| Utility | Color Profile Converter | Our colour spaces and ACES; rendering intents (perceptual gamut compression, relative / absolute colorimetric, saturation). |
|
||||
| Matte | Mocha shape | Mocha's export format is not public: reads a documented JSON shape format instead. |
|
||||
|
||||
## Update: M13.5 long-tail polish
|
||||
### Update: M13.5 long-tail polish
|
||||
|
||||
Stroke Taper / Wave / multi-segment dashes and the radial gradient highlight (SHP-2);
|
||||
variable-width mask feather points (MSK-1; mask motion blur verified by tests); the Adaptive
|
||||
@@ -217,7 +481,7 @@ Reference Axes; Animate Text ▸ Variable Font Axes. Remaining in these rows: Lo
|
||||
taper/wave (the Variable Font Axes animator changes advances since M13.12, the Character panel's
|
||||
axes since M13.6; Advanced 3D's DOF has iris shapes since M13.8).
|
||||
|
||||
## Update: M13.8 Preview panel, Align panel, Advanced 3D completion
|
||||
### Update: M13.8 Preview panel, Align panel, Advanced 3D completion
|
||||
|
||||
- **Preview panel (PRV-1)**: Shortcut popup (Spacebar, Shift+Spacebar, Numpad 0, Shift+Numpad
|
||||
0, Alt+Numpad 0), each shortcut with its own saved options (settings `preview`): Include
|
||||
@@ -238,7 +502,7 @@ axes since M13.6; Advanced 3D's DOF has iris shapes since M13.8).
|
||||
as real geometry lit by the parent (2D collapsed precomps draw nested 3D layers with the
|
||||
parent's renderer); text and shape strokes extrude as bevelled meshes in paint order.
|
||||
|
||||
## Update: M13.22 GPU effects, part A
|
||||
### Update: M13.22 GPU effects, part A
|
||||
|
||||
- **GPU ports (EFF-5)**: 30 more effects run on the GPU (196 GPU effects), each matching the
|
||||
CPU oracle within 1/255 (8 bpc) / 1e-3 (32 bpc) on every tested pixel, directly on a buffer
|
||||
@@ -275,7 +539,7 @@ axes since M13.6; Advanced 3D's DOF has iris shapes since M13.8).
|
||||
comps. The GPU walk matches the CPU compositor on the same rasters exactly at 8 and 32 bpc,
|
||||
with only the frame's own readback.
|
||||
|
||||
## Update: M13.13 GPU performance and the remaining GPU ports
|
||||
### Update: M13.13 GPU performance and the remaining GPU ports
|
||||
|
||||
- **Small comps on the GPU (PRV-3)**: the GPU frame allocated (and zero-initialised) several
|
||||
full-frame RGBA f32 textures per layer; working textures now come from a pool (reused once
|
||||
@@ -303,7 +567,7 @@ axes since M13.6; Advanced 3D's DOF has iris shapes since M13.8).
|
||||
Vertical Distortion render on the CPU (`gpu_supported`), since their Newton inverse wanders
|
||||
chaotically near the crease and f32 settles on other pixels.
|
||||
|
||||
## Update: M13.11 Advanced 3D on the GPU, Essential Graphics mirrors, ScriptUI paint
|
||||
### Update: M13.11 Advanced 3D on the GPU, Essential Graphics mirrors, ScriptUI paint
|
||||
|
||||
- **Advanced 3D on the GPU (PRV-3, 3D-3)**: a whole Advanced 3D run renders on the device
|
||||
(`gpu::adv3d`, `Renderer::prepare_adv_run`, `Accelerator::render_3d`): every motion-blur
|
||||
@@ -338,7 +602,7 @@ axes since M13.6; Advanced 3D's DOF has iris shapes since M13.8).
|
||||
`drawImage`, image controls and icon buttons; script-host threads are compiled out of the
|
||||
web build (no dead code warnings).
|
||||
|
||||
## Update: M13.5 UI completion & fidelity
|
||||
### Update: M13.5 UI completion & fidelity
|
||||
|
||||
**Extended Viewer** (Settings ▸ 3D, the viewer's Extended Viewer button, `view.extendedViewer`):
|
||||
custom 3D views (and the Active Camera view with Draft 3D on) render the visible pasteboard
|
||||
@@ -356,7 +620,7 @@ workspace bar order (Default, Review, Learn, Small Screen, Standard) and a singl
|
||||
above the viewer. Not yet: Composition Settings / Render Queue / Settings dialogs compared
|
||||
pixel by pixel (no reference captures of them yet).
|
||||
|
||||
## Update: M13.6 panels and content tools
|
||||
### Update: M13.6 panels and content tools
|
||||
|
||||
The last placeholder panels became real panels with automation ids: **Lumetri Scopes**
|
||||
(waveform RGB / Luma / YC, vectorscope YUV / HLS, histogram, parade RGB / YUV; Rec. 601 / 709 /
|
||||
@@ -375,7 +639,7 @@ menu entries. Not yet: creating a reference frame by editing a still (After Effe
|
||||
Photoshop), Content-Aware Fill's learned model (ours is PatchMatch + flow propagation), and Media
|
||||
Browser in the web app (landed in M13.10: browser storage and File System Access folders).
|
||||
|
||||
## Update: M13.12 import and text leftovers, test hardening
|
||||
### Update: M13.12 import and text leftovers, test hardening
|
||||
|
||||
- **PDF / AI**: mesh shadings — free-form and lattice-form Gouraud triangle meshes (types 4, 5),
|
||||
Coons and tensor-product patch meshes (6, 7, tessellated to triangles) — and function-based
|
||||
@@ -401,7 +665,7 @@ Browser in the web app (landed in M13.10: browser storage and File System Access
|
||||
wrong signatures and versions, fuel exhaustion, traps and bit-identical output; script
|
||||
`Socket` validates ports, and ScriptUI resource strings accept trailing array commas.
|
||||
|
||||
## Update: text and viewer fidelity (G1)
|
||||
### Update: text and viewer fidelity (G1)
|
||||
|
||||
Fixes from measured reports:
|
||||
|
||||
@@ -420,7 +684,7 @@ Fixes from measured reports:
|
||||
factor) instead of minified bilinearly (#417). Not yet: the viewer resolution and magnification
|
||||
are not remembered between launches.
|
||||
|
||||
## Update: plug-ins and extensions as in After Effects; ease presets become a ScriptUI panel
|
||||
### Update: plug-ins and extensions as in After Effects; ease presets become a ScriptUI panel
|
||||
|
||||
EffectCraft's core keeps After Effects parity; what After Effects users get from third parties is
|
||||
an extension, on the same extension points After Effects has ([plugins.md](plugins.md) compares
|
||||
@@ -455,7 +719,7 @@ them: scripts, ScriptUI panels, effect plug-ins, with a guide to writing a panel
|
||||
Extended and Snap to Features in Collapsed Compositions and Text Layers (the layers inside
|
||||
collapsed precomp layers snap); the per-feature toggles are gone and every feature snaps.
|
||||
|
||||
## Update: M5.9–M5.14 keyframes, M3.15 clipboard, M12.8 responsiveness
|
||||
### Update: M5.9–M5.14 keyframes, M3.15 clipboard, M12.8 responsiveness
|
||||
|
||||
- **The app froze every 10 s on Windows** (M12.8): the cache budgets' memory reading started
|
||||
PowerShell on the UI thread and waited about a second for it. It runs on a background thread
|
||||
@@ -585,7 +849,7 @@ rather than the keyed frame (Ctrl/Cmd+click averages 5 × 5 pixels); agents do t
|
||||
`effect.pickColor {effect, param, x, y, average?}` (effect space). Searching "keylight" in
|
||||
Effects & Presets, or `list_effects`, finds it.
|
||||
|
||||
## Update: M4.9–M4.11 nested comps and motion blur
|
||||
### Update: M4.9–M4.11 nested comps and motion blur
|
||||
|
||||
- **Composition Settings ▸ Advanced ▸ Preserve frame rate when nested or in render queue** and
|
||||
**Preserve resolution when nested** (model, renderer, Render Queue, dialog, `comp.settings`,
|
||||
@@ -601,7 +865,7 @@ Not yet: collapsed precomps don't blur with the precomp layer's own motion or th
|
||||
camera's; animated content inside a layer (shape paths, text animators, nested frames) isn't
|
||||
re-rendered per sub-sample; nested comp markers on the precomp layer bar.
|
||||
|
||||
## Update: M4.5–M4.8 cached playback
|
||||
### Update: M4.5–M4.8 cached playback
|
||||
|
||||
- **RAM preview keys** carry the render options (Fast Previews Draft / Fast Draft, Realtime
|
||||
Shadows), so a mode switch never shows frames rendered the other way; eviction drops the least
|
||||
@@ -618,7 +882,7 @@ re-rendered per sub-sample; nested comp markers on the precomp layer bar.
|
||||
Not yet: content-keyed RAM frames (an edit drops every comp's RAM frames; the disk cache keeps
|
||||
content keys), audio scrubbing, four snapshot slots.
|
||||
|
||||
## Update: M3.14 project files
|
||||
### Update: M3.14 project files
|
||||
|
||||
Project files name the version that wrote them (`savedBy`); opening one that a newer EffectCraft
|
||||
saved warns that what this version doesn't know is lost on saving (`file.open` reports
|
||||
@@ -627,7 +891,7 @@ fails the save with a message instead of writing a project that can never be ope
|
||||
on disk is left as it was). Increment and Save and Save a Copy keep an XML project (`.ecprojx`)
|
||||
XML; a file that isn't a project says so by name.
|
||||
|
||||
## Update: M3.13 menu bar
|
||||
### Update: M3.13 menu bar
|
||||
|
||||
Group Shapes (Ctrl+G) and Ungroup Shapes (Ctrl+Shift+G) moved to the Layer menu itself, where
|
||||
After Effects has them; Window ▸ Learn opens the Home screen's Learn tab; Composition ▸
|
||||
@@ -637,7 +901,7 @@ Window's shortcut); Layer ▸ Transform ▸ Center In View shows Ctrl+Home; "Rev
|
||||
Viewer (several unlocked Composition viewers at once; View ▸ Split with New Locked Viewer adds
|
||||
the one locked viewer the interface has).
|
||||
|
||||
## Update: M3.12 Pre-compose and New Comp from Selection
|
||||
### Update: M3.12 Pre-compose and New Comp from Selection
|
||||
|
||||
- **Pre-compose** makes the new composition with the original's settings (pixel aspect,
|
||||
background, motion blur shutter / samples / switch, frame blending switch, 3D renderer); it
|
||||
@@ -649,7 +913,7 @@ the one locked viewer the interface has).
|
||||
(`file.newCompFromSelection {single, dimensionsFrom, duration, addToRenderQueue, sequence,
|
||||
overlap, overlapDuration, transition}`). `layer.addItem {duration}` sets a still's length.
|
||||
|
||||
## Update: M3.11 layer commands
|
||||
### Update: M3.11 layer commands
|
||||
|
||||
- **Lock**: locked layers can't be selected (a Timeline click, Select All, Ctrl+Up / Down step
|
||||
over them, as do shy layers while hidden) and are left alone by Clear / Delete, Arrange, the
|
||||
@@ -667,7 +931,7 @@ the one locked viewer the interface has).
|
||||
matte when both were copied, else the original in the same composition (paste dropped them
|
||||
always).
|
||||
|
||||
## Update: M3.10 Layer Settings and settings dialogs
|
||||
### Update: M3.10 Layer Settings and settings dialogs
|
||||
|
||||
Layer ▸ Layer Settings on a solid or adjustment layer opens Solid Settings on the layer's solid
|
||||
(it did nothing before): name, size, Pixel Aspect Ratio, colour and **Affect all layers that use
|
||||
@@ -679,7 +943,7 @@ for every control (`dialog.comp.*`, `dialog.solid.*`), Composition Settings take
|
||||
frame rate besides the list, New Composition starts from the settings of the last composition
|
||||
made with it, and their colour buttons show the stored sRGB colour (they showed it lighter).
|
||||
|
||||
## Update: M3.9 unsaved changes
|
||||
### Update: M3.9 unsaved changes
|
||||
|
||||
Closing a modified project asks first, as After Effects does: Quit and the window's close
|
||||
button, File ▸ New Project, Open Project, Open Recent, Close Project, the demo project and a Home
|
||||
@@ -690,7 +954,7 @@ the project's path and `*` while it has unsaved changes. The modified mark now f
|
||||
and edits that change nothing record no undo step. Agents' `engine.execute` / MCP calls are never
|
||||
asked; the control channel's `app.quit {force: true}` skips the prompt.
|
||||
|
||||
## Update: M13.25 Home template gallery, Simulate Output ▸ My Custom RGB
|
||||
### Update: M13.25 Home template gallery, Simulate Output ▸ My Custom RGB
|
||||
|
||||
**Home ▸ Templates** (UI-7; File ▸ New ▸ New Project from Template…): a gallery of eight
|
||||
original built-in project templates authored in code from engine commands — Lower Third, Title
|
||||
@@ -717,7 +981,7 @@ in Settings (`customRgb`) and simulated like the built-in profiles, with Preserv
|
||||
ICC profiles too (`lut8Type`, `lut16Type`, `lutAToBType` / `lutBToAType`, evaluated from the
|
||||
public ICC specification and baked into a 3D LUT for the viewer).
|
||||
|
||||
### M13.26: Premiere Pro interop via timeline interchange
|
||||
#### M13.26: Premiere Pro interop via timeline interchange
|
||||
|
||||
| Feature | After Effects | EffectCraft | Status |
|
||||
|---|---|---|---|
|
||||
@@ -728,7 +992,7 @@ Not yet: native `.prproj` (no public specification; awaits a decision), media em
|
||||
(not extracted), Premiere effects other than Motion/Opacity/Volume, speed
|
||||
ramps, titles/graphics, and Dynamic Link.
|
||||
|
||||
## Update: M13.23 GPU effects, part B (EFF-5)
|
||||
### Update: M13.23 GPU effects, part B (EFF-5)
|
||||
|
||||
40 more effects run on the GPU (236 in all, with M13.22's 30), each checked against the CPU oracle (≤ 1/255 at
|
||||
8 bpc, ≤ 1e-3 at 32 bpc) directly on a buffer (full and half resolution, adjustment) and
|
||||
@@ -767,7 +1031,7 @@ composited at 8 and 32 bpc:
|
||||
default to the layer). Shatter's wireframe views and Foam's User Defined texture,
|
||||
Environment Map and flow-map preview render on the CPU.
|
||||
|
||||
## Update: M13.28 GPU effects, part C (EFF-5)
|
||||
### Update: M13.28 GPU effects, part C (EFF-5)
|
||||
|
||||
37 more effects run on the GPU, each checked against the CPU oracle (≤ 1/255 at 8 bpc, ≤ 1e-3 at
|
||||
32 bpc) directly on a buffer with masks, another layer and an audio track (full and half
|
||||
@@ -799,7 +1063,7 @@ resolution, adjustment) and composited at 8 and 32 bpc:
|
||||
of the pixels even at low magnification, WGSL has no f64 and Metal's fast math defeats
|
||||
double-f32 emulation.
|
||||
|
||||
## Update: M13.29 GPU effects, part D (EFF-5)
|
||||
### Update: M13.29 GPU effects, part D (EFF-5)
|
||||
|
||||
7 more effects run on the GPU (280 in all, with M13.28's 37), and five CPU fallbacks are gone. Each case is
|
||||
checked against the CPU oracle (≤ 1/255 at 8 bpc, ≤ 1e-3 at 32 bpc) directly on a buffer (full
|
||||
@@ -829,7 +1093,7 @@ are pinned bit for bit by golden hashes (`crates/effects/tests/particle_golden.r
|
||||
CPU solves the inverse map from the geometry alone and the GPU samples along it, so the chain
|
||||
stays on the GPU without a readback.
|
||||
|
||||
## Update: M13.30 web depth and polish
|
||||
### Update: M13.30 web depth and polish
|
||||
|
||||
- **GPU in the browser's job workers** (WEB-1): each job worker opens its own WebGPU device
|
||||
(deferred readbacks) like the frame workers. The Render Queue's export and the analyses'
|
||||
@@ -851,7 +1115,7 @@ are pinned bit for bit by golden hashes (`crates/effects/tests/particle_golden.r
|
||||
(default 256)}`; `templates.create {projectPath?, footageDir?}` extracts it.
|
||||
- **ICC A2B0 profiles** in View ▸ Simulate Output ▸ My Custom RGB (see above).
|
||||
|
||||
## Highest-value gaps, in order
|
||||
### Highest-value gaps, in order
|
||||
|
||||
1. ~~On-canvas text editing and per-character styles~~ (landed: M9.9–M9.10).
|
||||
2. ~~Effect Controls widgets: angle dial, point crosshair, eyedropper, curves and levels editors.~~ (second wave, 2 October)
|
||||
@@ -882,3 +1146,16 @@ missing was interactive tooling, settings stored but not rendered, about 69 disa
|
||||
and the large systems (tracking, puppet, paint, roto). All of those have landed since; one menu
|
||||
entry stays disabled on purpose (Import ▸ Vanishing Point), and what is left is listed at the
|
||||
top of this page and in items 16–18 above.
|
||||
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Readiness-by-audience table: hours to ≈ 95% for each of the three numbers; the full number stays an additive weighted sum (unchanged) |
|
||||
| 2026-10-10 | minor | Added mainstream practitioner (≈ 47%) and essentials user (≈ 52%) numbers with weights, discounts and GitHub user evidence; wrote down how the full ready number is built (unchanged at ≈ 45%) |
|
||||
| 2026-10-10 | minor | Stage checked against the core-workflow alpha gate: passes, still alpha |
|
||||
| 2026-10-10 | major | Full re-measure against After Effects 2026 26.5 (installed bundle, 26.2–26.5 release notes, repository counts); two numbers (breadth ≈ 91%, ready ≈ 45%); feature-area and dimension tables with Opus 5.5 hours; `docs/parity.md` merged in as the appendix and its stale per-area table superseded |
|
||||
| 2026-10-05 | minor | Checklist updated for M3.9–M4.12 (as `docs/parity.md`) |
|
||||
| 2026-10-04 | major | Checklist audit at `d39c0e8`: ≈ 99% weighted breadth, 89 / 3 / 0 of 92 |
|
||||
| 2026-10-02 | major | First audit: ≈ 64% weighted breadth |
|
||||
@@ -0,0 +1,47 @@
|
||||
# UI parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first UI parity checklist against After Effects 2026 26.5) · **Target:** Adobe After Effects 2026
|
||||
|
||||
How closely EffectCraft's interaction matches After Effects: tools, handles, snapping, nudging,
|
||||
modifier keys, shortcuts, drag behaviour, numeric entry, panels, context menus and feel. Evidence
|
||||
is the code at `origin/main` 1446e27, the 42 scripted UI test files in `crates/ui-egui/tests`
|
||||
(real pointer and keyboard events, run headless), [fidelity/workflow-checks.md](fidelity/workflow-checks.md)
|
||||
and the issue tracker. After Effects was not driven for this pass, so "same as After Effects" means
|
||||
"matches its documentation and users have not reported a difference".
|
||||
|
||||
**Overall ≈ 65%** (estimated): the shape of the interface is After Effects' (menus, panels,
|
||||
workspaces, shortcuts), and the scripted tests cover many interactions, but users keep finding
|
||||
feel and platform differences, and the 26.x interface changes are not in yet.
|
||||
|
||||
| Area | Status | % | Evidence and gaps |
|
||||
|---|---|---:|---|
|
||||
| Menu bar | After Effects' menus, order, submenus and labels; native on macOS; keyboard-operable in-window bar | 95% | 587 entries in `crates/engine/src/menus.rs`; Adobe-service entries omitted by design; `ui_menus` tests (#279) |
|
||||
| Panels and workspaces | Every After Effects panel; all standard workspaces; drag-to-dock, tabs, floating panels, maximise | 75% | `ui_tabs`, `ui_panels`; dropping a panel on a stacked panel doesn't make a tab (#302); stacked-panel headers (#301); saved workspaces don't persist (#320); no panels on a second monitor (#486) |
|
||||
| Timeline | Switches, modes, parent & link, twirl-downs, reveal shortcuts (U, UU, P, S, R, T, A, E, M, F, Alt+Shift…), pick whips, graph editor, work area, markers | 75% | `ui_keyframes`, `ui_timeline_*`; Graph Editor jitter and hidden buttons (#456, #457); rotation can't go negative by dragging (#569); bulk keyframing (#355); expand precomps in place (#601); Proportional Scrubbing (26.2) missing |
|
||||
| Composition viewer | Selection, handles with direction-aware cursors, rulers, guides, grids, snapping, channels, exposure, region of interest, snapshots, 3D views, Spacebar hand | 70% | `ui_viewer`, `ui_viewers`; Cmd/Ctrl +/− doesn't zoom (#570); inaccurate snapping (#352); anchor point grab on Linux (#492); no 3D transform gizmos (#392, #347); percentage guides (26.5); copy frame to clipboard (26.3) |
|
||||
| Tools panel | All After Effects tools; long-press flyouts; Tool Creates Shape / Mask; Fill / Stroke options | 80% | #213, #227 fixed; pen and vertex tools on motion paths (#553) |
|
||||
| Nudging and modifiers | Arrow nudge (1 px, Shift 10 px), Alt/Option duplicates and slips, Shift constrains | 75% | #290 nudging fixed; Linux multi-layer edits (#491) |
|
||||
| Numeric entry | Scrubbable values, typed entry with Tab / Shift+Tab, angle revolutions, Escape cancels, non-finite rejected | 85% | `ui_angles`, `ui_inline_edit` (#93, #141, #361); rename arrows on Linux (#488) |
|
||||
| Effect Controls | After Effects' twirl-downs, angle dial, point crosshair, eyedropper, curves/levels editors, effect menu on right-click | 70% | `ui_effect_controls`, `ui_fx_editors`; 26.5 rebuilt this panel with icon controls and effect colour labels, not matched |
|
||||
| Context menus | Layer, property, Project, Timeline empty area, work area, labels with colours | 80% | `ui_blank_context_menus`; #227, #290, #407 fixed |
|
||||
| Keyboard shortcuts | After Effects' defaults; Keyboard Shortcuts editor that rebinds and saves sets | 75% | Shortcut editor in Settings; adding shortcuts fails on Linux (#467); requests for more (#428, #336); no shortcuts for scripts |
|
||||
| Drag and drop | Project → Timeline / viewer / New Comp / Render Queue; effects onto layers; files from the OS | 65% | `ui_drag_drop`; OS drops fail on Wayland (winit) and some Linux setups (#268); multi-file drops (#552, #351); crash dragging over the import dialog (#511) |
|
||||
| Text editing on canvas | Point and paragraph text, per-character styles, Character / Paragraph panels, OpenType and variable axes | 70% | `ui_text_edit`; paragraph alignment inverted (#316); font search by typing (#583); toolbar font options (#550); variable-font filter (26.3) |
|
||||
| Preview feel | Spacebar / Numpad 0 previews, RAM preview, cache bars, adaptive resolution | 55% | `ui_ram_preview`, `ui_live_preview`; stutter (#595, #304), scrubbing lag (#329), Shift+Space default (#551) |
|
||||
| Home screen, Learn, templates | Home with recent projects, template gallery, interactive Learn tutorials | 70% | Layout nitpicks (#581); Home literals untranslated (#574) |
|
||||
| Quick Apply (26.2) | Search to apply effects, presets or commands | partial | A command palette exists; not After Effects' Quick Apply |
|
||||
| Accessibility | AccessKit enabled; focus labels tested | 20% | No screen-reader pass, keyboard-navigation audit or contrast check |
|
||||
| UI scale | Settings ▸ Appearance ▸ UI Scale 75–200% | beyond | After Effects follows the system's scaling (#284) |
|
||||
|
||||
## Estimate
|
||||
|
||||
**≈ 60–120 h**: the open interaction issues above (25–45 h, about 0.2–0.5 h each with a scripted
|
||||
test), 3D gizmos 8–15 h, multi-monitor panels 10–20 h, the 26.x interface changes 10–20 h, an
|
||||
accessibility pass 15–30 h. Checking feel against After Effects needs the owner's Mac with After
|
||||
Effects running; most of the rest parallelises.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | First UI parity checklist |
|
||||
Reference in new issue
Block a user