Brandon Thomas
5077aafffc
Merge branch 'worktree-agent-afea1146abae6192c'
...
# Conflicts:
# apps/effectcraft-cli/Cargo.toml
# apps/effectcraft-cli/src/main.rs
# crates/render/src/lib.rs
2026-10-01 22:35:20 -04:00
Brandon Thomas
b168d902c7
Merge branch 'worktree-agent-a45c0c688bf960993'
...
# Conflicts:
# Cargo.lock
# apps/effectcraft-cli/Cargo.toml
# apps/effectcraft-cli/src/main.rs
# crates/host/src/lib.rs
# crates/ui-egui/src/panels/mod.rs
2026-10-01 22:29:58 -04:00
Brandon Thomas and Claude Opus 5.5
7f9c3a85c0
M10: render queue + export
...
- crates/export (effectcraft-export): render a comp's span to H.264 MP4 (+AAC),
ProRes 422/4444 MOV (+PCM, alpha), PNG/JPEG/TIFF/EXR sequences and animated GIF
via FilmCraft's pure-Rust encoders and MP4/MOV muxer; parallel batched frame
rendering, progress callback with cancellation.
- project: Render Queue model (Render Settings, Output Module, output path
templates, status) saved with the project.
- render: FootageSource::audio hook + comp audio mixdown (levels, in/out, solo,
precomps); media implements it.
- engine: Exporter hook, background/blocking render job, renderQueue.* commands
(add Cmd+M, remove, setRender, setRenderSettings, setOutputModule, setOutput,
move, duplicate, render, stop, list, formats).
- host wires the exporter; CLI `render` subcommand.
- ui-egui: After Effects-style Render Queue panel with automation ids.
- tests: encode/decode round trips for every format (FilmCraft decoders,
ffmpeg/ffprobe oracle when installed), audio, cancel, engine commands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 22:02:06 -04:00
Brandon Thomas and Claude Opus 5.5
c672e03160
M14.1: MCP server + agent CLI
...
- crates/automation (L5, no egui): hand-rolled JSON-RPC 2.0 MCP server over
stdio (initialize, ping, tools/list, tools/call); headless backend (in-process
Session) and bridge backend (desktop control channel). Tools: list_commands,
execute_command, get_project/comp/layer, get/set_property, add_keyframe,
render_frame (inline PNG), open/save_project, undo/redo; bridge-only
screenshot, ui_* and raw control passthrough.
- effectcraft-cli: info, commands, exec, run, props, get, set, render-frame,
mcp [--bridge PORT]; --json, --project/--demo/--empty, --save/--save-as.
- engine: prop.get, layer.tree node paths + time, Session::resolve_comp,
render_rgba8, execute_checked (rejects unknown params, lists accepted keys).
- control channel: render.frame; engine.execute runs every engine command
directly (no dialogs, validated params).
- docs: control-protocol.md, agents.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 21:40:31 -04:00
Brandon Thomas and Claude Opus 5.5
a2ff724ac2
M12.1: render cache + parallel compositing fast paths
...
- render: LayerCache (content-keyed processed-layer cache: source -> masks ->
effects, keyed by a hash of the layer's non-transform props evaluated at the
frame time, solid item, switches, scale; time folded in for clock-driven
effects / wiggle paths). Static and transform-only layers render once;
edits only re-render the edited layer. Session + UI frame jobs share it.
- effects: TIME_DEPENDENT list + test that every clock-reading effect is listed.
- raster: affine composite fast path (per-row span clipping, unchecked interior
bilinear, integer-translation copies, inlined Normal blend), checked against
composite_warp_reference; box/Gaussian blur without transposes, two
ping-pong buffers; accumulate_warp so motion blur sums into one buffer
instead of one full-frame image per sub-sample.
- ui: viewer frame is urgent and jumps the prefetch queue; stale-revision jobs
are dropped; paused prefetch waits for the viewer frame; "Frame Render Time"
reports viewer frames only; parallel f32 -> Color32 conversion.
- cli: `frame --bench N` (per-layer/per-effect timings, wall + CPU time) and
`frame --bench-play N` (consecutive frames with/without the layer cache).
- tests: cache transparency (scrub, edits of values/keys/effects/masks/
solids/text/timing), hit/miss accounting, time-dependent effects, demo
cached == uncached, fast warp/blur/accumulate == reference.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 21:34:33 -04:00
Brandon Thomas and Claude Opus 5.5
76ac3f74f7
M7.1: Classic 3D renderer, cameras, lights, 3D views and camera-tool commands
...
- render/three_d: camera eval (one/two-node, DOF), default 50mm comp camera,
orthographic Front/Left/Top/Back/Right/Bottom + perspective Custom Views,
orbit/pan/dolly rig math; lights (parallel/spot/point/ambient, falloff,
cone feather) and material shading; per-pixel depth-sorted compositor for
3D runs (exact intersections, perspective-correct sampling, blend modes,
track mattes, motion blur), ray-cast planar shadows with transmission and
diffusion, per-layer DOF blur. RenderOpts.view camera override.
- project: camera iris/highlight props, aperture per comp width, light
orientation/rotations, two-node auto-orient defaults.
- engine: layer.newCamera/newLight with presets & settings,
layer.cameraSettings/lightSettings (Layer Settings dispatches),
view.set3DView + View > Switch 3D View items (F10/F11/F12), last/reset view,
camera.orbit/pan/dolly, view.get3D; EditorState.views3d.
- demo: "3D Showcase" comp (camera move, key spot + ambient fill, shadows,
DOF, intersecting planes, gridded floor).
- tests: projection, depth order, intersections, lighting, shadows, DOF,
views, rig math; command undo/redo. Fix a few pre-existing clippy lints.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 21:09:21 -04:00
Brandon Thomas and Claude Opus 5.5
6a5a2d9689
M0.8: engine session, undo history, ~100 commands, demo project; headless CLI
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 14:28:21 -04:00