diff --git a/CLAUDE.md b/CLAUDE.md index 979931a4..9c1e9b28 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # EffectCraft — instructions for agents -EffectCraft is a clean-room, open-source, pure-Rust motion graphics and visual effects compositor targeting Adobe After Effects parity (and beyond). Native on macOS, Windows, Linux; web via WASM. Sibling of `../photocraft` (Photoshop), `../printcraft` (Acrobat), `../drawcraft` (Illustrator), `../filmcraft` (Premiere), `../lightcraft` (Lightroom) and `../designcraft` (InDesign), with the same conventions. +EffectCraft is a clean-room, open-source, pure-Rust motion graphics and visual effects compositor targeting Adobe After Effects parity (and beyond). Native on macOS, Windows, Linux; web via WASM. Sibling of `../photocraft` (Photoshop), `../printcraft` (Acrobat), `../vectorcraft` (Illustrator), `../filmcraft` (Premiere), `../lightcraft` (Lightroom) and `../designcraft` (InDesign), with the same conventions. ## Start every session here `plan/` is maintainer-local (gitignored). Public equivalents: [`ROADMAP.md`](ROADMAP.md), [`docs/`](docs/). diff --git a/README.md b/README.md index 3a9cabbc..01d1b6c2 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@
A free, open-source compositor in the spirit of After Effects: compositions, layers, - keyframes, 259 effects, layer styles, expressions, 3D cameras and lights, and a render queue, native on macOS, - Windows and Linux, and in the browser later on. Young, moving fast, and already usable. + keyframes, 306 effects, layer styles, expressions, 3D cameras and lights, and a render queue, native on macOS, + Windows and Linux, and in the browser. Young, moving fast, and already usable.
@@ -78,8 +78,8 @@ then to go further in a few places where it matters to us: - **Everything is scriptable.** Every menu item, timeline drag and property edit goes through one command registry, so the same actions are reachable from a command line, a JSON control channel and an MCP server for agents. -- **No FFmpeg.** Video and audio decoding and encoding come from FilmCraft's own pure-Rust - codecs. +- **No FFmpeg.** Video and audio decoding and encoding are pure Rust: FilmCraft's codecs and + EffectCraft's own VP9, AV1, HEVC and Opus encoders. ## Animate @@ -108,7 +108,7 @@ Paragraph, Align, Info, Preview, Audio and the Render Queue, docked the way you ## Effects -259 effects across After Effects' categories, each with its parameter names, order and +306 effects (every one of After Effects' 298, and more) across its categories, each with its parameter names, order and defaults: blur and sharpen, channel, color correction (Curves, Levels, Hue/Saturation, Lumetri Color…), distort (Warp, Bulge, Turbulent Displace, CC Power Pin…), generate (Fractal Noise, Gradient Ramp, Stroke, Write-on, Audio Spectrum…), keying, matte, noise and grain, perspective, @@ -136,12 +136,13 @@ tools, and Front, Top, Left and Custom views. ## Export A Render Queue like After Effects', with Render Settings and Output Modules: **H.264** MP4 and -**ProRes** MOV (Proxy to 4444 XQ with alpha) with audio, **WebM** (VP9 with inter frames and -alpha, Opus), PNG, JPEG, TIFF and 32-bit EXR sequences, animated GIF and WAV/AIFF. Field +**ProRes** MOV (Proxy to 4444 XQ with alpha) with audio, **HEVC** (Main / Main 10) and **AV1** +MP4, **WebM** (VP9 with inter frames and alpha, or AV1; Opus audio), PNG, JPEG, TIFF and 32-bit EXR sequences, animated GIF and WAV/AIFF. Field rendering with 3:2 pulldown, effect/solo/guide/depth overrides, crop, region of interest and resize, Render Settings and Output Module templates with defaults, post-render actions, storage -overflow and render logs. The same queue runs from the command line. Every encoder is -FilmCraft's pure-Rust code; there is no FFmpeg inside. +overflow and render logs. The same queue runs from the command line. Every encoder is pure +Rust (FilmCraft's H.264, ProRes and AAC; EffectCraft's own VP9, AV1, HEVC and Opus); there is no +FFmpeg inside. **Lottie** goes both ways: File ▸ Export ▸ Lottie JSON… writes a composition (precomps, shape, solid, image, text and null layers, eased and spatial keyframes, masks, track mattes, blend @@ -188,10 +189,12 @@ tests, layering, asset attribution and the WebAssembly build). See [CONTRIBUTING ## Where it stands EffectCraft is young. The core of After Effects is in place and gets deeper every week: what is -done and what comes next is in the [ROADMAP](ROADMAP.md). Not there yet: Roto Brush, Warp -Stabilizer and the 3D camera tracker, Advanced 3D, on-canvas text editing and GPU compositing. The web build -([docs/web.md](docs/web.md)) runs the full app in the browser, single-threaded for now. Projects -are saved as `.ecproj`, readable versioned JSON; After Effects `.aep` files cannot be opened. +done and what comes next is in the [ROADMAP](ROADMAP.md). Still to come: learned models for +Roto Brush and face tracking (both use classical methods today), GPU versions of the remaining +CPU-only effects, the Advanced 3D Extended Viewer, and shared-memory threads in the web build. The +web build ([docs/web.md](docs/web.md)) runs the full app in the browser, with renders, analyses +and viewer frames in Web Workers. Projects are saved as `.ecproj`, readable versioned JSON; After +Effects `.aep` files cannot be opened. ## How it's made diff --git a/ROADMAP.md b/ROADMAP.md index c02dd556..a4986fc1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -15,11 +15,11 @@ once. | M6 | Shapes, masks and footage: shape operators, masks and the pen tool, video and image import | Done | | M7 | 3D: 3D layers, cameras, lights, shadows, depth of field, 3D views and camera tools | In review | | M8 | Expressions with the After Effects object model | Done | -| M9 | Text and effects: text animators, layer styles, 259 effects incl. time and audio effects | Done (range, wiggly and expression selectors, per-character 3D, text on a path) | +| M9 | Text and effects: text animators, layer styles, 306 effects (all 298 of After Effects') incl. time and audio effects | Done (range, wiggly and expression selectors, per-character 3D, text on a path) | | M10 | Export: render queue, H.264, ProRes, image sequences, GIF, audio | Done | -| M11 | Animation tools: audio playback, meters and waveforms, Lottie import and export (done); presets, Motion Sketch, Wiggler | In progress | -| M12 | Performance: layer cache and parallel compositing (done), GPU compositing, disk cache, motion tracking | In progress | -| M13+ | Puppet, paint, roto, motion tracking, a plugin API | Planned | +| M11 | Animation tools: audio playback, meters and waveforms, Lottie import and export, presets, Motion Sketch, Wiggler, Smoother | Done | +| M12 | Performance: layer cache, parallel and GPU compositing, disk cache, motion tracking (done); GPU versions of the remaining CPU-only effects | Mostly done | +| M13 | Puppet tools, paint, Roto Brush, motion tracking, a plug-in API, Timeline depth | Done (Roto Brush and face tracking use classical models; learned models are still to come) | | M15 | The web app (WebAssembly, WebGPU) | Done: browser storage, Web Audio, renders and analyses in Web Workers, offline install ([docs/web.md](docs/web.md)) | | M14 | Built for agents: MCP server, command-line tool, control channel; Settings, keyboard shortcut editor, auto-save and crash recovery ([docs/preferences.md](docs/preferences.md)) | Done | @@ -29,7 +29,7 @@ Measured feature by feature in [docs/parity.md](docs/parity.md) (3 October 2026) - **≈ 94% of After Effects' features, weighted by importance**, counting partial features as half done (≈ 98% with per-feature fractions): 80 of 92 features done, 12 partial, none missing; all - 298 After Effects effects (42 still simplified). + 298 After Effects effects, every one implemented in full. - **≈ 19–22 agent-hours of work remain**: about **4–5 hours of wall-clock time** with five Claude Opus 5.5 agents in parallel, ≈ 3 hours for the essentials and daily-use features. - Hardest remaining pieces: the web app's threading, wider GPU effect coverage, Advanced 3D diff --git a/docs/parity.md b/docs/parity.md index 6ae2353f..0032e539 100644 --- a/docs/parity.md +++ b/docs/parity.md @@ -10,7 +10,7 @@ How close EffectCraft is to After Effects 2026, feature by feature, and how much | Unweighted | ≈ 94% (half-credit) / 98% (fractions) | | P0 / P1 / P2 | ≈ 96% / 92% / 85% (half-credit); 99% / 97% / 96% (fractions) | | Features done / partial / missing | 80 / 12 / 0 of 92 | -| **Effects** | **298 of 298** After Effects 2026 effects exist; 42 still simplified ([effects.md](effects.md)); 166 run on the GPU | +| **Effects** | **298 of 298** After Effects 2026 effects exist, all implemented in full ([effects.md](effects.md)); 166 run on the GPU | | Disabled menu entries left | 0 (the stub list is empty) | | Remaining work | ≈ 19–22 agent-hours at the pace measured so far (≈ 58 on the conservative audit scale) | | **Wall-clock estimate** | **≈ 4–5 hours** with five agents in parallel; ≈ 3 hours for 100% of P0 + P1 | diff --git a/docs/preferences.md b/docs/preferences.md index a1123e37..bd2da7e8 100644 --- a/docs/preferences.md +++ b/docs/preferences.md @@ -13,8 +13,8 @@ The model is `effectcraft_engine::prefs::Prefs`: serde, versioned (`version`), a keys (`general.undoLevels`, `autoSave.intervalMinutes`, `labels.3.name`). It is stored as `prefs.json` through the session's `ConfigStore` (the desktop app uses the platform config directory: `~/Library/Application Support/EffectCraft` on macOS, `%APPDATA%\EffectCraft` on -Windows, `$XDG_CONFIG_HOME/effectcraft` on Linux; the web app can back the same trait with -`localStorage`). Loading migrates older layouts, keeps unknown keys (from newer versions) and +Windows, `$XDG_CONFIG_HOME/effectcraft` on Linux; the web app keeps it in browser storage: the +Origin Private File System, or IndexedDB where OPFS can't write, see [web.md](web.md)). Loading migrates older layouts, keeps unknown keys (from newer versions) and falls back to defaults for values that don't parse. Commands (CLI, MCP, control channel): @@ -90,6 +90,8 @@ Commands (CLI, MCP, control channel): Effect Controls / Properties the layer's - `appearance.cycleMaskColors`: new masks cycle through the mask colours (off: all the first) - `appearance.useGradients`: soft gradient on panel tab strips +- `appearance.inWindowMenuBarMac`: on macOS, draw the menu bar inside the window instead of the + native menu bar - `grids.gridStyle`, `grids.guideStyle`: lines, dashed lines or dots (grid, proportional grid, guides); `grids.proportionalHorizontal` / `grids.proportionalVertical`: View ▸ Show Proportional Grid divisions