mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-26 19:18:14 -06: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:
co-authored by
Claude Opus 5.5
parent
1446e27d85
commit
1e61b4e04b
+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
File diff suppressed because one or more lines are too long
@@ -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