Brandon Thomas
280f7d509c
M13.4: HEVC / AV1 output modules (MP4 hvc1/av01, WebM AV1), codec + Opus options in engine, UI, CLI
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 05:01:43 -04:00
Brandon Thomas
0ed7bf69af
Merge main into M13.6 panels and content tools (Footage window label on the real panel; no stubs left)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:43:46 -04:00
Brandon Thomas
871362ba96
Merge branch 'worktree-agent-aba044eaf08eded94'
...
# Conflicts:
# crates/render/src/three_d/compose.rs
2026-10-03 03:33:36 -04:00
Brandon Thomas
fa27d000ea
Merge main into M14.5 (settings and menus)
...
Display Color Space setting joins the live list; View3D::Default maps to view.3d.default for
the Assign Shortcut submenu; stub tests use the stubs that remain.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:29:39 -04:00
Brandon Thomas
a5be68499e
Merge main into M13.6 panels and content tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:23:13 -04:00
Brandon Thomas
b29d833b2d
M13.6: Lumetri Scopes, Footage, Media Browser, Metadata, Progress and Content-Aware Fill panels; Content-Aware Fill, Scene Edit Detection, Auto-trace, Align Video to Data
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:12:36 -04:00
Brandon Thomas
b17d2c05e6
Merge main into M14.5 (settings and menus)
...
Reconciled with main's keyframe labels (same Keyframe::label field; keys.setLabel and
keys.selectLabelGroup from main are kept, M14.5's duplicates removed; Edit ▸ Label on
selected keys delegates to the label helper), proxies (RenderOpts::proxy next to
nested_switches/draft_shadows), offloaded renders (Work carries nested_switches), wasm
audio pump (preview mix rate), variable font axes and mask feather points.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:11:45 -04:00
Brandon Thomas
e7fdd6fdbd
Merge main into M12.7 (environment background layers keep their 3D runs on the CPU path)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:03:21 -04:00
Brandon Thomas
f85468c694
M12.7: docs (architecture, parity, gpu crate docs)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:00:29 -04:00
Brandon Thomas
ea3e983876
Merge GPU colour effects into M12.7 (docs/effects.md regenerated: GPU badges)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:54:53 -04:00
Brandon Thomas
01701193c4
M7.7: merge fixes (Exposure param path, remaining stubs list, effects doc)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:51:56 -04:00
Brandon Thomas
91ab3a3fc5
M12.7: GPU colour effects (Color Balance, Vibrance, Lumetri, Black & White, Tritone, Colorama, Channel Mixer, Selective Color, Linear Color Key, Key Light)
...
fx_color kernels mirror the CPU effects operation for operation: one per-pixel
pass for the point effects, Lumetri with its Sharpen luminance blur, and Key
Light's matte pipeline (pre-blur, clip, rollback, despot, shrink/grow, softness,
edge band) as plane passes. CPU fallback: Key Light with Inside/Outside masks or
Hard Colour after Screen Softness, Colorama with Interpolate Palette off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:46:52 -04:00
Brandon Thomas
c8623b1864
M12.7: GPU blur/transition/generate effects (radial, camera lens, CC radial fast, wipes, venetian, cell pattern, checkerboard, grid, 4-color, noise, add grain)
...
Kernels in fx_generate.wgsl mirror the CPU effects; wipe edges use f64
per-column/per-row terms uploaded as (hi, lo) pairs. CPU helpers shared
with the GPU are now public (camera_lens_spans, gen_mode, pattern_kind,
GrainLook, place_layer). GPU tests in tests_fx_generate.rs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:46:09 -04:00
Brandon Thomas
f855a4b55b
M14.5: wire the remaining settings; keyframe assistants and labels; AE menu entries
...
Settings: 56 of 59 not-yet-wired settings now change behaviour (nested-comp switches,
constant vertex count, related-item time sync, match-name pick whip, split-layer order,
Home on open, motion path span, internal wireframes, zoom quality, label-coloured tabs,
mask colour cycling, gradients, grid/guide styles, text engine, font preview/recent/native
names, missing frames, unlabeled alpha, drag import, default output folder, segmenting,
bit depth names, preview sample rate, disk/media/conformed-audio caches, RAM reserve and
low-memory reduction, Video Preview window, 3D reference axes/extended viewer/draft
shadows, script file gate + File.execute warning, expression editor options and error
banner). Three stay display-only and are documented.
Features: Convert Audio to Keyframes, RPF Camera Import (JSON/CSV camera data),
keyframe colour labels + Select Keyframe Label Group, Recent Animation Presets.
Menus: Edit > History, File > Import Recent Footage, Replace Footage > With Layered
Comp, Save a Copy As XML (.ecprojx, opens again), Composition > VR (Create VR
Environment, Extract Cubemap), Assign Shortcut to 3D view / workspace, Window viewer
labels + open viewers, Help > System Compatibility Report / Enable Logging / Reveal
Logging File. Dynamic menu nodes (@dynamic:…) shared by the egui and native menus.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:45:44 -04:00
Brandon Thomas
86b8e24417
Merge branch 'main' into worktree-agent-a15cecfec57d5290d
...
# Conflicts:
# crates/effects/src/ocio.rs
# crates/engine/src/commands/stubs.rs
# docs/parity.md
2026-10-03 02:26:19 -04:00
Brandon Thomas
9994f5d309
M7.7: viewer and colour completion
...
View > Switch 3D View > Default, Split with New Locked Viewer, Use Display Color
Management (sRGB/P3 display in Settings > Previews), Simulate Output (Rec. 709/2020,
P3, sRGB, Linear, NTSC, PAL, Mac 1.8, Custom; Preserve RGB). Project Settings: Color
Engine (OCIO built-in config with ACEScg/ACES2065-1 working spaces), HDR clip/compand/
tone map, output space incl. Rec. 2100 PQ/HLG (SMPTE ST 2084, BT.2100, BT.2408
reference white; GPU curves too), Time Display Feet + Frames (35mm/16mm) display and
entry. OCIO effects read custom .ocio configs (YAML subset; Matrix/File/Exponent/Log/
LogAffine/CDL/Range/Group transforms, roles, displays/views).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:25:56 -04:00
Brandon Thomas
d0197a084c
Merge main into M13.5 long-tail polish
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:35:54 -04:00
Brandon Thomas
e3ae230387
Merge branch 'worktree-agent-a856b07f7d85d575f'
2026-10-03 00:28:01 -04:00
Brandon Thomas
8696d1e9ba
M7.7: camera/light rigs and Advanced 3D motion blur, blend modes, track mattes
...
Layer > Camera > Create Stereo 3D Rig (left/right eye comps with expression-linked eye
cameras, Stereo 3D Controls effect, stereo comp through 3D Glasses), Create Orbit Null,
Create Cameras from 3D Model; Layer > Light > Create Lights from 3D Model
(KHR_lights_punctual), Control Light with Camera, Create Environment Light Background
Layer (equirectangular sky drawn through the camera). glTF cameras and punctual lights
are parsed by effectcraft-model.
Advanced 3D: per-sample motion blur over the comp shutter, and blend modes / track
mattes / Preserve Transparency composited through the 2D path in depth order.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:27:47 -04:00
Brandon Thomas
a4f32f8df2
Merge main into M13.5 long-tail polish
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:25:09 -04:00
Brandon Thomas
08daf72e3f
M13.5: parity notes for the long-tail polish
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:24:37 -04:00
Brandon Thomas
1d965bd596
Merge main into M9.12 effect fidelity work
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:23:15 -04:00
Brandon Thomas
355a6255a2
M9.12: effect parameter fidelity – all categories
...
Align every effect's display name, category, parameter names, order,
twirl-down groups, popup options, units, defaults and ranges with the
public After Effects effect reference, and implement controls that were
ignored or missing where cheap. One commit because the categories share
the registry, migration tables and GPU kernels (only green states).
Infrastructure
- effects::migrate: saved instances are upgraded on project open
(Session::replace_project → upgrade_effects): renamed ids
(PARAM_ID_ALIASES), params moved into twirl-down groups, popup values
remapped by label (POPUP_LABEL_ALIASES), refreshed names/UI hints,
added params created with legacy_default values that keep old renders.
- flatten_params also keys nested props by match path (group/param), so
effects declare grouped params with `group/param` ids; layer-source
companions sit next to grouped layer params.
- lookup() resolves old effect names (EFFECT_NAME_ALIASES).
- Registry-wide test: unique ids/names, non-empty names, defaults in
range, popup defaults within options, value kinds match UI.
- docs/effects.md generated from the registry (catalog.rs) with GPU /
32-bpc badges and per-effect status; a test keeps it current.
Batches
- Blur & Sharpen, Channel, 3D Channel, Perspective, Text, Utility:
Camera Lens Blur iris/highlight groups, Compound Blur layer, Camera-
Shake Deblur method/strength, Invert full channel list (CPU HLS/YIQ),
Set Channels/Set Matte layers, Channel Combiner targets, 3D Channel
Extract clamp/invert.
- Color Correction: temporal smoothing + scene detect for Auto Color/
Contrast/Levels and Shadow/Highlight, Brightness & Contrast legacy
switch, Change to Color tolerance group, Leave Color, Photo Filter
presets, Exposure channels, Levels clip popups, Colorama phase source,
Color Link sample list, Lumetri groups (CPU + GPU kernels).
- Distort: Bulge, Displacement Map layer/behaviour, Magnify, Optics
Compensation resize, Ripple conversion, Transform sampling, Turbulent
Displace types/pinning/evolution, Wave Warp types/pinning, Twirl and
Ripple radius fixes.
- Generate: 4-Color Gradient, Checkerboard, Grid, Circle size/feather/
blending, Advanced Lightning types, Cell Pattern, Radio Waves, Fractal
palettes, Scribble/Vegas names.
- Keying, Matte, Obsolete: Color Difference Key partials/views, Unmult
controls, Key Light groups, Refine Soft/Hard Matte, Roto Brush groups,
Mocha shape moved to Matte, Spill Suppressor accuracy, Basic/Path Text
groups.
- Noise & Grain, Immersive Video, Audio, Time: Fractal/Turbulent Noise
full control set (noise3.rs, GPU), grain look groups, Remove Grain,
VR effects, Compressor/Gate/Distortion controls, Timewarp groups,
VR Sphere to Plane name.
- Simulation: AE twirl-down groups for all simulations, Foam strength,
Particle Playground barrel radius and mapper targets.
- Stylize, Transition: Glow looping/dimensions/alpha (CPU + GPU),
Mosaic averaging, Cartoon groups, Roughen Edges evolution, Texturize
layer, Gradient Wipe layer, Radial Wipe both, Card Wipe options.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:15:06 -04:00
Brandon Thomas
a89a9a3d3c
Merge branch 'main' into worktree-agent-a387e042a6a5de07f
2026-10-03 00:03:49 -04:00
Brandon Thomas
4fffbace5c
M15.2: merge main (disk cache, 3D Camera Tracker); camera analysis in workers; no disk cache on wasm32
...
The 3D Camera Tracker analysis joins the offloaded jobs. The disk cache stays off in the
browser (std::env::temp_dir panics on wasm32 once a config store exists).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 00:03:43 -04:00
Brandon Thomas
cea56a12d8
M0.11: parity summary — sampleImage/footage() and proxies landed (CMP-7, ANM-5, PRJ-8)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:44:06 -04:00
Brandon Thomas
6124bb2125
Merge branch 'main' into worktree-agent-a30d1179d7c8feaca
2026-10-02 23:43:46 -04:00
Brandon Thomas
dbcda2eba9
Merge main into CMP-7/ANM-5/PRJ-8/PRJ-3 work
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:43:41 -04:00
Brandon Thomas
0bee1ab2da
M15.2: web app depth (WEB-1): browser storage, Web Audio, worker renders, WebGPU viewer, PWA
...
- Persistence: settings, shortcuts, recent projects, imported media, saved projects and
auto-saves live in OPFS (IndexedDB fallback) through an in-memory mirror flushed in the
background (apps/effectcraft-web/src/store.rs, persist.rs); ConfigStore gains FileOps so
auto-save / recovery work in the browser store; the session snapshot restores the last
project + editor state on reload; File > Open Recent works from storage.
- Audio: Web Audio output (AudioWorklet, ScriptProcessor fallback) fed by AudioPlayback::pump
on wasm32; A/V sync from AudioContext.currentTime; meters; unlock on first gesture.
- Background jobs: engine::offload (WorkerRequest/WorkerReply protocol, Offload trait,
run_request); Render Queue, tracker, mask tracker, Warp Stabilizer and Roto Freeze run in Web
Workers (a second engine instance on the shared compiled module), progress streamed back;
cancel terminates the worker.
- GPU: WebGPU viewer frames drawn straight from the compositor's texture (gpu_display on
wasm32 when the viewer draws plainly); async readback (Gpu::read_display_async) for pixels.
- PWA: manifest, service worker precaching the build (xtask fills list/version), icons copied
from assets/app-icon; COOP/COEP kept from cached responses; offline reload works.
- window.effectcraft: saveToBrowser, listStored, removeStored, flush; info() reports storage,
audio, gpu, workers.
- Tests: native store + protocol + offload (render, track, cancel) tests; smoke.mjs extended
(GPU path, worker render responsiveness, audio gesture + playback, reload persistence,
Open Recent, offline reload).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:42:00 -04:00
Brandon Thomas
5df98d0982
M0.11: parity audit at fa26ad9 (≈93% weighted; 298/298 effects; ≈11–14 h wall clock left)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:41:28 -04:00
Brandon Thomas
b927964d98
CMP-7: document Essential Graphics, templates, responsive time, proxies and expression data
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:32:13 -04:00
Brandon Thomas
197b27b6f4
Merge main into M12.6 (3D Camera Tracker)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:03:57 -04:00
Brandon Thomas
cba8d7e737
M12.6: 3D Camera Tracker effect + UI
...
Effect > Perspective > 3D Camera Tracker (Shot Type, Horizontal Angle of
View, Show/Render Track Points, Track Point Size, Target Size, Advanced:
Solve Method, Method Used, Average Error, Detailed Analysis, Auto-delete
Points Across Time, Hide Warning Banner); tracks and solve stored in the
effect with keys (frame edits re-track, setting / deleted-point edits only
re-solve). Background job (Analyzing in background (step 1 of 2) / Solving
camera banner, cancel, one undo step). Commands: track.camera (replaces the
stub), camera.analyze/cancel/solveStatus/points/selectPoints/
createFromSolve/create/setGroundPlane/deletePoints; the one-node 3D Tracker
Camera keyed per frame and text / solids / nulls / shadow catcher + light on
the target plane, Create Multiple. Viewer: depth-sized coloured targets,
hover target plane, click / shift / marquee selection, AE right-click menu,
Delete; Effect Controls Analyze / Cancel / Create Camera; Tracker panel
Track Camera. Solver: adaptive noise thresholds, denser keyframes, quick
tripod check, faster Cholesky and parallel Schur complement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:02:47 -04:00
Brandon Thomas
0631ef29dc
Merge branch 'worktree-agent-ae879257b39393c25'
...
# Conflicts:
# docs/parity.md
2026-10-02 22:56:18 -04:00
Brandon Thomas
c406b71cba
Merge branch 'worktree-agent-af1868dabbf03697e'
...
# Conflicts:
# docs/parity.md
2026-10-02 22:49:26 -04:00
Brandon Thomas
a208276186
Merge main (M6.7 roto) into IO-2/SHP-5/OUT-2/PRV-2 work
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:40:16 -04:00
Brandon Thomas
36683d95ee
Merge main into IO-2/SHP-5/OUT-2/PRV-2 work
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:39:47 -04:00
Brandon Thomas
8f4546fca4
Merge branch 'main' into worktree-agent-af1868dabbf03697e
...
# Conflicts:
# docs/parity.md
2026-10-02 22:36:47 -04:00
Brandon Thomas
5e441e859d
UI-8, UI-3, UI-7, CMP-6, UI-1: parity and control-protocol docs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:36:30 -04:00
Brandon Thomas
406706e3d5
OUT-2: WebM export (VP9 intra encoder + alpha, Opus), WAV/AIFF audio-only outputs
...
- effectcraft-vp9enc (L0): VP9 profile 0 key-frame encoder from the VP9 bitstream spec
(8x8 intra blocks, DC/V/H/TM, 4x4 DCT/ADST, lossless WHT at quality 100, tile columns);
round-trips exactly through FilmCraft's VP9 decoder and ffmpeg.
- export: WebM muxer (EBML/Matroska spec) with VP9, VP9 alpha in BlockAdditional
(AlphaMode 1), Opus (CodecDelay = pre-skip); WAV and AIFF outputs.
- OutputFormat WebM/Wav/Aiff in the Render Queue, renderQueue.add formats, CLI --format.
- Tests: FilmCraft decode-back (frames, size, pixels, audio RMS), ffprobe/ffmpeg oracles.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:28:15 -04:00
Brandon Thomas
93f4fe7314
Merge branch 'main' into worktree-agent-ad0c2eed1a8890262
...
# Conflicts:
# crates/effects/Cargo.toml
# crates/ui-egui/src/panels/mod.rs
# docs/parity.md
2026-10-02 22:27:43 -04:00
Brandon Thomas
ed72e67155
M6.7: refine edge + freeze + UI
...
Refine Edge tool (Alt+W cycles Roto Brush / Refine Edge), Layer panel
roto strokes with matte overlays (Alpha Boundary in pink, Alpha, Alpha
Overlay, View Search Region), segmentation span bar, Freeze/Propagate in
the Layer panel and Effect Controls, background propagation polling,
docs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:27:22 -04:00
Brandon Thomas
6723f87ecb
Merge branch 'main' into worktree-agent-aba3d925078471ad6
...
# Conflicts:
# docs/parity.md
2026-10-02 22:18:29 -04:00
Brandon Thomas
78cd313d3c
M14.4: scripting with an After Effects-style JavaScript object model
...
New crate effectcraft-script (L4): boa runtime with app/Project/CompItem/
Layer/PropertyGroup/Property/TextDocument/MarkerValue/RenderQueue/File
object model over engine commands (undoable, undo groups), AE match-name
table, file/network security gate. Entry points: script.run command,
File > Scripts > Run Script File (.jsx/.js), Window > Script Console,
effectcraft-cli script, MCP run_script. Engine: project.delete/duplicate,
prop.renameGroup/setGroupEnabled/removeGroup/duplicateGroup/moveGroup.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 22:13:09 -04:00
Brandon Thomas
a51f439d34
Merge branch 'main' into worktree-agent-a758de7c5b6efcc3d
...
# Conflicts:
# crates/effects/src/lib.rs
# crates/render/src/lib.rs
# docs/parity.md
2026-10-02 21:48:49 -04:00
Brandon Thomas
ad697a342d
M9.11: parity doc — 296 of 298 After Effects effects
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:48:11 -04:00
Brandon Thomas
b936ed0055
OUT-2: Opus (CELT) encoder (effectcraft-opusenc)
...
New L0 crate effectcraft-opusenc: clean-room RFC 6716 CELT-only encoder
(fullband 48 kHz, 20 ms packets, mono/stereo as dual L/R stereo, constant
packet size from the bitrate) with the RFC 7845 OpusHead and pre-skip.
Forward low-overlap MDCT, inter/intra coarse energy, fine/final energy,
the decoder's exact allocation, recursive band splitting, PVQ search and
codeword indexing, silence frames.
crates/export depends on it; filmcraft-opus (dev) is the round-trip oracle
in tests/opus_roundtrip.rs, with ffmpeg reading an in-test Ogg Opus file
as a second oracle when installed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:41:29 -04:00
Brandon Thomas
21593316c4
Merge main into M7.4-M7.6 (Advanced 3D)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:37:17 -04:00
Brandon Thomas
79ad7e1843
M7.6: extrusion + primitives
...
Extruded text keeps per-character 3D: each glyph's outline is extruded in its own space and
placed by its animated matrix; shape layers extrude their fill outlines (gradients use their
mid colour). Shadow-map bias scales with the texel footprint at the receiver and the PCF
reach (no acne on curved casters), identically on CPU and GPU. Docs: Advanced 3D in
architecture.md, parity table updated (3D, Text).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:36:59 -04:00
Brandon Thomas
9645ff9a66
M6.6: mask tracking + mask interpolation; M12.5: Warp Stabilizer
...
Mask tracking (track.mask, background job with progress/cancel, one undo
step, Mask Path keys; Tracker panel mask mode; Layer > Mask > Track Mask),
Mask Interpolation panel + mask.interpolate, and the Warp Stabilizer
effect (Effect > Distort, AE parameter groups, warp.analyze/cancel/status,
analysis stored in the effect, invalidation on source/in/out/remap edits,
viewer banner, crop/auto-scale/synthesize edges, track points).
Adds the effects -> track same-layer edge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 21:14:29 -04:00