3.7 KiB
FilmCraft — instructions for agents
FilmCraft is a clean-room, open-source, pure-Rust non-linear video editor targeting Adobe Premiere Pro parity (and beyond). Native on macOS, Windows, Linux; web via WASM. Sibling of ../photocraft (Photoshop), ../printcraft (Acrobat) and ../drawcraft (Illustrator), with the same conventions.
Start every session here
plan/ is maintainer-local (gitignored, not in the repo). Each step names the public equivalent to use if you don't have it.
- Read
plan/STATUS.md(current milestone, next unchecked task, blockers). Public:ROADMAP.md. - Read the task in
plan/execution-plan.md§3, the relevant section ofplan/architecture.md, and the README/docs of the crate you touch. Public:docs/architecture.md,docs/contributing.md,docs/testing.md. Visual/behaviour reference:plan/premiere/(local only, never committed). - Follow the autonomous operation protocol (
plan/execution-plan.md§7; public summary:docs/agents.md§5–7). Don't stop to ask unless it lists the decision as the user's.
Non-negotiables
Read AGENTS.md first; its rules override everything here. In particular (§1): never use Adobe iconography, images or any other Adobe asset. Every asset must be openly licensed (OSS / public domain / Creative Commons, or original work by a contributor) and must have a <file>.attribution sidecar plus an entry in ATTRIBUTION.md. cargo xtask assets enforces this.
- Clean-room. Never read/disassemble anything inside Adobe app bundles (names/listings only). Never copy Adobe icons, presets, LUTs, fonts. Never copy GPL/LGPL/AGPL code (FFmpeg, x264, x265, MLT, Kdenlive, Shotcut, Olive, LAME…). ffmpeg/ffprobe run only as external test oracles / fixture generators — never linked or shipped.
- Pure Rust in the product. OS media APIs only via Rust bindings in
crates/platform(planned; not created yet), optional, behind traits. - Layering (
docs/architecture.md§1, enforced bycargo xtask layers): nothing below L5 depends on egui/eframe/winit/rfd/cpal. L0 codec/container crates depend only onfilmcraft-bitstream. - Exact time: all time is
filmcraft_time::Tick(254 016 000 000/s). Never use f64 seconds for edit math. - Everything is a command (
crates/engine): id, label, menu path, shortcut, params, enabled(), run(). UI, CLI, control channel and MCP all dispatch by id. - Everything is agent-drivable: every interactive widget registers an automation id; UI state is serde so the control channel can read/set it.
- Quality gates before every commit:
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspace,cargo xtask layers,cargo xtask assets,cargo xtask wasm(checks L0–L4 crates).cargo xtask ciruns them all. - Commits: one task id per commit (
M2.4: CABAC residual decoding). Only green states. End messages with the attribution line required by the environment.
Running and looking at the app
cargo run -p filmcraft -- --control 9876opens the desktop app with the JSON-lines control server (seedocs/control-protocol.md).- For UI work, look at the result: drive via the control channel and take
ui.screenshot, compare withplan/premiere/screenshots/(maintainer-local; seedocs/agents.md§3). - Parallel agents: separate git worktrees and
CARGO_TARGET_DIR=target/agent-<name>; keep everyCargo.tomlvalid at all times (thecrates/*glob means one broken manifest breaks everyone). - Test fixtures: generate with ffmpeg into
target/fixtures/(never commit media). Seedocs/testing.md.