Commit Graph
2758 Commits
Author SHA1 Message Date
Jason LukerandClaude Opus 5.5 4c8b9cfc26 Footage watcher tests: wait for the stamps, and bound the empty set by what can still come
Two engine tests leaned on elapsed time. "It keeps stamping while the
window is in front" slept 300 ms and wanted more than three stamps: a
worker held up on a loaded machine stamps fewer. "Nothing watched,
nothing stamped" slept 60 ms after sending the empty set and then wanted
no stamp at all, but a worker already past its wait with the old set
stamps that round once more, whenever it gets to run.

The first now waits (at most 10 s) until the stamps arrive. The second
checks the invariant instead: after `set_watched(∅)` at most one round of
the old set (one file) can still come, so the count may grow by one and
no more; a worker that ignored the empty set stamps every 20 ms and still
fails it.

Checked with the worker slowed (100 ms after each wait, 50 ms between the
report and the wake): these tests pass; the previous ones fail at
"it keeps stamping while the window is in front".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:41:53 -07:00
Jason LukerandClaude Fable 5.1 26e6145cee Footage: one watcher thread that wakes the interface only when a file changed, instead of a 2 s poll
Settings ▸ Import ▸ Reload Footage Changed on Disk used to spawn a stat thread every two seconds
from the UI thread, request a repaint 100 ms later to collect it, and request another repaint every
2 s in between, for every project with items, focused or not: the whole interface redrew on a timer
for footage that hadn't changed.

`footage_reload::Watcher` is one long-lived worker: the interface tells it what to watch (recomputed
when the project revision or the preference changes) and whether the window is in front; it stamps
the files every 2 s while the window is in front, every 10 s while another app has the front, at once
on focus regain and on a new set, and hands the stamps over — calling `ctx.request_repaint()` — only
when one differs from its last look. Nothing watched means the thread sleeps. `apply_stamps` and the
reload semantics are unchanged; `start_scan`/`poll_scan`/`Session::footage_scan` are gone. No new
dependencies: the stat loop is also what footage on a network share relies on, where FSEvents would
not report another machine's writes.

Tests: the watcher wakes the interface for the first stamps and for each change and never for an
unchanged file; behind another app it rests until the window is back; nothing watched is nothing
stamped and a new set is reported whole (and dropping it ends the thread); the host test
`the_watcher_notices_a_footage_file_changed_on_disk` saves a PSD from "another app" and sees it
reloaded once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-29 15:41:53 -07:00
Jason LukerandClaude Fable 5.1 2a61a05fd4 GPU: the readback deadline worker sleeps until a deadline is due instead of polling every 100 ms
`Readbacks::new` spawned a thread that slept 100 ms and checked for expired readbacks forever,
whether or not anything was pending: ten wakeups a second for the life of every desktop session
with a GPU compositor (12–13 idle wakeups/s measured, against 0.4–1.8 for the sibling apps).

The worker now waits on a condition: indefinitely while nothing is pending, otherwise until the
earliest deadline or until what is pending changes (start, complete, cancel, retire poke it).
It owns the state behind an `Arc<Inner>` rather than the `Readbacks`, so dropping the context
closes it instead of leaking the thread. Timeout, exactly-once callbacks, panic isolation and the
browser's timer path are unchanged.

Measured on an M2 Max (release build, window on screen, 60 s samples, A/B interleaved): idle
wakeups 12.15/s → 2.63/s not frontmost, 12.36/s → 2.72/s frontmost.

