Commit Graph
564 Commits
Author SHA1 Message Date
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
Brandon Thomas 5c14985990 Merge pull request #1198 from n-delic/fix-1124-cmd-d-selection
#1124: ⌘D / ⇧⌘D apply transitions to the selected clips or edit points
2026-10-11 23:15:45 -04:00
Brandon Thomas 54653a15a6 Merge pull request #1168 from haranishi/fix/1135-close-gap-shortcut
fix: Close Gapをショートカットに割り当てられるようにする
2026-10-11 23:15:44 -04:00
Brandon ThomasandClaude Opus 5.5 a2573d9228 Selected-clip transitions honour an explicit edge
sequence.applyVideoTransition {edge: "out"} with a clip selected put
transitions on both free edges (speed_duration_moves_fade_out_to_the_new_clip_end
failed); with edge given only that side is used.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:15:36 -04:00
Brandon Thomas a1726ac09b Merge remote-tracking branch 'origin/main' into fix-1198 2026-10-11 23:13:26 -04:00
Brandon ThomasandClaude Opus 5.5 452d366156 Merge main into #1070 (tests, catalogs); drop the ATTRIBUTION line for drawing code (no asset)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:29:50 -04:00
Brandon ThomasandClaude Opus 5.5 f460e4630e Merge main into #1159 (keyframe lane uses the selection module, which handles Escape itself; tests)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:12:45 -04:00
Brandon ThomasandClaude Opus 5.5 bbacbf2750 Merge main into #1139: frame-grid snapping moves into place_one (#746); saturating end
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:09:15 -04:00
Brandon ThomasandClaude Opus 5.5 71ceebe857 Merge main into #879 (export schema next to FLAC, catalogs, parity table)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:01:41 -04:00
Brandon ThomasandClaude Opus 5.5 192b24664e Merge main into #1068 (media dev-dependencies, still.rs docs after #931)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:59:05 -04:00
Brandon ThomasandClaude Opus 5.5 7c21ec5e13 Merge main into #1068 (engine dev-dependencies, docs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:55:08 -04:00
Brandon ThomasandClaude Opus 5.5 3284ddb993 Merge main into #931 (README, engine Cargo.toml)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:54:47 -04:00
Brandon ThomasandClaude Opus 5.5 cc9206cb02 rustfmt after merging #1043 and #972
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:40:12 -04:00
Brandon Thomas ce3554e299 Merge pull request #972 from vbasky/fix/912-linked-rate-stretch
Linked Rate Stretch keeps one speed when a neighbour limits a partner
2026-10-11 21:38:42 -04:00
Brandon ThomasandClaude Opus 5.5 0f8533535d Merge main into #972: linked Rate Stretch also leaves clips on locked tracks alone (#934)
rate_stretch_items skips clips on locked tracks and refuses the edit when
every clip is locked, which is what the command loop on main did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:38:34 -04:00
Brandon ThomasandClaude Opus 5.5 5f0dd80169 Merge main into #1043 (commands.rs, imports)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:33:26 -04:00
Brandon Thomas 584d9a32c8 Merge pull request #864 from vangel76/fix-857-marker-color
#857: reject unknown marker colour names instead of storing Green
2026-10-11 21:25:38 -04:00
Brandon ThomasandClaude Opus 5.5 ccfd43f68c Merge main into #864 (imports)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:25:30 -04:00
Brandon ThomasandClaude Opus 5.5 5d9fc09981 Merge main into #834 (commands.rs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:24:19 -04:00
Brandon Thomas 3f6ef5b47e Merge pull request #746 from aw4e/feat/multi-select-drag
Project panel: dragging one of several selected items places them all, back to back, in one undo step
2026-10-11 21:14:06 -04:00
Brandon Thomas f704b46906 Merge pull request #1064 from MrCloudy2/feat/vp8-decoder-432
#432: VP8 video decodes (clean-room pure-Rust VP8 decoder), so VP8 WebM no longer shows black
2026-10-11 21:02:52 -04:00
Brandon Thomas 5ce44e2bd8 Merge pull request #650 from JordyUSA/feat/598-avi-import
#598: import AVI files (clean-room AVI / OpenDML demuxer)
2026-10-11 21:02:51 -04:00
Brandon Thomas 8ec1a36b9f Merge pull request #613 from JordyUSA/feat/flac-export
Export: FLAC (clean-room encoder; .flac files and FLAC audio in MP4/MOV)
2026-10-11 21:02:50 -04:00
Brandon Thomas d75b0772af Merge pull request #667 from ReReddo/feat/monitor-transform-handles
program monitor, effect controls: on-screen transform handles for Motion and Transform
2026-10-11 21:02:49 -04:00
Brandon Thomas c7f6eccb18 Merge remote-tracking branch 'origin/main' into fix-650 2026-10-11 21:00:53 -04:00
Brandon Thomas d4580cad48 Merge pull request #1113 from japbcoelho/fix/export-unknown-settings-keys
Export: unknown keys in `settings` are an error, not ignored
2026-10-11 20:34:42 -04:00
Brandon Thomas 59444d4e76 Merge pull request #992 from JordyUSA/fix/928-restore-sequences-wired
#928: the schema reports Restore open sequences as wired
2026-10-11 20:34:39 -04:00
Brandon Thomas 2d10351ae6 Merge pull request #832 from vbasky/fix/773-clear-close-sequence-shortcut
Clear Close Sequence also clears File Close (Cmd+W)
2026-10-11 20:34:39 -04:00
Brandon Thomas 6e0a6a65ed Merge pull request #885 from FredApps/fix/persistent-decode-failure-slate
monitors: show the unreadable slate for persistently failing (damaged) media
2026-10-11 20:32:44 -04:00
Brandon Thomas 77321a506d Merge pull request #971 from vbasky/fix/914-multipoint-undo
One undo for a multi-point Trim by Frames
2026-10-11 20:29:58 -04:00
Brandon Thomas 3a1ffdcbab Merge pull request #933 from vbasky/fix/893-save-demo-path
Opening Demo Project does not keep the previous save path
2026-10-11 20:29:57 -04:00
Brandon Thomas 4916f731df Merge pull request #1035 from ReReddo/feat/label-presets
settings: label colour presets (built-ins, import, export, delete)
2026-10-11 20:24:49 -04:00
Brandon Thomas 963ede7277 Merge pull request #976 from vbasky/fix/916-automate-dissolve
Clamp Automate Cross Dissolve to the placed overlap
2026-10-11 20:24:46 -04:00
Brandon Thomas 06348de6ee Merge pull request #970 from vbasky/fix/917-locked-track-clip-id
Refuse timeline.move when the source track is locked
2026-10-11 20:24:46 -04:00
Brandon Thomas c2cb113fb8 Merge pull request #969 from vbasky/fix/918-speed-fade-end
Move fade-out with a non-ripple Speed/Duration change
2026-10-11 20:24:45 -04:00
ReReddo ee6415a1dd program monitor, effect controls: on-screen transform handles for Motion and Transform (#639)
Selecting Motion in Effect Controls (its header or one of its properties) draws a box
around the clip's picture in the Program monitor, with eight handles and the anchor
point. Double-clicking a clip's picture selects its Motion (and the clip). The Transform
effect gets the same box for its own properties while it is the selected effect.

- Drag inside the box: Position. Drag a handle: Scale about the anchor point; with
  Uniform Scale off a side handle changes only the width and a top/bottom handle only
  the height (Motion: scale / scale_width; Transform: scale_height / scale_width).
  Drag just outside a corner: Rotation. Drag the anchor point: Anchor Point, with
  Position changing by the same amount so the picture stays put.
- Values go through effects.setParam at the playhead on every frame of the drag, with
  Effect Controls' merge/begin handling (effect_controls::run, #201): a stopwatch-on
  property gets a keyframe there, and one drag is one undo step even when it changes
  two parameters.
- The handles are drawn a little smaller than the Essential Graphics ones (5/4 pt
  squares, finer anchor marker) but grab within 8 pt; there is no system rotate
  cursor, so a code-drawn one replaces it over the rotate zone.
- Clicking an effect header in Effect Controls now selects the effect instead of
  twirling it; only the arrow twirls (new id effectControls.effect.<fx>.twirl). The
  selected header is highlighted like a selected mask row.

Engine: EditorState.selected_effect and the effects.select command (journal off, like
masks.select). The selection is the effect id plus which instance of it, not its index,
because applying an effect inserts it first. Selecting an effect clears the mask
selection and selecting or creating a mask clears the effect selection; undo, redo and
effects.remove drop or follow it. effects.setParam's merge also takes a key, so a
gesture that changes several parameters is one undo step.

Automation ids: program.transform.box, program.transform.handle.<0-7>,
program.transform.rotate.<0-3>, program.transform.anchor.

Tests: transform_handles_ui (select, move, corner and edge scale, rotate, anchor,
keyframe at the playhead, one undo step per drag, header selects / arrow twirls,
Transform effect, double-click selection); engine tests for effects.select and the
merge key. Tests that clicked headers to fold effects now click the arrow.
2026-10-12 03:23:49 +03:00
Brandon ThomasandClaude Opus 5.5 c8275f294b Trim mode rolls each selected edit point once (fixes the #870 regression)
timeline.roll follows linked partners since #870, but Trim mode already
selects the linked audio edit point next to the video one and rolls every
selected point, so a linked cut moved twice (trim_mode_roll_ripple_and_toggle:
+10 frames instead of +5). timeline.roll takes an optional followLinks
(default true); Trim mode passes false.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:21:35 -04:00
awe a078906ac1 Merge upstream/main into feat/multi-select-drag 2026-10-12 07:17:20 +07:00
NDelicandClaude Opus 5.5 24f4ed00a8 #1124: ⌘D / ⇧⌘D apply transitions to the selected clips or edit points
Apply Video / Audio Transition worked only at an edit point under the
playhead. As in Premiere, with clips selected they now add the transition
at the selected clips' free edges (video or audio side only), and with an
edit point selected at that edge only, wherever the playhead is. Edges
that already have a transition keep it; one undo step per press; the
call's effect / frames / params / reverse apply to every edge. With
nothing of that kind selected, the playhead behaviour is unchanged.

Shares the edge collection of Apply Default Transitions to Selection (⇧D).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:04:42 +02:00
Brandon Thomas e86b5e6d33 Merge pull request #608 from ReReddo/fix/escape-cancels-drag
Escape cancels a drag in progress: drag-and-drop, value drags, color pickers and dialogs
2026-10-11 19:49:49 -04:00
Brandon ThomasandClaude Opus 5.5 95302ee2a5 Merge main into #608 (effect_controls drag stop, tests)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:39:05 -04:00
ReReddo acfea6e2d0 labels: Bright and Roles built-in label color presets
Two more built-in presets follow Default in Settings > Labels > Label
Color Presets. Bright is 16 saturated hues spaced around the colour
wheel plus a gray, named Red to Gray. Roles names the labels after what
clips are (B-Roll, Footage, Dialogue, Graphics, Interview, Sequence,
Visual Effects, Bin, Titles, Music, Sound Effects, Voice-Over, Captions,
Ambience, Color Grade, Stock), ordered so the label defaults for new
video, movies, audio, stills, sequences, Dynamic Link items, bins and
captions land on the matching role. Like Default they can be chosen
and reverted to but not deleted, and an imported preset with one of
their names is renamed "<name> (imported)".
2026-10-12 02:34:32 +03:00
ReReddo 4a09d92fa5 labels: label color presets in Settings > Labels
A Label Color Presets row under Label Defaults picks the 16 label names
and colours from a preset. The dropdown lists the built-in "Default"
(the labels FilmCraft ships with) and the presets in the Label Presets
folder beside the preferences, and reads "<name> (Modified)" once the
labels differ from the chosen preset. Icon buttons: Revert (back to the
preset's colours and names), Import (copies a preset file into the
folder and selects it), Export (saves the dialog's labels to a file
named as the preset), Show Folder, and Delete (user presets only).
Choosing a preset or reverting applies on OK like the other fields;
Cancel discards it.

Presets are small JSON files: a name and 16 labels, each a name and a
labels, names trimmed and at most 64 characters, valid colours); a bad
file shows its error in the dialog and changes nothing. The same is
reachable as labels.presets, labels.importPreset, labels.exportPreset
and labels.deletePreset, with the selection stored as labels.preset.
2026-10-12 02:34:32 +03:00
Brandon Thomas c83cb7c830 Merge remote-tracking branch 'origin/main' into fix-1167 2026-10-11 19:30:41 -04:00
Brandon Thomas 8ea545b103 Merge pull request #1099 from haranishi/fix/913-subclip-audio
fix: サブクリップ配置で親の音声を保持 #913
2026-10-11 19:26:20 -04:00
Brandon Thomas 40e38d2301 Merge pull request #1048 from ossini/feat/scene-edit-detection
#1018: Scene Edit Detection in the timeline clip's right-click menu
2026-10-11 19:26:19 -04:00
Brandon Thomas 1661344ba6 Merge pull request #891 from vbasky/fix/823-multi-audio-import
Import every MPEG audio stream, not only the first PID
2026-10-11 19:18:35 -04:00
Brandon Thomas 1ff863c26f Merge pull request #869 from vbasky/fix/856-negative-times
Reject negative times on timeline.place and markers.add
2026-10-11 19:18:34 -04:00
Brandon Thomas 7b285ca1df Merge pull request #1050 from vbasky/fix/937-media-offline
Clear used media as offline instead of stripping the timeline
2026-10-11 19:15:57 -04:00
Brandon Thomas 0b52416804 Merge pull request #973 from vbasky/fix/915-match-frame-reverse
Match Frame on a reversed clip uses moving source time
2026-10-11 19:15:55 -04:00