Commit Graph
1049 Commits
Author SHA1 Message Date
bflatastic f558305795 Merge remote-tracking branch 'refs/remotes/pr/1830' into HEAD 2026-10-30 15:42:23 +07:00
bflatastic 279b0ab4e3 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 15:00:43 +07:00
Kristian Myram c5671f6569 #1830: require exporter support before skipping duplicate frames 2026-10-30 08:59:53 +01:00
BFlat 0555b5263a Merge pull request #2668 from nanox333/codex/gradient-stroke-width
Shape toolbar: keep gradient stroke widths
2026-10-30 14:51:50 +07:00
Kristian Myram 37561799f6 #1830: check virtual output paths in web renders 2026-10-30 08:42:03 +01:00
Kristian Myram b6c3e6dc39 #1830: detect sequence padding and individual-file collisions 2026-10-30 08:26:09 +01:00
Kristian Myram f0b5e4eeff #2668: cover mixed strokes and stretched layer timing 2026-10-30 08:23:02 +01:00
bflatastic 4ced49aa95 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 14:04:46 +07:00
Kristian MyramandClaude Sonnet 5.5 615c4cdffb Render Queue: two outputs of one job never write the same file, and default names avoid the queue's other outputs
Two queue items that resolve to one output (the same comp added twice, a duplicated item) replaced
each other's file inside one job. Nothing is on disk when the job starts, so no check said anything.

- A default output name (renderQueue.add, render.preRender, comp.saveFrameAs {queue},
  file.createProxy) that another item of the queue writes, in any output module or segment, is
  numbered like a footage collision: Main.mp4, Main_1.mp4, Main_2.mp4. Sequences are compared by
  the frames they write, so two stills of one comp at different times keep their names. Names a
  caller gave and names already stored in items are never changed.
- Outputs of one job that still name the same file (explicit names, renderQueue.duplicate, output
  modules, segments) refuse the whole render before anything is written, naming both items.
  Sequences clash only on frames both write; a later item with Skip Existing Files leaves the
  earlier item's frames alone; items refused for footage take no part.

