Commit Graph
32 Commits
Author SHA1 Message Date
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 ThomasandClaude Opus 5.5 fb6b3aa680 M9.1: Character panel parity (V/H scale, baseline shift, stroke order, small caps); layer.setText keys for them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:03:37 -04:00
Brandon ThomasandClaude 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 ThomasandClaude Opus 5.5 5a308a6964 M0.9: Info panel shows selected layer Duration / In / Out (AE)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:01:39 -04:00
Brandon ThomasandClaude Opus 5.5 89f10ba11f M3.1: AE Solid Settings dialog (lock aspect, % of comp, frame aspect, Make Comp Size)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:58:38 -04:00
Brandon ThomasandClaude Opus 5.5 9d70623624 M3.1: AE Composition Settings dialog (Basic/Advanced/3D Renderer, AE presets, pixel aspect, start timecode, resize anchor)
engine comp.settings/comp.new: anchor (shifts unparented layers and their
position keys on resize), startTime/startTimecode, renderer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:57:08 -04:00
Brandon ThomasandClaude Opus 5.5 7f43d537ed M14.1: ship .mcp.json (headless + bridge servers)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:49:20 -04:00
Brandon Thomas b307a562ed Merge branch 'worktree-agent-aaed9f382307fbe0b'
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-01 21:49:02 -04:00
Brandon ThomasandClaude Opus 5.5 a99be1499f M0.9: Effect Controls parity — sliders behind param twirls with range labels, About... header, no hex; headless snapshot feeds synthetic input
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:45:01 -04:00
Brandon ThomasandClaude 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 ThomasandClaude Opus 5.5 62cfa66496 M0.9: Project panel parity — sortable columns (folders mixed by name), Frame Rate column, Size = file size, AE durations
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:38:34 -04:00
Brandon ThomasandClaude 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 ThomasandClaude Opus 5.5 4f47a01fed M0.9: AE-style Properties panel, context tab titles, AE default workspace; headless UI snapshot tool
- Properties panel (panels/properties.rs): Layer Transform with keyframe navigator
  or stopwatch, AE value formatting (integers, %, Nx+N° rotation), linked Scale,
  Reset; Text (font/style/size/leading/tracking/stroke, fill/stroke toggles);
  Paragraph (7 alignments); Text Animation > Add Animator; scrolling.
- Tabs name what they show: Composition <comp>, <comp> timeline, Effect
  Controls <layer>, Properties: <layer>.
- Default workspace: full-height right column, Preview over Properties.
- engine: time.go nextKey/prevKey accept prop uid; layer.setText supports all
  seven justify modes, applyFill/applyStroke and Auto leading (fixes the
  Paragraph 'justify' button mapping to Justify All).
- examples/snapshot: render the real UI headless (egui_kittest + wgpu) with
  scripted control-channel steps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:19:23 -04:00
Brandon ThomasandClaude Opus 5.5 214345df13 control: keep channel responsive when window is covered (disable App Nap); fail fast on occluded screenshots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:49:29 -04:00
Brandon ThomasandClaude Opus 5.5 9f0cfb3373 M0.1: cargo xtask (layers, assets, wasm, ci); attribute ArtCraft brand marks
Layer table matches the real dependency graph; wasm check passes for all
L0-L4 crates and the egui UI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:49:29 -04:00
Brandon ThomasandClaude Opus 5.5 dee16181fe engine: explicit layer/prop params bypass selection-based enablement
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:51:38 -04:00
Brandon ThomasandClaude Opus 5.5 3a59a8470d M0.9–M0.10: egui frontend (AE-style panels, viewer, timeline, effect controls, dialogs), desktop app with control channel, host wiring; cargo fmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:48:31 -04:00
Brandon ThomasandClaude Opus 5.5 e2ba01a11f Merge expressions engine (boa)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:40:22 -04:00
Brandon ThomasandClaude Opus 5.5 58b137991b Re-export color/geom from engine; kurbo_path helper
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:40:10 -04:00
Brandon ThomasandClaude Opus 5.5 4ce50e00a0 M8: expressions engine (boa) with AE object model
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:39:02 -04:00
Brandon Thomas 989c4ba531 Merge branch 'worktree-agent-a23886a31ccc16878' 2026-10-01 14:32:21 -04:00
Brandon ThomasandClaude Opus 5.5 0ec4605a32 M0.6: content bounds helpers for viewer handles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:32:21 -04:00
Brandon ThomasandClaude Opus 5.5 4c3b92723b M9.2: effects batch 2 (keying, matte, channel, stylize, noise, perspective, transitions, utility)
Adds 105 effects in new modules (keying, matte, channel, blur2, color2, stylize2, noise, generate2, distort2, perspective, transition, utility) plus shared plane/morphology/guided-filter helpers in util.rs, with 96 new unit tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:30:57 -04:00
Brandon ThomasandClaude Opus 5.5 426f153794 Merge media import (FilmCraft codecs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:29:17 -04:00
Brandon Thomas 3feab9db97 Merge branch 'worktree-agent-a9f473e3a56abd824' 2026-10-01 14:28:25 -04:00
Brandon ThomasandClaude Opus 5.5 c361a9348a Cargo.lock for engine/CLI
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:28:25 -04:00
Brandon ThomasandClaude 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
Brandon ThomasandClaude Opus 5.5 d867178137 M6.8: media import via FilmCraft codecs (probe, frame cache, stills, sequences)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:28:14 -04:00
Brandon ThomasandClaude Opus 5.5 ba2fa1bddf M6.2: shape path operators (round corners, offset, twist, zig zag, wiggle, merge paths, gradient stroke)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:26:28 -04:00
Brandon ThomasandClaude Opus 5.5 808cd490cd M0.1–M0.7: workspace, time/geom/color/keyframe/project/raster/path/text/effects/render crates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:05:20 -04:00
Brandon Thomas 9f19158a59 first commit 2026-10-01 12:48:39 -04:00