Brandon Thomas and Claude Opus 5.5
32c53aa35e
av1enc tests: decode with a single-threaded filmcraft-av1 decoder
...
FilmCraft's AV1 decoder now frame-threads by default, so a picture may
come out of a later decode call; the round-trip check wants each
packet's picture from its own call.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 00:15:39 -04:00
Brandon Thomas
d3a7777939
Merge branch 'main' into worktree-agent-a139f16b3a4130998
2026-10-03 23:57:57 -04:00
Brandon Thomas and Claude Opus 5.5
cc5c831c0a
media: WebM VP9 alpha imports as straight alpha (FilmCraft 2c5ba7a)
...
Bump the FilmCraft crates from 89cfbf2 to 2c5ba7a (118 commits; no API
changes needed here), whose Matroska reader now decodes the VP9 alpha
stream from BlockAdditions. The compositing QA scenario now checks that
WebM renders round-trip their alpha like ProRes 4444.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 23:57:57 -04:00
Brandon Thomas
8ea5b861ed
Merge branch 'worktree-agent-acd022ffe72ec3783'
2026-10-03 19:08:20 -04:00
Brandon Thomas
7d9f369a5e
Merge branch 'main' into worktree-agent-acd022ffe72ec3783
...
# Conflicts:
# docs/parity.md
2026-10-03 18:35:29 -04:00
Brandon Thomas and Claude Opus 5.5
1b726349ab
M13.24: web app depth (WEB-1) — GPU effects in frame workers, OPFS disk cache, storage manager
...
- GPU in the browser: each frame worker opens its own WebGPU device (Gpu::request_deferred) and
renders the GPU compositor and GPU effects with deferred readbacks (effectcraft-gpu deferred):
readbacks keyed by content start with map_async and miss, the pass returns placeholders, the
layer cache's gate drops inserts, and FrameServer::resume renders again once the device
delivered. Backend Auto times whole frames per comp in the workers. Frames with effects go to
GPU workers instead of the page. CPU fallback without WebGPU in workers (?nogpuworkers).
- Fix: a WGSL constant (3.40282347e38) that Chrome rejects invalidated every GPU kernel in Chrome
(the page's compositor too); a test checks every float literal fits f32.
- Disk cache in the Origin Private File System: workers write sealed frame entries with sync
access handles (temp file + move), the page keeps the DiskIndex (LRU under the settings' limit,
at most half the quota) and reads hits instead of rendering; survives reloads; blue cache bar.
- Storage manager: Settings ▸ Disk ▸ Browser Storage (usage/quota, persistent storage, Clear
buttons, automation ids) and storage.info / storage.persist / storage.clear (StorageHost).
- Docs: web.md (GPU workers, deferred passes, disk cache, storage manager, threading design:
one engine instance per worker), architecture, preferences, parity (WEB-1), roadmap.
- Tests: deferred passes vs CPU on a real device, placeholder gating, frame server passes and
Auto, GPU worker routing + disk cache across a reload, storage commands and widgets, store
usage by kind; smoke test: GPU effect frames in workers with pixel parity, disk hits after a
reload, storage manager.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 18:35:03 -04:00
Brandon Thomas
bbe29e7c5b
Merge branch 'worktree-agent-aab5c21557d20742c'
2026-10-03 18:20:21 -04:00
Brandon Thomas
bae3ccc410
Merge branch 'main' into worktree-agent-aab5c21557d20742c
2026-10-03 18:14:17 -04:00
Brandon Thomas and Claude Opus 5.5
3881dbb32e
M13.25: Home Templates gallery (thumbnails, open, delete, Save Current as Template), Save as Template and My Custom RGB dialogs, form automation ids; parity update
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 18:14:17 -04:00
Brandon Thomas and Claude Opus 5.5
9e70cde725
M13.25: View > Simulate Output > My Custom RGB (primaries, white, gamma or an RGB ICC profile; kept in Settings; view.customRgb) and File menu entries for templates
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 17:46:41 -04:00
Brandon Thomas and Claude Opus 5.5
b760f1d23a
M13.25: project templates engine — eight original built-in templates with Essential Graphics controls and rendered thumbnails; user .ectemplate templates in the config Templates folder; templates.list/thumbnail/create/saveAs/delete
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 17:37:18 -04:00
Brandon Thomas and Claude Opus 5.5
f256677c8e
Parity audit at 58163a2: ≈98% weighted (99.6% with fractions), 87/5/0, ≈2–2.5 h wall clock left
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 17:26:06 -04:00
Brandon Thomas and Claude Opus 5.5
081ce79de3
Merge M13.14 agent-interface audit + lazy open (worktree-agent-a5f8967ebd42ce98b)
...
The branch's commits say M13.14; on main that id is the puppet work, so this arc is M13.21.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 17:23:10 -04:00
BFlat
58163a28fb
Merge pull request #5 from storytold/docs-accuracy
...
Docs: accuracy pass (README, ROADMAP, parity, preferences)
2026-10-04 01:16:08 +07:00
BFlat
8a7142f9eb
Merge pull request #4 from storytold/timeline-properties
...
Timeline: working rename and twirl arrows, every property shortcut (AA…UU, Alt+Shift keys, Ctrl+`)
2026-10-04 01:16:00 +07:00
bflatastic
2c056ae6cf
Docs: accuracy pass — README (306 effects, the web build ships, HEVC/AV1 export, pure-Rust encoders are FilmCraft's plus our own, an accurate 'still to come' list instead of features that exist), ROADMAP (M11 done, M12 mostly done, M13 done, all effects in full), parity summary (no simplified effects left), preferences (web storage is OPFS/IndexedDB; the in-window macOS menu bar setting), CLAUDE.md (the Illustrator sibling is ../vectorcraft)
2026-10-04 01:13:21 +07:00
bflatastic
f95eface83
M13.20: docs — README (Timeline shortcuts and Puppet tools), control protocol (reveal / keyAt / twirlSelected UI commands, timeline.layer.<id>.row and viewer.puppetPin.<uid> element ids), agents guide (Timeline: layer.arrange above, reveal shortcuts, keys.toggleTransform, rename), architecture (puppet selection, rigging and follow-through; per-thread expression context recovery), parity (M13.17–M13.20)
2026-10-04 01:10:36 +07:00
bflatastic
f9990f7387
M13.20: every Timeline property shortcut — double presses AA (Material Options), PP (paint / Roto Brush / Puppet), SS (selected properties), RR (Time Remap), TT (Mask Opacity), MM (all mask properties; a single M now shows Mask Path), FF (missing effects), EE (expressions) next to LL and UU; Alt+Shift+A/P/S/R/T add or remove a keyframe at the current time on every selected layer in one undo step (keys.toggleTransform: separated X/Y/Z Position, Orientation and X/Y/Z Rotation on 3D layers); Ctrl/Cmd+` twirls the selected layers open or closed (from a reveal, their full tree)
2026-10-04 01:10:33 +07:00
bflatastic
aef72378f8
M13.19: the Timeline's rename field and twirl arrows work — the name field took the keyboard focus every frame (Enter and clicking away could never leave it, which also silenced every single-key shortcut); it now focuses once with the name selected, Enter or a click elsewhere commits, Escape cancels; the layer row's click area sat on top of the twirl arrow and the name field (it was registered after them) and now sits under them; Ctrl-click a layer's arrow opens every group inside
2026-10-04 01:09:20 +07:00
BFlat
ba3748f79e
Merge pull request #3 from storytold/timeline-viewer-fixes
...
Viewer pan no longer snaps back; drag to reorder layers in the Timeline
2026-10-04 00:33:54 +07:00
bflatastic
52cf74e997
M13.18: drag layer rows in the Timeline to reorder them — a line shows where they land, the selected layers move together (an unselected row moves alone), one undo step, nothing for a drop in place; layer.arrange {above: layer} for agents
2026-10-04 00:31:59 +07:00
bflatastic
bb973e2c76
M13.17: the viewer keeps its pan after a middle-button or Hand drag — egui reports no total drag on the release frame, so the pan was recomputed as the drag's start and snapped back
2026-10-04 00:31:59 +07:00
BFlat
bb06a66083
Merge pull request #2 from storytold/puppet-rigging
...
Puppet tools: pin editing, rigging to nulls, follow-through; expression runtime fix
2026-10-04 00:26:24 +07:00
bflatastic
78dceea638
M13.16: docs: parity cites the renumbered puppet tasks (M13.14–M13.16)
2026-10-04 00:22:30 +07:00
bflatastic
a02bcc8441
M13.16: puppet Follow-Through — puppet.follow (Puppet tool bar ▸ Follow-Through…) makes pins trail a leader pin for hair, cloth and overlapping action: each follower's Position adds the leader's displacement from rest delayed by delay (the k-th nearest by k × delay with Cascade), scaled by Amount, keeping its own keyframes; leader = the first selected pin, followers = the others; one undo step; reachable over MCP (execute_command)
2026-10-04 00:19:26 +07:00
bflatastic
6ec177de83
M13.15: rig puppet pins to nulls — Points Follow Nulls / Nulls Follow Points (Window ▸ Create Nulls From Paths, paths.* {pins?}) take selected pins, named pins, or every pin of a layer with no path: a null per Position / Advanced pin drives its Position (fromComp of the null's anchor, so parented nulls rig limbs), or rides on it (toComp of the pin's Position) to carry other layers; one undo step
2026-10-04 00:19:25 +07:00
bflatastic
6869cff51b
M13.14: puppet pin editing — click / Shift-click selects pins (puppet.selectPins), a drag from empty canvas or Alt-drag marquee-selects them, Select All with a pin selected takes every pin of that kind, Delete removes the selected pins instead of their layer; Advanced and Bend pins rotate by their ring and scale by its square (Shift: 15° / 5 % steps, one undo step per drag); ⌘/Ctrl-dragging one of several selected pins records them all; pins in their kind's colour, larger under the pointer; pushpin icons for the five pin tools
2026-10-04 00:19:24 +07:00
bflatastic
244cee4687
M8.1: expressions keep working on long-lived threads — boa leaves values on its VM stack when an exception unwinds through call frames (every pending host request does), so after tens to hundreds of evaluations that read layers or effects every expression on the thread failed with "maximum stack size"; a run that hits the limit now gets a fresh context and is retried once (regression test: 6000 host-reading evaluations on one thread)
2026-10-04 00:19:22 +07:00
Brandon Thomas
91bd8ca7c8
Merge main into M13.14
...
# Conflicts:
# crates/engine/src/lib.rs
# docs/agents.md
2026-10-03 13:13:50 -04:00
Brandon Thomas
9890a82796
Merge branch 'worktree-agent-a6553844386fd3ca8'
2026-10-03 13:10:45 -04:00
Brandon Thomas
56b3917a14
Merge main into M13.15
...
# Conflicts:
# crates/engine/src/commands/essential.rs
2026-10-03 13:00:33 -04:00
Brandon Thomas
8b43adb8a0
Merge main into M13.14
2026-10-03 12:59:27 -04:00
Brandon Thomas and Claude Opus 5.5
e2d7a5a182
M13.15: qa batch tool and reply affordances
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 12:56:58 -04:00
Brandon Thomas and Claude Opus 5.5
12235b5dc5
M13.15: qa project lifecycle; Collect Files makes its folder; agents cookbook
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 12:56:41 -04:00
Brandon Thomas and Claude Opus 5.5
77ab92fb7d
M13.15: qa essential graphics template via CLI script
...
Fill's ADBE Fill-0002 is Color (documented numbering); essential.* controls by name with
a listing error; an explicit comp param satisfies a command's active-comp enablement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 12:30:11 -04:00
Brandon Thomas and Claude Opus 5.5
97329edb39
M13.14: performance section with before/after numbers; test tidy
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 12:17:46 -04:00
Brandon Thomas
9fb375e4b0
Merge branch 'worktree-agent-a4b0610bd14276508'
2026-10-03 12:17:22 -04:00
Brandon Thomas and Claude Opus 5.5
fecf054e5f
M13.15: qa scenarios 1-4 (kinetic type, shape logo, compositing, tracking) and fixes
...
engine.batch + MCP batch tool; layer.newText/newShape name; prop.get evaluated
expression value; keys.select by path with errors; @uid paths; plain-JSON gradients;
addShapeItem/effect.apply return paths; unknown layers error; conform rescales
footage duration; render log name for [###]; render_frame transparent; clearer
mask errors; truncated groups in flat get_layer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 12:09:41 -04:00
Brandon Thomas
9904525591
Merge main into M13.14
2026-10-03 11:50:14 -04:00
Brandon Thomas and Claude Opus 5.5
8a4a2bfc52
M13.14: lazy project open, non-blocking UI with large projects, bench --ops
...
- footage.check: background footage check after File > Open (Progress panel), not an undo step
- timeline: track-matte / parent menus built only while open (was O(n^2) per frame);
expression-row lookup per layer; panels hold Arc<Comp> snapshots instead of deep clones
- Project panel: virtualised vertical scrolling, selection reveal, thumbnails rendered off
the UI thread
- effectcraft-cli bench --ops (engine::perf + ui-egui::bench)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 11:49:55 -04:00
Brandon Thomas and Claude Opus 5.5
39d53108f0
M13.13: docs (parity EFF-5 / PRV-3, architecture GPU section)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 11:04:47 -04:00
Brandon Thomas
a4f4d72f27
Merge branch 'main' into worktree-agent-a4b0610bd14276508
2026-10-03 10:53:00 -04:00
Brandon Thomas and Claude Opus 5.5
750868244a
M13.13: GPU Circle, Ellipse, Iris Wipe, Bevel Alpha, Bevel Edges, Gaussian Blur (Legacy)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:53:00 -04:00
Brandon Thomas
4bfb689f19
Merge branch 'worktree-agent-a0bd45f05d0d6b082'
2026-10-03 10:48:48 -04:00
Brandon Thomas and Claude Opus 5.5
07278305be
M13.11: docs (parity PRV-3, 3D-3, CMP-7, AUT-2; architecture GPU Advanced 3D)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:48:14 -04:00
Brandon Thomas and Claude Opus 5.5
ea292a6e81
M13.13: fuse 8/16 bpc quantise into the layer composite; steady-state bench traffic
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:44:52 -04:00
Brandon Thomas and Claude Opus 5.5
9ff0e5aa3c
M13.13: gpu texture pool, Auto per-comp backend choice, warp-family GPU ports
...
- gpu: pooled working textures (released once every encoder that could read
them is submitted), shared zero images, reused readback staging buffers,
direct readback into Image; NaN-poisoned scratch images under test and
NaN-aware diffs; validation errors panic under test
- render: AutoPick (per comp / scale / path EWMA of CPU vs GPU frame times,
warm-up and periodic re-probe) behind Backend::Auto; viewer uses it too;
cached adjustment footprints (uploaded once)
- gpu fx_warp: Warp, Bezier Warp, CC Bend It, CC Page Turn, Smear, Reshape,
Color Emboss, Cartoon; sliding-histogram median for large radii; CC Power
Pin perspective < 100
- cli: bench --gpu reports Auto and per-frame upload / readback MB
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:31:31 -04:00
Brandon Thomas and Claude Opus 5.5
25aebc11d7
Merge main into M13.11
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:29:28 -04:00
Brandon Thomas and Claude Opus 5.5
cb516c91c3
M13.11: scriptui concave fills, real images, wasm cfg gating
...
onDraw fillPath tessellates any path (non-zero winding trapezoid
decomposition: concave, self-intersecting, holes) instead of egui's
convex-only polygon. ScriptUIImage holds a file path or embedded PNG/JPEG
bytes; drawImage, image controls and icon buttons draw the decoded image.
Script-host thread code (host_main, run_threaded, ToHost::Start) is gated
off wasm32.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:28:56 -04:00
Brandon Thomas
95766755f3
Merge branch 'worktree-agent-a75983ccef1ea55ee'
2026-10-03 10:18:49 -04:00