Commit Graph
1801 Commits
Author SHA1 Message Date
Vikram Bhaskaran f5c6487cf1 Reveal enabled Time Remap on U even with no keys left (#990)
anim.reveal keyframes/animation only matched keyframed top-level properties,
so Time Remap vanished from U once its keys were deleted even though enabling
remapping is itself the modification (and freshly enabled remaps, which get
two keys, kept showing). Match the bare timeRemap prop for both kinds, as
modified already did.
2026-10-13 00:50:56 +11:00
Vikram Bhaskaran 66a6b99d12 Share the Scale Constrain Proportions link between Properties and Timeline (#956)
The Properties panel kept its own ephemeral per-layer link toggle, so
unlinking Scale there left the Timeline linked and vice versa, and its edit
math differed from the Timeline's. Use the shared per-property unlinked set
and widgets::constrained, with the stable match id instead of the display
name, plus Alt-edits-one-axis like the Timeline.
2026-10-13 00:42:54 +11:00
Vikram Bhaskaran 341076359a Nudge selected layers with the arrow keys from any panel but Project (#961)
The viewer.nudge shortcuts bailed out unless Composition, Viewer or Timeline
had focus, so with any other panel focused the arrows silently did nothing.
After Effects nudges from almost anywhere; only the Project panel owns the
arrows for its own keyboard navigation. Typing, dialogs, menus and selected
mask vertices still keep the keys.

Tests: arrow nudge from Effect Controls, no nudge from Project, Shift+arrow
10x, time untouched, click-row path.
2026-10-13 00:39:37 +11:00
Vikram Bhaskaran cbc1ce26e2 Cover timeline right-click Pre-compose grouping the whole selection (#985, #1003)
Right-clicking selected layers and choosing Pre-compose grouped only the
right-clicked layer in 0.8.0 while Layer > Pre-compose grouped all of them.
The menu plumbing was fixed since; add a regression test driving the dialog
from both the outline row and the layer bar and asserting both selected
layers end up nested in the new composition.
2026-10-13 00:35:59 +11:00
pravdomilandClaude Opus 5.5 b0ea0e787b UI: confirm before deleting a user template or a shortcut preset
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:08:06 +02:00
pravdomilandClaude Opus 5.5 fbb74339da GPU Information: Enter presses OK
The message box's only button is OK, the default; Enter now dismisses it
(back to Settings when opened from there), as Escape already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:07:05 +02:00
FeiLiuEM dc1b048f8a text: the Chinese fallback families follow the script the locale asks for
The Han fallback list carried a Simplified and a Traditional face for every platform (Microsoft YaHei
next to Microsoft JhengHei, PingFang SC next to PingFang TC), Simplified first. The fallback search
keeps the first family whose face covers the character, and the two scripts share their code points -
only the glyph forms differ - so a zh-hant interface was drawn with Simplified forms, and a
Traditional face could not win on a machine that also had a Simplified one.

The list is now two, picked by the script the locale in force asks for: Hant, or a Taiwan, Hong Kong
or Macao region. A bare zh stays Simplified, as the interface's own locale mapping resolves it.
`asks_traditional_chinese` normalises case and separators, and `chinese_families_for` is pure, so the
choice is testable without installed fonts. The Han order and the Japanese and Korean lists are
untouched.

Verified: cargo fmt --all --check clean, cargo clippy -p effectcraft-text --all-targets -- -D warnings
clean, cargo test -p effectcraft-text 54 tests pass.
2026-10-12 20:49:02 +08:00
Marco Arnulfo 424dcab40b Shortcuts: Numpad * marks the selected layers (#976)
Numpad * always added a composition marker. As in After Effects, it now
adds a layer marker to the selected layers at the current time, and a
composition marker only when no layer is selected.
2026-10-12 14:43:18 +02:00
Marco Arnulfo 3174e68d0e Timeline: Markers ▸ Add Marker in the layer context menu (#976)
Right-clicking a layer offered no way to mark it. The layer context menu
now has After Effects' Markers submenu with Add Marker (layer.addMarker,
as Layer ▸ Markers ▸ Add Marker), which marks the right-clicked layer, or
the selection it belongs to, at the current time. The submenu title reuses
the menu catalogs' "Markers" translation in the panel catalogs.
2026-10-12 14:43:18 +02:00
ThemolxandClaude Opus 5.5 9e66e0d2ec New comps from footage get a unique name, as Duplicate does
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:22:59 +02:00
ThemolxandClaude Opus 5.5 e9c8d703a7 Rotation tool: keep counting past a full turn, as in After Effects
The viewer's Rotation tool wrote start rotation + (atan2 angle now - atan2 angle at
press), so the value jumped a full revolution back whenever the pointer crossed
atan2's ±180° seam (left of the anchor) and could never pass 360°. Sum the
per-frame angle change, wrapped to (-180°, 180°], instead: the value keeps
growing across revolutions in both directions (1x +0.0°, -1x -90.0°…), Shift
snaps the accumulated value to 45°, other selected layers follow, and one drag
is still one undo step. Non-finite angles turn by nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:12:12 +02:00
Marco Arnulfo e2188c436c Portable mode: a portable.txt beside the exe keeps settings in EffectCraftData (#993) 2026-10-12 13:42:01 +02:00
Matej Kozlovský 47dbd8dbd5 Cryptomatte: the rank planes are resolved once per evaluation and the GPU path reduces them on all cores, instead of formatting and looking up channel names for every pixel in a single-threaded loop (#473)
AuxChannels::crypto_rank_planes resolves a layer's (ID, coverage) planes once; crypto_ranks keeps its signature on top of it. The CPU effect and the GPU effect's aux image (effectcraft_effects::crypto_aux_image, rayon) index the planes per pixel. Output is bit-identical.
2026-10-12 13:29:03 +02:00
Marco Arnulfo d9b8f65d7c Render Queue: the failure toast says why the render failed (#568) 2026-10-12 13:23:06 +02:00
RealtaNua 15385121b1 Contributors: Nael-Nathanael's entry (GitHub profile name) 2026-10-12 17:40:15 +07:00
RealtaNuaandClaude Opus 5.5 649ba2e8cf Desktop: an unknown option or a bad --control port stops the launch (#997)
The desktop app imported any argument it didn't know as a file (writing it to Recent Footage)
and dropped a missing or non-numeric --control value, starting without a control server.
parse_args now returns an error for an unknown option, a --control value that isn't a port from
1 to 65535, or a bad EFFECTCRAFT_CONTROL_PORT (checked only when --control isn't given); main
prints it and exits with status 1 before anything starts. --control=<port> works, and -- ends
the options so a file named -x can still be opened.

Tests: parse_args unit tests, and tests/args.rs runs the binary with its own settings folder
and checks the exit, the message and that nothing was written.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 17:40:15 +07:00
Brandon ThomasandClaude Opus 5.5 9efe75330c Release prep: 0.9.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:44:26 -04:00
Brandon ThomasandClaude Opus 5.5 bfea3d1253 i18n: Czech entries for the extrusion Front/Bevel/Side/Back Color submenus
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:30:10 -04:00
Diego Ospina ea5e629d1a i18n(es): Spanish panels, dialogs and tooltips
506 rows, the Chinese catalogs' source list, read by catalog("es");
a test pins it to that list and checks a few lookups.

Models: Opus 5.5, Sol 6.1, DeepSeek V4 Flash
2026-10-12 04:29:09 -05:00
Brandon Thomas af671f6997 Merge pull request #987 from Losminek/cs-ui
i18n: add Czech (cs) interface language

# Conflicts:
#	crates/engine/src/prefs.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/ui.rs
#	docs/localization-parity.md
2026-10-12 05:22:10 -04:00
Brandon Thomas 84c6281da9 Merge pull request #984 from MarekSpodBiedry/issue-957
Show the Continuously Rasterize switch on vector footage layers (#957)

# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-12 05:21:57 -04:00
Brandon Thomas cb59a959f4 Merge pull request #983 from MarekSpodBiedry/issue-974
Scale the timeline waveform by the layer's Audio Levels (#974)
2026-10-12 05:21:55 -04:00
Brandon ThomasandClaude Opus 5.5 61aaf83612 Fix tests and two behaviours after the community batch
- Renderer: no cover step for adjustment layers (#686); their buffer is the comp below.
  Restores a single CPU step in split adjustment stacks.
- Effect Controls rename (#953): focus the name field the frame it exists. Focusing an id
  not yet drawn left AccessKit with a focus outside its tree (a panic in the consumer).
  The tests double-click at 60 fps, within egui's double-click time.
- i18n: Russian, French and German entries for Copy Frame to Clipboard and the extrusion
  Front/Bevel/Side/Back Color submenus added by today's other PRs.
- Tests: "fr" is now a valid language; the marker dialog's comment is focused on open
  (#922), so Enter-is-OK is tested with the focus elsewhere; the toolbar gradient tests
  give the selected layer its paint kind, since the toolbar mirrors it (#732).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:08:58 -04:00
Brandon Thomas bbc3a231c7 Merge pull request #928 from storytold/release-pass-azure-secrets
Release workflow: pass the Azure signing secrets
2026-10-12 04:29:35 -04:00
Brandon ThomasandClaude Opus 5.5 d1e6aa2e85 clippy: needless borrows at the context_menu calls
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:28:59 -04:00
Brandon ThomasandClaude Opus 5.5 6baff9f5fe Integration fixes for the community batch
- Footage sources: the cancellable wrapper (#784) forwards frame_with (#752 float curves)
  and problem (#887); problem's default lives on the trait.
- Media: a called-off decode (#784) is not a footage problem (#887).
- Effect Controls rename (#953): Escape cancels (egui drops focus on Escape the same
  frame), the Rename item is translated; regression test.
- i18n (#873): drop the /out-i18n/ ignore rule and the note about an uncommitted script.
- Tests: text range selector caps (#926) re-borrow the layer; the RAM preview test (#793)
  sets the comp's own Resolution (#462).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:27:59 -04:00
Brandon Thomas ac37493026 Merge pull request #873 from pechnikov2026-star/i18n-ru-fr-de
i18n: add Russian, French and German menu catalogs
2026-10-12 04:24:29 -04:00
Brandon Thomas 5f386cc97c Merge #938 from nanox333/codex/fix-712-character-eyedropper (without the demo screenshot)
Add Character Fill and Stroke eyedroppers
2026-10-12 04:24:28 -04:00
Brandon ThomasandClaude Opus 5.5 37c4e98502 Character eyedroppers: the sampling hints go through the catalog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:23:58 -04:00
Kristian Myram b6919500ee Character eyedropper test: a compact layout for the demo snapshot 2026-10-12 04:23:51 -04:00
Brandon Thomas f28901c6e3 Merge pull request #953 from Ni-zav/fix/944-rename-expression-control-s20261012T0915JKT
Fix: rename expression control
2026-10-12 04:23:20 -04:00
Brandon Thomas 50a89c48e9 Merge pull request #130 from storytold/fix/synthetic-modifiers
Control: ui.click / ui.drag hold their modifiers for the whole gesture

# Conflicts:
#	crates/ui-egui/src/lib.rs
2026-10-12 04:23:11 -04:00
Brandon Thomas 2ea7220e49 Merge pull request #916 from pravdomil/claude/composition-maximize-zoom-fit-86627e
Viewer: Fit up to 100% follows the panel size

# Conflicts:
#	crates/ui-egui/src/panels/viewer_tools.rs
#	crates/ui-egui/tests/ui_viewer.rs
2026-10-12 04:22:53 -04:00
Brandon Thomas 617412b555 Merge pull request #888 from vangel76/fix-882-viewer-pixel-exact
#882: pixel-exact Composition viewer at 100 % and above

# Conflicts:
#	crates/ui-egui/src/menus.rs
2026-10-12 04:22:01 -04:00
Brandon ThomasandClaude Opus 5.5 6dae51622f Dialogs: vertical-only modals (#937) on the modal_fit layout
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:21:37 -04:00
Brandon Thomas 6b69881826 Merge pull request #686 from vbasky/fix/659-text-effect-bounds
Effects: text and shape layers run their stack over the whole layer region (#659, #658)
2026-10-12 04:21:15 -04:00
Brandon Thomas b2d05582e0 Merge pull request #462 from storytold/fix/417-viewer-resolution
Viewer: each composition keeps its Resolution in the project, as in After Effects (#417)

# Conflicts:
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/panels/viewer_tools.rs
2026-10-12 04:21:14 -04:00
Brandon Thomas bb7f9b421f Merge pull request #980 from nanox333/codex/fix-978-project-settings-dialog
Fix #978: widen Project Settings dialog

# Conflicts:
#	crates/ui-egui/src/panels/forms.rs
2026-10-12 04:21:13 -04:00
Brandon Thomas fe439f6e9c Merge pull request #979 from nanox333/codex/fix-958-vector-context-menu
Fix #958: add vector conversion to layer context menus

# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-12 04:21:11 -04:00
Brandon Thomas 8dc91891e9 Merge pull request #969 from webdevtodayjason/fix/nested-svg-viewport
SVG: percentages inside a nested <svg> resolve against its own viewport

# Conflicts:
#	contributors/people.toml
2026-10-12 04:21:10 -04:00
Brandon Thomas 6bbdd8cdcc Merge pull request #954 from SteamSmith/fix/file-urls
engine: build well-formed file:// URLs for Edit Original, Reveal and File.execute
2026-10-12 04:21:09 -04:00
Brandon Thomas 7864ea41ae Merge pull request #951 from HEOJUNFO/fix-939-noise-mask
Effects: Fractal and Turbulent Noise stay inside the layer's alpha (#939)
2026-10-12 04:21:08 -04:00
Brandon Thomas 8e6c3e0e68 Merge pull request #950 from Themolx/trim-selected-layers
Timeline: trim all selected layers together

# Conflicts:
#	crates/engine/src/tests_timeline.rs
2026-10-12 04:21:07 -04:00
Brandon Thomas bfb282d47c Merge pull request #937 from nanox333/codex/fix-828-gpu-info-dialog
Keep GPU Information dialog layout steady

# Conflicts:
#	crates/ui-egui/src/panels/dialogs.rs
#	crates/ui-egui/tests/ui_settings_info.rs
2026-10-12 04:21:06 -04:00
Brandon Thomas af374a924d Merge pull request #936 from nanox333/codex/fix-902-essential-graphics-context
Open Essential Graphics from blank Timeline context menu
2026-10-12 04:21:05 -04:00
Brandon Thomas 777b59a391 Merge pull request #935 from aniliashenko/comp-presets
Composition Settings: save and delete your own presets

# Conflicts:
#	crates/engine/src/commands/comp_more.rs
2026-10-12 04:21:04 -04:00
Brandon Thomas fbcb5b44b0 Merge pull request #934 from nanox333/codex/fix-910-fullscreen-shortcut
Fix full-screen shortcut shown on Windows
2026-10-12 04:21:03 -04:00
Brandon Thomas 0d6adb07bf Merge pull request #930 from aniliashenko/text-edit-from-timeline
#637: double-clicking a layer's bar acts like its name; text layers edit their text

# Conflicts:
#	crates/ui-egui/tests/ui_text_edit.rs
2026-10-12 04:21:02 -04:00
Brandon Thomas 9fa0036144 Merge pull request #927 from pravdomil/claude/view-go-to-time-fix-1e3c21
fix: View > Go to Time accepts the dialog's float frame [skip ci]

# Conflicts:
#	crates/engine/src/tests_timeline.rs
2026-10-12 04:21:01 -04:00
Brandon Thomas fa8a1376f9 Merge pull request #926 from MarekSpodBiedry/issue-908
Cap text animator range selector Start, End and Offset (#908)
2026-10-12 04:20:59 -04:00