Commit Graph
322 Commits
Author SHA1 Message Date
vangel76andClaude Opus 5.5 1580ebb520 #266: quitting with unsaved changes asks to save first
Problem: Quit, Cmd+Q or the window's close button exited at once with
unsaved changes, leaving them to the recovery journal, so every launch
after an unsaved session offered a recovery (docs/project-files.md: no
"Save changes?" prompt on quit yet).

Fix: a close request with unsaved changes is cancelled and the existing
Save Project prompt asks Cancel / Don't Save / Save (automation ids
quit.*), as in Premiere. Don't Save discards the changes and their
recovery snapshot; Save on a never-saved project (here and in Close
Project) opens the Save dialog and returns to the prompt when cancelled.
The control channel's app.quit still quits without asking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:33:45 +02:00
Brandon Thomas ef52c3834f Merge pull request #737 from ReReddo/fix/shape-handles-size
graphics: shape handles change the shape's Size, Shift keeps the ratio
2026-10-10 14:57:06 -04:00
Brandon Thomas 104355ae13 Merge pull request #701 from vangel76/fix-313-source-shuttle
#313: J/K/L shuttle the Source monitor both ways at up to 8x
2026-10-10 14:55:50 -04:00
Brandon Thomas 33115e9a8a Merge pull request #698 from vangel76/fix-614-continuous-thumbnails
#614: Head, Head and Tail and Continuous video thumbnails in the Timeline
2026-10-10 14:55:39 -04:00
Brandon Thomas b07df164fa Merge pull request #676 from vbasky/fix/592-import-replace
Add file.import replace mode for empty-project round-trips
2026-10-10 14:54:33 -04:00
Brandon Thomas 5f9b5e1234 Merge pull request #656 from vangel76/fix-412-single-keyframe-select
#412: select a single keyframe in Effect Controls
2026-10-10 14:53:45 -04:00
Brandon Thomas 539759ef18 Merge pull request #595 from MarekSpodBiedry/issue-476
Reject unknown mcp options instead of silently ignoring them (#476)
2026-10-10 14:52:19 -04:00
ReReddo fdb0ce944d graphics: shape handles change the shape's Size, Shift keeps the ratio
Dragging a handle of a rectangle, ellipse or polygon in the Program
monitor changed the layer's Scale, and a corner scaled width and height
alike, so a shape could not be made wider or taller from a corner.

As in Premiere, the handles now change the shape's Size (Premiere's
Path) and leave Scale alone: the dragged side or corner follows the
pointer, the opposite one stays, and the anchor point is renumbered so
that it and Position stay on the same spot of the picture. A corner
moves freely; Shift keeps the proportions. A path has no Size, so it
still stretches (and its corners follow the same Shift rule).

The paragraph-text box and the shape box share the side-dragging code
(drag_sides).

