Commit Graph
2367 Commits
Author SHA1 Message Date
Camille Moine 4f3fa4d0fb docs: the Timeline row controls act on the selection (#1849)
One bullet in the Timeline section of docs/agents.md and a note on the
ui-parity Timeline row, next to the other multi-selection fixes.
2026-10-19 09:55:40 +02:00
Camille Moine 16d43346c4 Timeline: the label swatch and the Modes column act on the selection (#1849)
The label swatch's menu, the Blending Mode menu and Preserve Transparency
passed the clicked layer alone, so a colour or a mode had to be set one layer
at a time. They now act on the whole selection, with the Modes column edits
going only to the selected layers that have video, as its cells do.

The preserve-transparency checkbox also gets an automation id, like the cells
around it.
2026-10-19 09:55:24 +02:00
Camille Moine bf7aff11f8 Timeline: layer switches act on every selected layer (#1849)
A switch click on one of several selected layers passed that layer alone to
`layer.setSwitch`, so Lock, 3D, Video (and the rest of the A/V Features and
Switches columns) had to be set one layer at a time.

The click now gives the switch to the whole selection, with the layers it
doesn't apply to left out (3D on a camera, Effect on a layer without effects,
Audio on a layer without audio, ...). The targets are picked when the press
happens, so drawing a row costs nothing more than before. A row that isn't
selected still changes that layer alone, pressing and dragging over rows is
unchanged, and Alt-clicking an A/V feature sets the selected layers apart.
2026-10-19 09:54:16 +02:00
NetterSilverandClaude Haiku 5.5 26636bfb18 Make Fractal Noise evolution progress linearly
Fixes #1816

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 07:00:02 +00:00
Matej Kozlovský d74cb70938 Cryptomatte pick: snap to the effect's input buffer grid, not the preview scale
At preview scales from 0.75 to 1 footage keeps native pixels, a proxy sets
its own buffer scale at any render scale, a Preserve Resolution precomp is
drawn at full size, and earlier effects can pad or offset the buffer, so
snapping to the preview grid could pick a different ID than the rendered
matte. Use the scale and offset of the buffer the Cryptomatte effect
receives (layer_input, rendered once and then cached).

The pixel centre goes to an aux point through effectcraft_effects::aux_point,
which index_map_at now calls too, so the two round identically (a division
vs the reciprocal picked the other ID on a 104 px proxy of 1920 px footage).

An unknown effect uid errors "no such effect" and a layer without pixels
"this layer has no pixels", as effect.pickColor does.
2026-10-19 08:40:16 +02:00
Matej Kozlovský 76098665b0 Cryptomatte: effect.pickCryptomatte picks the ID under a point into the Selection (#473)
Engine part of viewer picking: replace / add / remove the top-coverage ID at a
layer-space point in one undo step, at the time the Selection was read. The
aux channels come from the render's own path (Renderer::layer_aux, shared with
the effect host; footage at its source time, 3D precomps) through a renderer
set up like Session::render (expressions, render prefs, layer cache). An
optional scale snaps the point to the pixel a preview at that resolution
samples. New effects::crypto_select quotes names and falls back to <hex> for
unnamed, wildcard-looking or ambiguous names. effect.cryptomatteAt is the
read-only hover query.
2026-10-19 06:10:27 +02:00
heojunfoandClaude Opus 5.5 4bc40c7ac3 Text: grow Faux Bold per axis under a non-uniform scale (#1676)
Synthetic bold grows a glyph's outline in its own space, so a
non-uniform character Scale stretches it more along one axis. The patch
and layer bounds reserved it through mean_scale and could clip the
stretched side; they now reserve how far the bold reaches along x and y.

A run of solid fills grows its glyphs together in layer space by one
radius, which only matches when the bold stays round there: a bold glyph
whose matrix stretches or skews is no longer gathered into a run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 11:04:36 +09:00
Vikram Bhaskaran d3fd2c58d7 Key browser preview caches on a file generation, and hash bytes only when that key misses.
Replacing a virtual file bumps a counter the UI lookup reads. The content hash runs on that miss, from a callback, so the frame path does not stat every footage item or hash on every store write.
2026-10-19 13:04:16 +11:00
heojunfoandClaude Opus 5.5 a5f096324d Text: draw Faux Bold and synthetic bold (#1676)
The layout marks a glyph synth_bold when Faux Bold is on, or when a bold
style is asked of a family without a bold face, but the renderer never
read it, so both drew as regular.

PlacedGlyph now carries the bold radius (0.03 em, which brings Inter
Regular's stems to Inter Bold's). A bold fill is the outline's coverage
merged with a round stroke twice that wide, and a bold glyph's stroke is
the band between the outline grown by radius ± half the stroke width, so
it follows the bolder shape. Runs of solid fills only merge glyphs of the
same bold radius, and the patch and layer bounds grow by it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 10:36:16 +09:00
Davit MatchakhelidzeandClaude Opus 5.5 7999754a13 i18n(ka): Georgian rows for the panel strings main added; drop one it no longer uses
Copy, Paste, Copy Source Path, Guide Layer and Layer Styles join GEORGIAN in the Chinese order;
Edit Value…, Remove Expression and Effects move there from GEORGIAN_PANELS now that the Chinese
catalogs carry them; Freeze on Last Frame is only a menu command now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-19 03:20:50 +04:00
Davit MatchakhelidzeandClaude Opus 5.5 5a069af3fd Merge i18n-improvements (main merged)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-19 02:58:18 +04:00
Davit MatchakhelidzeandClaude Opus 5.5 7d03c0a1f6 Merge main; context menus use upstream's context_item (#1308)
Upstream now translates the Timeline, Composition and Effect Controls context menus itself, so
command_label is left for the dock's tab titles and the workspace bar, on menu_catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-19 02:58:04 +04:00
Dylan M. Taylor 75fce6b2d8 docs: put SonarCloud and CodeRabbit badges on their own line 2026-10-18 14:47:37 -04:00
Dylan M. Taylor ef74d82902 ci: configure Dependabot for Cargo and GitHub Actions
Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
2026-10-18 12:31:27 -06:00
Dylan M. Taylor 20c03451c0 docs: describe color grading panel, scope SDK plug-in warning, qualify rendering tests, and link parity checklist 2026-10-18 12:51:59 -04:00
Charles BaumerandClaude Opus 5.5 bd961131a4 Media tests: ffmpeg fixtures survive concurrent first runs on Windows
Tests that share a fixture each generate it on a first run and rename
their temp file into place. On Windows the losing rename fails with
PermissionDenied while the winner has the file open. Treat a failed
rename as "another test made it first" when the fixture exists, as
`png_sequence` already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:23:28 +00:00
Charles BaumerandClaude Opus 5.5 4fa31b5e5b Engine tests: clippy passes on Windows (Stills is Unix-only)
`Stills` is only used by the `#[cfg(unix)]` part of
`footage_on_other_computers_is_never_looked_at`. On Windows it was dead
code, so `cargo xtask ci` stopped at clippy (`-D warnings`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:12:55 +00:00
Davit MatchakhelidzeandClaude Opus 5.5 6c6b54a182 Georgian interface text draws from an installed font
Georgian joins the installed-font fallback like Thai, Hebrew and the Indic scripts:
Sylfaen on Windows, SF Georgian on macOS, Noto Sans Georgian or DejaVu Sans on Linux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-18 19:54:25 +04:00
Brandon Thomas 22072d9f25 Merge pull request #1317
# Conflicts:
#	crates/ui-egui/src/panels/effects_presets.rs
#	crates/ui-egui/src/panels/timeline.rs
2026-10-18 11:12:44 -04:00
Brandon Thomas 033890fdcf Merge pull request #1802 2026-10-18 11:12:27 -04:00
Dylan M. Taylor 99bdcde092 docs: add SonarCloud and CodeRabbit badges to README 2026-10-18 11:01:31 -04:00
FredApps b0acbbe121 CLI: regression tests for render --progress (#1778) and template media values (#1787)
- render --progress with a piped stderr writes well-formed
  `progress <done> <total> <elapsed> <left|->` lines, one per change, and
  the same render without the flag writes none.
- A template's Media Replacement control takes {"path"|"file"|"media": …},
  is found by name ignoring case, and a path that cannot be imported fails
  with an error naming the control and the path.
2026-10-18 16:46:06 +02:00
Dylan M. Taylor cb70a0cdbe docs: replace Lumetri effect reference with generic color grading 2026-10-18 10:42:59 -04:00
Dylan M. Taylor c7d8824e09 docs: drop references to competing commercial software 2026-10-18 10:42:22 -04:00
FeiLiuEM 2fbcc6b59a ui: the interface prefers the platform's UI faces, rendered text keeps the print ones
Windows ships a UI variant of its Japanese and Chinese families (`Meiryo`/`Meiryo UI`, `Yu
Gothic`/`Yu Gothic UI`, `MS Gothic`/`MS UI Gothic`, `Microsoft YaHei`/`Microsoft YaHei UI`,
`Microsoft JhengHei`/`Microsoft JhengHei UI`) whose kana and kanji are drawn for the screen, and its
own link table for `Segoe UI` picks the UI one for everything it draws. The interface should ask for
it - but the same lists feed `fonts::fallback_for`, which shapes composed frames, so reordering them
would change how existing projects render. The two orders are therefore separate: this leaves
`crates/text/src/fonts.rs` exactly as it is and gives the interface its own candidate list in
`install_script_fallbacks`, which falls back to the shared choice when the platform has no UI variant,
none is installed, or it does not cover the probe.

`PMingLiU` is in the interface list for its proportional spacing, not as a sibling of `MingLiU`: it is
MingLiU's proportional relative.

The rendered order is pinned by a test now: the Japanese list keeps `Yu Gothic` ahead of `Yu Gothic
UI`, and no UI name appears in the lists a document renders with. `the_interface_asks_for_the_
platforms_ui_faces` pins the interface list and checks that every other script the install probes has
none, so a script that draws correctly in any face keeps the shared order.

Review fixes: the locale is mapped once (the call passes the language, the helper maps it), the new
test sits after the #394 test it had split from its doc comment, and the fonts.rs test asserts instead
of panicking inside a closure. Rebased on current main; #1395 has not landed yet, so there is nothing
to rebase after it.
2026-10-18 22:28:56 +08:00
Brandon ThomasandClaude Opus 5.5 f3f24ef189 Land batch: fix clippy lints and the #1424 test after #1413 changed layer_menu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:42:33 -04:00
Brandon Thomas 7804cfd223 Format merged community PRs 2026-10-18 09:37:06 -04:00
Brandon Thomas 10cf6690c4 Merge pull request #1730
# Conflicts:
#	crates/engine/src/commands/prop_groups.rs
2026-10-18 09:36:40 -04:00
Brandon Thomas 7c99ba6eeb Merge pull request #1696
# Conflicts:
#	contributors/people.toml
2026-10-18 09:36:05 -04:00
Brandon Thomas a594abf4f7 Merge pull request #1652
# Conflicts:
#	docs/gaps.md
2026-10-18 09:35:51 -04:00
Brandon Thomas 17c4b02149 Merge pull request #1790 2026-10-18 09:35:35 -04:00
Brandon Thomas 043eb5a157 Merge pull request #1787 2026-10-18 09:35:35 -04:00
Brandon Thomas dfff3f9010 Merge pull request #1785 2026-10-18 09:35:35 -04:00
Brandon Thomas 692feb7925 Merge pull request #1778 2026-10-18 09:35:35 -04:00
Brandon Thomas 1dac4c0e6b Merge pull request #1759 2026-10-18 09:35:35 -04:00
Brandon Thomas 0867d837d4 Merge pull request #1753 2026-10-18 09:35:35 -04:00
Brandon Thomas 869ce1db39 Merge pull request #1752 2026-10-18 09:35:35 -04:00
Brandon Thomas 681d99c0e7 Merge pull request #1731 2026-10-18 09:35:35 -04:00
Brandon Thomas d9e3c56404 Merge pull request #1721 2026-10-18 09:35:35 -04:00
Brandon Thomas 436f826c3d Merge pull request #1712 2026-10-18 09:35:35 -04:00
Brandon Thomas 415e353dc0 Merge pull request #1711 2026-10-18 09:35:35 -04:00
Brandon Thomas fcc9e853de Merge pull request #1709 2026-10-18 09:35:35 -04:00
Brandon Thomas a01f681551 Merge pull request #1704 2026-10-18 09:35:35 -04:00
Brandon Thomas 072a7f7af9 Merge pull request #1695 2026-10-18 09:35:34 -04:00
Brandon Thomas 30efc87a2a Merge pull request #1694 2026-10-18 09:35:34 -04:00
Brandon Thomas 40fe8ef969 Merge pull request #1689 2026-10-18 09:35:34 -04:00
Brandon Thomas fc3d228616 Merge pull request #1688 2026-10-18 09:35:34 -04:00
Brandon Thomas 010065e290 Merge pull request #1679 2026-10-18 09:35:34 -04:00
Brandon Thomas 4d61409662 Merge pull request #1672 2026-10-18 09:35:34 -04:00
Brandon Thomas b26b7ec968 Merge pull request #1664 2026-10-18 09:35:34 -04:00