- Rename section header to EQ Studio with updated description
- Add ST/M/S channel select dropdown to each parametric band control
- Move Parametric EQ tab before AutoEQ
- Hide Original/Target/Corrected legend in parametric mode
- Add per-band M/S processing with full encoder/decoder matrix in Web Audio API
- Right-click context menu on EQ nodes for filter type and channel switching
- Right-click empty graph space to add nodes
- Remove nearest-node snap-click interaction
- Replace IIR shelf filters with native BiquadFilter for glitch-free updates
- Add 6 M/S showcase presets with research-informed mastering values
- Add 5 shelf-based stereo presets (Warm, Bright, Hi-Fi, Dark, Radio Ready)
- Standard presets now reset all bands to stereo/peaking
- Graph contrast fix for light themes using color-mix()
- Colored help button and rewritten how-to documentation
- Default graph zoom changed to ±16 dB
- Pad band arrays when import/AutoEQ has fewer filters than MIN_BANDS
- Early return in applyAutoEQBands for zero enabled bands
- Persist interpolated gains before audio rebuild on band count change
- Derive export Q from actual octave spacing between adjacent bands
- Validate inputs in all GEQ storage setters
- Add Bands/Min Hz/Max Hz controls to legacy EQ section
- Dynamic frequency generation with log spacing and auto-scaling Q
- Import/export handles variable band counts, Q optional for shelves
- Custom presets interpolate across different band counts
- Update legacy EQ tutorial for new controls
- Add Export APO button to legacy graphic EQ (GraphicEQ config line format)
- Fix shelf filters ignoring Q: use IIR filters with RBJ cookbook coefficients
- Update graph visualization to use actual Q for shelf curves
- Omit Q from shelf filters in all EQ text exports
- Preserve existing preamp when importing files without Preamp line
- Extend import regex to accept k/kHz/Hz suffixes and +signed gains
- Rename localStorage key to monochrome- prefix for backup/restore compat
- Add try/catch to localStorage writes for quota/disabled storage
- Validate custom preset gains array before applying
- Fix delete button visibility for all preset change paths
- Add overflow-x: auto for mobile EQ band scrolling
- Add flex-wrap and responsive sizing for bottom controls on mobile
The visualizer/mobile support PR inadvertently deleted the entire
legacy graphic EQ stylesheet block. This restores vertical slider
bands, preamp, preset row, and mobile responsive styles.
Save button prompts for a name and stores the current 16-band gains
as a custom preset in localStorage. Custom presets appear in an
optgroup at the bottom of the preset dropdown. Delete button shows
when a custom preset is selected.
https://claude.ai/code/session_01AgSx7SP1dH5KFmpGXCAUvU
Export outputs EqualizerAPO-compatible format with all 16 bands.
Import accepts EqualizerAPO format or simple freq/gain pairs,
maps to nearest GEQ band by log-frequency distance, and ignores
Q values since legacy mode uses fixed dB sliders.
https://claude.ai/code/session_01AgSx7SP1dH5KFmpGXCAUvU
Replace usages of parseFloat(... ) || default and parseInt(... ) || default with explicit parse + isNaN checks to avoid treating valid numeric zeros as falsy. Changes in js/settings.js and js/storage.js update parsing for replayGain preamp, playback speed, scrobble percentage, equalizer band count, and font size so only NaN triggers the fallback value and valid 0 values are preserved.