Tests: an idle worker does not wake; a due deadline wakes it when due; dropping the context stops
it; the existing panic/strand test moves deadlines through a hook that notifies the worker.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-29 15:40:56 -07:00
BFlat f20dfcbda2 Merge pull request #2263 from SusieeTheLinuxUser/fix/2227-clear-text-edit-standdown
Edit: an open text edit stands down the Project-panel Clear redirect (#2227)
2026-10-30 05:11:05 +07:00
BFlat c35fe911e2 Merge pull request #2266 from SusieeTheLinuxUser/fix/2226-duplicate-ends-text-edit
Edit: duplicating during a text edit ends the edit (#2226)
2026-10-30 05:11:00 +07:00
bflatastic ee01d7d4f6 Merge main; keep the batch-tested versions of crates/engine/src/cmd/layer/transform.rs 2026-10-30 05:10:42 +07:00
bflatastic fdb0e5d3c9 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 05:10:41 +07:00
BFlat faab5b1c81 Merge pull request #2039 from midasdf/jp/cjk-composition-rendering
Text: Chinese Han text uses the installed Chinese face (#453)
2026-10-30 05:10:35 +07:00
BFlat 5a1d909496 Merge pull request #2109 from gmrmad1/fix/2072-variable-font-tests
tests: count variable font named instances as styles (#2072)
2026-10-30 05:10:30 +07:00
BFlat 376f303d8f Merge pull request #2107 from gmrmad1/fix/2073-replace-footage-kind
engine: Replace Footage keeps a still a still (#2073)
2026-10-30 05:10:25 +07:00
bflatastic f2773f68ac Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	crates/project/src/render_queue.rs
2026-10-30 05:10:05 +07:00
BFlat 90fbd6609d Merge pull request #2270 from mypenc/altfix
Viewer: Alt/Option-drop of a Project item replaces the layer under the pointer
2026-10-30 05:09:55 +07:00
BFlat 07d1de1764 Merge pull request #2534 from klosixgaming-arch/fix/2022-render-banding
export: dither 16/32 bpc renders on the way to 8 bits, and let Render Settings Color Depth set the render's depth (#2022)
2026-10-30 05:09:48 +07:00
BFlat e28612dedd Merge pull request #2574 from roadhong/fix/audio-level-keyframes-per-sample
Audio: keyframed Audio Levels and Stereo Mixer levels ramp within a mix block
2026-10-30 05:09:38 +07:00
BFlat e2128a6743 Merge pull request #2118 from ChristopherLinnett/fix/issue-2092-camera-focus-crash
fix: bound Classic 3D depth-of-field blur and reject non-finite focus distances (#2092)
2026-10-30 05:09:17 +07:00
bflatastic e37df317af Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	crates/ui-egui/src/i18n/ui.rs
2026-10-30 05:08:59 +07:00
BFlat 218b8e34ae Merge pull request #1514 from FeiLiuEM/i18n/1451-tool-names
i18n: the 31 tool names are translated (zh-hans, zh-hant)
2026-10-30 05:08:49 +07:00
bflatastic de40efed7c Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 05:08:34 +07:00
bflatastic 971e75d06a Merge main; keep the batch-tested versions of crates/engine/src/tests/rig3d.rs 2026-10-30 05:08:15 +07:00
bflatastic 57b76bcc88 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 05:08:13 +07:00
BFlat 5874304437 Merge pull request #1887 from ki2pixel/expressions-cubic-bezier
Expressions: cubic-Bezier easing helper (bezier(...)) (#1884)
2026-10-30 05:08:06 +07:00
BFlat dac865f134 Merge pull request #1423 from nanox333/fix/1417-wav-markers
#1417: WAV markers show on the audio layer
2026-10-30 05:08:00 +07:00
BFlat 5ba07d18c4 Merge pull request #1165 from nanox333/fix/1010-orientation-followup
Parented cameras and lights keep their static and keyed Orientation (refs #1010)
2026-10-30 05:07:53 +07:00
BFlat 2ffc2bdf61 Merge pull request #1164 from nanox333/fix/1063-text-animator-stacked
Scripts: text animator properties resolve by their After Effects names (refs #1063)
2026-10-30 05:07:48 +07:00
BFlat 664ca1a85b Merge pull request #1568 from midasmatterhorn/fix/r4-output-size-clamp
project: output_size never asks for sides past the comp limit
2026-10-30 05:07:42 +07:00
bflatasticandClaude Opus 5.5 8b846ffdf1 Render cache: the soloed-model key reads main's two-argument reads_other_times
#2410's dependency walk for a soloed 3D model was written before
reads_other_times took the effect count; it asks about all effects (None),
as the other walks do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:48:42 +07:00
bflatastic 661f95b901 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 04:48:19 +07:00
BFlat d26ab3b83e Merge pull request #2609 from storytold/fix/qa-sequence-import
Tests: QA scenarios ask for image sequences explicitly
2026-10-30 04:33:27 +07:00
BFlat f868cc68f3 Merge pull request #1875 from vangel76/rfx-text
Text lays out as in After Effects: box text baseline, right-to-left text, Justify All, animator tracking, per-character 3D rotation
2026-10-30 04:10:22 +07:00
BFlat 8b4dca7635 Merge pull request #2601 from pravdomil/claude/ecproj-compact-opt-in
Project files: opt-in compact .ecproj JSON (Save Compact Project Files)
2026-10-30 04:10:07 +07:00
BFlat f4ca883dac Merge pull request #2346 from vangel76/camtrack-matrix-free-schur
Avoid quadratic Schur assembly for long camera tracks
2026-10-30 04:09:59 +07:00
BFlat a0bec0905c Merge pull request #2595 from zitann2020/text/keep-empty-layer
fix(text): keep an empty Type-tool layer, as AE does
2026-10-30 04:09:42 +07:00
BFlat f87963d3fa Merge pull request #2583 from zitann2020/i18n/ja-generate-category
i18n(ja): the Generate effect category is 描画
2026-10-30 04:09:35 +07:00
BFlat 95aa34c247 Merge pull request #2539 from nanox333/fix/ease-preset-linear
Ease Presets: restore Linear interpolation and diamond keyframes
2026-10-30 04:09:28 +07:00
BFlat 69f53d8daa Merge pull request #2528 from nanox333/fix/native-text-undo-labels
Native Edit menu: use text-field Undo and Redo labels while typing
2026-10-30 04:09:18 +07:00
BFlat 826a30cdb2 Merge pull request #2426 from jerome25000/fix/2201-mask-free-transform-undo
Fix #2201: one undo reverts a whole mask free-transform drag
2026-10-30 04:09:12 +07:00
BFlat 1cb8c40def Merge pull request #2400 from vangel76/av1enc-quant-tables
av1enc: truncate instead of floor, log2 lookup table, skip division in the dead zone
2026-10-30 04:09:06 +07:00
BFlat 19d75179f9 Merge pull request #2250 from slager2/fix/2172-animation-browse-presets
Fix Animation > Browse Presets command
2026-10-30 04:08:59 +07:00
BFlat 3b300b4af1 Merge pull request #1820 from kk376/fix/png-frame-alpha-preservation
fix(engine): preserve alpha channel when saving still PNG frames
2026-10-30 04:08:53 +07:00
BFlat b614693b51 Merge pull request #1654 from elZanco/tools-double-click-create
UI: double-clicking a creation tool in the Tools bar makes an instance (#1072)
2026-10-30 04:08:44 +07:00
BFlat b416feb00d Merge pull request #1737 from elZanco/fix/trim-out-keeps-playhead-frame
Timeline: trimming the Out point to the playhead keeps its frame visible
2026-10-30 04:08:36 +07:00
BFlat 7043fde70a Merge pull request #1314 from tylerjenningsw/fix/expression-value-color
UI: colour expression-driven numeric values consistently (refs #1072)
2026-10-30 04:08:14 +07:00
BFlat 686da9f7eb Merge pull request #1291 from tylerjenningsw/enhance/batch-parent-matte
Timeline: parent and matte selected layers together (#1260)
2026-10-30 04:08:08 +07:00
BFlat 052cd1f89c Merge pull request #1121 from pravdomil/claude/ram-preview-prefetch-bug-873f91
#595: RAM preview no longer stalls on a gap right after the playhead
2026-10-30 04:08:00 +07:00
BFlat bcbd6db402 Merge pull request #1100 from pravdomil/claude/compositing-buttons-positioning-b52693
UI: Composition Settings keeps Cancel and OK in place between tabs
2026-10-30 04:07:53 +07:00
BFlat 43a5b6ef7a Merge pull request #1036 from pravdomil/claude/trackpad-gestures-viewer-e43bc3
Viewer trackpad gestures: two-finger scroll pans, pinch zooms
2026-10-30 04:07:45 +07:00
BFlat 365e4dd4ab Merge pull request #822 from pravdomil/claude/remove-panel-title-underline-9dd90c
UI: open padlock on an unlocked viewer lock; inactive comp tabs show their × on hover
2026-10-30 04:07:37 +07:00
bflatasticandClaude Opus 5.5 4c787734fd Tests: QA scenarios ask for image sequences explicitly (#2018)
Since #2604 a picked numbered still imports as itself unless the import
asks for a sequence, as in After Effects. The compositing and tracking QA
scenarios import a PNG run, so they pass `sequence: true`; docs/agents.md
describes the new default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 04:04:04 +07:00
midasmatterhorn 3217320c1c export: the yuv420 fast path checks the effective scale too 2026-10-29 23:48:55 +03:00
midasmatterhorn 7216e0eb6a Merge remote-tracking branch 'upstream/main' into fix-1568 2026-10-29 23:42:14 +03:00