Commit Graph
908 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
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 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
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 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
bflatastic 661f95b901 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 04:48:19 +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 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 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 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 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
midasmatterhorn 7216e0eb6a Merge remote-tracking branch 'upstream/main' into fix-1568 2026-10-29 23:42:14 +03:00
bflatasticandClaude Opus 5.5 054d884cdf Templates: rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:41:14 +07:00
bflatasticandClaude Opus 5.5 31a2716a19 Templates: packages keep indented project JSON, as the docs say; only Save Compact applies
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:40:12 +07:00
bflatastic 1b8477c5d1 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 03:39:46 +07:00
bflatastic bcf2d2b7e5 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 03:39:42 +07:00
bflatasticandClaude Opus 5.5 2510e17421 Footage reads refuse anything that isn't a regular file (#2134)
A project can name /dev/zero, a FIFO or a folder as footage; reading those whole
never ended (or ran out of memory). The media layer's whole-file reads (probe,
pool, model side files) and the engine's FsServices::read_file now open the file,
refuse a non-regular one, and reserve its length fallibly, so a sparse file that
claims more than memory is an error too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:33:47 +07:00
bflatasticandClaude Opus 5.5 6b75033485 Import: a numbered still named without sequence imports as itself, as in After Effects (#2018)
file.import without the flag (scripts, agents, files opened from the command line,
the CLI's templates) turned `lockin_line1.png` into a one-frame image sequence.
ImportOptions.sequence defaults to false in After Effects, so picked and dropped files
now import as stills unless `sequence: true`; folders' numbered runs still import as
sequences, and the Import dialog's Sequence checkbox is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:17:09 +07:00
vangel76andClaude Sonnet 5.5 99caf83c62 Merge upstream/main into rfx-text
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 20:31:32 +01:00
pravdomilandClaude Opus 5.5 07639b5f4b Settings: Save Compact Project Files writes .ecproj as one-line JSON
Settings ▸ Project ▸ Project Files ▸ Save Compact Project Files (off by
default) saves .ecproj files as compact JSON: smaller, faster to save and
open. Off, they stay indented, one value per line, so they read and diff
cleanly in version control. XML copies are not affected; auto-saves were
already compact. The project.ecproj inside exported template and Motion
Graphics template packages is written compact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:06:02 +01:00
Egon 5000 34aef98725 UI: double-clicking a creation tool in the Tools bar makes an instance (#1072)
A double-click on a creation tool in the Tools bar makes what it draws, as in After Effects: a text layer from the Type tools; from the shape tools a shape that fills the comp - into the selected shape layer's Contents, as a mask on the selected layer (or when Tool Creates Mask is on), or as a new shape layer when neither applies. The shape geometry defaults now match AE: the Rounded Rectangle tool's Roundness is a fixed 20 instead of growing with the drawn size, and the Polygon tool draws five points.
2026-10-29 19:52:55 +01:00
elZanco ce6b5fa99f Timeline: trimming the Out point to the playhead keeps its frame visible
Alt+] (Trim Layer Out Point to Current Time) used to set the Out edge exactly at the playhead; the layer interval is half-open, so the playhead's frame was already gone - nothing showed in the current frame. The edge now lands one frame after the playhead, as in After Effects, so its frame is the layer's last visible one. A layer still keeps at least one frame; Alt+[ (In point) is unchanged.
2026-10-29 19:49:22 +01:00
bflatasticandClaude Opus 5.5 cfd902d2db Content-Aware Fill: refuse up front when the frames can't fit in memory (#1789)
The fill holds every frame as float RGBA, its hole mask and the filled copy until it
finishes, so a long or large range ran out of memory partway through (22-33 % on the
reports). Planning the fill now compares that lower bound with the system's available
memory and refuses with what it needs and how to shorten the range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 01:34:40 +07:00
BFlat 2090726e55 Merge pull request #1513 from vangel76/gap-behaviors-presets
#1510: Behaviors animation presets (22 original, expression-driven)
2026-10-30 01:26:43 +07:00
bflatastic 6ab7bd31dd Merge main into #1513; resolve docs/effects-parity.md 2026-10-30 01:25:24 +07:00
bflatastic 6a30a8b8d5 Merge main into #2452; resolve crates/engine/src/cmd/animation.rs crates/engine/src/tests/effects.rs 2026-10-30 01:24:52 +07:00
BFlat 676eeb8d07 Merge pull request #2289 from onlykshitij/feat/script-panel-submenus
Scripts: subfolders of the Scripts and ScriptUI Panels folders become submenus
2026-10-30 01:23:53 +07:00
BFlat eccb1883e2 Merge pull request #1092 from vangel76/fix-1083-beat-marker-audio-pause
Markers: adding one during playback no longer stops the audio (#1083, #1085)
2026-10-30 01:23:37 +07:00
BFlat b42cbcdb5e Merge pull request #1921 from tylerjenningsw/enhance/keyframe-text-clipboard
Clipboard: export keyframes as After Effects-compatible text
2026-10-30 01:22:04 +07:00
BFlat 7099fe0bae Merge pull request #1874 from vangel76/rfx-masks-shapes
Mask feather, Repeater opacity and Trim Paths on rectangles render as in After Effects
2026-10-30 01:21:47 +07:00
BFlat 7175a20f63 Merge pull request #1804 from tylerjenningsw/fix/roto-stroke-order
Roto Brush: apply correction strokes in drawing order (#1646)
2026-10-30 01:21:32 +07:00
BFlat b669e4a951 Merge pull request #2476 from ashokram-si/feat/targa-sequence-output
Export: Targa (.tga) sequence output, 24-bit RGB or 32-bit RGB + Alpha
2026-10-30 01:19:27 +07:00
BFlat 6f1d11af94 Merge pull request #1385 from tylerjenningsw/enhance/pickwhip-index-refs
Expressions: Alt-pickwhip references effect parameters by index (refs #1072)
2026-10-30 01:18:08 +07:00
tylerjenningsw 5f22e63e93 Merge remote-tracking branch 'origin/main' into enhance/batch-parent-matte 2026-10-29 13:29:22 -04:00
Jerome CAMUSandClaude Sonnet 5.5 82d3c2c92d Fix formatting in path.freeTransform spec
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 18:27:28 +01:00
Jerome CAMUS 6a6fdaf62f Improve tests 2026-10-29 18:24:13 +01:00