Tests: graphics_handles_ui (a shape's handles change its Size and Shift
keeps the ratio; a polygon's handles keep the opposite corner).
2026-10-10 21:29:53 +03:00
Brandon ThomasandClaude Opus 5.5 3ad5a59321 Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#700)
Progress docs per craftrules standards/progress-docs.md: target-app parity, gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, and feature, format, hardware, UI and localization parity docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:09:14 -04:00
vangel76andClaude Opus 5.5 78e9221a34 #614: document timeline.thumbnails outside the ui.set row
The ui.set table row is one long line; #412 (PR #656) also edits it, so
the two PRs conflicted with each other in docs/control-protocol.md
whichever merged second. The thumbnails parameter is now described in
its own paragraph below the table, leaving that row untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:22:42 +02:00
vangel76andClaude Opus 5.5 3feadebbc4 #313: J/K/L shuttle the Source monitor both ways at up to 8x
Problem: with the Source monitor focused, L only ever played at normal
speed, and J and the slow shuttle commands returned "Source playback
currently supports normal forward speed": the Source clock always ran at 1x.

Fix: the Source clock runs at a signed speed. L/J play forward/backward
and pressing the same key again doubles the speed up to 8x; Shuttle Slow
Right/Left play at 1/4 speed. As in the Program monitor, speeds other than
normal forward play without sound, and backward playback stops on the
first frame. docs/monitors.md updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:16:40 +02:00
vangel76andClaude Opus 5.5 c85d0ac973 #614: Head, Head and Tail and Continuous video thumbnails in the Timeline
Problem: a video clip only ever showed its first frame. Show Video
Thumbnails was a plain on/off switch, so a wide clip at high zoom stayed a
flat colour after its head.

Fix: the wrench menu keeps Show Video Thumbnails and adds Head (the
default, as before), Head and Tail and Continuous under it. Continuous
tiles aspect-correct frames across the clip on a grid anchored at its head,
only where the panel shows them (at most 256 per clip), each frame the
source time under the tile's left edge (speed, reverse, frame holds,
multicam angles), requested at thumbnail priority through the existing
frame cache. A clip too narrow for the tiles falls back to its head. The
mode is UI state (`thumbnail_mode`, serde default Head, so saved settings
keep working) and `ui.set {timeline: {thumbnails}}` sets it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:08:48 +02:00
Vikram Bhaskaran 0a1f9730c8 Add file.import replace mode for empty-project round-trips.
Headless import merged into the current project, so a demo or leftover timeline mixed into export. replace:true starts from file.newProject with the same name, then imports, which is the documented empty-project-start workflow.
2026-10-11 02:36:46 +11:00
vangel76andClaude Opus 5.5 b6ba78e300 #412: select a single keyframe in Effect Controls
Problem: the keyframe lane highlighted every keyframe whose time equals the
playhead. A click on a keyframe moves the playhead there, so every
parameter's keyframe at that frame lit up (point 4 of #412).