Refusing the whole render, not just the later item: which of two items should keep the file is the
user's to say, and failing only the later one would leave a half-rendered queue found after they
left. renderQueue.duplicate stays a verbatim copy so the clash is reported, not hidden.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RDvxCS8xcR28VArjzn1x7U
2026-10-30 08:04:32 +01:00
bflatastic a2d44e1020 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 13:31:43 +07:00
BFlat ded4252f99 Merge pull request #2662 from storytold/fix/2269-timeline-export-background
Premiere Pro export pre-renders in the background (#2269)
2026-10-30 13:08:28 +07:00
bflatasticandClaude Opus 5.5 68738d4b1b Premiere Pro export pre-renders in the background (#2269)
File ▸ Export ▸ Adobe Premiere Pro Project… pre-rendered every layer Premiere can't show to
ProRes 4444 with the window waiting: minutes on a large comp, which Windows reports as not
responding. The export now runs as a job (Window ▸ Progress, cancellable, with per-layer
progress) when started from its dialog (`background: true`); without it, the command still
waits and returns the same result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 12:36:05 +07:00
bflatasticandClaude Opus 5.5 f6f242d6dd layer.slip reports the requested shift and whether it was clamped (#2371)
A slip on a layer with no source handles succeeded with `delta: 0` and nothing else, which
read like a no-op bug. The result now carries `requested` (seconds) and, per layer, `clamped`
when the source could not move that far.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 12:20:30 +07:00
Vikram Bhaskaran 85d197e0b9 Make wheel frame-stepping an opt-in that consumes the smoothed tail.
Main routes viewer scrolling through viewer_scroll, so a raw-event scrub fought the wheel zoom. With general.viewerWheelScrubbing on, an unmodified wheel steps frames and the rest of that notch does not zoom or pan. The preference stays off, so the wheel still zooms.
2026-10-30 16:07:37 +11:00
bflatasticandClaude Opus 5.5 561c2a8e48 Settings: older settings files split layers above the original (#2545)
Create Split Layers Above Original Layer became on by default in #2083, but a settings
file saved before then still holds `false` (every later save keeps it), so Split Layer
kept stacking the new layer below. Settings version 4 moves a stored `false` to the new
default once, like version 3 did for the old disk cache size; a choice made since stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:48:41 +07:00
bflatastic 3f7dc9d1d1 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 11:06:05 +07:00
bflatastic 8af1df7093 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 11:05:29 +07:00
bflatastic 06a3e82e5d Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 11:04:06 +07:00
Kristian Myram 238fe6cd2a #1342: preserve gradient stroke widths in the toolbar 2026-10-30 04:55:22 +01:00
bflatastic cdaba8cce5 rustfmt 2026-10-30 10:46:18 +07:00
bflatasticandClaude Opus 5.5 666d929b51 Merge main into #1342; carry main's Mute/Unmute Keyframes (keys.setMuted) into the shared key_menu, gated off on locked layers like the other edits (test covers it), delete_keys keeps locked keys selected and runs main's polystar sync, keep both sides' timeline tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:27:51 +07:00
bflatasticandClaude Opus 5.5 c1c6e048f4 Merge main into #2268; import both layers_or and popup_options, drop main's now-unreachable post-duplicate end_edit (the PR ends the edit first), adapt tests to main's kept empty Type-tool layer (f262e39c6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:23:03 +07:00
bflatasticandClaude Opus 5.5 6cad825ec0 Merge main into #2562; frame.rs: keep main's color_picker::note_dialog and the PR's scope_links call
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:21:58 +07:00
bflatasticandClaude Opus 5.5 5114657519 Merge main into #1755; move ui_timeline_group_select into the tests/it binary (one integration test binary per crate)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 10:21:38 +07:00
BFlat 24d5fbc0ac Merge pull request #2632 from nanox333/codex/polystar-review-followup
Polystar: synchronize inner controls after expressions and key edits
2026-10-30 10:18:56 +07:00
Kristian Myram bc1734f59e #1284: remove remaining double-click paint helpers 2026-10-30 03:56:25 +01:00
bflatastic baaa84ed21 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:55:17 +07:00
bflatastic b766bf2fd4 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:54:50 +07:00
bflatastic bf19754745 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:54:28 +07:00
Kristian Myram c51b461860 #1284: drop superseded shape tool double-click changes 2026-10-30 03:52:38 +01:00
Kristian Myram 2883ae9e57 #1685: discard removed property selections after undo 2026-10-30 03:27:14 +01:00
bflatasticandClaude Opus 5.5 bd0247877c Merge main into #1601; no conflicts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:23:46 +07:00
bflatasticandClaude Opus 5.5 9293693e9e Merge main into #2248; no conflicts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:23:43 +07:00
bflatasticandClaude Opus 5.5 2554d3271f Merge main into #2236; no conflicts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 09:23:40 +07:00
bflatastic b9a86f5139 Merge main into #1758; no conflicts 2026-10-30 09:17:08 +07:00
tylerjenningsw 0138e0ec8a Merge main into enhance/audio-levels-link
# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
#	crates/ui-egui/src/state.rs
2026-10-29 22:09:27 -04:00
tylerjenningsw 4119665f65 Merge main into fix/timeline-shift-select-groups
# Conflicts:
#	crates/ui-egui/src/panels/timeline.rs
2026-10-29 22:08:27 -04:00
bflatastic a683a8074d Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:02:01 +07:00
bflatastic 5522711e92 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:01:36 +07:00
bflatastic 66d8514d89 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 09:00:40 +07:00
bflatastic a9f1d974b9 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-30 08:59:21 +07:00
Kristian Myram 088bedff45 #1685: preserve composition selection and resolve all expression targets 2026-10-30 02:58:46 +01:00
Kristian Myram 86b357162c #1685: synchronize Polystar controls across animation edit routes 2026-10-30 02:29:16 +01:00
BFlat d975022ff5 Merge pull request #2629 from storytold/fix/2585-scriptui-dock-size
ScriptUI: a docked panel gets its dock's size and onResize (#2585)
2026-10-30 08:12:01 +07:00
bflatasticandClaude Opus 5.5 480d1ba2bf Merge main into #1897; EvalCtx in convert_to_bezier built with ..EvalCtx::new
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:51:19 +07:00
bflatasticandClaude Opus 5.5 d1a3510a42 Merge main into #2442; clean merge, no conflicts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:46:40 +07:00
bflatasticandClaude Opus 5.5 9e6332ea27 Merge main into #1739; keep both footage re-exports (Cineon + VIDEO_EXTENSIONS) and main's gaps.md localization row with the PR's AVI row
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:44:20 +07:00
bflatasticandClaude Opus 5.5 0967102432 Merge main into #2369; clean
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:41:47 +07:00
BFlat 5dfccee3c7 Merge pull request #2624 from storytold/fix/2584-scriptui-mouse-capture
ScriptUI: a drag keeps its control past the window edge; MouseEvent.buttons (#2584)
2026-10-30 07:38:50 +07:00
bflatasticandClaude Opus 5.5 5bb66bad74 ScriptUI: a docked panel gets its dock's size and onResize (#2585)
A docked ScriptUI panel only ever saw its preferredSize: the host drew
it in a scroll area at max(dock, preferred) and the script's window never
learned the dock. scriptui.resize now gives a window a size: the script's
window takes it, lays itself out again and runs onResizing / onResize.
The dock host sends it whenever the panel's dock size changes, so
window.size is the dock's, as in After Effects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 07:37:19 +07:00