Audio mix
How clips reach the speakers and the export: clip gain, channels, track faders, the master, and loudness normalize.
Every clip runs through the same chain in preview and export: source → channels (audioChannel / channelMode) → gain (dB) → clip fx → volume (keyframes, fades, duck) → pan → its A-track, then track fx → track fader → track pan → master sum → master fx → master fader. A track has a fader (tracks[].gain, dB), a pan (tracks[].pan) and effects (tracks[].fx); the master has a fader (master.gain) and effects (master.fx). Audio on a video lane (a clip with volume > 0 on V1…) goes straight to the master. In the UI these are the strips in the Mixer tab beside the Inspector (its FX button edits that track's or the master's effects); mute / solo are the existing track switches (disabledTracks).
Effects (fx - an array processed in order; every parameter optional, out-of-range values are clamped; on:false bypasses one without losing its settings):
| type | parameters (default) |
|---|---|
eq | lowFreq 120 Hz, lowGain 0 dB (low shelf) · midFreq 1000, midGain 0, midQ 1 (peak) · highFreq 8000, highGain 0 (high shelf); gains −18…+18 |
highpass / lowpass | freq (80 / 8000 Hz), q 0.71 |
compressor | threshold −20 dB, ratio 4, attack 10 ms, release 200 ms, knee 6 dB, makeup 0 dB |
limiter | ceiling −1 dB, release 80 ms - brickwall, 5 ms lookahead; nothing passes the ceiling |
gate | threshold −50 dB, range −40 dB (how far it closes), attack 2, hold 80, release 150 ms |
delay | time 0.3 s, feedback 0.35, mix 0.25 |
reverb | decay 2 s, predelay 20 ms, mix 0.25 |
distortion | drive 0.3, mix 1 |
widener | width 1.5 (0 = mono, 1 = as is, 2 = extra wide) |
Presets fill the chain with tweakable effects: Voice - clean-voice, podcast, radio, deep-voice (EQ-only: lower, warmer - not a pitch shift), telephone; Music - cinematic, wide, muffled (next room). Agents apply them (or any chain) with the patch op setFx: {op:"setFx", target:"clip", id:"c_vo", preset:"podcast"} · {op:"setFx", target:"track", id:"A3", fx:[{type:"eq", highGain:-3}]} · {op:"setFx", target:"master", fx:[{type:"limiter", ceiling:-1}], append:true} · fx:null clears. On a clip it applies to its linked stems too; chains are validated (unknown effect or preset → the whole patch is refused). The compact project view shows chains as fx:highpass·eq·….
- Set a track fader / pan:
{op:"setTrack", id:"A2", set:{gain:-8, pan:0}}(nullor0resets). Master:{op:"setProject", set:{master:{gain:-1}}}. - Normalize -
fablecut_normalize_audio {clipIds, mode?:"lufs"|"peak", target?}measures each clip's source window after its channel routing (ITU-R BS.1770 integrated loudness with EBU R128 gating, or sample peak) and setsprops.gainto hit the target. Linked stems are measured together and share one gain; passing a video clip normalizes its stems. Targets: −14 LUFS streaming / social, −16 LUFS podcast / dialogue, −23 LUFS broadcast, ormode:"peak", target:-1. Locked clips are skipped unlessforce:true. The inspector's Normalize in the editor does the same measurement. - Fade curves - a
fadetransition on an audio clip may carrycurve:"power"(constant power - the crossfade default, no dip in the middle),"linear"(constant gain - for crossfading the same material, e.g. a split of one take) or"exp"(slow start, natural fade to silence). Nocurvekeeps the original eased shape. Only the volume follows the curve; picture fades are unchanged.{transitionOut:{type:"fade", duration:3, curve:"exp"}}. - Crossfades - overlap A and B on one track and give A
transitionOut:{type:"fade", duration:d, curve:"power"}and BtransitionInthe same, withd= the overlap. Shift+D in the editor does it for you: it borrows the overlap from spare media on both sides of the cut (half each, or more from the side that has it), so nothing after the cut moves; for a linked shot the stems crossfade and B's picture dissolves in. - Auto-duck -
fablecut_auto_duck {clipIds:[music…], under?:["A1"], amount?:-12, threshold?:-40, attack?:0.3, release?:0.6}finds where the voice tracks (default: every other audio track) are abovethresholddBFS - short gaps are bridged so the music doesn't pump between words - and writeskeyframes.duckon the music: ramp downattacks before speech, hold, back up overreleases. It replaces earlier ducking;amount:0clears it. Same as the inspector's Auto-duck section or the clip menu's Auto-duck under other tracks. - In the editor, each audio clip shows its volume line (yellow; dashed = after ducking): drag it to change the level, Ctrl/Cmd-click to add a keyframe, drag a point to move it, Alt-click or double-click to remove one. The corner fade grips drag a constant-power fade in or out. Both edit linked stems together.
- Use gain for "this clip is too quiet / loud", volume keyframes for shaping, duck for dipping under dialogue, and the track fader to balance whole lanes (dialogue against the music bed).