Commit Graph

618 Commits

Author SHA1 Message Date
Brandon Thomas 837835f81f Merge main into #2451 (resolve append conflicts)
# Conflicts:
#	crates/ui-egui/src/i18n/es.tsv
#	crates/ui-egui/src/i18n/fr.tsv
#	crates/ui-egui/src/i18n/id.tsv
#	crates/ui-egui/src/i18n/it.tsv
#	crates/ui-egui/src/i18n/ja.tsv
#	crates/ui-egui/src/i18n/ko.tsv
#	crates/ui-egui/src/i18n/pt-br.tsv
#	crates/ui-egui/src/i18n/zh-cn.tsv
2026-10-19 12:53:57 -04:00
Brandon Thomas 4922e5328c Merge main into #2459 (resolve append conflicts)
# Conflicts:
#	crates/ui-egui/tests/graphics_ui.rs
2026-10-19 12:53:46 -04:00
Brandon Thomas d61f23c7c9 Merge pull request #2457 from Felix-Helleckes/feat/2325-ui-animations-toggle
#2325: Settings > Appearance can turn the interface animations off
2026-10-19 12:52:02 -04:00
Brandon Thomas bb5fa3a740 Merge pull request #2478 from Felix-Helleckes/fix/1362-multicam-from-timeline
#1362: Create Multi-Camera Source Sequence and Merge Clips work on Timeline selections
2026-10-19 12:51:58 -04:00
Brandon Thomas 045e694204 Merge pull request #2499 from jackcanon/jackcanon/font-size-controls
Properties: selected-character drags undo as one gesture
2026-10-19 12:51:44 -04:00
jackcanon 204505bcf5 FONT-UNDO-001: merge selected-character property drags
Use the existing begin/merge history contract for character styles, isolating clip, layer and selected ranges. Cover actual pointer gestures, undo/redo, fresh gestures and invalid targets.
2026-10-19 08:23:19 -07:00
irgendwasmitfelix 37ec175ced #1362: test Merge Clips from a Timeline selection it can merge, and its explanation for one it can't
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 16:57:33 +02:00
irgendwasmitfelix 52e3c5b9c4 #1362: Create Multi-Camera Source Sequence and Merge Clips work on clips selected in the Timeline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 13:59:29 +02:00
irgendwasmitfelix aa918e739f #2358: "mask": null counts as no mask when creating a missing parameter
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:27:28 +02:00
irgendwasmitfelix c59917baf9 #2358: Toggle Animation creates a parameter an older instance lacks
The new stopwatches show for every animatable parameter of the layer's
definition, but effects.toggleAnimation only found parameters stored in
the instance, so a layer saved before a parameter existed answered "no
such param". The parameter is now created from its default first (an
existing one and its keyframes are left alone). Engine test included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 11:06:53 +02:00
irgendwasmitfelix 7ac0269d2c Timeline: colour labels for tracks (#1186)
A track can carry a colour label, as many NLEs offer. The strip at the
left edge of a track header opens a menu with None and the 16 labels
(with the user's label names and colours, as in Edit > Label). The label
tints the header and the lane.

- `Track.label: Option<Label>`, serde default and skipped when None, so
  older projects load and plain tracks save as before
- `timeline.setTrack {label}` (a label name; "" / "None" / null clears),
  an undoable Track Settings step; unknown names are refused
- `sequence.inspect` reports each track's `label`
- automation ids `timeline.track.<V1|A1…>.color` and `.color.<Label>`

Renaming, adding and deleting tracks from the header are covered by the
open PRs for #654 and #1630, so this only adds the colour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L8DvNHjchh5Gf2q24UsWQn
2026-10-19 09:41:56 +02:00
irgendwasmitfelix 35076281b3 #2325: Settings > Appearance can turn the interface animations off
"Animate zoom, scrolling and menus" (appearance.animations, on by default). Off, the Timeline
zooms and scrolls in one step instead of easing, and egui's fades and slides (menus, collapsing
sections, tooltips) are instant. The style is checked every frame, because a theme or font change
installs it again. Translated in the catalogs that cover the Settings rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L8DvNHjchh5Gf2q24UsWQn
2026-10-19 09:41:56 +02:00
irgendwasmitfelix eff5f024e5 #2185: the not-read-whole assertion applies where previews stream
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 09:22:03 +02:00
irgendwasmitfelix 49b300f2f2 #2185: preview files are read in place, not loaded whole
Rendered previews are full-resolution ProRes (gigabytes a minute), and
PreviewStore::open read each file whole into memory, keeping up to six
open; the render also opened every finished segment right away. Rendering
previews and playing them back filled memory until the OS killed the
app. Native builds now open preview files through a file reader (the
container's index now, frames on demand), refusing any whole-file read,
and a finished segment is opened when it is first played.

Fixes #2185

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 23:21:56 +02:00
Brandon Thomas 4dc802170d Merge pull request #1655 from notdezzi/fix/1542-caption-margin
captions: pin the setStyle margin contract with a regression test; clearer track error (#1542)
2026-10-18 03:21:28 -04:00
Brandon Thomas 9bc4b6b266 Merge pull request #2125 from 00xJS/fix/1544-export-job-poll
#1544: an export started without wait says where to follow it (jobs.list, jobs.cancel)
2026-10-18 03:21:23 -04:00
Brandon Thomas 24d191c5e7 Merge pull request #2090 from ssandweiss/fix/menu-enabled-states
fix(engine): enable Multi-Camera Enable/Flatten only for clips they work on
2026-10-18 03:20:39 -04:00
aiongg f565f7b38d fix(engine): follow stored media paths only on this computer or the project's share
Media and proxy paths read from a project file, a project template or an
interchange file are opened only when they name a local file or a file on
the network share the document itself is on (craft-docpath); a relative
path is taken from the document's folder. Other paths count as missing:
the item renders the offline slate with the reason, the open says how many
were not opened, and Link Media lists them. This covers the open-time
scan, rendering and proxies, the growing-files look and interchange
import. Files imported or linked in this session are opened as given.

The Scratch Disks folders use the same check, and Captured Audio and Video
(voice-over takes, pasted images, the default proxy folder) and Audio
Previews follow the rule Auto Save and Video Previews already follow.
2026-10-16 17:27:39 +00:00
aiongg 07374d1f2a fix(engine): use project scratch folders only inside the project folder or when chosen
Project Auto Save and Video Previews folders named in a project file are used
only when they are inside the project's own folder or were chosen in Project
Settings > Scratch Disks on this computer (remembered in the preference
autoSave.scratchFolders). Other folders fall back to the default location,
with a log line and a message when the project opens. Network-share and
device paths are refused for these folders.
2026-10-16 16:37:56 +00:00
aiongg 3984ef90ff fix(engine): Edit Original opens only regular files with a media extension
A folder or bundle, a link to another kind of file, or a file whose extension
the importer doesn't take is refused with a message instead of being handed to
the system's default app.
2026-10-16 16:22:07 +00:00
00xJ0 a358c3518e #1544: an export started without wait says where to follow it (jobs.list, jobs.cancel) 2026-10-15 16:37:59 -07:00
Sam Sandweiss be283bc54c fix(engine): enable Multi-Camera Enable/Flatten only for clips they work on
Clip > Multi-Camera > Enable and Flatten were enabled for any selection
and then failed when chosen with plain clips selected ("select nested
sequence or multi-camera clips"). Their enabled checks now ask what the
commands need: a nested sequence clip for Enable, an enabled multi-camera
clip for Flatten (linked partners included), so the menu greys them out
otherwise. Calls naming their clips still work without a selection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:29:27 -07:00
Paul 9ed9650cad fix(media): preserve Unicode prefixes in image-sequence filenames
Compute the final ASCII frame-number boundary without slicing inside a UTF-8 character. Preserve Unicode prefixes and add parser and public image-sequence import regressions, including missing frames and timeline placement.

Fixes #1565

Co-authored-by: Codex <noreply@openai.com>
2026-10-14 17:43:05 -06:00
Ikki Nishihara 39a8b65e33 fix(timeline): preserve individual linked clip selections
Respect per-action linked selection, preserve exact current selections for Clear and Ripple Delete, and keep Option-drag group copying intact. Add regression coverage and align the Spanish and synthetic TIFF test fixtures.

Restores the individual-selection handling originally submitted by @vbasky in #685, with corrected click/drag behavior.

Fixes #1163
Fixes #680

Assisted-by: OpenAI Codex

Co-authored-by: Vikram Bhaskaran <vikram.bhaskaran@outlook.com>
2026-10-14 15:40:21 -06:00
notdezzi 1306339749 #1542: pin the captions.setStyle margin contract with a regression test; name a bad track in the error 2026-10-13 14:49:05 +02:00
Brandon Thomas 48cae3e5a3 Merge origin/main into #1389 (Italian beside Korean: 12 languages)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 02:40:02 -04:00
Brandon Thomas 5e1ded3301 Merge pull request #1502 from CokeRoach/korean-ui
i18n: Korean (ko) interface catalog (#508)
2026-10-13 02:34:38 -04:00
Brandon Thomas 23c9cdb33d Merge pull request #1427 from bfenty/fix/ripple-head-1357
Add edit.rippleDeleteHead (Ripple Delete Head Frame)
2026-10-13 02:34:37 -04:00
Brandon Thomas 6b2a36e2dd Merge remote-tracking branch 'origin/main' into fix-1389 2026-10-13 02:04:51 -04:00
Brandon Thomas 64a2391ddc Merge remote-tracking branch 'origin/main' into fix-1502 2026-10-13 01:43:02 -04:00
Brandon Thomas e6973f5957 #1427: ripple sequence markers by the removed head (they didn't move); params name clips/clip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 01:42:53 -04:00
Brandon Thomas 5ae8d50168 Merge remote-tracking branch 'origin/main' into fix-1427 2026-10-13 01:34:47 -04:00
Brandon Thomas ee414e8b9e Merge remote-tracking branch 'origin/main' into fix-1303 2026-10-13 01:22:02 -04:00
Brandon Thomas 4f2a4e9981 Merge pull request #1547 from sanyamsingh001/codex/caption-sidecar-range-oct12
export: clip caption sidecars to the exported range
2026-10-13 00:03:38 -04:00
Brandon Thomas 4e1f673ce0 Merge pull request #1516 from jnohclee-rgb/dharma/preserve-subclip-sources
fix(engine): preserve offline sources referenced through subclips
2026-10-13 00:03:34 -04:00
Brandon Thomas bd5261c8a3 Merge pull request #1383 from vangel76/fix-1371-list-presets
#1371: export preset query also matches the format id
2026-10-13 00:03:30 -04:00
Brandon Thomas 20487653ce Merge pull request #1378 from vangel76/fix-1368-nudge-track
#1368: nudge clip selection up/down works for linked video+audio
2026-10-13 00:03:29 -04:00
Brandon Thomas 37c17d7073 Merge pull request #1232 from haranishi/fix/1187-drag-clips-new-track
fix: 新規トラック移動のリンクと編集履歴を保持 (#1187)
2026-10-13 00:03:27 -04:00
Brandon Thomas c2363399b9 Merge pull request #1275 from n-delic/fix-1081-align-video-clips
#1081: Align to Video Frame works on selected video and image clips
2026-10-13 00:03:19 -04:00
Brandon Thomas 2259e2ba15 Merge pull request #1481 from sanyamsingh001/codex/ingest-collisions-oct12
ingest: preserve same-named camera takes during ingest
2026-10-13 00:03:13 -04:00
Brandon Thomas 3b177c9033 Merge pull request #1340 from marcoarnulfo/fix/clear-default-shortcut
fix(shortcuts): Clear and reassign also drop a command's panel copy of its key (part of #1333)
2026-10-13 00:03:07 -04:00
sanyamsingh001 13c89bf9df export: clip caption sidecars to the exported range
Co-authored-by: Codex <codex@openai.com>
2026-10-13 13:32:11 +10:00
jnohclee-rgb e4a1a7fee3 fix(engine): retain surviving subclip chains and discard unused sources
Signed-off-by: jnohclee-rgb <336857373+jnohclee-rgb@users.noreply.github.com>
2026-10-13 09:30:49 +08:00
jnohclee-rgb bcb7902f42 fix(engine): preserve offline sources referenced through subclips
Signed-off-by: jnohclee-rgb <336857373+jnohclee-rgb@users.noreply.github.com>
2026-10-13 08:56:52 +08:00
CokeRoach b97bb74330 i18n: Korean (ko) interface catalog (#508)
Adds Korean as an interface language: Edit ▸ Language ▸ 한국어, Settings ▸
General ▸ Interface Language, and System Language for ko / ko-KR locales.

- crates/ui-egui/src/i18n/ko.tsv: 3,573 entries, the Spanish catalog's sources
  plus the macOS Settings item, written clean-room from the plain meaning of
  the English text (sidecar ko.tsv.attribution, ATTRIBUTION.md row).
- Hangul is drawn with the installed system face cjk.rs already adds (Malgun
  Gothic, Apple SD Gothic Neo, Noto Sans CJK KR…); switching is refused with a
  message when there is none, like Chinese.
- Test: korean_covers_the_menus_and_has_no_dead_entries.
- Docs: localization-parity, ROADMAP, ui-egui README.

Native-speaker review welcome.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XWUReif4gqcjU5GsjYioc
2026-10-13 08:44:01 +09:00
sanyamsingh001 fa7c6ff8ab ingest: preserve same-named camera takes during ingest
Co-authored-by: Codex <codex@openai.com>
2026-10-13 08:42:29 +10:00
bfenty db6f5194fe Add edit.rippleDeleteHead (Ripple Delete Head Frame)
Remove the selected clips' heads - from each in point through the
playhead - and ripple the sequence closed. Linked clips act as one
group through edit::ripple_trim_group; a playhead past every member's
out point deletes the group whole via edit::ripple_delete_items.
Refused at or before a member's in point, and on locked members.

Tests: crates/engine/src/ripple_head_tests.rs (4 tests, red on main,
green with the patch, negative control by stash round-trip).

Fixes #1357
2026-10-12 19:52:29 +00:00
vangel76 5553e26e12 #1371: export preset query also matches the format id
Problem: `export --list-presets h264` returned nothing because the query
only matched name, description and category, while `h264` is the format
id the CLI takes everywhere else.

Fix: also match the preset's format id and label, compared with
punctuation stripped, so `h264`, `h.264` and `H.264` are equivalent.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 19:39:44 +02:00
vangel76 1d62db0172 #1368: nudge clip selection up/down no longer fails for linked video+audio
Problem: timeline.nudgeUp/nudgeDown returned an error for the whole selection when any selected clip was already on the outermost track in that direction. A video clip with its linked audio (A1 has no track above) therefore could never be nudged.

Fix: clips with no destination track stay where they are; the command only errors when nothing could move. Regression test covers a linked selection.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 19:35:54 +02:00
Nai-ITA d2ae945c30 Add files via upload 2026-10-12 18:56:50 +02:00