Commit Graph
855 Commits
Author SHA1 Message Date
bflatasticandClaude Opus 5.5 0e2f43b824 perf(project): keep the Size cell as After Effects shows it
Drop the byte-count tooltip, the "—" marker and their strings and UI test,
and the bench wrapper script: they are outside this PR's scope and After
Effects leaves the Size cell blank when the size is unknown. The size sort
and its tests are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:42:34 +07:00
Marco Arnulfo e228f712a9 Window menu: choosing a checked panel closes it, as in After Effects (fixes #1630) 2026-10-16 10:25:08 +02:00
arnav-hiwarkarandClaude Opus 5.5 1443ad0177 fix(viewer): gizmo arrows take precedence over box handles under them
Review on #1627: the X arrow tip can sit on a bounding-box handle (a 120 px
wide layer at 100%). The arrow is painted on top, but the press and hover
tests checked the handles first, so dragging it scaled the layer. Check the
arrows first in both, and cover the overlap with a pointer-input test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 13:53:12 +05:30
Marco Arnulfo f9dddfeb10 fix(graph): speed graph Fit Selection frames the curve between the keys (fixes #1617) 2026-10-16 08:56:06 +02:00
arnav-hiwarkarandClaude Opus 5.5 632ab4a292 fix(viewer): drag a 3D layer along a gizmo axis (#1618)
The 3D gizmo's X/Y/Z arrows were drawn but not interactive, so pushing a
layer in depth meant typing Z Position by hand. With the Selection tool,
dragging an arrow now moves the layer along that axis only (no snapping),
as one undo step, reusing the viewer's Move gesture.

An axis pointing at the camera (Z in the default front view) projected to
a dot; it is now drawn as a short diagonal stub so it can be grabbed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 12:03:01 +05:30
Marco Arnulfo f8d82b7265 i18n: the effect and property context menus draw their items in the interface language too (#1308)
The Effect Controls header menu and the Timeline property menu build their
items with the same local closure the layer menu used, so they still drew
English. Both now go through i18n::context_item; Copy, Paste, Edit Value…
and Remove Expression get panel catalog rows.
2026-10-15 21:23:14 +02:00
Marco Arnulfo ded4f3925c i18n: the layer and timeline context menus draw their items in the interface language (fixes #1308) 2026-10-15 20:47:06 +02:00
Gert Pellin a3c3b8530c Text: a variable font's named instances are styles of its family (#1563)
The font scan read only whether a face has an fvar table, so a variable
family offered one style (its default instance), fontStyle = "Black"
picked that face with synthetic bold, and an instance's PostScript name
(Figtree-Black, what After Effects scripts use) found no face at all.

The scan now reads the named instances (style, axis values, PostScript
name, or the one Adobe Technical Note #5902 derives). They are styles of
the family in text.fonts and the font menus, a style, PostScript name or
full name selects the instance, and layout uses its axis values as the
base variations; axes set on the text still win.
2026-10-15 15:30:59 +02:00
Ayberk A. a8b25043a9 fix(viewer): Shift-click with the Pen draws a straight segment (#1544)
`pen_press` placed each new vertex where it was clicked (after snapping)
whatever the modifiers, so Shift did nothing and a vertical, horizontal or
45° segment had to be lined up by eye. With Shift held, the new vertex now
moves onto the nearest line at a multiple of 45° through the vertex before
it, as far along that line as the click lies (`constrain_45`). Masks and
shape paths both go through this path.
2026-10-15 14:52:58 +03:00
arnav-hiwarkarandClaude Opus 5.5 2d216151c6 Import: Composition - Retain Layer Sizes for PDF / Illustrator files (#1536)
The PDF / Illustrator import dialog now offers Composition - Retain Layer
Sizes. Each file layer's footage is cropped to its artwork bounds (fills,
stroke outlines, images, clips) and positioned to keep its place on the
page. Decoding, continuous rasterisation, shape conversion and reload share
one crop (effectcraft_pdf::layer_doc_with_sizes), so they agree.

Also collapses a match guard in the STL reader for current stable clippy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:33:50 +05:30
DWAA1660andClaude Opus 5.5 2c08f675c2 fix(engine): preserve edits when applying background analyses
Merge each offloaded property-group result against the snapshot the job started from. Preserve disjoint live edits, group identity and child changes; refuse conflicting results without changing the document or undo/redo history.

Record an apply rejection on its originating job so completion logs and waiting control commands report failure. Keep concurrent jobs' outcomes separate and retain the correct completion position when the bounded log rolls over.

Add actual-worker regressions for conflicts, disjoint edits, concurrent analyses and undo/redo, plus control completion/error regressions.

Fixes #1249

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:15:40 -06:00
vangel76andClaude Sonnet 5.5 38d6fb2ed2 #1509: Timeline effect rows show the effect's colour label
Problem: effect colour labels (26.5) were drawn only on the Effect Controls header; the Timeline's effect rows looked unlabelled.

Fix: an effect group row in the Timeline paints the label colour as a 4 px bar on its left edge (same look as the Effect Controls header) and registers `timeline.group.<uid>.label` with the label's name for agents. Docs: gaps.md row 21 and ui-parity.md updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 01:42:17 +02:00
caldiag e0f25c77bb when double-clicking an effect property, it reveals that effect in the timeline 2026-10-14 18:27:25 -03:00
midasmatterhorn 0f38f507ee ui-egui: a click that opens the colour picker no longer closes it in the same frame (#1476) 2026-10-15 00:10:49 +03:00
DWAA1660andClaude Opus 5.5 642eed0802 Properties/Timeline/Effect Controls: a typed component edits only that component of the other selected layers (#1434)
With several layers selected, typing a value into one dimension (say Z
Position) sent the edited layer's whole value with selected: true, and
prop.set gave every selected layer that same value: they all took the first
layer's X and Y and stacked on top of it. Scrubbing was fine (it sends an
offset).

prop.set takes dims: with selected and a typed value, the other selected
layers get only those components and keep the rest of their own value (Position
with Separate Dimensions included). The three panels send the components the
edit changed (both for linked Scale). Without dims, agents still set the whole
value on every selected layer.

Fixes #1434

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N9kwMcw2pYQ5fSjKa3ZPnh
2026-10-14 14:39:26 -06:00
arnav-hiwarkar 75b75f8463 fix(properties): reveal transform rows on double-click (#1456) 2026-10-15 01:25:46 +05:30
Hamza a213b7f23a i18n (de): fix two labels that name the wrong thing, settle six terms (#1443)
Two German menu labels described a different command:

- `layer.timeReverse` was "Ebenenreihenfolge umkehren", which reads as reversing
  the stacking order rather than time -- now "Ebene zeitlich umkehren", matching
  `keys.timeReverse`;
- `layer.style.convertToEditable` was "In editierbare Formate umwandeln", and
  "Formate" are formats, not layer styles -- now "In bearbeitbare Stile
  umwandeln".

Where the same English term had more than one German rendering, the one already
in the majority wins, so this settles rather than re-translates:

- "Expression" is "Ausdruck" in seven entries and "Expressions" in the two
  `layer.expressions` ones, which now read "Ausdrücke aktivieren/deaktivieren";
- "Reveal" is "anzeigen" in eleven of twelve entries, so `layer.revealInFinder`
  joins `file.revealInFinder` at "Im Finder anzeigen" -- in every other
  catalogue both commands already share one string;
- "Track" as a verb is "verfolgen" in the other four entries, so `track.mask`
  is "Maske verfolgen" rather than "Maske tracken";
- one spelling of "nach vorne", matching the neighbouring arrange entry.

German also had no platform variants for the file manager. The engine puts the
platform's name into the label before the catalogue sees it, so on Windows the
source is "Reveal in Explorer" and on Linux "Reveal in File Manager"; only
Ukrainian and Czech special-cased those, and a German UI showed the English
string. Added, with a test mirroring `czech_…` and `ukrainian_…`.

Two of the reported six are left alone: "Essential Graphics" is a 3-3 split and
a panel's proper name, and "Null" partly mirrors the English, which itself says
both "Null Object" and "Nulls". Both are translator's choices with no majority
to follow, not corrections.
2026-10-14 21:21:39 +05:00
zitann2020andDeepSeek V4.1 Flash 66a29505a5 i18n(ja): the Settings dialog in Japanese
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-10-15 00:19:47 +09:00
arnav-hiwarkar bed289e2a1 fix(presets): identify copy folder action by label
Follow up on #1210: remove the fixed menu index from automation and click handling, and move the preset-folder documentation into the Effects & Presets section.
2026-10-14 12:09:48 +05:30
arnav-hiwarkar 8041329df8 feat(media-browser): add Copy Source Path 2026-10-14 11:42:13 +05:30
Marco Arnulfo ce437747ed Expressions: accepting a function completion inserts the call parentheses (fixes #1393) 2026-10-14 05:28:14 +02:00
Kristian MyramandClaude Sonnet 5.5 9f02bd2a72 #1368: dragging an effect lights up the layer it will land on
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 00:59:11 +02:00
Kristian MyramandClaude Sonnet 5.5 be3261419b Viewer: Composition Settings… in the composition's right-click menu
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 00:46:05 +02:00
ThemolxandClaude Opus 5.5 f62af4ca73 Guide layers: hidden in nested comps, and in the Timeline context menu, as in After Effects
Guide layers render only in their own comp's viewer: a nested renderer (precomp, collapsed
precomp in 2D, Classic 3D and Advanced 3D, comps read by effects, aux passes, the GPU walk's
resident precomps) now runs with guides off (Renderer::nested_opts), so a precomp's guide
layers no longer show in the parent comp's viewer or in a "Current Settings" render.

The Timeline layer and Composition viewer right-click menus (shared layer_menu) gain a
Guide Layer item (a plain toggle, no check mark) acting on the selection, and guide layers show a guide mark
before their name in the Timeline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:44:40 +02:00
ThemolxandClaude Opus 5.5 03b7a958e5 Solo: exclude other layers even when the soloed layer is outside its time range
In After Effects solo is not time-dependent: while any AV layer is soloed,
non-soloed layers are excluded at every time. The renderer, nested/collapsed
3D paths, engine viewer helpers and viewer hit tests only counted solo layers
active at the current time, so outside the soloed layer's in-out range the
whole comp reappeared. Drop the time condition (audio already ignored it).

Update the #66 viewer regression test to the AE behaviour and add a render
test for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:30:26 +02:00
ThemolxandClaude Opus 5.5 a15a7a4818 Null layers: the Video switch hides them in the Composition viewer, as in After Effects
Every layer gets the Video switch (eye) in the Timeline (nulls, cameras and lights
were excluded by an is_av() check). A selected layer whose eye is off no longer
draws its box, handles, anchor or paths in the viewer. Alt-click on an eye and
Layer > Switches > Hide Other Video now take nulls along.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:04:34 +02:00
Lloyd NicholsonandClaude Opus 5.5 d309d6f1d0 Effects & Presets: drag animation presets onto a layer
Preset rows (text, built-in and user .ecpreset) were click-only, so dragging
one onto a layer did nothing. They now start a DragPayload::Preset drag with
a ghost, and the Timeline, Composition viewer and Effect Controls apply the
preset to the layer it is dropped on, as they already do for effects and as
After Effects does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:04:33 +02:00
zitann2020andDeepSeek V4.1 Flash 5569aad8b5 i18n(ja): four labels After Effects contradicts
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-10-14 01:57:37 +09:00
zitann2020andDeepSeek V4.1 Flash 2ff7639219 i18n(ja): the resolution labels agree with the panel catalog and After Effects
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-10-14 00:57:21 +09:00
zitann2020 9ab33d9758 i18n(ja): the first rows of the Japanese effect catalog (#821) 2026-10-13 23:33:38 +09:00
Jannik Wappler dbc595b0d6 #1220: Hide layer bounds during path editing 2026-10-13 15:38:06 +03:00
arnav-hiwarkar bb1a0e5209 perf(media-browser): reuse listings and cache filename sort keys 2026-10-13 17:42:07 +05:30
pravdomilandClaude Opus 5.5 07168cbf22 Settings: the page list's rows touch, with no gap between them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:07:19 +02:00
arnav-hiwarkar da06216475 perf(presets): reuse cached text and user preset data 2026-10-13 16:48:19 +05:30
Kristian Myram 037a21d5a6 #1200: allow TGA proxies and add import regressions 2026-10-13 10:09:51 +00:00
arnav-hiwarkar b63efeb0d3 perf(project): read file sizes once per sort 2026-10-13 15:12:32 +05:30
Brandon ThomasandClaude Opus 5.5 91ee7bf1b3 cargo fmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:23:52 -04:00
Brandon ThomasandClaude Opus 5.5 6c799f3c3b Batch fixes: tests and catalogs that meet each other once the batch lands together
- Keyboard Shortcuts: Enter is not Delete while the delete confirmation is open (#1113 with #1019).
- Speed graph drag test compares proportions, since the Graph Editor now fits its selection (#1182 with #1109).
- Spanish panel test no longer demands the Chinese catalogs' exact rows (#996 with #1189, #1019).
- Object Matte gets its Simplified Chinese effect-name row (#1199 with #792).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:23:30 -04:00
Brandon ThomasandClaude Opus 5.5 1b4ea03fd2 i18n: a group's translated effect name also draws when it isn't being renamed (#1199 with #1075)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:35:32 -04:00
Brandon Thomas acb77a8c85 Merge pull request #1210 from arnav-hiwarkar/feat/copy-presets-folder-path 2026-10-13 04:35:21 -04:00
Jannik WapplerandClaude Opus 5.5 1765dc53df Tint: Swap Colors (#963) (#1060)
Squash of #1060 by @RavoxX, without the docs/images screenshots (kept out of the repo).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:33:43 -04:00
Brandon Thomas 6d5bcaa058 Merge pull request #1142 from FredApps/fix/1118-video-preview-off-notice 2026-10-13 04:33:21 -04:00
Brandon Thomas 32792ff172 Merge pull request #1199 from cjcwwww/i18n/effect-names
# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
#	docs/gaps.md
#	docs/localization-parity.md
2026-10-13 04:33:20 -04:00
Brandon Thomas 2647357a0b Merge pull request #1206 from cjcwwww/fix/quick-apply-ime 2026-10-13 04:32:17 -04:00
Brandon Thomas f9d6457f6a Merge pull request #1021 from pravdomil/claude/uu-effect-params
# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-13 04:32:16 -04:00
Brandon Thomas 430c968e52 Merge pull request #933 from Themolx/replace-with-precomp
# Conflicts:
#	crates/engine/src/tests_project_items.rs
2026-10-13 04:31:42 -04:00
Brandon Thomas 4574fb62bc Merge pull request #792 from vangel76/gap-object-matte
# Conflicts:
#	crates/ui-egui/src/i18n/ui.rs
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-13 04:30:49 -04:00
Brandon Thomas 120ecb9892 Merge pull request #1026 from FeiLiuEM/fix/1024-symbol-fallback-test
# Conflicts:
#	crates/ui-egui/src/theme.rs
2026-10-13 04:30:02 -04:00
Brandon Thomas aa7a8714bd Merge pull request #1108 from eliasx45/upstream/timeline-editing 2026-10-13 04:29:48 -04:00
Brandon Thomas 287c35dae7 Merge pull request #1109 from eliasx45/upstream/azerty-graph-zoom
# Conflicts:
#	crates/engine/src/commands/time.rs
#	crates/ui-egui/src/panels/timeline.rs
2026-10-13 04:29:47 -04:00