Fix: a serde keyframe selection in the UI state (clip, effect index, param,
mask, media time). A click (or drag start) selects exactly that keyframe and
still moves the playhead; highlighting reads the selection. A moved keyframe
stays selected; references to deleted keyframes or clips no longer shown are
dropped. Readable via ui.inspect, settable via ui.set keyframeSelection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:57:20 +02:00
Brandon ThomasandClaude Opus 5.5 58f768c472 Merge origin/main into gpu-rendering
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:27:57 -04:00
Brandon ThomasandClaude Opus 5.5 c030f78762 Merge origin/main into tts-narration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:13:05 -04:00
Brandon ThomasandClaude Opus 5.5 be498865c3 Merge origin/main into fix/linux-dev-desktop-icon
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:12:41 -04:00
Brandon Thomas 9847a5cbf1 Merge pull request #357 from jnohclee-rgb/dharma/filmcraft-344-help
cli: make --help print usage successfully
2026-10-10 08:09:57 -04:00
Brandon Thomas 409a8d34fa Merge pull request #522 from gyroninja/fix/graphics-drag-undo-step
Essential Graphics: Make a property drag  one undo step
2026-10-10 07:27:43 -04:00
Brandon Thomas 106ab5e337 Merge pull request #509 from mjohnson7cd/fix-mcp-media-import-schema-499
fix(mcp): media_import schema mirrors file.import (#499)
2026-10-10 07:27:29 -04:00
Brandon ThomasandClaude Opus 5.5 c9e803ff3b Merge origin/main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:24:39 -04:00
Brandon ThomasandClaude Opus 5.5 762344769b Merge origin/main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:21:39 -04:00
Brandon ThomasandClaude Opus 5.5 4304cd9382 Merge origin/main into #421; GPU export opt-in, wgpu error handler, drop panicked renderers
- GpuRendering defaults to Off (opt-in per export) until measured on Windows and macOS;
  docs and ROADMAP say so.
- The shared export device installs an uncaptured-error handler and a device-lost callback
  that log once and retire GPU export for the session (frames go to the CPU) instead of
  wgpu's default panic.
- RendererPool drops a renderer that panicked and retires the pool, so the rest of the
  export renders on the CPU (regression test in gpu_hook_scenarios); the duplicate
  hostile-size test that raced on the global registry is folded into it.
- Rebased onto main's render_plan/transitions: render_export_prepared reads the linear
  accumulator after render_plan; transition (Composite) plans fall back to the CPU.
- es/ja rows for the new Export strings; web_time::Instant in the export pipeline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:21:38 -04:00
Brandon Thomas 1ace90d191 Merge remote-tracking branch 'origin/main' into fix-505 2026-10-10 07:05:06 -04:00
Brandon Thomas ac8d62c547 Merge pull request #549 from SilentYeti/nvdec-linux
Linux: NVDEC hardware decoding for H.264 and HEVC
2026-10-10 07:04:53 -04:00
Brandon ThomasandClaude Opus 5.5 1ffe0cf4e7 #505: merge origin/main; ja/uk rows, colorTheme kept in line, docs
- ja.tsv rows for the new appearance strings (no duplicate Dark/Light);
  uk.tsv gets Next Appearance Mode, which the pt-br menu catalog now has.
- appearance.colorTheme is legacy input but no longer goes stale: it follows the
  mode and theme choices (the theme a fixed mode shows, the dark theme in Auto).
- docs/project-files.md documents appearanceMode / darkTheme / lightTheme.
- #489's menu/settings label test compares with the theme cards' choices.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:01:41 -04:00
Brandon ThomasandClaude Opus 5.5 664c13efeb Merge origin/main into #278; schema v14, neural-voices off by default, review fixes
- Narrations take schema v14 (main's v13 is audio streams): v13_to_v14, docs updated.
- neural-voices is off by default in the desktop app, like whisper; the model download stays
  an explicit, confirmed job.
- Removed the debug probe2 test module from tts-text.
- project_subset prunes narrations of items it drops.
- unique_wav_path is bounded (99 999 names) and returns an error instead of looping.
- narration.rs uses web_time::Instant (wasm clock test); tts.* commands get the
  "Text to Speech" shortcut category, with es/ja rows for it and Edit Narration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:55:59 -04:00
Brandon ThomasandClaude Opus 5.5 e19eaa760b Merge origin/main into #246; dev desktop entry is opt-in, icons not embedded
- Nothing is written unless FILMCRAFT_DEV_DESKTOP_ENTRY=1 (debug builds no longer write into
  ~/.local/share on every cargo run).
- The 256/512 PNGs are copied from this checkout's assets/app-icon at runtime instead of
  include_bytes! into every Linux binary; a missing icon is logged and skipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:22:16 -04:00
Brandon Thomas e2ebbe715e Merge remote-tracking branch 'origin/main' into fix-246 2026-10-10 06:18:20 -04:00
Brandon Thomas 40f710ec0a Merge remote-tracking branch 'origin/main' into fix-522 2026-10-10 06:16:09 -04:00
gyro 81268330e9 Essential Graphics: Make a property drag one undo step 2026-10-10 03:14:40 -07:00
Brandon ThomasandClaude Opus 5.5 e3a00c3a25 Merge origin/main into #357; check --help after Args::parse in cli()
Rebased onto main's cli()/out! refactor: `--help` is checked as a parsed flag, so
`filmcraft-cli export --help` prints the reference too (test extended).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:57:22 -04:00
Brandon ThomasandClaude Opus 5.5 e0d2c9c73b MCP media_import: test the paths schema and param mapping; update docs/agents.md (#499)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:49:28 -04:00
Brandon Thomas a8e38c4e07 Merge remote-tracking branch 'origin/main' into fix-445 2026-10-10 05:47:31 -04:00
MarekSpodBiedry dcf2d7f423 Reject unknown mcp options instead of silently ignoring them (#476) 2026-10-10 11:42:50 +02:00
SilentYetiandClaude Opus 5.5 3df0b9bb36 Merge remote-tracking branch 'origin/main' into nvdec-linux
tests/setting.rs: keep the check against the backend register() reported
(main's fix expects VA-API on Linux, which NVDEC now sits in front of).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:30:22 -07:00
Brandon Thomas dfdccd91e1 Merge pull request #504 from sawizzle/docs/installed-release-mcp
docs: register the MCP server from an installed release
2026-10-10 05:03:33 -04:00
Brandon Thomas 53b62a12ea Merge pull request #420 from txiki739/fix/flatpak-source-cli
#346: the from-source Flatpak includes the CLI and MCP server
2026-10-10 05:03:18 -04:00
Brandon Thomas 11f8ac9718 Merge pull request #486 from MasakatsuFunaki/nvenc-rgba-input
M-HW: NVENC takes the export's RGBA and converts it on the GPU (#30)
2026-10-10 05:03:06 -04:00
Brandon Thomas 4d3fe1bdb0 Merge pull request #506 from liangforstudy/fix/save-playhead
Project files: each sequence reopens with its playhead where it was left
2026-10-10 05:02:24 -04:00
Brandon Thomas 8e908d0550 Merge pull request #521 from maccagnit/newshape-placement-docs
graphics: shape commands document `seconds` / `track` / `time`, and placement errors name the command that asked
2026-10-10 05:02:17 -04:00
Brandon Thomas c76d7931ca Merge pull request #514 from vbasky/feature/graphic-gradient
Fill graphic shapes and text with a linear gradient
2026-10-10 05:02:04 -04:00
Brandon Thomas 339198fbdb Merge pull request #472 from ossini/fix/223-audio-in-video-clips
Audio of video clips: volume in Effect Controls + draggable volume line (#223)
2026-10-10 05:01:38 -04:00
Brandon Thomas 8e2df153f4 Merge pull request #556 from LloydNicholson/fix/caption-list-track
Issue #545: captions.list with a track that names no caption track is an error
2026-10-10 05:01:06 -04:00
lloydandClaude Opus 5.5 8175b16a47 captions: captions.list with a track that names no caption track is an error
`captions.list` resolved `track` with track_param and treated an
unresolved selector the same as an omitted one, so a missing numeric id
(or a label past the last track, such as `C3` with two tracks) returned
every caption track with success. It now fails with "no such caption
track", as captions.export, setTrack, setStyle, deleteTrack and add do.
Omitting `track` still lists every track, and valid ids and C-labels
still return just their track.

Test: two caption tracks; each id and each label returns only its own
track; a missing id, `C3`, `C0` and a non-label string are errors.

Fixes #545

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:02:57 +02:00
SilentYetiandClaude Opus 5.5 03a840d28b Linux: NVDEC hardware decoding for H.264 and HEVC
Adds a second Linux decoder backend, crates/platform/src/nvdec, that talks to
NVIDIA's driver directly (libnvcuvid + the CUDA driver, both loaded at run
time). It is registered in front of VA-API: what NVDEC declines still reaches
VA-API, then the software decoders. H.264 8-bit and HEVC 8/10-bit, 4:2:0
progressive.

NVIDIA's parser takes Annex B access units, so there is no host-side DPB.
Pictures are read back as NV12 / P016 through the existing biplanar path and
are bit-exact with the software decoders. The CUDA context is the one
nvenc::device already retains; it gains push/pop and copy-to-host. A seek
recreates the parser and keeps the decoder.

Also fixes tests/setting.rs, which expected the Media Foundation backend name
on Linux, and updates the Hardware decoding tooltip and its Spanish row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:17:11 -07:00
SawizzleandClaude Opus 5.5 918a64317d docs: drop the third-party link; the Windows path is the default install folder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:50:49 -07:00
Tommaso MaccagniandClaude Opus 5.5 28cde3168d graphics: document shape placement params; placement errors name their command
graphics.newShape, newRectangle, newEllipse and newPolygon already take
`seconds`, `track` and `time` through place_video_clip, as graphics.newText
does. Their parameter docs (what command_list shows) and the table in
docs/graphics.md listed only position, size and clip; they now list all of
them and say that position is the shape's centre.

place_video_clip takes the id of the command that called it for its errors.
It named graphics.newText in every placement error (V3 is not free here),
whether a shape, a file, a template or an upgraded caption had asked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:34:24 +02:00
Vikram Bhaskaran ac83bae223 Blend graphic gradients in linear light and keep per-character fills solid.
Stops were mixed in encoded sRGB, and any run with its own fill turned the whole layer into a solid colour. The ramp now blends in linear light, turns with the layer, and leaves a per-character fill solid.
2026-10-10 13:18:45 +11:00
Vikram Bhaskaran d55ebe94e5 Fill graphic shapes and text with a linear gradient.
Appearance › Fill Type paints a ramp across the layer bounds, and the ramp turns with the layer. A per-character fill colour still paints those characters as a solid.
2026-10-10 12:05:03 +11:00