Commit Graph
3793 Commits
Author SHA1 Message Date
Brandon Thomas 736c0ec4b4 Merge pull request #1430 2026-10-18 09:35:33 -04:00
Brandon Thomas 2d47103425 Merge pull request #1424 2026-10-18 09:35:33 -04:00
Brandon Thomas c44c51212c Merge pull request #1413 2026-10-18 09:35:33 -04:00
Brandon Thomas 12d8e13bae Merge pull request #1406 2026-10-18 09:35:33 -04:00
Brandon Thomas c19421b1a7 Merge pull request #1376 2026-10-18 09:35:33 -04:00
Brandon Thomas 746b164383 Merge pull request #1375 2026-10-18 09:35:33 -04:00
Brandon Thomas a32b65cb28 Merge pull request #1369 2026-10-18 09:35:33 -04:00
Brandon Thomas 6d4837c08b Merge pull request #1362 2026-10-18 09:35:33 -04:00
Brandon Thomas 53c84d7342 Merge pull request #1356 2026-10-18 09:35:33 -04:00
Brandon Thomas b72425a28d Merge pull request #1334 2026-10-18 09:35:33 -04:00
Brandon Thomas de7c8d6dd6 Merge pull request #1271 2026-10-18 09:35:33 -04:00
Brandon Thomas 6648c5befe Merge pull request #1269 2026-10-18 09:35:33 -04:00
Brandon Thomas f16ef4a6b5 Merge pull request #1265 2026-10-18 09:35:32 -04:00
Brandon Thomas 25f8bb17f4 Merge pull request #1216 2026-10-18 09:35:32 -04:00
Brandon Thomas bb8dd41af1 Merge pull request #1087 2026-10-18 09:35:32 -04:00
NetterSilverandClaude Haiku 5.5 d58fe2991d Format negative Audio Samples time as a signed timecode
Found while testing crates/time/src/lib.rs:383-387

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 14:21:15 +02:00
Kristian Myram cffa1f25d0 fix(shapes): update inner controls when Polystar type changes (#1685) 2026-10-18 10:05:57 +00:00
MarekSpodBiedry 0e7f525a81 Keep the target's paint when pasting Merge Paths (#1681) 2026-10-18 10:57:23 +02:00
MarekSpodBiedry 4f49017329 Merge remote-tracking branch 'origin/main' into review-1730 2026-10-18 10:56:01 +02:00
sanyamsingh001andCodex 2de015fe9f Fix HexTile centerline cell selection
Evaluate the third cube coordinate symmetrically to retain the intended centerline tie. Keep the existing pixel oracle and tolerance.

Scope the Mem fixture mutex unwrap allowance so the original strict CI can validate this base.

Co-authored-by: Codex <codex@openai.com>
2026-10-18 05:52:04 +00:00
Ikki Nishihara 71a9ab0852 G9: translate the new panel labels into Japanese 2026-10-18 14:06:19 +09:00
Ikki Nishihara b333f08728 G9: integrate prerequisite panel label wiring (#1581) 2026-10-18 13:22:26 +09:00
Kristian Myram 5939735c0b fix(i18n): follow browser language preferences (#1700) 2026-10-18 02:25:40 +00:00
Higgs32584andClaude Opus 5.5 46040928c8 #1615: cap CPU frames in flight during export (EFFECTCRAFT_CPU_INFLIGHT)
CPU renders kept one frame per thread in flight with no cap, so heavy comps
could be OOM-killed. EFFECTCRAFT_CPU_INFLIGHT=N renders at most N frames at
once through the existing capped path; unset keeps today's behaviour. With a
GPU cap too, the smaller cap holds for the whole batch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 21:56:54 -04:00
Egon5000 09dad1a51f Timeline: a shape group's inner Contents draws no row, as After Effects elides it 2026-10-18 02:49:56 +02:00
MarekSpodBiedry 651ee5a78e Resolve effects/<match name> property paths in anim.applyPreset (#1746) 2026-10-18 01:10:30 +02:00
dotCooCoo aff4b082d7 Fix #341: on macOS, a quit from a visible window goes through terminate:
Quit EffectCraft and Finder's Quit send `ViewportCommand::Close`, and
the close button sends the window's close request. In each case eframe
drops the window while AppKit's run loop is still running. On a Mac
with a Touch Bar, AppKit's Touch Bar code then raises an uncaught
Objective-C exception (`-[_NSTouchBarFinderObservation invalidate]`)
and the app crashes (storytold/craft-libs#3).

After the unsaved-changes check, `close_or_quit` calls
`craft_quit::on_close_request` from craft-libs, pinned to the rev that
craft-docpath already uses. When nothing holds the window open, it
cancels the close and quits through `-[NSApplication terminate:]`,
which still runs `on_exit` (window position, workspace, crash-recovery
cleanup). The prompt for a modified project still holds the window.
The window close after a lost graphics device takes the same route.
On other platforms it does nothing. pdfcraft adds craft-quit the same
way (storytold/pdfcraft#1533).

A quit while the window is minimized or hidden still closes the window
as before: eframe does not run `ui` then, and the unsaved-changes check
and the new call both run from `ui`.

`terminate:` ends the process before `eframe::run_native` returns, so
the log line for the closing window moves from `main` into `on_exit`.
2026-10-17 15:38:06 -07:00
Brandon ThomasandClaude Opus 5.5 bba7abd224 Build: gate tests_services with a plain cfg(test) so clippy treats it as test code
clippy's allow-unwrap-in-tests only recognises #[cfg(test)], not cfg(all(test, ...)),
so cargo xtask ci failed on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 18:15:45 -04:00
Kristian Myram 114d8709a1 1063: use canonical text animator match names and resolve main 2026-10-17 20:50:55 +00:00
Kristian Myram f64cd5ce38 1010: preserve easing while baking parented Orientation 2026-10-17 20:44:28 +00:00
Madhav AgarwalandDeepSeek V4.1 Flash Free b113278a1c Fix #1275: open the commands' file dialogs without blocking the frame on Linux
rfd's Linux backend goes through the XDG desktop portal, and a blocking
`rfd::FileDialog` leaves the main thread waiting on the portal's answer
without pumping winit's events: while the Open dialog is up the window stops
answering the compositor, which offers to force-quit the app ("EffectCraft is
not responding"), until a file is picked.

The non-blocking host hook for the commands' dialogs (`rfd::AsyncFileDialog`
on a worker thread, run when the dialog closes) was macOS-only since #511.
Install it on Linux too. Windows keeps the blocking pickers (its dialog pumps
its own messages), and the panel buttons' pickers (Settings, effect file
pickers) are unchanged.

Checked headlessly against a mock XDG portal: with the hook the main thread
stays in the event loop while a worker blocks in the portal wait, `ui.inspect`
still answers 7.5 s after the dialog opened, and an answered dialog runs
File ▸ Import; without it the main thread itself blocks in the portal wait and
the app answers nothing until the dialog closes.

Co-Authored-By: DeepSeek V4.1 Flash Free <noreply@deepseek.com>
2026-10-18 00:48:08 +05:30
skylar taylor-barrick 2d805d1b69 Merge pull request #1748 from skylartaylor/import-and-open
Import templates and open originals within their own folders
2026-10-17 12:13:54 -06:00
tylerjenningsw c7715a3f2d Footage: a proxy in use that can't be decoded says why (#1701)
The picture comes from an item's proxy while Use Proxy is on, but the
Project panel, the Viewer, project.summary and footage.info asked only
about the item's own file: a proxy that couldn't be decoded (an AVI with
an unsupported codec, say) left the layer empty with no reason given.
They now ask FootageSource::item_problem, which gives the proxy's reason,
said to be the proxy's, for footage and compositions alike.
2026-10-17 14:02:18 -04:00
tylerjenningsw 93a9295125 File dialogs: offer every movie type the importer reads (#1701)
Import and Set Proxy build their filters from the shared movie list, so
they offer AVI; the web build's file picker gets the same list.
2026-10-17 11:35:05 -04:00
tylerjenningsw e26b4af5c0 Media Browser: list movies by the importer's list (#1701) 2026-10-17 11:35:05 -04:00
tylerjenningsw bed49c4959 Media: import AVI (#1701)
One list of movie extensions, in effectcraft-project, with AVI added:
FilmCraft reads AVI 1.0 / OpenDML. Tests against ffmpeg fixtures: Motion
JPEG with PCM audio, an unsupported codec (imports and says why it has no
picture), a file that isn't an AVI (an import error), and a damaged one
(a truncated recording imports as far as it goes; a garbled packet loses
its own frame only).
2026-10-17 11:35:05 -04:00
Moein Saharkhiz 8e59ccdb3a Fix #1231: keep autosave completion tied to its originating project (#1330) 2026-10-17 08:58:56 -06:00
tylerjenningsw ca724a3d84 Media: downmix 7.1 AAC in the order FilmCraft now delivers it (#1701)
FilmCraft reorders AAC channel configuration 12 (7.1) to WAVE/SMPTE order,
as it does 3 to 6, so 7.1 AAC's left channel was mixed as the centre. The
downmix oracle test gains 6.1 (a program config element, left in AAC's
order) and 7.1 AAC fixtures.
2026-10-17 10:53:05 -04:00
tylerjenningsw 01ad187b97 Media: drop the AIFF workaround dependency (#1701)
FilmCraft's codecs now turn on symphonia's AIFF reader themselves.
2026-10-17 10:53:04 -04:00
MarekSpodBiedry b8d52cd8c4 Paste path operators below the shapes they act on (#1681)
Pasting Trim Paths, Wiggle Paths or a paint into a shape layer with nothing
selected put it on top of Contents, where it acts on no shapes. It now goes
to the bottom, as Add places it. Also fixes #1629.
2026-10-17 14:37:42 +02:00
MarekSpodBiedry 0e5b366574 Keep CC Simple Wire Removal between points A and B (#1724) 2026-10-17 14:33:06 +02:00
Egon 5000 5bcc9ed1e9 Merge remote-tracking branch 'origin/main' into menu-bar-native-behaviour
# Conflicts:
#	crates/ui-egui/src/menus.rs
2026-10-17 13:58:19 +02:00
p01ntov be9c9077cd G2: tessellate viewer path overlays in screen space 2026-10-17 13:56:35 +03:00
arnav-hiwarkarandClaude Opus 5.5 c28daa479b #1714: test several comps, negative and malformed saved times
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:35:12 +05:30
arnav-hiwarkarandClaude Opus 5.5 ea67c46880 #1714: doc comments name the saved current times
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:40:44 +05:30
arnav-hiwarkarandClaude Opus 5.5 b9172fec2f #1714: reopen each comp at its saved current time
Layer times were already saved and read back as exact ticks; the values in
the issue are 34f, 315f and 3033f at 59.94 fps. The viewer was black because
the playhead wasn't saved: a reopened comp started at 0, before its layers.
The project file's view (`activeComp`, `openComps`) now also records each
comp's current time (`compTimes`), restored on open within the comp's frames.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:32:14 +05:30
MarekSpodBiedry 7146006c15 Duplicate the selected text animator or selector instead of the whole text layer (#1665) 2026-10-17 07:50:03 +02:00
MarekSpodBiedry 8f74c3790e Replace non-ASCII characters in EXR layer names so ProEXR export no longer panics (#1702) 2026-10-17 07:46:32 +02:00
heojunfoandClaude Opus 5.5 ee5c9ac2dd Advanced 3D: Accepts Shadows Only draws just the shadow (#1691)
The Advanced 3D renderer folded Accepts Shadows (Off/On/Only) into a
bool, so a shadow catcher set to Only drew as an ordinary lit surface.
The material now carries shadows_only. Such a fragment draws black at
the strongest shadow a light casts on it, as Classic 3D does, and it
goes in the blended pass so what is behind it shows through. The CPU
shader and advanced3d.wgsl get the same branch.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 13:31:08 +09:00
Matej Kozlovský 0fbe76b2bf Cryptomatte: CryptoAux enum instead of a positional bool; GPU test for every display mode (#473)
crypto_aux_image_with takes CryptoAux::{ColorsAndMatte, MatteOnly}, and
CryptoAux::for_display holds the rule for which displays read the ID
colours. A new GPU test checks every display x Matte Only against the CPU,
so the GPU fails the test if the shader starts reading RGB in a mode that
skips it (checked by mutation: forcing MatteOnly fails display 0).
2026-10-17 01:48:48 +02:00