Commit Graph
1182 Commits
Author SHA1 Message Date
dotCooCoo bb4f976384 Merge main and retain the Wiggle Transform command schema 2026-10-27 11:41:42 -07:00
Anubhav RaiandClaude Opus 5 a89fbdab8f engine: two template footage entries can't become one file (#2123)
The fallback name was never checked against the names already taken, so an
entry called exactly what the fallback produces took the same file: `media/1/a:b.png`,
`media/2/a_b.png` and `media/3/2-a_b.png` extracted to five files for six
entries, the third overwriting the second, and both items' footage pointing at
it. Deduplication now runs on the name actually written and counts up until it
is free.

The collision predates making the names safe (two entries named `a_b.png` and
`2-a_b.png` collide on their own), but sanitising gives more ways in, so it
belongs with it.

Found by CodeRabbit on the pull request.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-28 00:05:19 +05:30
tylerjenningsw ef825f2947 Merge remote-tracking branch 'origin/main' into enhance/pickwhip-index-refs 2026-10-27 14:13:51 -04:00
tylerjenningsw b2cace1320 Roto Brush: test that a stroke corrects earlier ones through the commands (#1646)
Green, Alt (red) over part of the object, then green there again, as the
Layer panel sends them through roto.stroke: the render follows the last
stroke, and Undo / Redo step between the two results.
2026-10-27 14:13:40 -04:00
tylerjenningsw ecc3e673bc Merge remote-tracking branch 'origin/main' into enhance/keyframe-text-clipboard 2026-10-27 14:13:38 -04:00
tylerjenningsw b1c0a2394d Merge remote-tracking branch 'origin/main' into enhance/batch-parent-matte 2026-10-27 14:13:37 -04:00
tylerjenningsw 74b309e6cf Merge remote-tracking branch 'origin/main' into enhance/avi-import
# Conflicts:
#	crates/project/src/lib.rs
#	crates/render/src/lib.rs
#	crates/ui-egui/src/menus.rs
2026-10-27 14:13:31 -04:00
dotCooCoo 8ee9bc144b Keep failed scripts and selected panels out of recent script history 2026-10-27 11:06:19 -07:00
Anubhav RaiandClaude Opus 5 14b345c333 engine: a template's footage entry can't name a file outside the folder (#2123)
EffectCraft writes its own templates as `media/<item id>/<file>` entries, and
extraction trusted both halves. `base_name` splits on `/` and `\`, but the item
id was taken with `split('/')` alone, and it is pasted in front of a base name
another item already used. So a second `media/..\..\..\Startup\x/clip.mp4`
entry became `<dir>/..\..\..\Startup\x-clip.mp4`, which on Windows is three
folders up, with the attacker choosing how the name ends.

The id is now used only when it is one, and the name goes through
`safe_file_name`: separators, drive colons and NUL become `_`, and `.` / `..`
become `footage`. Reached from `templates.create` with `path`, from File ▸ New
from Template, and from a template dropped in the user Templates folder.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-27 23:34:41 +05:30
Matej Kozlovský 3ad8ba9581 CLI: log warnings to stderr by default
The CLI installed no logger, so GPU warnings (a declined frame, out of
memory, fallback to the CPU) were dropped and an export silently rendered
on the CPU. Install the engine logger with a `warn` default (RUST_LOG
still overrides). Split out of #1415.
2026-10-27 18:52:16 +01:00
tylerjenningsw 13821ab694 Puppet: test editing several selected pins at once (#1751) 2026-10-27 13:44:38 -04:00
tylerjenningsw ca5e2003a7 Puppet: a value edit on one selected pin reaches the other selected pins (#1751) 2026-10-27 13:44:38 -04:00
tylerjenningsw 68e9d9e322 Animation presets: test that saved effect keyframes start at the playhead (#1971) 2026-10-27 13:44:37 -04:00
tylerjenningsw b74b89feb5 Animation presets: effect keyframes in presets saved by earlier versions start at the playhead too (#1971) 2026-10-27 13:44:36 -04:00
tylerjenningsw 337a6c2053 Animation presets: saved effect keyframes start at the playhead (#1971) 2026-10-27 13:44:36 -04:00
dotCooCoo 572ed5d17f Preserve script keyboard shortcuts across menu module changes 2026-10-27 10:25:26 -07:00
dotCooCoo 2c2c51ca0c Preserve recent script files across menu and settings module changes 2026-10-27 10:11:33 -07:00
vangel76andClaude Sonnet 5.5 36ec54f007 Merge upstream/main into warp-skip-discarded-plan
Upstream split lib.rs files into modules and moved engine commands/ to cmd/; this branch's change merges without textual conflicts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 17:51:52 +01:00
Christopher Linnett c8b07b4b06 Text: duplicate during a text edit leaves no keyframe or mask vertex selected on the original (#2226)
Opening the editor keeps the keyframe and mask-vertex selection as well as the property one,
and Duplicate cleared only the properties. With the copy selected, Clear then deleted a key or
vertex of the original instead of the copy. During an edit the copies now take the selection the
way a click on them does: layer.select's rule, moved into one helper both use. With no edit
open, Duplicate's selection is unchanged.
2026-10-28 00:50:43 +08:00
Christopher Linnett 0e3b894cd9 Text: the text-edit tests count layers with the shared helper; forwarding docs name Duplicate (#2226)
The engine's text-edit tests repeated one layer-count closure in five places; they now use
the layer_count helper the 3D tests already had. The doc of forwardable_during_text_edit and
of the Type-tool test helper still spoke of Deselect All alone, though the editor now forwards
Duplicate too.
2026-10-28 00:30:00 +08:00
Christopher Linnett eeedd6b540 Text: duplicate during a text edit leaves no effect selected on the original (#2226)
Duplicate passes over the property selection an open edit kept and copies the edited layer,
but left that selection in place on the original. With the copy selected, the next Duplicate
copied the original's effect, shape item or text animator, and Clear would have removed it.
Ending the edit through Duplicate now clears that property selection along with it.
2026-10-28 00:26:52 +08:00
Christopher Linnett 9928f6181b Text: duplicate during a text edit copies the layer, not a selected effect (#2226)
Opening the editor keeps the property selection, so Cmd+D while typing duplicated an
effect, shape item or text animator selected before and left the edit open. An open edit
now comes first, as it does for Clear: Duplicate ends it and copies the edited layer. With
no edit open, selected effects and items keep their precedence, and the command's
description says so.
2026-10-28 00:22:35 +08:00
dotCooCoo 87eb51a089 Include alpha interpretation in frame-blend cache keys 2026-10-27 09:22:14 -07:00
Christopher Linnett f7094b619b Merge origin/main into fix/issue-2226-duplicate-during-text-edit
Main moved the engine's topic tests to src/tests/ and commands/ to cmd/. The
engine tests go to tests/text_edit.rs, opening their edit with its editing()
helper; ui_text_edit.rs keeps both sides' tests, this branch's first.
2026-10-28 00:16:44 +08:00
Christopher Linnett 60da124f11 Merge remote-tracking branch 'origin/main' into fix/issue-2092-camera-focus-crash 2026-10-28 00:13:40 +08:00
vangel76andClaude Sonnet 5.5 9fc04e8fe3 Merge upstream/main into fix-1083-beat-marker-audio-pause
Conflicts came from upstream splitting crates/project/src/lib.rs and moving the
frames tests. Re-applied the branch's change in the new places:
- Layer::same_pixels_with now in crates/project/src/layer.rs
- Comp::same_pixels_with, same_settings(o, with_markers), pixel_form_with and the
  timing-marker helpers in crates/project/src/comp.rs (same_pixels_ignoring_markers
  stays removed)
- Project::reads_markers in crates/project/src/item.rs
- crates/ui-egui/src/frames.rs uses reads_markers/same_pixels_with; the branch's
  two marker tests replace the old ones in crates/ui-egui/src/frames/tests.rs

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 17:09:17 +01:00
vangel76andClaude Sonnet 5.5 ca00da2f55 Merge upstream/main into rfx-masks-shapes
render: upstream moved the tests_*.rs modules into crates/render/src/tests/; the branch's
tests_mask_feather.rs now lives at tests/mask_feather.rs and is registered in tests.rs.
path: rect() keeps the branch's explicit-outline version with an added NaN guard on the
roundness clamp bound (main's fix for the same panic).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 16:57:13 +01:00
vangel76 92e33beef0 Merge remote-tracking branch 'upstream/main' into gap-behaviors-presets 2026-10-27 16:51:00 +01:00
dotCooCoo 97ef73d592 Preserve bug fixes after main module moves and bound workspace migration 2026-10-27 07:45:09 -07:00
Kushagra Kumar 97b80f3eab Merge branch 'upstream/main' into fix/png-frame-alpha-preservation 2026-10-27 19:51:42 +05:30
Minher0 36a50a6366 layer.create: the instance copy takes the source's Solo switch
A soloed model keeps its Solo switch with its video off, and any_solo
hides non-soloed layers: the copy was excluded and the comp rendered
blank. The copy now takes the Solo over; the source's video stays off.
Covered by instance3d_keeps_the_copy_visible_when_the_source_is_soloed.
2026-10-27 09:46:32 +00:00
Minher0 db1f798455 Merge main into #2410
PR #2491 moved the modules; the instance3d changes follow the new layout:
- tests_instance3d.rs lives in src/tests/instance3d.rs now (declared in src/tests.rs)
- solo_3d moved from render/src/lib.rs to render/src/pipeline.rs, pub(crate),
  and its FxHost::layer caller moved to render/src/fx_host.rs
- cmd/create.rs, effects/channel2.rs, gpu/fx_pixel2.rs and render/cache/dependencies.rs
  followed their moves automatically (rename detection)
2026-10-27 09:15:43 +00:00
Z User 978ca419b9 Merge remote-tracking branch 'origin/main' into fix/environment-light-no-effect-cast-shadows 2026-10-27 08:54:33 +00:00
onlykshitijandClaude Opus 5.5 c9d823483f Merge upstream main into feat/script-panel-submenus
Upstream moved crates/ui-egui/src/menus.rs into menus/*.rs; the dynamic-menu change that
draws script folders as submenus now lives in menus/bar.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 10:56:49 +05:30
ashokram-si de27e1ea0a Merge main into feat/targa-sequence-output 2026-10-27 10:46:47 +05:30
aiongg b7b75ed37a style: cargo fmt on the moved files 2026-10-26 21:54:30 +00:00
aiongg 4a5562c35b refactor(engine): move layer commands to cmd/layer/*.rs 2026-10-26 21:49:11 +00:00
aiongg 770e30d3ed refactor(engine): move settings model, page types and schema to settings/prefs/*.rs 2026-10-26 21:49:11 +00:00
aiongg bba3291b24 refactor(engine): move Session methods to session/{dispatch,edit,comps,render}.rs 2026-10-26 21:49:11 +00:00
aiongg 2b4fcdd3db refactor(engine): move error, services, document state, event, fonts and Session methods out of lib.rs 2026-10-26 21:49:11 +00:00
aiongg d76cfc7c45 refactor(engine): move cmd.rs helpers to cmd/{schema,enabled,params}.rs 2026-10-26 21:49:11 +00:00
aiongg eea1f50cd3 refactor(engine): move guard, logging, perf, sysinfo, storage to system/ 2026-10-26 21:49:11 +00:00
aiongg a7660a1e37 refactor(engine): move jobs, offload, remote to background/ 2026-10-26 21:49:11 +00:00
aiongg 85e26db57d refactor(engine): move learn, templates, demo, links to home/ 2026-10-26 21:49:11 +00:00
aiongg 1c565ba2df refactor(engine): move psd_import, vector, xml_project to interchange/ 2026-10-26 21:49:11 +00:00
aiongg d6b53650db refactor(engine): move doc_path, footage_check, footage_reload, sequence, media_browser, media_cache to footage/ 2026-10-26 21:49:11 +00:00
aiongg 9991466ff1 refactor(engine): move prefs, session_settings, config, shortcuts, autosave to settings/ 2026-10-26 21:49:11 +00:00
aiongg 3b5e19027e refactor(engine): move tracking, camera_track, mask_track, warp, roto, models to analysis/ 2026-10-26 21:49:11 +00:00
aiongg 35e66b17a6 refactor(engine): move tests_<topic>.rs files to src/tests/, tests.rs content to tests/session.rs 2026-10-26 21:49:11 +00:00
aiongg 48afb082d5 refactor(engine): move src/remote.rs tests to src/remote/tests.rs 2026-10-26 21:49:11 +00:00