This pull request's diff hasn't been prepared yet. Log in with GitHub to have us prepare it for review.

Add "Enable Audio Ducking" checkbox #1914

Open
bmatherly opened 1:16pm on September 20, 2026 wants to merge 218 Δ into mltframework/shotcut master from
duck_enable

Pull Request Overview

  • Opened on September 20, 2026
  • Status Open
  • Commit count 2 with first commit September 20, 2026

Total Delta

218 Total Diff Delta

Open Days

Open 40 weekdays

Test Delta

0 Diff Delta in Test Files
Breakdown by Phase

How long has this pull request spent in each phase of its lifecycle?

Fraction of total time Business days Phase
 
0.0 days Authoring 1 commit before pull request opened for review
 
0.2 days Awaiting first review
 
39.7 days Revising work with 1 commit in response to 2 reviews that left 7 comments

Total time for pull request still awaiting merge (longer than repo's target): 39.9 business days

Author avatar

Add "Enable Audio Ducking" checkbox

This change mostly reverts a4be7ad3f07d6ad2051c017c6b9acda36946a04d

Instead, it adds a checkbox to enable/disable the feature. When disabled, the ducking controls are disabled.

Disabled:

Enabled:

I don't feel strongly about this change. But there were enough comments from the beta that I thought it was worth responding.

Comments Threads Pending Resolution

ljharb reviewed on September 21, 2026
ljharb left a comment

## Copilot review overview

### 🟡 Changes recommended

Threshold state synchronization and legacy shadow persistence issues remain unresolved.

*Get a fresh assessment by requesting another Copilot review.*

**Review effort:** Lite
**Findings:** 3 Medium severity · 1 Low severity

Open (4)

- Medium severity [Restore real threshold when shadow property is missing](#discussion_r4058775339) · New
- Medium severity [Persist threshold when disabling ducking on legacy transitions](#discussion_r4058775357) · New
- Medium severity [Keep ducking enabled state consistent when threshold is zero](#discussion_r4058775373) · New
- Low severity [Add entry logging to redo()](#discussion_r4058775381) · New

What changed in this PR

Adds an opt-in audio-ducking checkbox, shadow threshold handling, undo support, and simplified spinner behavior.

**Changes:**
- Adds checkbox-controlled ducking UI and threshold synchronization.
- Adds duck-threshold undo/redo handling.
- Removes obsolete spinner override functionality.

| File | Summary |
|---|---|
| `src/​widgets/​trackpropertieswidget.ui` | Adds the ducking checkbox a...

src/commands/timelinecommands.cpp
2426
    setText(QObject::tr("Change track duck threshold"));
2427
    QScopedPointer<Mlt::Transition> transition(getMixTransitionByTrackIndex(m_trackIndex));
2428
    if (transition && transition->is_valid()) {
2429
        m_oldValue = transition->get_double("duck_threshold_shadow");
2430
        m_oldRealValue = transition->get_double("duck_threshold");
src/widgets/trackpropertieswidget.cpp
324
                                                                : 0.0,
325
                                                            checked
326
                                                                ? tr("Enable Track Audio Ducking")
327
                                                                : tr("Disable Track Audio Ducking"),
328
                                                            false);
src/widgets/trackpropertieswidget.cpp
338
        auto command
339
            = new Timeline::ChangeDuckThresholdCommand(transition->get_b_track(),
298 340
                                                       value,
341
                                                       ui->duckEnabledCheckBox->isChecked());
342
        connect(command, SIGNAL(valueChanged(double)), SLOT(onDuckThresholdShadowChanged(double)));
src/commands/timelinecommands.cpp
2431
    }
2432
}
2433
2434
void ChangeDuckThresholdCommand::redo()
2435
{
ddennedy reviewed on September 20, 2026
ddennedy left a comment

Ugh, I just noticed that some field names are capitalized all words. Again, see [our UI conventions](https://shotcut.org/notes/ui-conventions/).

I inclined to prefer this because the current approach with OFF and need to slide to turn it off is unconventional. However, as an additional row it looks awkwardly placed and redundant. How about a checkbox at the start of the heading?

☑️ **Automatic Audio Ducking**

You can ignore the build failures as Debian unstable being unstable.

Resolved Comment Threads

No resolved comments have been left on this PR.