mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-14 11:17:01 -04:00
2.8 KiB
2.8 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
- Read
plan/STATUS.md(current milestone, next unchecked task, blockers). - Read the task in
plan/execution-plan.md§3, the relevant section ofplan/architecture.md, and the README/docs of the crate you touch. Visual/behaviour reference:plan/premiere/. - Follow the autonomous operation protocol (
plan/execution-plan.md§7). Don't stop to ask unless §7 lists the decision as the user's.
plan/ is gitignored (local-only).
Non-negotiables
- 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, optional, behind traits. - Layering (
plan/architecture.md§3, 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 wasm(L0–L5 changes). - 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/. - 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).