Commit Graph
3391 Commits
Author SHA1 Message Date
Brandon ThomasandClaude Opus 5.5 f6b09d7816 test(ui): the fake sound card waits to pull until the starting frame is checked
Under load its thread pulled samples before the test read the clock, so
'from the first frame' saw frame 1 and a_started_preview_follows_its_sound flaked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 22:13:48 -05:00
Brandon ThomasandClaude Opus 5.5 35ce2186a4 Follow-up to #2804: ProRes frame headers carry the colr atom's colour codes
They said BT.709 for every output, so a non-709 render disagreed with its atom.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 21:53:42 -05:00
Brandon ThomasandClaude Opus 5.5 7441ccf187 Follow-up to #2781: Swedish Keys, File, Top and Bottom read as they're used
Keyframes column, a file field, crop/alignment edges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 21:51:17 -05:00
Brandon Thomas f3cedac8cc Merge PR #2792 2026-11-01 21:50:53 -05:00
Brandon Thomas 1467d94945 Merge PR #2804 2026-11-01 21:50:53 -05:00
Brandon Thomas 4375b689ea Merge PR #2798 2026-11-01 21:50:53 -05:00
Brandon Thomas 6f89617042 Merge PR #2790 2026-11-01 21:50:53 -05:00
Brandon Thomas a658ec736a Merge PR #1266 2026-11-01 21:50:53 -05:00
Brandon Thomas 4515418fd4 Merge PR #2742 2026-11-01 21:50:53 -05:00
Brandon Thomas 546da0a1f5 Merge PR #2679 2026-11-01 21:50:53 -05:00
Brandon Thomas 5068f42601 Merge PR #2781 2026-11-01 21:50:53 -05:00
Brandon Thomas e0cd2914ba Merge PR #2783 2026-11-01 21:50:53 -05:00
Brandon Thomas e80d5c42c2 Merge PR #2771 2026-11-01 21:50:52 -05:00
Brandon Thomas 43d76d38a0 Merge PR #2759 2026-11-01 21:50:52 -05:00
JonRC d0e7e09ecb Export: write a colr atom in ProRes MOVs (#2801)
ProRes renders had no colr atom, so the stream reported no primaries,
transfer or matrix. Write an nclc atom, as FilmCraft does for MOV, with
the codes of what the render path makes: the project's output space when
it has a working space, BT.709 otherwise.

sRGB output stays at transfer 1, which is still open on #340 and #464.
The frames don't change, so the pinned ProRes bytes move by exactly the
atom's 18 bytes.
2026-11-01 22:28:23 -03:00
jayzed80 9bdee07281 fix(path): Wiggle Paths no longer overflows on an absurd speed, time or phase 2026-11-01 22:18:36 +00:00
Jonas Neubauer 9a4c160f0e G2: distinct XML copy name and a name prompt for web Save As (#2788) 2026-11-01 21:08:01 +01:00
Jonas Neubauer 4dac9d04fc G2: Save a Copy starts from "<name> copy" (#2788) 2026-11-01 20:44:57 +01:00
dotCooCoo b133c0500f Project files: read savedBy through craft-ecproj-format's Head
The craft-ecproj-format pin moves to storytold/craft-libs#409's new
head, where Head::read is the one reader and saved_by() is removed.
effectcraft-project's saved_by reads savedBy with Head::read, and from
ReadError::TooNew for a project with a newer schema.

saved_by now returns None for text that is not a JSON object with a u32
schema. EffectCraft calls it only on files Project::from_json opened,
so opening and importing projects are unchanged.
2026-11-01 11:02:30 -08:00
dotCooCoo b1571abaaa Project files: the file envelope comes from craft-ecproj-format
effectcraft-project writes and checks the envelope of .ecproj files with
craft-ecproj-format from craft-libs: File (savedBy, then the saved view
and the project) with to_json and to_json_compact for Save Compact
Project Files, check_schema and its message, SCHEMA_VERSION and
saved_by, which stay re-exported under their names. Project, SavedView
and the schema 1 conversion stay here.

Saved files are byte-identical. saved_by now reads only a JSON object,
so a project written as a JSON array no longer reports a savedBy.
2026-11-01 09:42:43 -08:00
Jonas Neubauer cccd5cba8f G2: Save As starts from the open project's name (#2788) 2026-11-01 18:37:46 +01:00
tylerjenningswandChewybone-sudo 3ab2167e47 Auto-Trace: traced outlines map back into layer space (#2764)
Co-authored-by: Chewybone-sudo <347238078+Chewybone-sudo@users.noreply.github.com>
2026-11-01 09:05:56 -05:00
tylerjenningswandChewybone-sudo 49774ca5f9 Auto-Trace: test that traced outlines map back into layer space (#2764)
Co-authored-by: Chewybone-sudo <347238078+Chewybone-sudo@users.noreply.github.com>
2026-11-01 09:02:42 -05:00
Patrik LermonandClaude Opus 5.5 34b32d60da i18n(sv): translate 85 new strings
Brings the Swedish catalog up to date with upstream main (e71dd629).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 14:36:23 +01:00
becauseno7 25a7d98ebc PDF import: a trailer string in a stream does not trigger the window fallback
A `trailer` marker inside an unreferenced stream followed by `(` and more
than 4 KiB of text made the lexer stop at the window's end, so a later
`/Encrypt` name anywhere in the file refused a plain file. The unbounded
scan read a string there and opened it. The past-the-window fallback now
applies only when no object starts in the window or the first one opens
a dictionary (`<<`, including one split by the window's end).

Regression test with `trailer(` and `trailer[` in a stream and a later
Encrypt name.
2026-11-01 14:44:26 +06:00
becauseno7 98484975c4 PDF import: a name cut by the trailer window is read whole
The pre-scan window could end inside a trailer key, so a decoy like
`/Encrypted` cut right after `/Encrypt` was taken for the Encrypt key
and an unencrypted file was refused. A window that ends mid-token now
ends before that token instead, and the past-the-window fallback reads
the name whole (a real `/Encrypt` cut as `/Encryp|t` is still refused).

Tests for that boundary, for a trailer with a long /ID, and for `#`
without two hex digits staying as written in a name.
2026-11-01 13:31:59 +06:00
zitann2020andDeepSeek V4.1 Flash e62ccd359c docs(effects): rewrap the reflowed comment line
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-11-01 12:07:29 +09:00
tylerjenningsw f4f318f5c0 Expressions: bare source reads the current layer's source (#2671) 2026-10-31 21:12:15 -04:00
tylerjenningsw 1bbf15bbce Expressions: test that bare source reads the current layer's source (#2671) 2026-10-31 21:10:40 -04:00
tylerjenningsw f12154cf4c Cache: bump the renderer version so frames from the old clip clock aren't reused (#2707) 2026-10-31 17:47:02 -04:00
tylerjenningsw 474e73b85c 3D: a model copy's cache key covers the model's Essential Property overrides (#2707) 2026-10-31 17:47:02 -04:00
tylerjenningsw 5b27de98e2 3D: test that a copy of an overridden model clip isn't served the keyed clip's pixels (#2707) 2026-10-31 17:47:02 -04:00
pravdomilandClaude Opus 5.5 aa149d7bbc Shortcuts: deterministic dispatch between panels, physical and logical ranked together
- shortcuts::pick chooses the binding for a key press: narrowest scope, then a
  physical-key binding, then the first. When two other panels (or two active
  contexts) claim the chord at the same rank, neither runs and the status bar
  says which panels own it.
- Physical and logical bindings compete by scope rank in one pass, so a
  narrower logical binding beats a physical one of an unrelated panel.
- An additional viewer (PanelKind::Viewer) ranks as the Composition panel.
- Two contexts on the same keys are reported as a conflict.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 22:35:33 +01:00
zitann2020andDeepSeek V4.1 Flash 4aed358d36 docs(effects): the catalog's comments say what the Japanese interface does
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-11-01 01:56:06 +09:00
zitann2020andDeepSeek V4.1 Flash 7471c9735c i18n(ja): the animator's items fall back to the panel catalog, and the words agree
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-11-01 01:51:43 +09:00
tylerjenningsw a1ea20a52a 3D: a model clip keyed on later starts at its activation time (#2707) 2026-10-31 12:47:37 -04:00
tylerjenningsw 4baeee63e6 3D: tests for keyed model clips starting at their activation time (#2707) 2026-10-31 12:47:37 -04:00
zitann2020andDeepSeek V4.1 Flash 1d20fb1b35 i18n(ja): the menu row and the panel row name the axes the same way
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-11-01 01:13:15 +09:00
becauseno7 cd6c56b78d PDF import: the past-the-window /Encrypt fallback matches escaped names
The fallback searched for the literal bytes `/Encrypt`, so a long trailer
with the key written as `/Encr#79pt` (or any other #-escaped spelling) got
past it. It now finds the last name token that decodes to `Encrypt`, with
the lexer's own name decoding, and checks whether that token ends past the
window. It is still one linear pass per file. Longer names that only start
with `Encrypt` (`/Encrypted`) no longer count.
2026-10-31 22:07:29 +06:00
Brandon ThomasandClaude Opus 5.5 a926aa9182 test(media): measure the in-place movie's peak RSS in its own process
VmHWM is per process; the other tests in the binary ran on parallel threads
and their allocations failed the 64 MiB bound intermittently.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:32:05 -04:00
Brandon ThomasandClaude Opus 5.5 dc1f9eab74 Batch fixes: rustfmt, is_multiple_of in the Vegas test, drop a Swedish row #2718 retired
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:20:24 -04:00
zitann2020andDeepSeek V4.1 Flash c52c93a46c i18n(ja): the animator's button follows the label it is drawn after
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
2026-11-01 00:20:10 +09:00
Brandon ThomasandClaude Opus 5.5 9f78a8db27 Follow-ups to #2740, #2691, #2343: comment quotes the rows; locked viewer uses view3d_label; French track-matte pick whip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:02:39 -04:00
Brandon ThomasandClaude Opus 5.5 2a7888d2c0 Follow-up to #2716: addItem applies in before out; anchor takes exactly [x, y]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:02:15 -04:00
Brandon ThomasandClaude Opus 5.5 4b7767401b Follow-up to #2687: an even sample count keeps the Vegas midpoint
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:58:38 -04:00
Brandon ThomasandClaude Opus 5.5 5802cdc6a4 Follow-up to #2714: a thin bake isn't refused for triangle rounding
A 16384x1 output stacks every grid row onto one pixel row, so a sane warp
visits ~100x its pixels; allow each triangle about two grid cells (CodeRabbit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:58:30 -04:00
Brandon ThomasandClaude Opus 5.5 f282754e50 Follow-up to #1541: Swedish panel 'Third' matches the menu's 'En tredjedel'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:57:18 -04:00
Brandon ThomasandClaude Opus 5.5 ab17551913 Follow-ups to #2690 and #2684: app context-menu style; doc comment back on its test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:56:54 -04:00
Brandon ThomasandClaude Opus 5.5 917f312bc2 Follow-up to #2169: keep layer.deleteAllMarkers layer-only
An empty layers list cleared the composition's markers too (CodeRabbit);
the composition-marker menu uses comp.deleteAllMarkers instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:56:36 -04:00
Brandon Thomas 83b4e36e9b Merge PR #2343
# Conflicts:
#	crates/ui-egui/src/i18n/effects.rs
#	crates/ui-egui/src/i18n/ui.rs
2026-10-31 10:55:46 -04:00