4377 Commits
Author SHA1 Message Date
Anubhav-RaiandClaude Opus 5 56821949e3 automation: the out-of-root proxy path is absolute on Windows too (#2479)
Introduced by the commit before this one. Dropping the `WRITES` entry changed
that refusal's wording from `cannot write` to `cannot read`, so the assertion
moved to the part both share — `outside the automation roots` — but
`/elsewhere/proxy.mov` is not absolute on Windows, where it is refused for that
instead and the assertion fails. The gate runs ubuntu only, so it stayed green.

A sibling of the write root under the temp directory is absolute on every
platform, so the refusal is the one the test is about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 10:30:13 +05:30
Madhav Agarwal 9fd14225eb engine: treat null sequence options as unspecified in Replace Footage 2026-10-29 10:20:20 +05:30
Madhav Agarwal a29eda3844 engine: Replace Footage keeps a still a still (#2073) 2026-10-29 10:20:20 +05:30
Madhav Agarwal 90acacd917 tests: match retained font faces and primary-style precedence 2026-10-29 10:20:06 +05:30
Madhav Agarwal cd8d55b40e tests: count variable font named instances as styles (#2072) 2026-10-29 10:19:58 +05:30
SusieeTheFemboyandClaude Opus 5.5 5224414d28 Transform: Fit to Comp refuses a scale that overflows (#2198)
A shape's painted bounds can be tiny enough (a 1e-305 px rectangle) that
the fit scale overflows to infinity. Non-finite bounds are skipped and a
non-finite scale returns an error before anything is written, instead of
storing infinity in the document.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 05:41:00 +01:00
Anubhav-RaiandClaude Opus 5 7df52fb20e automation: a proxy's relative name is a template, not a path (#2479)
Asked for on the PR: #1347 allows `file.createProxy` a name that is not a path,
because the engine reads it as an Output Module template, and the `WRITES` entry
added here refused exactly that. Dropped, so the classification is #1347's alone.

Nothing is opened by it. A proxy named outside the roots is still refused —
`cannot read` now rather than `cannot write`, which is #1347's to settle — so the
test asserts the refusal and no longer its wording. A relative name is now
accepted and resolves beside the saved project, inside the write root, which the
test pins so this does not quietly come back.

The lookup this PR is for is untouched: `file.createProxy` stays in
`QUEUES_AN_OUTPUT`, so a proxy queued from a project with no file is still
refused rather than landing in the home folder.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 10:09:15 +05:30
SusieeTheFemboyandGLM-5.3-Flash a3a72d48aa Transform: Fit to Comp sizes shape and text layers by their painted bounds (#2198)
layer.transform's fit / fitWidth / fitHeight ops took the layer's size
from render::source_size, which returns (0, 0) for layers without a
source item — shapes and text — so the ops matched nothing and silently
did nothing, for the shortcut, the menu item and the command alike.

When the source size is empty and a fit op runs, the size falls back to
the layer's painted content bounds at the current time, and the anchor
goes to the bounds' centre: content bounds live in layer space, where a
shape is centred on the origin and text sits above its baseline, so
(w/2, h/2) would fill the frame but land off-centre. Reset and the
other ops keep the source size, so their defaults are unchanged.

The regression test asserts what the viewer shows — the painted bounds
mapped to comp space span [0, 0, 640, 360] after fit, and fitWidth
spans the width centred vertically — for a rect shape and a text layer.

Co-Authored-By: GLM-5.3-Flash <noreply@z.ai>
2026-10-29 05:22:57 +01:00
SusieeTheFemboyandGLM-5.3-Flash 63f1698cff Edit: an open text edit stands down the Project-panel Clear redirect (#2227)
Edit > Clear follows panel focus: with the Project panel focused it
redirects to project.delete, which removes the selection at once when
nothing uses it. With a text edit open, that deletes the composition
being typed into — the user is working in it — and undo restores the
item but not the active composition. During a text edit the redirect
stands down (Clear does nothing) and the Edit menu's Clear entry is
disabled, mirroring how Deselect All stands down in #2096.

Co-Authored-By: GLM-5.3-Flash <noreply@z.ai>
2026-10-29 05:22:56 +01:00
SusieeTheFemboyandGLM-5.3-Flash 60a356ea14 Edit: duplicating during a text edit ends the edit (#2226)
Edit > Duplicate replaces the layer selection with the copies, but an
open in-canvas text edit stayed on the original layer: typing kept
editing a layer that was no longer selected. When the duplicate leaves
the edited layer deselected, end the edit the way #2096's Deselect All
does (text_edit::end_edit), in the command every caller — menu, shortcut,
MCP — dispatches through.

Co-Authored-By: GLM-5.3-Flash <noreply@z.ai>
2026-10-29 05:22:56 +01:00
bflatasticandClaude Opus 5.5 5013012dab av1enc: decide.rs imports half_planes after the strict-clippy import list (#2496)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:34:57 +07:00
bflatastic 372c707e8c Merge remote-tracking branch 'origin/main' into HEAD 2026-10-29 10:34:55 +07:00
bflatasticandClaude Opus 5.5 3311f02559 Geom: square_to_quad tests live in the crate's own test module
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:22:02 +07:00
bflatasticandClaude Opus 5.5 a66361c85d Color: rgb_to_hsl keeps over-range saturation so 32 bpc colours round-trip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:21:52 +07:00
Zaxaerith c9ca89181b docs: clarify command dispatch in README (#2564) 2026-10-29 11:11:34 +08:00
BFlat 990fa668cd Merge pull request #1571 from MatejKozlovsky/dx12-fxc-kernels
GPU: Classic 3D builds with FXC, so the GPU compositor starts on DirectX 12 (#613)
2026-10-29 10:11:21 +07:00
bflatasticandClaude Opus 5.5 c526bb554a GPU: without_kernel copies the software and yuv fields too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:10:45 +07:00
bflatastic 75e878f178 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-29 10:10:44 +07:00
BFlat b0e202a6e5 Merge pull request #1762 from dotCooCoo/fix/macos-quit-crash
Fix #341: on macOS, a quit goes through `terminate:`
2026-10-29 10:10:16 +07:00
BFlat bd4c68fcf8 Merge pull request #2291 from dotCooCoo/feat/recent-script-files
Scripts: Recent Script Files lists the last ten scripts and Cmd+Alt+Shift+D reruns the newest
2026-10-29 10:10:03 +07:00
BFlat 0a3142bcc8 Merge pull request #2517 from MatejKozlovsky/crypto-pick-probe
Cryptomatte pick: keep a hover probe, built off the UI thread (#473)
2026-10-29 10:09:49 +07:00
BFlat b950014850 Merge pull request #1873 from vangel76/rfx-blur-stylize
Glow, Radial Blur, Venetian Blinds, Radial Wipe, Fractal Noise and the Transform effect render as in After Effects
2026-10-29 10:09:36 +07:00
BFlat 226b954777 Merge pull request #2553 from arnav-hiwarkar/perf/2551-disk-cache-bounded
Disk cache: 20 GB default and a free-space reserve, so it no longer fills the disk (#2551)
2026-10-29 10:09:24 +07:00
BFlat 168c556d10 Merge pull request #2548 from Silvertree2010/fix/h3262-align-video-to-data-timestamp-pa
Fix Align Video to Data panic on multi-byte char in timestamp
2026-10-29 10:09:11 +07:00
BFlat f7b010e499 Merge pull request #2547 from Silvertree2010/fix/h3260-svg-css-parser-applies-the-secon
Skip whole CSS at-rule blocks in the SVG parser by brace depth
2026-10-29 10:08:59 +07:00
BFlat a19afa0b9b Merge pull request #2450 from dotCooCoo/feat/wiggle-paths-spatial-phase
Shapes: Wiggle Paths has Spatial Phase, which slides its wiggle along the path
2026-10-29 10:08:43 +07:00
BFlat e17600e869 Merge pull request #2448 from vangel76/vp9enc-loop-filter-lanes
vp9enc: loop filter in 8-lane groups
2026-10-29 10:08:30 +07:00
BFlat aafcf93a6a Merge pull request #2405 from vangel76/av1enc-scratch-buffers
av1enc: reuse scratch buffers in the transform path, the coefficient writer and the level search
2026-10-29 10:08:17 +07:00
BFlat b771f171d0 Merge pull request #2341 from vangel76/camtrack-validate-input
Camera tracking: validate solver input and bound workspaces
2026-10-29 10:08:05 +07:00
BFlat 6efe743a95 Merge pull request #2334 from vangel76/trkx-face-polygon-rows
Face tracker: find polygon crossings once per window row
2026-10-29 10:07:53 +07:00
BFlat e4d907841a Merge pull request #1631 from MatejKozlovsky/gpu-yuv-convert
Export: convert H.264 frames to YUV 4:2:0 on the GPU
2026-10-29 10:07:41 +07:00
Eduardo EspinosaandClaude Opus 5.5 e1d66a3c5c perf: share unchanged layers between undo states
Every undoable edit keeps the previous project for undo, so the comp it touches
is shared and Arc::make_mut deep-copies it: every layer and every keyframe. An
edit therefore costs time in proportion to the comp's size, and a script that
sets many keyframes in a big comp goes quadratic (a 1,600-layer build with
~100k sampled keys took ~45 minutes).

Comp::layers is now a Layers collection backed by Vec<Arc<Layer>>: copying the
stack copies pointers, and only the layer an edit changes is copied. The API
mirrors Vec<Layer>; serialized form is unchanged (a list of layers).
Comp::layer_mut and the iter_mut().filter/find call sites use find_mut /
iter_mut_where so they copy only the layers they actually change.

- prop.addKey in a 400-layer comp: 1.36 ms -> 0.16 ms per key (flat in comp size)
- the 1,600-layer script build: ~45 min -> 47 s, frames pixel-identical
- regression tests: an edit leaves the other layers shared with undo; layers
  round-trip as a plain list

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkpGcKfWyCudfSsQNiWAaG
2026-10-28 22:20:23 -04:00
tylerjenningsw b758d7173e Timeline: chain links are rescoped after a shortcut or menu replaces the project (#2485) 2026-10-28 21:24:20 -04:00
tylerjenningsw b9808d5a24 Engine: a typed prop.set measures each layer's follow change where it keys (#2485) 2026-10-28 20:28:10 -04:00
dotCooCoo ff717aa309 Merge main and retain Cineon Settings in the extracted modules
Resolve the Interpret Footage form against main's split into
interpret_footage_form and project_settings_form, keeping the Cineon
Settings fields and the pointUnits readback. Restore the Arc, rayon
prelude and cineon_frame imports that main's explicit use lists dropped.
2026-10-28 16:57:56 -07:00
tylerjenningsw fca40323b3 Tests: linked Audio Levels across selected layers and a new project (#2485) 2026-10-28 19:54:10 -04:00
tylerjenningsw 2314e8923f Timeline: chain links don't carry into a new or opened project (#2485) 2026-10-28 19:54:09 -04:00
tylerjenningsw e26dc46b61 Audio: linked typing keeps each selected layer's own stereo balance (#2485) 2026-10-28 19:54:09 -04:00
tylerjenningsw a90b58a885 Engine: a typed prop.set can move follow components by each layer's own change (#2485) 2026-10-28 19:54:09 -04:00
WillPastor 559958ea62 Fix timeline drop targets and deleted drag layers (#2492)
Resolve viewport-edge insertion through the full Timeline outline, skipping
moving layers even below the viewport. Cancel a gesture if any captured
layer disappears before its ID can be interpreted as a layer index.

Cover intermediate drops, selected groups, deletion of the owner or another
group member, Undo/Redo, and later independent drags.
2026-10-28 19:32:33 -04:00
Egon 5000 28a7442c0a build: add an optional dev-full profile with full debug info
The dev profile keeps line tables only, which keeps builds fast and test binaries small; panics and backtraces still name file and line. Debugger sessions still need local variables and column breakpoints, so add 'dev-full': the same settings plus full debug info. The fast profile remains the default.
2026-10-29 00:28:09 +01:00
dotCooCoo 0702cd23ee Merge main 2026-10-28 15:31:46 -07:00
dotCooCoo 5f560d7075 Merge #1762: Fix #341: on macOS, a quit goes through terminate:
# Conflicts:
#	Cargo.toml
#	crates/ui-egui/src/app/frame.rs
2026-10-28 15:31:45 -07:00
tylerjenningsw 3f71915fc0 Tests: linked Audio Levels keep their stereo balance (#2485) 2026-10-28 17:40:15 -04:00
tylerjenningsw 2702ca18d5 Audio: linked Audio Levels move both channels by the same dB (#2485) 2026-10-28 17:40:15 -04:00
tylerjenningsw 0e49df4f73 Timeline: a property's chain link can start off (#2485) 2026-10-28 17:40:15 -04:00
dotCooCoo 6e8acedc0d Merge main into feat/recent-script-files 2026-10-28 14:23:49 -07:00
Dylan M. Taylor c99684e28e Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds (#2555)
* Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds

The shared release workflow cross-compiles FreeBSD aarch64 in the x86_64 VM and sets
CARGO_BUILD_TARGET. package.sh ignored it: it built for the host, read binaries from
target/release, and took the arch from uname -m (amd64 on that VM), so the aarch64 build
would have produced an x86_64 archive with x86_64 binaries.

When CARGO_BUILD_TARGET is set, pass --target, read binaries from target/<triple>/release,
name the archive from the target arch, and skip the --version smoke test (the binary cannot
run on the x86_64 host). Unset keeps the previous behavior.

* Reject unsupported CARGO_BUILD_TARGET and gate the smoke test on the host triple

Only x86_64-unknown-freebsd and aarch64-unknown-freebsd are accepted when CARGO_BUILD_TARGET
is set; anything else exits 2 instead of being labelled freebsd-x86_64.

The --version smoke test now runs when CARGO_BUILD_TARGET is unset or equals this host's
full FreeBSD triple, so a native explicit target is still checked.
2026-10-28 15:48:35 -04:00
WillPastor 4fccf2a3b7 Fix timeline layer drops after scrolling (#2492)
Finish reordering from the stored egui drag owner and primary-button
release even when wheel scrolling culls the originating row. Cancel
disabled, interrupted or stale gestures before they can arrange layers.

Cover scrolling in both directions, selected groups, Undo/Redo, later
drags and cancellation boundaries, including opening Settings mid-drag.
Make the existing no-op control cross the drag threshold.

Fixes #2492.
2026-10-28 13:58:33 -04:00
arnav-hiwarkarandClaude Opus 5.5 4171b6c0db Disk cache: negative free space from df counts as none (#2551)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:53:53 +05:30