name = "movie" description = "Wide-dynamic-range film: lifts quiet dialogue, keeps action punchy but bounded." # Gentle, slow AGC toward film reference loudness. Slow envelopes so it # rides the program level across a scene without pumping during quiet # stretches. Asymmetric limits: it's allowed to boost soft dialogue more # than it cuts loud action. [agc] enabled = true target_lufs = -20.0 attack_ms = 2500.0 release_ms = 1000.0 silence_threshold_lufs = -70.0 max_boost_db = 12.0 max_cut_db = 8.0 # RMS detector with a soft knee — lifts the dialogue floor smoothly # without grabbing individual transients. Low-ish ratio: this is # leveling, not crushing. [compressor] enabled = true detector = "rms" threshold_db = -28.0 ratio = 2.0 knee_db = 8.0 attack_ms = 15.0 release_ms = 250.0 makeup_db = "auto" rms_window_ms = 50.0 [limiter] ceiling_dbtp = -1.0 lookahead_ms = 3.0 release_ms = 120.0 hold_ms = 5.0 oversample = 4 link = "stereo" # Generous PSR cap: explosions and stings still punch through, just # bounded so they don't outright shock the listener. [limiter.soft] max_psr_db = 18.0 static_ceiling_dbtp = -6.0 attack_ms = 8.0 release_ms = 250.0 [meters] publish_hz = 20.0 # Video players + browser video are routed THROUGH the processor here # (default/night send media players to bypass). DAWs stay bypassed. [[rules]] match = { process_binary = ["ardour", "reaper", "qpwgraph", "carla", "bitwig-studio"] } route = "bypass" [[rules]] match = { process_binary = ["mpv", "vlc", "firefox", "chromium", "google-chrome"] } route = "processed" [[rules]] match = { media_role = ["Movie", "Video"] } route = "processed" [default_route] route = "processed"