Commit Graph
3246 Commits
Author SHA1 Message Date
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
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 a8a8267dac Merge pull request #2363 from Kaedo17/split/ci-alsa
ci: name the missing ALSA package instead of dying at link time
2026-10-30 04:10:14 +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 ef3d14b0fe Merge pull request #2580 from gjrtimmer/feat/web-startup-option
feat(web): choose the project the page opens with a `startup` config key
2026-10-30 04:09:49 +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 ee8adf97c5 Merge pull request #1655 from elZanco/dev-line-tables-only
build: add an optional dev-full profile with full debug info
2026-10-30 04:08:25 +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
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 bb7fda41bb Text tests: drop the tracking test #1822 already landed on main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:40:17 +07:00
bflatasticandClaude Opus 5.5 aa97fcbee8 xtask tests: the ALSA probe test runs on Linux only, where the stage does
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:40: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 16307e270e Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 03:39:44 +07:00
bflatastic bcf2d2b7e5 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 03:39:42 +07:00
BFlat fbd7bcd957 Merge pull request #2608 from storytold/fix/2141-header-sized-allocations
Media: header-sized EXR windows and audio sample rates are bounded (#2141)
2026-10-30 03:36:36 +07:00
bflatasticandClaude Opus 5.5 4f20c31c37 Media: header-sized EXR windows and audio sample rates are bounded (#2141)
An EXR's display window sizes a plane per channel, so 60000² over a 1×1 data window
was a multi-gigabyte allocation per channel; past 16384² (the vector footage limit)
the file is refused. An audio header's sample rate scales the samples read, so
0xFFFFFFFF Hz made one conform chunk about 47 GB; rates outside 1–768 kHz are an
error, and the audio reads as silence as for any unreadable source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:36:06 +07:00
BFlat 77de46a490 Merge pull request #2607 from storytold/fix/2134-special-files
Footage reads refuse anything that isn't a regular file (#2134)
2026-10-30 03:34:07 +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
BFlat c516641001 Merge pull request #2606 from storytold/fix/2136-vector-footage-budget
Media: vector footage past 16384×16384 is an error, not an abort (#2136)
2026-10-30 03:19:57 +07:00
bflatasticandClaude Opus 5.5 592b96ed2e Media: vector footage past 16384×16384 is an error, not an abort (#2136)
An SVG or PDF declaring up to 30000×30000 was drawn into one 14 GB image whose failed
allocation aborted the app. Decoding now refuses sizes past what Continuously Rasterize
draws (16384 a side, shared as MAX_VECTOR_SIDE) with an error naming the size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:19:12 +07:00
BFlat d3c34b4efb Merge pull request #2605 from storytold/fix/1964-shift-vertex-drag
Viewer: Shift keeps a dragged mask or shape vertex to one axis (#1964)
2026-10-30 03:18:22 +07:00
BFlat 95964882bc Merge pull request #2604 from storytold/fix/2018-import-sequence-default
Import: a numbered still named without sequence imports as itself, as in After Effects (#2018)
2026-10-30 03:18:06 +07:00
bflatasticandClaude Opus 5.5 1549d63c66 Viewer: Shift keeps a dragged mask or shape vertex to one axis, as in After Effects (#1964)
Gesture::Vertices took the raw drag delta; it now goes through one_axis, as a
Shift-dragged layer's move does, before snapping.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 03:17:26 +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
pravdomilandClaude Opus 5.5 b70d69fcb1 UI: an inactive comp tab shows its × on hover
The Timeline's comp tabs had a × on the shown comp only, so closing another
comp meant showing it first. A comp tab the Timeline does not show now shows
its × while the pointer is over it, and clicking it closes that comp without
showing it. Every comp tab keeps the ×'s room, so a tab keeps its width when
it is shown or hovered. Automation: `panel.tab.Timeline.<comp>.close` for
each comp's ×; `panel.tab.Timeline.close` stays for the shown comp's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:41:46 +01:00
vangel76andClaude Sonnet 5.5 06d5a6fc80 Merge upstream/main into camtrack-matrix-free-schur
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 20:32:17 +01:00
vangel76 88c02a953e Merge remote-tracking branch 'upstream/main' into q2400-merge
# Conflicts:
#	crates/av1enc/src/decide.rs
2026-10-29 20:32:16 +01: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 caedb0727a Viewer trackpad gestures: two-finger scroll pans, pinch zooms
The Composition and Layer viewers took every scroll as a zoom, so a trackpad
could not pan. A trackpad's two-finger scroll now pans; a pinch,
Ctrl/Cmd+scroll, a mouse wheel and Alt + a trackpad scroll zoom around the
pointer.

Where the platform names the device (egui's MouseWheelSource, macOS), that
decides. Elsewhere browsers and some high-resolution wheels report a mouse
wheel in points, as a trackpad does, so the unit alone doesn't decide. A
scroll in points pans only once it has shown it is a trackpad: a touch phase,
movement on both axes at once, or a pinch. That holds until a wheel scrolls
in lines. Until then the vertical part zooms and the horizontal part pans.

ui.scroll gains unit (point|line), source (wheel|trackpad) and pinch so
agents can drive both gestures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:21:10 +01:00
pravdomilandClaude Opus 5.5 7fe5f5225f #595: RAM preview no longer stalls on a gap right after the playhead
Problem: pressing play on frames that still had to render left the playhead
standing still for seconds. The cache bar showed a gap of a few frames right
after the playhead while frames further ahead turned green, and playback
started only once the whole prefetch window was cached. The earlier #595
change (prefetch order, eviction) started the right frames first, but they
still finished last. Cache Frames When Idle left the same late-filling gaps.

Cause: prefetch frames render side by side on one rayon pool, and each
frame's own parallel loops run on that pool too. An idle thread steals a
piece of a frame that is rendering; when that piece waits on a nested
parallel loop, the thread picks up a queued frame job instead and renders
queued frames until the queue is empty. Only then does it return to the
piece it stole, so the frame that piece belongs to cannot finish while
frames keep being queued. The frames started first are the ones just ahead
of the playhead.

Fix: the frames of a playing preview and of Cache Frames When Idle render on
lanes: one single-thread pool per frame thread, one frame at a time each. A
lane's thread only ever works on its own frame, so no frame waits under
another. The shared pool keeps the viewer's frame, which still uses every
thread, and the few frames prefetched around it while paused. Queued frames
change hands when a preview starts or stops, or when the viewer shows one.
Idle caching takes every lane instead of half the pool's threads.

Tests: frames_started_first_are_done_first (a playing preview, idle
caching) and queued_frames_render_when_a_preview_starts_or_stops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:19:06 +01:00