Commit Graph
120 Commits
Author SHA1 Message Date
Dylan M. Taylor 57dc82ea20 project: bound the speaker index a transcript word may carry (#4140)
Transcript::normalize sized the speaker label table from the largest word
speaker index, so one word with a u32::MAX index made transcript.set allocate
billions of labels before check() could run. Indices at or past MAX_SPEAKERS
(1024) now lose their speaker instead.
2026-11-03 06:02:57 -05:00
Jonathan Cardoso 81f6bac4c6 project: ducking.against takes the type names setType takes (#4039) (#4041)
essentialSound.setType takes dialogue, music, sfx and ambience, but
ducking.against went through serde, which knows only the labels
(Dialogue, SFX...), so the name setType had just taken was refused.
ducking.against now reads either spelling with AudioType::parse and
still refuses names that are not a type.
2026-11-03 00:03:21 -05:00
wweimao f3f1afd160 M10.7: fix per-character Stroke and Stroke 2 controls (#3938) 2026-11-03 00:01:43 -05:00
Arshiya RahgozarandBrandon Thomas 76cafff221 render: Luma Key can key out brights (#2648) (#3688)
Luma Key only made pixels below Cutoff transparent, so a light
background could not be keyed. Add a Key Out Brights option (default
off) that inverts the matte; projects without the param render as before.

Tested: luma_key_can_key_out_brights (default, missing param, inverted).

Fixes #2648

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-11-01 15:15:49 -05:00
alexanderalber 7800a0467e fix(graphics): Style buttons show and toggle the Type-tool selection (#3673)
* fix(graphics): Style buttons show and toggle the Type-tool selection

With characters selected by the Type tool, the Faux Bold, Faux Italic,
All Caps, Small Caps, Underline and Strikethrough buttons showed the
layer's value, not the selection's. A click wrote the inverse of the
layer value to the selection, so a second click could not turn a style
off again.

The buttons are now on when every selected character has the style
(its own override, else the layer's value). New
graphic_design::range_styles lists the overrides of a character range.

generated with Claude Code

* fix(graphics): Style buttons show the layer's style without a selection

Without a Type-tool selection the list of selected characters is empty,
and "every selected character has the style" was true for it. So an
unstyled layer showed Faux Bold, Faux Italic, Underline and
Strikethrough as on, and a click wrote false. The buttons now show the
layer's value when no characters are selected (found by CodeRabbit).

generated with Claude Code

* perf(project): range_styles builds only the selected range

The Style row reads the selection's styles on every redraw, once per button.
range_styles expanded every character of the text and then sliced; it now
allocates only start..end and merges the runs that overlap it, in their
order. A test compares it with the expanded text for every range, including
overlapping and out-of-range runs; the caret and past-the-end cases are
tested too.

generated with Claude Code

* test(graphics): cover Small Caps and a mixed-caps selection

The selected-characters test toggles Small Caps too, and the mixed-selection
test makes "Dr" All Caps before extending to "Drive", so both caps buttons
are off and a click makes all of it All Caps.

generated with Claude Code
2026-11-01 15:15:36 -05:00
Arshiya Rahgozar e492d9e2a6 effects: give 4-Color Gradient a position for each colour (#3747)
* effects: give 4-Color Gradient a position for each colour (#3682)

The four colour points were hard-coded a quarter in from the corners, so
the gradient could not be arranged (the reporter had no position for the
fourth colour). Point 1-4 are now parameters; a point left at its NaN
default keeps the old position, and a project saved before they existed
has no such params, so both render exactly as before.

Test: a project without the points and one with the old positions set
explicitly render the same as the default; moving Point 4 shifts the
colours.

Fixes #3682

* effects: resolve the 4-Color Gradient points to the quarter positions (#3682)
2026-11-01 15:15:21 -05:00
5ed4952d43 Add shared custom colors and complete marker editing (#1435)
* M3: Add shared custom colors and complete marker editing

* #1435: refine native colors and range endpoint flags

Use the macOS Colors panel for custom label colors and reuse the established egui picker on other hosts. Preserve draft confirmation, exact sRGB values, native text shortcuts and project ownership. Compact the swatches and center the add control, split range glyphs across their endpoints, localize the new controls, protect newer marker edits from stale dialogs, and cover the behavior with rendered UI and hit-test regressions.

Co-authored-by: Codex <noreply@openai.com>

* #1435: preserve imported palettes and marker double-click ownership

Union saved OTIO palettes across timelines with deduplication, bounded capacity,
first-name preservation and explicit overflow warnings. Keep null authors
consistent with omitted fields, and consume marker double-clicks before the
work-area gesture so opening the editor does not alter project history.

Correct the CSV URL column and schema documentation. Add six regressions for
palette retention/capacity, author handling, and physical overlapping gestures.

Validation: full cargo xtask ci (3666 passed, 45 skipped), 42 rendered UI tests,
and strict workspace/all-target Clippy on Rust 1.99.1.

Co-authored-by: Codex <noreply@openai.com>

* #1435: retain OTIO swatch names and generator labels

Ignore orphan name entries when retaining saved palette names so input ordering
does not hide valid names after the first 64 entries. Keep names bounded by the
retained palette and preserve existing valid names.

Include generator preset labels alongside custom label colors in OTIO metadata.
Add regressions for orphan-prefixed name maps and three generator kinds with
preset/custom colors through actual export/import round trips.

Validation: both regressions failed before fixes; all 72 interchange tests and
full cargo xtask ci pass (3668 tests, 45 skipped), plus strict workspace/all-target
Clippy on Rust 1.99.1.

Co-authored-by: Codex <noreply@openai.com>

* #1435: preserve distinct OTIO generator item identity

Use exported FilmCraft item IDs for generator media identity so identical
content can retain distinct source names, labels and custom colors. Repeated
references to one source item still share a single imported media entry.

Preserve content-based fallback for missing or invalid item IDs. Cover black
video, bars and tone, and color mattes with distinct items/shared references,
plus legacy and malformed identity metadata.

Validation: distinct-generator regression failed before fix; legacy compatibility
passed. All 74 interchange tests and final full cargo xtask ci pass (3670 tests,
45 skipped); strict workspace/all-target Clippy also passes on Rust 1.99.1.

Co-authored-by: Codex <noreply@openai.com>

* #1435: align Edit Marker layout and add safe marker navigation

Give the editor a wide aligned form, larger Notes area, side action column,
and grouped palette with vertical marker types. Expand the Web Link field
with the form and keep actions accessible in small windows.

Previous/Next saves valid edits as one Undo step and stays with the original
sequence/source owner, including coincident markers. Invalid drafts stay open;
unchanged navigation and Done add no history. Keep native/shared color pickers,
Author, Notes, URL validation and immediate marker creation.

Validation: all 45 rendered sequence/marker UI tests pass, including five new
navigation/owner/validation/layout regressions. Native macOS layout, picker
Cancel and exact single-step Undo restoration verified. Full standard cargo
xtask ci passes 3675 tests (45 skipped), doctests and all remaining gates;
strict Rust 1.99.1 workspace/all-target Clippy also passes.

Co-authored-by: Codex <noreply@openai.com>

* #1435: refine Edit Marker proportions and action alignment

Narrow the dialog to 680 logical pixels and keep the core order Name,
Time/Duration, Notes, Color and marker type. Place Author after the type-specific
options as secondary metadata. Preserve our palette, custom picker and range controls.

Use consistently sized, centered rounded action buttons with a primary Done action.
Shorten Delete Marker to Delete and remove the navigation helper and unused translations.
Keep the existing navigation save/validation/Undo semantics and automation IDs.

Validation: all 45 rendered marker/sequence UI tests pass, including small-window
action accessibility. Actual macOS layout and no-op Previous/Next/Cancel verified.
Full standard cargo xtask ci passes 3675 tests (45 skipped), doctests, formatting,
Clippy, translations, layers, assets and 49 WASM crates. Strict Rust 1.99.1
workspace/all-target Clippy passes separately.

Co-authored-by: Codex <noreply@openai.com>

* #1435: tighten marker layout and validate text editing

Use a narrower aligned form with Author below Name, bounded scrolling Notes,
left-aligned colors, centered actions and an inline Web Link URL/open icon.
Remove the legacy Flash Cue choice while preserving imported marker types.

Constrain timecode typing/paste to complete numeric colon-separated fields,
validate drop-frame labels and frame bounds, and disable Done for invalid timing.
Preserve high-frame-rate timecodes and point-marker semantics when Duration is
unchecked. Route native/menu clipboard and text Undo commands to focused fields;
explicit engine commands retain project Undo and selection semantics.

Validation: standard cargo xtask ci passes 3679 tests (45 standard skips),
doctests, fmt, strict workspace/all-target Clippy, i18n, layers, 69 assets and
49 WASM crates. Also passed 48 rendered marker/sequence tests and strict Rust
1.99.1 Clippy. Actual macOS clipboard, bounded Notes, point save and exact Undo
were checked. Windows/Linux desktop interaction remains pending.

Co-authored-by: Codex <noreply@openai.com>

* M0: Wait for frame-worker recovery before asserting

Do not treat a nonempty request queue as proof of worker death in the
panic-recovery regression. Keep waiting for all injected faults and enough
post-fault completions, then drain the queue without adding more seeks.
Retain the exact fault-count, successful-recovery and empty-queue assertions
and bound the wait with a two-minute deadline.

The inherited test failed twice in independent fork CI. It did not reproduce
locally: baseline passed 20 normal and 10 delayed-report runs; the repair
passed 50 normal and 10 delayed-report runs. No product or marker UI changes.

Validation: standard cargo xtask ci passed all 4485 tests (52 standard skips),
doctests, formatting, strict workspace/all-target Clippy, i18n, layers,
69 assets and 49 WASM crates.

Assisted-by: OpenAI Codex

---------

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <codex@openai.com>
2026-11-01 03:04:14 +01:00
aiongg 79796c1854 Integration: #2050 leave the auto-point comparison as it was (placed clips carry resolved points, so the stricter rule marks every clip modified) 2026-10-31 04:06:21 +00:00
aiongg 01608757f5 Merge integration track fx 2026-10-31 03:39:22 +00:00
aiongg d9a147f0a6 Merge PR #3695: Color: add a Three-Way Color Corrector 2026-10-31 02:14:52 +00:00
aiongg f319ff9af3 Merge PR #3389: #3357: caption track font style 2026-10-31 02:13:13 +00:00
aiongg fd2a79f10d Merge PR #3434: Use default interpolation for keyframes added before the first 2026-10-31 02:12:52 +00:00
aiongg 5636973cfc Integration: #2050 port the auto point fix to project/track.rs and its test to project/tests.rs 2026-10-31 02:12:33 +00:00
aiongg 5583d4a0c4 Merge PR #3245: Preserve Unicode names in graphics template export identities 2026-10-31 02:12:24 +00:00
aiongg fc3709f0fe Merge PR #2015: Properties: with text selected, the character controls show the selection's style (#1996)
graphics.rs hunks ported to panels/graphics/properties.rs (Ctx::value, flag, caps and the
strikethrough property), test module appended there.
2026-10-31 02:10:45 +00:00
marshiyar b8fa438e5f render: add a Three-Way Color Corrector effect (#3465)
New Three-Way Color Corrector (Obsolete folder, like Color Balance): a
hue/balance wheel and a level shift for shadows, midtones and
highlights, tonal range thresholds with softness, and Saturation. All
parameters go through the generic param path (keyframable, undoable).
CPU (FxOp::ThreeWay) and GPU (OP_THREE_WAY) share the arithmetic; the
wheel is converted to an RGB offset on the CPU so the shader stays
simple. Defaults are the identity.

Tested: three_way_color_corrector_works_per_tonal_range (identity, each
wheel affects only its range, saturation 0 is grey) and two GPU/CPU
parity cases in fx_tests.

Fixes #3465
2026-10-30 06:11:49 -07:00
f6e329bb6c feat(text): strikethrough for graphic text (#3433)
* feat(text): strikethrough for graphic text

Text layers get a Strikethrough toggle next to Underline: per layer
(`strikethrough` parameter, Properties ▸ Text ▸ Style "S") and per
character (`graphics.setCharStyle` style `strikethrough`, stored in the
layer's style runs).

The stroke uses the font's OS/2 strikeout position and size; a font that
leaves them out gets a stroke centred on half the x-height. Strokes are
added to the layout's decoration rectangles next to underlines, so every
renderer and the path export draw them without further changes. Vertical
text gets a stroke down the middle of each cell.

generated with Claude Code

* contributors: add alexanderalber

generated with Claude Code

* graphics properties: draw the letter-button marks in a helper

Keeps the Properties scroll closure under the cognitive-complexity limit with the new
Strikethrough button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 01:45:25 -04:00
Michael Butler 84cfff0d4f Fix graphics template width scaling across canvas sizes (#3415) (#3565)
* #3415: fit graphics template width alongside height

Scale independent layer width and its keyframes when fitting graphics templates to another canvas. Add static and animated regression coverage and document the behavior.

Validation: contributor reports all requested verification passed; agent ran no tests or builds.

Assisted-by: OpenAI Codex

* #3415: fit omitted scale defaults in imported templates

Materialize definition defaults for both scale axes before fitting, preserving explicit values and animation. Cover imported text and shape layers with omitted parameters and document the behavior.

Validation: contributor confirmed verification passed. Agent ran no tests or builds.

Assisted-by: OpenAI Codex
2026-10-30 01:22:51 -04:00
Dylan M. Taylor 650d95dfc4 Refactor project for strict Clippy checks 2026-10-28 04:36:48 +00:00
NetterSilverandClaude Haiku 5.5 8a35285f1f Use default interpolation for keyframes added before the first
Found while testing crates/project/src/keyframe.rs:222 (Param::set_at)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 09:13:09 +01:00
Alex Perrault 2a32441cd4 Merge commit '10d626ccc4888e0f020f9ca314c2bc9148ded4f4' into captions/3357-font-style 2026-10-26 21:47:08 -07:00
aiongg c52a31cdeb refactor(project): split lib.rs into label, item, track, sequence, settings, view and source 2026-10-26 18:39:58 +00:00
aiongg 806fbe8af5 style: cargo fmt the moved test files 2026-10-26 18:20:21 +00:00
aiongg f6402960b6 refactor(project): move lib.rs tests to their own file 2026-10-26 18:20:20 +00:00
Alex PerraultandClaude Opus 5.5 1a7bc0602f #3357: caption track font style
Caption text was always the family's SemiBold: caption_style hard-coded
the style. CaptionStyle gains font_style (captions.setStyle `fontStyle`,
default "SemiBold", serde default so old projects load unchanged),
resolved like graphic text: the nearest weight when the family has no
face of that name, SemiBold when empty.

- render_caption uses it (Program monitor and burned-in export)
- captions.list reports it; the Text panel's Captions tab offers the
  family's styles next to the font
- Upgrade Caption to Graphic carries it to the text layer's font style;
  graphics.fonts.used lists it and file.replaceFonts matches and
  replaces it
- docs/captions.md, docs/graphics.md

The default keeps default_style_renders_like_the_reference green
(pixel-identical); font_style_is_used renders Regular and Bold against
SemiBold.

Fixes #3357

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 23:29:21 -07:00
skylar taylor-barrickandDylan M. Taylor 320cae243d Migrate FilmCraft to egui 0.37 with current editing changes preserved (#3249)
* egui 0.37: migrate FilmCraft input and rendering integration

* egui-037: fix capture failures, UTF-8 input and hidden timing

* Fix screenshot crop scale for fitted native surfaces

* egui037: simplify UI helpers and preserve pointer IME cancellation

* Translate graphics and effect control accessibility labels

* egui037: Document capture and IME lifecycle contracts

* egui-037: document UI and input integration contracts

---------

Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
2026-10-25 14:45:04 -04:00
jnohclee-rgb 74228b5a48 graphics: preserve Unicode template names in export identities
Retain Unicode letters and digits in the shared slug helper so non-Latin names do not all export as template.fcgt/user:template. Refs #3237 (non-ASCII-name subcase only).

AI-assisted-by: OpenAI Codex
Signed-off-by: jnohclee-rgb <336857373+jnohclee-rgb@users.noreply.github.com>
2026-10-25 13:23:42 +08:00
Earl Co f30c6be228 security(project): scan malformed caption markup once (#2885) 2026-10-24 04:50:47 -04:00
Earl Co a70cac4c23 security(render): bound embedded LUT resolution (#2901) 2026-10-24 04:50:04 -04:00
Earl Co 7e980f31c9 security(project): validate graphic templates in linear time (#2886) 2026-10-23 10:53:52 -04:00
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
wstockandClaude Fable 5.1 e2d43a79a0 Properties: with text selected, the character controls show the selection's style (#1996)
An edit made with a Type-tool selection goes to the selected characters
(graphics.setCharStyle), but the Fill colour, the RGB fields and the other
character controls kept reading the layer's value, so the picker looked
unchanged after the change applied. They now read the selected
characters' own style, falling back to the layer's where nothing is set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011K1peyrh5MdZ6ttHkVq8Gh
2026-10-20 11:29:40 +00:00
irgendwasmitfelixandClaude Opus 5.5 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
Brandon Thomas 9e9c3c315f Merge pull request #836 from vangel76/gap-parity-effects
#831: cargo xtask parity measures effects and transitions (--area)
2026-10-11 20:29:55 -04:00
Ikki Nishihara 7a3d003194 fix: サブクリップ配置で親の音声を保持 #913 2026-10-12 01:55:24 +09:00
vangel76andClaude Opus 5.5 f8b37e1463 #831: cargo xtask parity measures effects and transitions (--area)
Problem: `cargo xtask parity` (#781, #782) measured only the menu bar; the
Effects panel's effects and transitions had no measured parity figure
(docs/gaps.md G7).

Fix: `--area effects|transitions` compares the catalogue the engine's
effect definitions list in the Effects panel (new `effect_catalog`
example in filmcraft-project, the panel's own top-folder filter) with a
reference of folder paths or bare names (default the local, never
committed plan/premiere/<area>.json). Same report, caps and `--min` as
menus; placement by folder; Presets / Lumetri Presets and the other
area's items are out of scope, so one panel snapshot serves both areas.
`--area menus` (default) is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:15:53 +02:00
vangel76andClaude Opus 5.5 16493a7f70 #813: masks round their corners (rounded rectangle masks)
Problem: Premiere 26's redesigned mask tools give rectangle masks
rounded corners; FilmCraft masks only had sharp corners.

Fix: MaskPath::with_rounded_corners replaces each sharp corner between
straight edges by a circular fillet (two vertices joined by a cubic arc,
handles 4/3·tan(φ/4)·r, shrunk to fit half of each edge; hostile radii
and indices are clamped or ignored). masks.add takes `cornerRadius` for
a rounded rectangle, and the new masks.roundCorners command rounds an
existing mask's corners (or the listed vertices) in one undo step, on
every Mask Path keyframe so animated paths keep interpolating.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:47:09 +02:00
Brandon Thomas 6239d3d65e Merge pull request #751 from vangel76/fix-456-nest-bins
#456: a bin can be dragged into another bin and back out
2026-10-10 15:53:08 -04:00
vangel76 ae488523a9 Merge remote-tracking branch 'upstream/main' into fix-620-project-notes
# Conflicts:
#	crates/ui-egui/src/i18n/es.tsv
#	crates/ui-egui/src/i18n/ja.tsv
#	crates/ui-egui/src/i18n/zh-cn.tsv
2026-10-10 21:15:04 +02:00
vangel76andClaude Opus 5.5 6f650a363a #456: a bin can be dragged into another bin and back out
Problem: a bin stayed wherever it was created. `project.moveToBin` only
moved project items, and bin rows and cards in the Project panel could not
be dragged, so the only way to nest bins was to create them inside each
other.

Fix: `project.moveToBin` also takes bin ids in `items` (as `project.delete`
does) and moves the bin with everything in it, skipping the root and any
move that would put a bin inside itself. In the Project panel, bin rows
(List view) and bin cards (Icon view) can be dragged: dropping one on
another bin nests it there, and dropping it on empty space moves it into
the bin the view shows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:13:42 +02:00
vangel76andClaude Opus 5.5 110c1783c3 #620: Project Notes panel, saved in the project
Problem: a project had nowhere to keep free text (to-dos, instructions
for whoever opens it next, frame numbers).

Fix: plain-text `Project::notes` (schema v15, no-op migration so older
builds refuse instead of dropping it), `project.notes` /
`project.setNotes {text, merge?}` engine commands (undoable, capped at
1 MiB; calls with one `merge` key share an undo step), and a
Window > Project Notes panel whose editor (`notes.text`) commits every
change, one typing session per undo step. Translations for es, ja,
zh-cn (and the panel title for pt-br, uk).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:09:13 +02:00
Brandon Thomas c11f20cf9c Merge pull request #708 from impostazioni/fix/caption-font
Captions: render the track font and add a font picker
2026-10-10 14:56:17 -04:00
Brandon Thomas ea33e3cb00 Merge pull request #679 from vbasky/fix/415-transform-shutter
Apply Transform shutter angle when the override is on
2026-10-10 14:54:38 -04:00
impostazioniandClaude Opus 5.5 6aa4146c16 Captions: render the track font and add a font picker
The caption style's `font` was stored and settable through
captions.setStyle, but the burn-in renderer always drew Inter SemiBold.
Lay out, wrap and measure captions with the track's family (Inter when
the name is empty or not installed), so the Program monitor and burned-in
exports use the chosen font.

Add a font dropdown to the caption style strip in the Text panel's
Captions tab (automation id `text.captions.style.font`, options
`text.captions.style.font.option.<family>`, registered only while
visible). macOS-private faces (names starting with '.') are not offered:
some lack a space glyph and run words together.

Tests: renderer regression test (a non-Inter family changes the pixels;
failed before), fallback test for empty/unknown names, and a headless UI
test that picks Noto Serif from the dropdown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:29:09 +01:00
Vikram Bhaskaran 9e77d9d786 Apply Transform shutter angle when the override is on.
The Transform effect listed a shutter angle but had no override, so motion blur never used it. Checking Use Effect Shutter Angle now samples the animated transform across that angle.
2026-10-11 02:48:52 +11:00
Vikram Bhaskaran 80db16ebd5 Apply Ultra Key Setting as a parameter preset.
Relaxed and Aggressive previously only scaled two internal multipliers, so the matte stayed at Default. Switching Setting now writes Premiere-like matte values and the renderer uses that set, including Custom for hand-tuned keys.
2026-10-11 02:34:08 +11: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 c9e803ff3b Merge origin/main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:24:39 -04:00
Brandon Thomas e831d0f248 Merge remote-tracking branch 'origin/main' into fix-434 2026-10-10 07:08:57 -04:00
Brandon ThomasandClaude Opus 5.5 68c297b987 Arc<Sequence>: fix the missed &mut sites and closing braces; drop the unrelated key-dispatch test
source_monitor markers and format's audio-stream clamp now detach with Arc::make_mut;
restore the final braces in clip_ops.rs and project/src/lib.rs (cargo fmt);
scripted.rs is back to main (the test covered key dispatch, which this PR doesn't change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:08:56 -04:00