2208 Commits
Author SHA1 Message Date
Marco Arnulfo 9f16d97750 Raise a loaded project's next_id past the ids already in it (#2864)
* Raise a loaded project's next_id past the ids already in it (fixes #2809)

* Demo project: start new ids past its fixed transition and marker ids (#2809)

* Count transcript, source graphic and narration keys as ids in use on load (#2809)

* Format tests: a transcript's key raises next_id on load (#2809)

* Count ids that are only referenced (clip items, subclip parents, transition ends, sends, outputs, cameras, merged clips) on load (#2809)
2026-10-23 10:51:49 -04:00
Earl Co f6e053b352 security(text): bound text and phonemizer work (#2870)
* security(text): bound layout and font-name work

* security(tts): bound phonemizer input expansion
2026-10-23 10:51:44 -04:00
Earl Co 199b70c1d1 security(interchange): bound imported track indices (#2910) 2026-10-23 10:51:39 -04:00
HEOJUNFOandClaude Opus 5.5 700bdd9190 Scroll the timeline clip menu when it is taller than the screen (#2852) (#2862)
* Scroll the timeline clip menu when it is taller than the screen (#2852)

The clip menu has about 35 items and ran off the bottom of short
screens with no way to reach the rest. It now scrolls inside the window,
as the panel menu already does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Let the clip menu move up before it scrolls

The scroll area only took the height left below the pointer, so the menu
stayed where it was opened and scrolled even when the whole menu fit on
the screen, and the clip menu tests in clip_dialogs_ui could no longer
click the items past that height. Asking for the full height lets the
popup move up as before; it only scrolls when the screen is too short.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 10:51:34 -04:00
skylar taylor-barrickandBrandon Thomas b366ff3205 Regression tests for #130, #703, #1084 and #1309 (#2861)
* #703: test that timeline track lines are visible and the playhead head is short

The lines between timeline tracks were drawn in the timeline background colour, so they could not be seen, nothing marked the top of the highest video track, and the playhead head covered the whole ruler. The tests check that separator-coloured lines run under every track and above the top video track, and that the head stays within the bottom 14 points of the ruler. Without the fix no such lines are drawn and the head is 38 points tall.

* #130: test that timecodes and menus use the Premiere-style type

The big timecodes were 15 pt semibold and the menu bar's menus used egui's default text size. The tests check that the timeline, program and reference timecodes are painted in 16 pt regular in the timecode colour, and that File menu items are drawn at 13 pt. Without the fix the timecodes are 15 pt semibold and the menu items are 12 pt.

* #1084: test that the Import captions file button label is legible in light mode

The label was always white, so it disappeared against the light grey button in light mode. The test shows the empty Captions tab in the dark and light themes and requires at least 3:1 contrast between the label and the button fill. Without the fix the light theme fails at 1.04:1.

* #1309: test that the sort arrow does not cover a sorted column's name

In a narrow List-view column the sort arrow was painted over the end of the clipped column name. The test narrows the sorted Name column and requires the name's visible clip rect to end left of the arrow. Without the fix the name stays visible up to x=67 while the arrow starts at x=60.

* #1084: hold the Import captions label to 4.5:1 contrast

The label is normal-size text (12 pt semibold), so WCAG AA asks for 4.5:1, not the 3:1 the test allowed. Both themes clear 4.5:1 today; with the fix reverted the label is at 1.04:1.

* #130: menu bar titles use the 13 pt menu text, like their menus

#130 styled the menus' items with theme::menu_style through MenuConfig, which egui applies to submenus only. The bar's own titles kept egui's default 12 pt, dimmer button text. MenuBar::style takes the same style, so the titles and their menus now share one size and colour, as in a native menu bar. The #130 test now checks the File title too; without this change it fails at 12 pt.

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-23 10:51:23 -04:00
Dylan M. Taylor 3fadb8af6a Merge pull request #2983 from dylanmtaylor/sonar/security-reliability
fix: harden saves, CLI file I/O and AV1 tooling (SonarCloud security/reliability)
2026-10-23 10:18:25 -04:00
Dylan M. Taylor 689e37782a fix: harden CLI file I/O and AV1 tooling (SonarCloud)
- Read and write CLI inputs/outputs on a blocking pool instead of stalling
  the async runtime (rust:S7493).
- Document the FLAC STREAMINFO MD5 as the RFC 9639 integrity signature it
  is, and validate the AV1 generator's spec path before reading it.
- Normalize the DCT basis literals that read as numeric suffixes.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-23 09:53:17 -04:00
skylar taylor-barrick abf44fda90 Reject non-hex characters in colour hex parsing (#2600)
Accept only ASCII hexadecimal digits after a single optional hash in color strings.
2026-10-22 22:56:01 -06:00
skylar taylor-barrick 229b3a0fec #2679: effects.setParam refuses values outside the parameter's range (#2709)
Reject float effect parameter values outside the declared inclusive range without changing project state.
2026-10-22 22:52:46 -06:00
skylar taylor-barrick 85c431d6f6 Reject signed fields in SCC timecode parser (#2630)
Reject signed SCC timecode fields while preserving valid and drop-frame parsing.
2026-10-22 22:52:36 -06:00
skylar taylor-barrick edb501a3fe Fix false overlaps for empty time ranges (#2601)
Treat zero- and negative-duration time ranges as empty in overlap checks.
2026-10-22 22:51:02 -06:00
skylar taylor-barrick f1ba4e9596 Escape tab/newline/CR in XML attribute values (#2586)
Encode attribute whitespace using numeric character references so it survives XML parsing.
2026-10-22 22:49:04 -06:00
skylar taylor-barrick b31a5d94da Keep WebVTT cues whose identifier starts with NOTE (#2629)
Keep valid WebVTT cues with NOTE-prefixed identifiers instead of dropping them as comments.
2026-10-22 22:48:54 -06:00
skylar taylor-barrick 0f88c67928 Reject signed fields inside multi-field timecodes (#2636)
Reject signed components in separated timecodes while preserving relative prefixes and empty fields.
2026-10-22 22:48:28 -06:00
skylar taylor-barrick e29bc50fe0 Merge branch 'main' into fix/2679-setparam-range 2026-10-22 22:30:53 -06:00
skylar taylor-barrick 8e294e7d2a Merge branch 'main' into fix/h846-xml-writer-does-not-escape-tab-n 2026-10-22 22:30:50 -06:00
skylar taylor-barrick 87f7594407 Merge branch 'main' into fix/h938-color-parse-hex-accepts-signed-d 2026-10-22 22:30:48 -06:00
skylar taylor-barrick 0667ce3907 Merge branch 'main' into fix/empty-time-range-overlaps 2026-10-22 22:30:44 -06:00
skylar taylor-barrick 1b1ed5cc70 Merge branch 'main' into fix/h1115-webvtt-cue-whose-identifier-star 2026-10-22 22:30:41 -06:00
skylar taylor-barrick c3142b63c6 Merge branch 'main' into fix/h1135-scc-timecode-parser-accepts-sign 2026-10-22 22:30:39 -06:00
skylar taylor-barrick ce1b1cd718 Merge branch 'main' into fix/h1166-parse-timecode-accepts-signed-fi 2026-10-22 22:30:35 -06:00
coderabbitai[bot]andcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> d3801e2df8 control: Require session-token authentication before dispatching requests (#2764)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-10-22 22:17:48 -04:00
skylar taylor-barrick 22ab5833d0 M8: Fujifilm F-Log, F-Log2 and F-Log2 C colour spaces (F-Gamut / F-Gamut C) (#2819)
Add Fujifilm log curves, F-Gamut C primaries, and color-space presets.
2026-10-22 19:40:42 -06:00
skylar taylor-barrick 3131b1462c Merge branch 'main' into feat/fujifilm-flog 2026-10-22 19:24:50 -06:00
skylar taylor-barrick f47a1f6480 CI: run cargo xtask ci on pull requests and pushes to main (#2563)
CI: run cargo xtask ci on pull requests and pushes to main
2026-10-22 18:47:06 -06:00
skylar taylor-barrick 07f2d3a213 i18n test: leave installed right-to-left faces out of the Japanese check (#2576)
i18n test: leave installed right-to-left faces out of the Japanese check
2026-10-22 18:14:46 -06:00
Brandon ThomasandClaude Opus 5.5 274c4cf85b Release 0.12.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.12.0
2026-10-22 20:06:07 -04:00
skylar taylor-barrick f83764e634 dev_icon: write the MimeType line the packaged .desktop file has (#2572)
dev_icon: write the MimeType line the packaged .desktop file has
2026-10-22 17:55:56 -06:00
skylar taylor-barrick 2860e4bdf8 Read the a of a.m. and attached am as the letter name A (#2832)
Read the a of a.m. and attached am as the letter name A
2026-10-22 17:44:05 -06:00
skylar taylor-barrick defb9ca947 Keep file URL hosts that only start with "localhost" (#2757)
Keep file URL hosts that only start with "localhost"
2026-10-22 17:43:57 -06:00
skylar taylor-barrick a9c6803489 Speak the minus sign of negative currency amounts in TTS normalizer (#2756)
Speak the minus sign of negative currency amounts in TTS normalizer
2026-10-22 17:43:48 -06:00
skylar taylor-barrick 13a9ed1f6d Reject TTML offset times that have no integer digits (#2753)
Reject TTML offset times that have no integer digits
2026-10-22 17:43:40 -06:00
Brandon ThomasandClaude Opus 5.5 74242b51d6 Release 0.11.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.11.0
2026-10-22 15:37:00 -04:00
NetterSilverandClaude Haiku 5.5 cda58a2b1d Read the a of a.m. and attached am as the letter name A
Found while testing crates/tts-text/src/normalize.rs:416 (parse_time am/pm suffix) and :947 (parse_wordish a.m. branch); consumed by crates/tts-text/src/phonemize.rs:398 (is_single_letter)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:39:43 +02:00
melchiaaronzedekandClaude Opus 5.5 6cfd42c511 M8: Fujifilm F-Log, F-Log2 and F-Log2 C colour spaces (F-Gamut / F-Gamut C)
Interpret Footage ▸ Color Management now offers "Fujifilm F-Log / F-Gamut", "Fujifilm F-Log2 /
F-Gamut" and "Fujifilm F-Log2 C / F-Gamut C" (X-S20, X-H2S, X-T5, GFX…), implemented from
Fujifilm's GFX ETERNA Technical Guide white paper v1.01 (the F-Log / F-Log2 data sheet
formulas): 10-bit code-value domain, F-Gamut = BT.2020 primaries, F-Gamut C primaries
(0.7347, 0.2653) (0.0263, 0.9737) (0.1173, -0.0224). Round trip and monotonicity tests cover
the new curves with the others; reference values from the white paper's table: 0 % → 95,
18 % → 470 / 400, 90 % → 705 / 570 (F-Log / F-Log2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:32:05 +05:30
BFlat dd525c93d4 Merge pull request #2763 from storytold/readme/app-icon
README: the app icon above the title
2026-10-22 18:01:48 +07:00
bflatastic d30fbaf4e6 README: the app icon above the title 2026-10-22 17:57:51 +07:00
NetterSilverandClaude Opus 5.5 47e5f63ded Keep file URL hosts that only start with "localhost"
Found while testing crates/interchange/src/common.rs:68

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:14:56 +00:00
NetterSilverandClaude Opus 5.5 033caf30ff Speak the minus sign of negative currency amounts in TTS normalizer
Found while testing crates/tts-text/src/normalize.rs:78-97 (normalize, '-' / currency arms)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:08:27 +00:00
NetterSilverandClaude Opus 5.5 b692d0262e Reject TTML offset times that have no integer digits
Found while testing crates/captions/src/ttml.rs:358 (parse_time, offset-time branch) and :310 (decimal_ticks)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:47:55 +00:00
Dylan M. Taylor 45901fccd0 security: enforce HTTPS on curl downloads (SonarCloud S6506) (#2720)
Add --proto '=https' to curl invocations so redirects cannot downgrade to
plaintext HTTP. Resolves SonarCloud S6506 (shell/docker/githubactions).
2026-10-21 19:36:08 -04:00
Dylan M. Taylor 7576186878 security: validate CLI paths/args in dev tools (SonarCloud S2083/S8707/S8705) (#2723)
* security: validate CLI paths/args in dev tools (SonarCloud S2083/S8707/S8705/S7044)

Resolve and validate command-line path arguments before use, enforce HTTPS at
download sinks, and confirm path containment. Hardens local codegen/fetch tools
against path-traversal and command-argument-injection findings.

* ci: exclude dev tool scripts from SonarCloud coverage gate

The extract_tables.py codegen tools aren't part of the unit-tested surface;
exclude tools/, docs/, examples/ from coverage so the new-code coverage gate
doesn't block hardening-only changes.
2026-10-21 19:35:47 -04:00
Dylan M. Taylor 3325caab6a fix: use async file I/O in async MCP screenshot handler (SonarCloud rust:S7493) (#2724)
The async screenshot() handler read and deleted the screenshot with blocking
std::fs calls, stalling the Tokio executor. Switch to tokio::fs::read /
tokio::fs::remove_file (await) and enable the tokio "fs" feature.
2026-10-21 19:35:42 -04:00
skylar taylor-barrick 410f44e341 Merge pull request #1795 from g1obalworlds/fix/hostile-input-video-codecs
Hostile-input hardening for video decoders (AV1 panic + oversize allocation, MPEG-2 allocation) and fuzz tests
2026-10-21 17:09:37 -06:00
skylar taylor-barrick 14eb1d6157 Merge pull request #2555 from justacalico/fix/audio-output-recovery
Re-open a failed audio output while playing instead of going silent for good
2026-10-21 17:09:30 -06:00
skylar taylor-barrick ed7d11dbca Merge pull request #1987 from nuclearspike/codex/security-mp4-audio-duration
codecs: avoid duration-sized silence allocation for damaged MP4 audio
2026-10-21 17:09:22 -06:00
skylar taylor-barrick c6581d83a7 Merge pull request #2023 from nuclearspike/codex/security-aaf-extraction-collision
engine: preserve existing files when AAF/OMF imports embedded audio
2026-10-21 17:09:16 -06:00
skylar taylor-barrick 157166bf15 Merge pull request #2388 from Felix-Helleckes/fix/2342-cli-run-waits-for-export
#2342: CLI file.exportMedia waits for the export before the process exits
2026-10-21 17:09:10 -06:00
skylar taylor-barrick 093e2de1d0 Merge pull request #1955 from Silvertree2010/fix/h786-auto-save-rotation-deletes-the-n
Order auto-saves by real time so rotation keeps the newest
2026-10-21 17:09:04 -06:00
skylar taylor-barrick 7b3bd08acb Merge pull request #2006 from ssandweiss/fix/1943-macos-cmd-q-save-prompt
fix(macos): ask to save on Cmd-Q instead of quitting outright (#1943)
2026-10-21 17:08:58 -06:00