mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-13 15:09:03 +00:00
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>
4.4 KiB
4.4 KiB
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), ../pdfcraft (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, docs/.
- Read
plan/STATUS.md(current milestone, next task, running agents, blockers). - Read the task in
plan/execution-plan.md§3, the relevant section ofplan/architecture.md, and the crate README/docs you touch. Feature ids:plan/aftereffects/feature-catalog.md; effects:plan/aftereffects/effects-list.md; UI reference:plan/aftereffects/README.md. - Read
docs/gaps.md: every known shortfall, ranked, and the prioritised workstreams; the numbers are indocs/target-app-parity.md. Fidelity, reliability and stability (G1–G3) come before new features. - Follow the autonomous operation protocol (
plan/execution-plan.md§7). Don't stop to ask.
Non-negotiables
Read AGENTS.md first; its rules override everything here. No Adobe assets, every asset licensed + attributed (cargo xtask assets).
- Never crash (AGENTS.md "Never crash"; outranks feature work: a crash loses people's work). Non-test code has no
unwrap()/expect()/panic!/unreachable!/todo!/unimplemented!and nounsafe: returnResultand use?,ok_or,let … else. Input-derived indices, slices and arithmetic useget()and checked/saturating math; recursion is depth-limited; locks handle poisoning. The app's last-resort guard turns an escaped panic into an error and keeps the document. Every crash fix gets a regression test. Standard: craftrulesstandards/never-crash.md. - Clean-room. Behaviour and public docs only. No GPL/LGPL/AGPL code. ffmpeg only as an external test oracle.
- Pure Rust. Media codecs come from FilmCraft crates (git deps behind
crates/media, seeplan/adr/0001). - Layering (
cargo xtask layers): nothing below L5 depends on egui/eframe/winit/rfd/cpal; L0–L4 build for wasm32. - Exact time:
effectcraft_time::Tick(254 016 000 000/s). Keyframe times are layer time. - Property tree: everything animatable is a
Propertyin the layer'sPropGrouptree, addressed by paths (transform/position,effects/#1/blurriness,@uid). - Everything is a command (
crates/engine): id, label, menu path, shortcut, params, enabled(), run(). UI, CLI, control channel and MCP dispatch by id. - Everything is agent-drivable: every interactive widget registers an automation id; UI state is serde.
- Community links (Help menu, About, header Discord button): https://discord.gg/artcraft, https://getartcraft.com, https://getartcraft.com/apps/effectcraft, https://github.com/storytold/effectcraft.
- Quality gates before every commit:
cargo xtask ci(fmt, clippy -D warnings, tests, layers, assets, wasm). - Commits: one task id per commit (
M6.3: trim paths). Only green states.
Running and looking at the app
cargo run -p effectcraft -- --control 9877opens the desktop app with the JSON-lines control server (docs/control-protocol.md).- For UI work, look at the result. Headless (no window, works while the user is busy on the machine):
cargo run -p effectcraft-ui-egui --example snapshot -- --out ui.png --step '{"method":"engine.execute","params":{"command":"layer.select","params":{"layers":["#2"]}}}'(steps are control-channel requests;--script steps.jsonl;{"method":"snap","params":{"path":…}}for intermediate shots). Or drive the live app via the control channel and takeui.screenshot(needs the window visible on screen). - After Effects reference: drive AE via ExtendScript (
osascript -e 'tell application "Adobe After Effects 2026" to DoScriptFile "x.jsx"') and capture only AE's window (screencapture -l <windowid>); keep captures inplan/aftereffects/ref/(gitignored), never commit them, never capture the Home screen. - Parallel agents: separate git worktrees and
CARGO_TARGET_DIR=target/agent-<name>; keep everyCargo.tomlvalid (thecrates/*glob).