# DeepPerfection Changelog

## v2.2.0
  - New: MultiTrack Send now warns if you assign it to a Priority another Send
    already has. Two Sends sharing a Priority get summed together into one
    source at the Sum, which is almost never what you want; you can still
    assign it anyway if it's intentional.
  - New: added a Sample-Accurate Fill toggle (Settings panel) for the unlocked
    frequency range above 160 Hz — switch between the legacy smoothed-envelope
    detection (with its release fade) and purely sample-accurate fill with no
    envelope lag.
  - Improved: Target Start's usable range now extends up to wherever Target End
    is set once you've unlocked the full frequency range, instead of stopping
    at 100 Hz.
  - Improved: in demo mode, MultiTrack Send tracks now go silent together with
    the Sum's own periodic demo silence, instead of each muting on its own
    independent schedule.
  - Fixed: on-screen readouts and labels rendering as garbled text ("SendÂ·Route
    to Sum" instead of "Send · Route to Sum") in a few places.
  - Visual: refreshed the SC and MultiTrack Sum interface with new background
    art, restyled knobs and buttons, and a redesigned Source/Mode selector.
  - Visual: fixed several layout issues — control panels not centered on their
    knobs, the MultiTrack Sum's Priority Trims panel crowding the display
    above it, and misplaced divider lines.

## v2.1.0
  - Fixed: on DeepPerfection SC, the null test (and fill/tighten) could go silent
    whenever the main input track was quiet, even if the sidechain still had
    signal that needed cancelling. The silence gate now also looks at the
    sidechain's level, not just the main track's, so null stays accurate through
    gaps in the main audio.

## v2.0.2
  - Added macOS AAX, working on windows
 
## v2.0.1
  - Fixed: the plugin could ask for your license key on nearly every launch
    (most often on macOS, including after a system update or when the host ran
    under Rosetta). Machine recognition now uses a stable hardware identifier,
    so an activated license stays activated.
  - Existing licenses re-activate themselves silently on first launch of this
    version — no need to re-enter your key.

## v2.0.0
  - Added multitrack mode!

## 1.4.0

### New platform
- **Linux support**: DeepPerfection now builds and runs on Linux (VST3 + CLAP, x86_64). Two Linux-specific fixes make it usable: networking now goes through libcurl so licensing, activation, and update checks actually reach the server, and the editor renders through OpenGL so metering stays smooth instead of stuttering under X11 software rendering. macOS and Windows builds are unchanged.

## 1.3.0

### New features
- **Tighten now works**: whoops.
- **HPF knob**: sets the lower frequency bound of the fill/tighten band (20–100 Hz), pairing with the cutoff as the upper bound. Anything below it passes through untouched.
- **SC Trim knob**: trims the internal sidechain reference (±24 dB) that feeds fill and tighten.

### Display
- **Frequency display follows HPF**: the left edge of the display now anchors to the HPF cutoff instead of a fixed 20 Hz, so the window shows only the band actually being processed. Both edges track their knobs in real time.

## 1.2.2

### Fixes
- **Plugin-scan crash/hang fixed (Windows / Nuendo and other VST3 hosts)**: a background task could, in rare cases, outlive the plugin instance during a host's plugin scan and crash or freeze the scanner. The background work is now tied to the plugin's lifetime and uses short network timeouts, so an unreachable server can no longer stall a scan. If your host's plugin list got into a bad state on 1.2.1, clear its VST3 scan cache and re-scan.

## 1.2.1

### Fixes
- **Universal Binary (Intel + Apple Silicon)**: the macOS build is now correctly built for both `arm64` and `x86_64`. The previous release shipped as Apple Silicon only, which caused the plugin to fail validation and be blocklisted on Intel Macs. The build script now forces a clean configure with both architectures and verifies the result before packaging.

## 1.2.0

### Routing model change (breaking)
- **Additive output only**: DeepPerfection now outputs only the track it is inserted on plus the fill signal. It no longer sums the sidechain into its output. Set the sidechain track to route normally to your master; the net result at the master is identical (`A + fill + B = A + B + fill`), but the sidechain track no longer needs its output silenced.

### Sound improvements
- **Tighten always targets the sidechain**: tighten now always subtracts the sidechain signal regardless of leader setting, since the plugin lives on the input track and can only cancel signals it injects
- **Null test isolates fill**: null test now subtracts both the input and sidechain from the output, so silence = fill perfectly reconstructs the sidechain contribution

### Display
- **RTA anchored at 20 Hz**: left edge of the frequency display is always fixed at 20 Hz; right edge tracks the cutoff knob in real time
- **Cutoff range reduced to 60-160 Hz**: the upper limit was lowered from 250 Hz (previously 180 Hz). Processing above 160 Hz was not useful and could sound artificial.

### Removed
- **Rolloff drag interaction removed**: the emphasis curve drag was removed. The curve still displays but is no longer interactive.

## 1.1.0

### UI
- **Redesigned interface**: I'm trying guys.
- **48Hz refresh rate**: display and controls now update at 48Hz (previously 24Hz) for smoother metering
- **Mono sidechain warning removed**: the "L and R appear identical" banner is no longer shown

## 1.0.3

### Sound improvements
- **Sample-accurate fill amplitude**: fill now tracks the instantaneous per-band magnitude rather than a smoothed envelope, removing the previous ~2ms attack lag and ~80ms release tail on the restore signal

### UI
- **Update available persists through tutorial**: the update notice is no longer hidden when the tutorial overlay is shown or dismissed

## 1.0.2

### Restorative summing: new routing model
- **Plugin now lives on one source**: place DeepPerfection directly on your kick or bass track and route the second source to the sidechain; no bus, no hard panning required
- **Both sources stay fully stereo**: the previous L/R sidechain trick forced both sources to mono and was overly complicated; they now pass through at full stereo width
- **Internal summing**: DeepPerfection sums the two sources internally for amplitude assessment and outputs the combined result with fill added; the sidechain source no longer needs an independent output
- **Bypass passes both sources**: bypass now outputs input + sidechain with no fill, matching the internal sum behaviour

### UI
- **SC RIGHT / SC LEFT renamed to SC / INPUT**: labels now reflect the new routing model; SC = sidechain source, INPUT = the track the plugin is on
- **Tutorial updated**: getting started instructions reflect the new one-source-plus-sidechain setup

## 1.0.1

### Sound improvements
- **Attack/release envelope**: level detection now uses a fast attack (~2ms) and slow release (~80ms) instead of a single slow smoother; restore responds more accurately to transient peaks
- **Saturation fixed**: saturation knob now produces audible harmonic saturation; the previous implementation divided out the drive and had no effect

### New features
- **Phase correlation display**: a color strip at the top of the frequency display shows the sidechain left/right phase relationship per band in real time (green = in phase, red = out of phase)
- **5ms lookahead**: main signal is delayed by 5ms so fill and transient subtraction arrive precisely at the transient peak rather than slightly after; plugin latency is reported to the host for automatic compensation
- **Tighten: transient subtraction**: this works now
- **Update available indicator**: a clickable notice appears when a newer version is available

### Stability
- Sidechain delay lines added to match main lookahead, ensuring phase-accurate subtraction at all frequencies
- Lookahead and sidechain delay lines are flushed on block size change to prevent pops at transport start

### DAW compatibility
- **Fixed audio thread block**: version check was making a synchronous HTTP request inside `prepareToPlay`, which could freeze the host for several seconds on load in all DAWs; moved to a background thread
- **Logic Pro sidechain**: added `isBusesLayoutSupported` so Logic correctly recognises and routes the stereo sidechain bus
