Changelog
Changelog
All notable changes to CamillaFIR are documented in this file.
[4.0.3] - 2026-04-01
Advanced UI / Workflow
- Added guided preset buttons for Advanced-tab shaping, bass safety, and confidence-pull tuning, with live summaries so the effective settings are visible without opening every fine-tune control.
- Kept the detailed Advanced controls behind collapsible fine-tune sections and blocked guided preset changes while AUTO mode is managing those settings.
- Improved the Files and Target tabs with clearer upload/local-path status cards, preview-source indicators, a target-preview legend hint, and more robust bundled manual/external-link behavior in the NiceGUI app.
Config / Compatibility
- Introduced shared UI-choice normalization helpers so layout, level mode, level algorithm, and related preset selections accept stable keys, legacy English labels, and translated labels consistently.
- Normalized those stable values through UI collection and pipeline handling while still emitting legacy names where runtime config, summary text, and export diagnostics expect them.
- Kept run/results/status text, manual-target summary output, and export diagnostics aligned with the normalized layout and leveling metadata.
Preview / Performance
- Added cached TXT/WAV measurement parsing for target-preview uploads and local file paths so repeated preview refreshes do not keep reparsing unchanged inputs.
Docs & Tests
- Added regression coverage for Advanced guided presets, target-preview caching, file/path status metadata, translation-safe option normalization, and related manual-target/reporting paths.
- Updated README/version references for
4.0.3.
[4.0.2] - 2026-03-31
Target preview / Manual mode
- Added direct Manual-mode target dragging in the Target tab preview, so the displayed target curve can be moved vertically with the mouse to update the manual target level.
- Added a dedicated Manual target tilt control using a fixed
1 kHzpivot, allowing the target curve shape to be tilted intentionally instead of only shifted up/down. - Added a dedicated right-side tilt handle in the preview so Manual target tilt can also be adjusted with the mouse.
- Added preview-side legend/readout entries for both
Manual levelandManual tiltto make the current manual target settings visible at a glance.
Config / Runtime
- Kept manual target level and manual target tilt as explicit source-of-truth settings, so preview interaction, saved config, and runtime target loading stay aligned.
- Applied Manual target tilt consistently to preview and runtime house-curve loading, instead of leaving it as a visual-only preview effect.
Docs & Tests
- Updated README release notes and version references for
4.0.2. - Added regression coverage for manual target tilt transforms and preview interaction parsing.
[4.0.1] - 2026-03-31
Automatic mode
- Continued the AUTO-mode speed-up work by splitting the search flow more clearly into target, refine, finalize, and materialization stages.
- Added lightweight AUTO-mode profiling and separated Optuna telemetry helpers to make performance tuning and troubleshooting easier without changing the normal workflow.
Architecture
- Introduced an
application/service layer for run-request assembly, system-health checks, and house-curve loading so UI callbacks stay thinner and module responsibilities remain clearer. - Removed more NiceGUI migration scaffolding and aligned the runtime entry flow around
src/camillafir/__main__.py.
Tests & Docs
- Expanded regression coverage around AUTO-mode selection, stereo leveling, summary/reporting polish, and filter-generation smoke cases.
- Updated README release notes and version references for
4.0.1.
[4.0.0] - 2026-03-29
UI
- Replaced the legacy browser UI built on
PyWebIOwith a newNiceGUIfrontend. The interface is now organized around dedicated NiceGUI tab builders, a shared control registry, NiceGUI-native callbacks, and updated run/results sections. - Added NiceGUI-specific status/toast handling and refreshed results rendering to match the new frontend flow.
Architecture
- Split the old monolithic UI and run orchestration into smaller modules such as
ng_app,ng_controls,ng_mode_controls,ng_results_sections,engine_build,engine_run,engine_summary, and theworkflow/helpers. - Continued the auto-mode modularization by exposing the main runtime surface through a dedicated
auto_mode/package instead of keeping the logic behind legacy import paths. - Broke export/report generation into focused modules (
export_bundle,export_outputs,export_scoring,export_summary_text) and added a bundledUser_Manual.mdfor the new app layout.
Tests & Packaging
- Added targeted regression coverage for the NiceGUI application, controls, mode handling, run section, export layout, packaging, and related UI helpers.
- Updated versioned docs/runtime packaging for the
4.0.0release.
[3.6.6] - 2026-03-29
DSP / Internal
- Centralized DSP config and telemetry into dedicated adapters (
dsp_config,dsp_telemetry,mag_telemetry,phase_ir_contracts) so all DSP modules share a single typed configuration surface. - Added
target_synthesisand_pruningDSP modules to separate target-curve synthesis and Optuna trial pruning from core correction logic.
Automatic mode
- Updated Optuna legacy compatibility in cache signature handling so older stored study data is recognized correctly across optuna version changes.
- Split monolithic automatic-mode logic into focused orchestrator modules:
orchestrator_target,orchestrator_refine,orchestrator_finalize,optuna_backend,scoring_metrics,search_entrypoints,runtime_context,refine_eval,winner_polish,materialize, andprotection_seed.
Architecture / Refactoring
- Extracted process execution from
camillafir.pyinto a dedicatedworkflow/package (process_run_flow,process_support) to separate run orchestration from entry-point logic. - Created a
common/package for shared utilities:acoustic_stats,comparison_stats,house_curves, andresult_postprocess. - Split large UI files (
camillafir_ui,camillafir_ui_helpers,camillafir_plot,layout_sections) into focused modules:controls_ir_window,controls_mode,controls_target_preview,layout_builders,layout_theme,plot_generation,plot_summary,process_run_bridge,results_formatters,results_sections, andui_state. - Added
mode_policyto the config layer for centralized Basic/Advanced mode policy decisions.
Tests
- Added tests for DSP config reader, mag post-limits pipeline, phase IR contracts, and filter-pair smoke checks.
Build & Docs
- Updated release build workflow to Node 24.
- Refreshed
guide.mdwith expanded content and updated version references.
[3.6.5] - 2026-03-23
Automatic mode / Persistence
- Added a dedicated AUTO-mode compatibility version so persistent cache and Optuna study data can be separated from the main program version when persistence compatibility changes.
- Updated automatic-mode cache and Optuna storage paths to use compatibility-version specific filenames when needed, with automatic migration from legacy/unversioned files.
- Hardened AUTO-mode persistence loading so incompatible stored data is ignored safely instead of being mixed into a newer compatibility format.
UI & Config
- Kept AUTO-mode compatibility metadata transient at runtime so it is not written into normal user config files.
- Locked AUTO-mode TDC and A-FDW controls more safely in the UI to prevent unsupported preset/control combinations during automatic runs.
- Continued the START-button layout cleanup by keeping the action in its own clearer section.
Docs
- Updated documentation version references for the
3.6.5release.
[3.6.4] - 2026-03-18
Automatic mode
- Added a new automatic-mode goal
subwoofers. subwoofersbehaves like the other AUTO goals, but forces the Smart Scan leveling range to20-200 Hz.- Kept
subwoofersin the local-refine flow so the new goal still uses the normal automatic-mode search/refinement path.
UI & Docs
- Added the
subwoofersgoal into the automatic-mode goal selector. - Updated automatic-mode preview/reporting so the forced
20-200 HzSmart Scan window is reflected consistently. - Refreshed docs version references for the
3.6.4release and documented the newsubwoofersgoal in the README.
[3.6.3] - 2026-03-16
Automatic mode
- Added a residual-pass tie-break stage for near-top finalists so AUTO mode can re-check close winners with residual processing before locking the final preset.
- Added winner-polish passes for
phase_limitandmag_c_min, allowing the selected winner to be fine-tuned after the main search when that improves the final ranking. - Separated cache-ready winner preset data from the fully applied/materialized preset so final UI/export metadata reflects the actual applied winning settings.
Reporting & UI
- Added phase-limit and
mag_c_minwinner-polish details to the automatic-mode summary export. - Updated automatic-mode best-preset reporting in UI/export so
mixed_freqis shown only for mixed filters andphase_limitonly for linear/asymmetric filters. - Routed final AUTO results through the materialized applied preset so winner details stay consistent across results, summary export, and saved metadata.
Plots & Docs
- Improved prediction-plot low-confidence highlighting by merging short gaps and filtering noisy confidence segments before drawing shaded regions.
- Prefer the bundled local Plotly asset when available, falling back to CDN only when needed.
- Cleaned up README structure by removing outdated version-highlight sections and moving the inspiration section to the documentation area.
[3.6.2] - 2026-03-13
DSP / Stereo link
- Improved stereo-linked leveling with a shared window search and quieter-channel anchoring so linked offset selection stays more stable between channels.
- Exposed stereo leveling window and anchor details in the UI for easier inspection of linked leveling behavior.
Plots
- Updated delay-compensated filter plots to remove IR peak delay from displayed phase/group-delay views and improved the scaling of those plots for clearer reading.
Automatic mode / Reporting
- Unified automatic-mode winner score reporting around a single official winner score so summary/export/UI no longer show conflicting
rank_scorevalues for the same run. - Added structured winner score component metadata for reporting while keeping the existing optimizer selection behavior unchanged.
- Hardened pre-energy metric handling so unreliable cases remain explicitly unavailable instead of looking like internal calculation failures.
- Polished summary wording for unavailable pre-energy metrics and cleaned up duplicate RT60 band entries in report output.
Tests
- Extended stereo-linked leveling tests.
- Added coverage for winner score reporting consistency, pre-energy summary formatting, and RT60 band deduplication in reports.
[3.6.1] - 2026-03-12
Versioning & Export
- Centralized program version resolution in
src/camillafir/version.pyso UI/build version text stays consistent across runtime, packaging, and export paths. - Added program version and automatic-mode winner rank to exported ZIP/YAML filenames and CamillaDSP YAML titles for easier result identification.
- Included automatic-mode winner rank in the chosen-target/export metadata shown after the run.
DSP / Leveling
- Reworked leveling window evaluation to use log-balanced medians and more robust window scoring, improving stable offset selection when narrow nulls or drifting sub-window offsets are present.
- Added extra guards so
trans_width=Noneno longer breaks the correction fade stage.
Config
- Normalized persisted
config.jsonfilter type names back to canonical UI labels such asAsymmetric, fixing legacy/internalasymnaming leakage in saved configs.
[3.6.0] - 2026-03-12
Automatic mode
- AUTO mode now keeps the user’s HPF selection available instead of forcing HPF off.
- Response-fit HPF is only auto-applied when the user has explicitly enabled HPF; otherwise the estimated HPF is reported as a suggestion without changing the run.
DSP / Stereo link
- Stabilized stereo-linked target-shift sharing between left and right channels so linked leveling stays more consistent across channels.
Export
- Added runtime version details (
Python,numpy,scipy,optuna) to the automatic-mode summary export.
UI & Docs
- Updated automatic-mode help text to mention the optional HPF selection workflow.
[3.5.9] - 2026-03-12
Packaging
- Added Optuna submodule collection to the standalone, Linux, and macOS PyInstaller spec files so packaged builds include the automatic-mode Optuna backend more reliably.
Export
- Added
Optimizer backendto automatic-mode summary export so saved results now show whether the run usedbuiltinoroptuna.
[3.5.8] - 2026-03-11
Automatic mode
- Improved phase-1 Optuna search so trial parameters now match the actual evaluated preset values more closely, reducing duplicate/mismatch noise in the sampler model.
- Canonicalized Optuna preset parameter handling for persistent studies, improving duplicate detection and reuse of previously evaluated trials across runs.
- Updated remembered/evaluated trial insertion to prefer Optuna completed-trial style recording before falling back to the older enqueue/ask/tell path.
- Added
max_slope_boost_db_per_oct,max_slope_cut_db_per_oct, andconf_pull_max_hzto the main phase-1/global Optuna search space. - Kept those new secondary parameters restricted to the main/global search after testing showed that letting later refine or micro phases retune them reduced result quality.
- Reduced default phase-3 micro trial count and tightened the micro search shrink range so more of the useful optimization happens earlier in the pipeline.
Export
- Expanded automatic-mode winner summary export so the additional phase-1/global Optuna parameters are visible in the saved best-preset text.
[3.5.7] - 2026-03-10
- Optuna optimization
[3.5.6] - 2026-03-08
UI & Results
- Cleared previous results and plots immediately when starting a new run so stale output no longer remains visible during processing.
- Reworked the results view into clearer collapsible sections for acoustic summary, gain/headroom, filter setup, and phase/crossover diagnostics.
- Expanded automatic-mode results with a dedicated winner summary, best-preset table, target-curve top-3 table, and rank-ordered top-5 comparison.
- Moved the completion message into status notices for a cleaner final status presentation.
Automatic mode
- Fixed exact cache-hit micro-refine finalization so recalculated winner metrics and preset data stay synchronized before saving cache/output metadata.
- Adjusted excursion-penalty waiving so the zero-penalty floor is also honored when automatic excursion protection lands exactly on that floor.
Multi-rate & Runtime
- Fixed automatic tap scaling for higher sample rates by scaling directly from the selected 44.1 kHz base tap count, preserving FIR time length more accurately in multi-rate mode.
- Updated the automatic multi-rate tap info panel to reflect the current base tap setting instead of fixed default values.
- Reduced default console noise by lowering normal console logging to
WARNING, while keeping opt-in debug logging available through environment variables. - Hardened PyWebIO pin access and routed preview/visualization failures through the logger instead of noisy direct console prints.
[3.5.5] - 2026-03-07
Automatic mode
- Added exact cache-hit reuse for same measurements + settings in both target-curve selection and preset search, so redundant target trials can be skipped when a matching cached winner already exists.
- Expanded Optuna-backed candidate generation across main search, local refine, micro-refine, and target-curve trials while preserving seeded presets inside the study.
- Stored
best_metricstogether with cached presets/targets so cached winners keep their ranking context for later reporting and export summaries. - Improved target-selection reporting with clearer method labels (
cache hit,trial comparison,cache wildcard, etc.) in status text, logs, and export metadata. - Kept automatic excursion protection seed/final frequency tracking visible in export summaries.
UI & Defaults
- Simplified automatic-mode result presentation by relying on the winner explanation panel instead of repeating the same winner metrics block.
- Trimmed the automatic-mode top-5 table to emphasize the core comparison columns.
- Updated startup defaults to use
Asymmetricas the default filter type. - Added default Optuna sampler settings to config (
multivariate,group,constant_liar).
Docs & Export
- Extended export summary text with selected target-curve method, target-selection grid details, and cached ranking metadata.
- Refreshed documentation version references for the 3.5.5 release.
[3.5.4] - 2026-03-07
Automatic mode
- Refactored automatic-mode code into smaller modules to improve maintainability and make future changes safer.
- Split automatic-mode logic into clearer parts without changing optimization behavior.
Notes
- No DSP changes in this release.
[3.5.3] - 2026-03-06
Automatic mode
- Added adaptive target-curve preselection scoring (fit, boost demand, slope match, asymmetry, mode-band fit).
- Expanded target shortlist logic with spread-based sizing, optional cache wildcard insertion, and milder-step inclusion guards.
- Added optional Optuna pilot sampler for phase-1 candidate generation with automatic fallback to built-in sampler.
- Added
AutoModeConfigoverrides for auto-mode search tuning (trials, refine, hard-gate, micro phase, optuna settings). - Improved phase-1/phase-2 candidate generation so
mag_c_minandlow_bass_cut_hzare actively optimized (also in local refine). - Added auto-tuned excursion protection finalization from measured zero-penalty floor and propagated seed/final excursion metadata.
DSP / Scoring
- Added
boost_candidate_min_hzmetric to correction outputs and run stats for auto-mode protection heuristics. - Updated auto-mode scoring to derive
auto_exc_zero_penalty_hzand waive excursion-bin penalty component when applicable.
UI
- Improved automatic-mode status UX with compact phase text and a collapsible
Automatic mode detailshistory panel. - Reset automatic-mode status details at run start to avoid stale detail carry-over.
- Added
Target curve top-3results table (best rank, avg rank, fit RMS, preselect and penalty metrics, trials).
Export
- Added automatic-mode excursion protection summary line (
seed -> finalfrequency) to export summary metadata.
Dependencies & Docs
- Added
optunatorequirements.txtandrequirements-linux.txt. - Updated docs version references to
v3.5.3in README and official manual.
Tests
- Expanded automatic-mode tests for config overrides, optimizer backend selection, candidate variability, optional Optuna backend, and excursion-penalty waiving behavior.
[3.5.2] - 2026-03-05
Automatic mode
- Improved automatic mode performance to complete optimization faster.
[3.5.1] - 2026-03-05
Automatic mode
- Added target-curve selection mode.
- Fixed AUTO-only control state handling.
UI
- Fixed status timer flicker by updating status text in place.
- Replaced per-second full scope re-render in
update_status()with a persistent status DOM node and JStextContentupdates. - Kept clear/re-render as fallback if
run_jsis unavailable or fails.
Paths & Export
- Added shared path helpers in
app_paths.py. - Unified default export folder to
Documents/CamillaFIR/filters/<version>on all platforms. - Kept writable/safe fallback guards for export directory resolution.
- Included program version in export ZIP filename.
- Passed program version into
save_export_bundle()for versioned output paths. - Exposed and showed active automatic-mode cache path in results UI.
- Migrated automatic-mode cache path handling to platform app-data with legacy fallback/migration.
- Localized UI labels (
Paths,Item,Path,Export folder,Automatic mode cache) in EN/FI.
[3.5.0] - 2026-03-04
Automatic mode (core)
- Added deterministic seeding based on measurements + key settings so auto-mode trials are reproducible across runs (same input -> same trial sequence).
- Upgraded auto-mode cache schema to
v=3and made it filter-type aware (separate buckets forlinear,mixed,minimum,asym) to prevent cross-filter contamination. - Added cache version mismatch handling: if cached program version differs, cache is ignored and a fresh search is run (with a clear log line).
- Added filter-specific last-used preset fallback seeding (per
auto_goal) when a signature match is not found.
Automatic mode (search / scoring)
- Added Phase2 hard-gate (pre-Pareto) to remove obvious bad candidates by event severity / ripple before building the Pareto front; improves consistency on difficult data without adding trials.
- Added adaptive search-space shrinking (derived from phase-1 stability) for phase-2 local refinement, plus an optional phase-3 micro-refine pass around the best anchors.
- Added optional dual-mode detection (two dominant LF resonances) and mode-ripple-aware scoring/penalties so secondary room modes don’t slip through.
[3.4.2] - 2026-03-03
Core
- Added persistent automatic-mode cache in
~/.camillafir/camillafir_auto_mode_cache.jsonfor cross-run reuse of best presets. - Automatic mode now stores selected target curve in cache (
best_target_curve/best_hc_mode) together with best preset metadata. - Added measurement-signature based target cache map (
target_by_measurement) so identical measurements can reuse previous target choice and skip repeated target-curve trial optimization. - Extended cache entries with
measurement_sigand bumped cache schema marker tov=2. - Added automatic HPF estimation from measured speaker LF response (AUTO mode), including frequency/slope fit with confidence gating.
- Tuned automatic HPF fitting robustness for real-room responses (trimmed residual fit + conservative slope fallback near LF floor), improving auto-enable and reducing false low-confidence outcomes.
Target Selection
- Added optional one-step milder target preference for built-in bass ladders (
Harman*,BK_*) to avoid consistently biasing toward the bass-heaviest curve. - Milder-step switch is guarded by quality thresholds (
rankdrop andfit_rmsincrease limits), so the selected milder curve is used only when quality remains close. - Added data/config toggle
auto_target_prefer_milder_step(default enabled via constant) for controlling this behavior.
[3.4.1] - 2026-03-02
Core
- Upgraded
CamillaFIR automatic modeto a two-phase search: phase 1 for broad random exploration, phase 2 for local refinement around top candidates with narrower variation. - Added early-stop logic for non-improving runs to reduce wasted trials and move/finish phases faster.
- Added target preselection (
top-3,10 trials/curve) before main auto optimization. - If the user selects a custom target curve, automatic built-in target comparison is skipped and the selected target is used directly.
- Added carry-over seeding so the best target-selection preset can initialize main phase-1 search.
- Added automatic LF
-6 dBestimation from smoothed response data and used it to drive auto protection/correction defaults. - Added
Harman12and separate built-in B&K target variants (BK_Light,BK_Medium,BK_Strong) for broader automatic target coverage.
Scoring
- Improved automatic ranking robustness to avoid
0.000/100edge cases (notably in Minimum Phase workflows). - Updated boost penalty behavior so penalty starts above
3 dBnet boost. - Added/expanded severity-aware DSP event handling in ranking metadata.
- Excursion penalty is now waived when
exc_freqis auto-derived, so automatic protection frequency selection does not self-penalize.
UI
- Automatic mode progress text now updates on every trial and shows richer context: selected target, estimated
-6 dBpoint, derivedlow_bass_cut_hz, derivedexc_freq, phase/trial counters, best score, and elapsed time. - Improved auto-result transparency by exposing winner metrics (rank components and penalties) in top results view.
Export
- Summary export now includes richer automatic-mode metadata: target selection method and candidates, chosen target and seed preset details, and ranking component breakdown (acoustic average, DSP penalty, excursion penalty, boost, events, severity).
[3.4.0] - 2026-03-02
Core
- Added
CamillaFIR automatic modeas a first-class mode (AUTO) in the mode system. - Automatic mode executes 100 trial presets, ranks results, and applies the best preset before final export.
- Trial status text now updates on every run (
1/100,2/100, …), improving optimization visibility. - Automatic mode ranking combines acoustic score with DSP quality penalties and stability factors.
UI
- Added
CamillaFIR automatic modeinto the main mode selector next toBASICandADVANCED. - Removed separate automatic-mode checkbox from Basic page (mode selector is now the single control).
- Set automatic mode as default mode in UI/config flow.
- Updated mode descriptions and guidance text to a three-mode model: Automatic, BASIC, ADVANCED.
Config / Compatibility
- Added compatibility mapping between legacy
camillafir_automatic_modeboolean and newmode=AUTObehavior. AUTOnow follows BASIC-style safety policy for guarded controls while running automatic search.
Export
- Summary export includes automatic-mode metadata (trial counts, best rank score, and selected best preset values).
Docs
- Updated
docs/README.mdto featureCamillaFIR automatic modeas the main v3.4.0 highlight. - Updated EN/FI translation guide texts for the three-mode workflow.
[3.3.1] - 2026-03-01
Core
- Add unsafe_raw_dsp checkbox visible only in ADVANCED mode
- Add bilingual warning text: FOR TEST USE ONLY / VAIN TESTI KÄYTTÖÖN
- Wire unsafe_raw_dsp through config/model/pipeline persistence
- In engine, enable true guard bypass in ADVANCED + unsafe_raw_dsp:
- bypass MAX_SAFE_BOOST cap and disable major correction guard rails
- Force unsafe_raw_dsp=false in BASIC mode
[3.3.0] - 2026-03-01
Core
- Bumped app version to
v.3.3.0. - Refactored
camillafir.pyinto smaller modules to improve maintainability and code manageability. - Refactored
camillafir_dsp.pyinto smaller modules to improve maintainability and code manageability.
Docs
- Updated documentation version references to
v3.3.0. - Updated citation metadata version to
3.3.0.
[3.2.0] - 2026-02-23
Core
- Bumped app version to
v.3.2.0.
Docs
- Updated documentation version references to
v3.2.0. - Updated citation metadata version to
3.2.0.
[3.1.1.2] - 2026-02-22
Build / CI
- Added startup smoke tests to release workflow for all build targets:
- Linux (
dist/CamillaFIR/CamillaFIR->http://127.0.0.1:8080) - Windows (
dist/CamillaFIR/CamillaFIR.exe->http://127.0.0.1:8080) - macOS arm64 (
CamillaFIR.appbinary ->http://127.0.0.1:8080) - macOS x86_64 (Rosetta run ->
http://127.0.0.1:8080)
- Linux (
- Release pipeline now fails early if an artifact builds but does not actually start a web server.
- Added failure log tail output in smoke tests to improve diagnostics in GitHub Actions.
Core
- Bumped app version to
v.3.1.1.2.
[3.1.1.1] - 2026-02-22
UI
- Fixed Chromium/Brave chart rendering regression (
Plotly is not defined) by restoring self-contained embedded Plotly rendering for dashboard and Target Preview - Fixed Linux chart visibility issue by avoiding fragile Plotly loader mode in embedded UI charts
- Fixed Target Preview measurement smoothing input mapping to use
filter_smooth(with legacy fallback tosmoothing_level) - Added live Target Preview refresh on
filter_smoothchanges
Build
- Added
pywebio.platform.tornado_websocketto Linux PyInstaller hidden imports for better websocket backend compatibility
[3.1.1] - 2026-02-22
DSP
- Added WAV-only ripple attenuation around correction upper-edge transition in correction + phase stages, plus final FIR IR post-polish while preserving phase and peak scale
- Added alignment guard between
delay_samplesand impulse-peak alignment; falls back to peak alignment when estimates disagree significantly - Aligned WAV parsing closer to TXT baseline with deterministic window/smoothing policy and higher minimum FFT resolution for more consistent results
IO
- Hardened local path handling by cleaning quoted paths and validating local WAV existence before parsing
- Fixed WAV parser import fallback behavior and added configurable
min_n_fftsupport in WAV IR -> FR conversion - Updated WAV source detection to rely on actual input sources/extensions instead of UI format selection
UI
- Added elapsed-time status updates and a run timing breakdown table (Read, DSP, ZIP/PNG, Render, Total, per sample rate)
- Improved completion status to show the real output directory path
- Centralized toast behavior through System Health helpers (dedupe + edge-trigger warnings for max boost/taps and preset toasts)
System Health
- Added explicit L/R measurement source checks (upload/local pair completeness) with dedicated warnings
- Added phase-limit warning when correction limit is set high (above ~800 Hz)
- Improved health gate notifications with centralized, deduplicated toast summaries
Export & Docs
- Added version stamp to generated summary output (
Version: v.3.1.1) - Updated ZIP dashboard PNG path to use combined Matplotlib export when dashboard image export is enabled
- Updated docs/app version references to
v3.1.1and refreshed EN/FI guide + health translation texts
[3.1.0] - 2026-02-21
DSP
- Reworked Mixed Phase excess-phase correction with configurable LF-to-HF fade (
low_freq_full_correction_hz->high_freq_no_correction_hz) and tunable strength (excess_phase_strength) via config only (no UI controls) - Added Mixed-only safety guards for excess correction: absolute excess-delay limiter (
max_excess_delay_ms) and pre-ringing limiter (max_pre_ringing_db) with adaptive down-scaling and diagnostics - Forced Mixed filters to a fixed startup peak position (90 ms) after window/DC steps for more consistent startup timing
- Changed Manual leveling reference to neutral
0.0 dB(instead of legacy75 dB) and applied manual bias explicitly in correction target shaping
UI
- Expanded Target Preview to optionally overlay speaker curves (L/R/avg), align them to level window, and show correction band + level-window context
- Improved leveling UX: BASIC now behaves as Smart Scan only, Auto/Manual level ranges are preserved separately, and Manual dB has quick
- / +step buttons with a neutral-bias hint - Added dynamic BASIC clamp hints into field help texts so constrained controls clearly show active guard rails
- Refined mode guard rails/defaults (including tighter BASIC boost/phase/FDW limits, forced BASIC stereo-link, and updated default Mixed split/IR-left values)
- Localized System Health issue texts and summary headers through EN/FI translation keys
Core
- Pipeline now enforces BASIC policy for leveling (
lvl_mode=Auto) and reapplies mode clamps at run time - Added config/pipeline model support for Mixed excess-phase tuning fields (
excess_phase_strength, correction fade range, pre-ringing cap, excess-delay cap`) as config-only parameters (not exposed in UI) - Added legacy config migration for manual leveling values saved in old absolute-dB style (auto-converted around
~75 dBbaseline)
Docs
- Bumped docs version references to
v3.1.0
[3.0.6] - 2026-02-20
DSP
- Added true fractional-octave gain smoothing (
1/Non log-frequency axis) and switched non-DF smoothing to use it in correction + phase residual shaping - Added post-shape filter smoothing and clamp-aware final smoothing so
filter_smooth/reg_strengthremain visible even when clamp rails are active - Added clamp-dominance diagnostics (
NONE/LOW/MEDIUM/HIGH) with clipped-bin ratio stats for easier tuning and A/B interpretation - Refined Smart Scan leveling window search to be target-independent and ripple-focused (log-frequency detrended stability scoring)
- Hardened TDC control handling: explicit zero support, safe clamping for
tdc_strength, and no-op behavior when strength/max reduction are disabled - Kept theoretical + minimum phase paths unclamped and limited only excess-phase correction with adaptive per-bin clamp (
15..45 deg) based on confidence and frequency - Improved Minimum+OFF IR export behavior with zero-padded causal peak shift, optional strict-off forcing, short anti-wrap tail taper, and DC-removal skip in OFF mode
- Reworked output gain handling to auto-level model (
auto_global_gain = -(realized max boost + margin)) with normalize left as optional extra safety trim - Added stereo-link shared auto gain override so left/right channels use one common attenuation in linked processing
UI
- Clarified Filter Type help text and Asymmetric note to separate causal filter-type behavior from IR export windowing behavior
- Improved help readability by separating base filter-type help and Asymmetric note with a clear line break
- Renamed
gaincontrol to Auto Headroom Margin and surfaced margin/applied auto gain/headroom/final max diagnostics in results + summary output - Removed manual align toggle from UI (time alignment is now always-on by policy) and kept only stereo-link toggle
- Added plot-only auto-gain compensation so predicted/filter curves remain visually comparable despite output attenuation
- Localized multiple section headers and target preview source labels (EN/FI)
Core
- Updated pipeline parsing to sanitize and clamp
tdc_strengthbefore passing configuration forward - Pipeline now forces
align_opt=True, clamps gain margin to non-negative values, and maps UIgaintoauto_gain_margin_db - YAML export now writes
master_gain_db=0.0and relies on DSP auto-gain path for output level management
Docs
- Bumped docs version references to
v3.0.6and moved UI screenshots/TDC image paths underdocs/pics/
[3.0.5] - 2026-02-18
DSP
- Removed unused imports
- Changed A-FDW smoothing 2/3 –> 1/3 to make more precise correction on bass
- Fixed summary export fallback error handling (
except Exception as e) in DSP effective params block
UI
- Clarified summary.txt content
- Added an Executive Summary section (Score, Match, Confidence, RT60, Worst Event) at the top
- Reduced settings noise by showing only core settings in Summary
- Removed duplicate acoustic events section from Summary
- Standardized Summary output to English-only wording
- Replaced symbol-heavy labels with plain text (
dt,Path delta,n/a) for cleaner cross-platform text output
[3.0.4] - 2026-02-18
DSP
- Refactored DSP pipeline into focused modules for preprocessing, correction, phase/IR, and shared utilities
- Improves maintainability and separation of concerns
- Preserves existing processing flow while reducing monolithic engine complexity
- Reworked Mixed Phase blend implementation
- Replaced crossover-FIR convolution blend with frequency-domain blending
- Added smooth raised-cosine transition around split frequency
- Added zero-padded peak alignment (no circular wrap-around)
- Reduces blend artifacts and improves transition stability
UI
- Added Mixed Phase blend diagnostics to DSP info
- Shows per-channel blend split frequency
- Shows per-channel blend transition width
- Expanded system health checks
- Adds sanity checks for leveling range, HPF settings, and Mixed Phase parameters
- Handles latency messaging for Min/Asym low-latency modes
- Improves correction-range and safety messaging clarity
Core
- Updated default IR window fallbacks when UI values are missing
ir_window: 500 msir_window_left: 120 ms
[3.0.3] - 2026-02-16
UI
- Added warnings if correction range is too wide
macOS
- Switched to universal2 build (Intel + Apple Silicon support)
- Fixes “Bad CPU type in executable” on older Intel Macs
[3.0.2] - 2026-02-15
UI
- Simplified and reorganized UI structure for clearer workflow
- Added real-time house curve preview
- Added project logo to the interface
[3.0.1] - 2026-02-14
DSP
- GD-gradient limiter redesigned
- Bass-focused (20–250 Hz)
- Soft limiting (tanh) replaces hard clipping
- Relaxed slope limit: 8 → 30 ms/oct
- Conditionally enabled (bypassed when A-FDW + Bass-first stabilization are active, except in high-risk windowing modes)
UI
- Fixed A-FDW plot rendering issue with measurement sample rates >48 kHz
[3.0.0] - 2026-02-11
Major DSP engine update and smoothing redesign.
UI
- Renamed Psychoacoustic smoothing to CamillaFIR Reference
- Clarifies that this smoothing is a CamillaFIR-specific reference/safety view
- Not equivalent to REW-style psychoacoustic smoothing
- View-only (does not affect DSP calculation)
- Added user-configurable parameters for Confidence Pull
- Available in Advanced mode only
- Floor threshold
- Max frequency limit
- Cut aggressiveness
- Boost conservativeness
- Recommended defaults included in help text
DSP
- Replaced legacy fixed 1/24 octave smoothing in filter calculation
- New adaptive smoothing:
- 0–230 Hz: 1/48 octave
- 230–500 Hz: gradual transition
-
500 Hz: 1/3 octave
- Improves LF precision while stabilizing mid/high frequency correction
- New adaptive smoothing:
- Improved Bass-first behavior
- Better alignment with confidence weighting
- More predictable low-frequency correction shaping
- Refined confidence pull handling
- More stable behavior in low-confidence regions
- Reduced over-aggressive boosts in uncertain bands
Build
- Linux build switched to
onedirdistribution- Improves portability and runtime reliability
- Avoids common single-file extraction issues
Behavior changes
- Adjusted default Confidence Floor (0.15 → 0.07)
- Correction operates more freely before safety pull engages
[2.9.5] - 2026-02-08
UI
- Low-bass cut is now toggleable (ON/OFF)
- Added an enable checkbox for
low_bass_cut_hz. - When disabled, the Hz input remains visible but is greyed out (locked) and cannot be edited.
- Disabled state uses an empty value for the cutoff field to represent “off” (instead of
None), improving UI → pipeline compatibility. - UI logic lives in a dedicated helper (
update_low_bass_cut_ui) and renders inside a scope for clean updates.
- Added an enable checkbox for
[2.9.4] - 2026-02-08
CFG
- Fixed low_bass_cut_hz value not saving correctly in config.
[2.9.3] - 2026-02-08
UI
- Fixed typo at psychoacoustic plot smoothing code (1/48 / 1/3 —> 1/6 / 1/3)
[2.9.2] - 2026-02-07
UI
- IR windowing hard restrictions clarified and enforced
- In Basic mode, IR export windowing is now always forced to Auto.
- The windowing mode selector is locked and cannot be changed.
- A persistent warning message is shown to explain the restriction.
- When Filter type = Asymmetric, IR export windowing is also locked to Auto in both Basic and Advanced modes.
- Prevents confusing transient UI states where windowing controls appeared editable even though the value was internally forced back to Auto.
- Ensures UI behavior always matches DSP policy and exported configuration.
- In Basic mode, IR export windowing is now always forced to Auto.
[2.9.1] - 2026-02-06
UI
- Mixed Phase crossover frequency is now state-dependent
- The “Mixed Phase crossover frequency (Hz)” field is active only when Filter type = Mixed Phase.
- For other filter types, the field remains visible but is greyed out (locked) to prevent invalid configurations.
- REW Asymmetric IR windowing restricted to Linear Phase filters
- The “Asymmetric” IR windowing option (REW Asymmetric export) is selectable only when Filter type = Linear Phase.
- For other filter types, the option is shown but greyed out, and the UI displays a warning message:
WORKS ONLY WITH LINEAR PHASE FILTERS
[2.9.0] - 2026-02-06
UI
- Windowing mode simplification
- Removed “Symmetric” and “Off” windowing modes.
- Windowing now offers only:
- Auto – REW-based, adaptive windowing selected automatically from the impulse response.
- Asymmetric – REW-based asymmetric windowing with optional latency reduction.
- Simplifies the UI and focuses on the most effective and reliable windowing strategies.
DSP
- High-pass filter (HPF) magnitude fix
- Fixed HPF handling so it is applied as a true magnitude filter in the FIR path.
- HPF is now applied directly to the correction curve (
gain_db += hpf_db), instead of being baked into the target response. - Ensures magnitude and phase consistency.
- Prevents double-HPF behavior, incorrect low-frequency response, and artificial group delay artifacts when HPF is enabled.
[2.8.9] - 2026-02-05
DSP
- REW Asymmetric low-latency bass safety
- Added automatic safety guards for ultra–low-latency REW Asymmetric mode.
- When latency target (Left window) is below 15 ms:
- Bass-first (A-FDW confidence shaping) is automatically limited to low frequencies.
- When latency target is below 10 ms:
- Low-frequency boosts are disabled (cuts remain allowed).
- Prevents unstable bass behavior, excessive ripple, and aggressive FIR boosts when time-domain constraints become too tight.
- Safeguards are automatic, non-configurable, and only active in REW Asymmetric mode.
[2.8.8] - 2026-02-04
DSP
- Phase correction safety clamp (±45°)
- Room / excess-phase correction is now internally limited to ±45 degrees.
- The clamp is applied only to the correction component (measured − target phase), never to loudspeaker minimum-phase or theoretical crossover phase.
- Prevents excessive phase rotations, pre-ringing, and unstable group delay behavior, especially in low-confidence or sparsely measured regions.
- Improves robustness, repeatability, and subjective transient clarity.
- No user-facing control; this is a fixed safety default.
Analysis & Reporting
- Phase correction clamp status is now always reported:
- Logged during processing (e.g.
max=54.5° -> 45.0°). - Included in
summary.txtper channel. - Shown in DSP info section in the UI.
- Logged during processing (e.g.
UI
- Removed slope-limit envelope visualization from magnitude plots.
- Eliminates confusing shaded artifacts without affecting DSP behavior.
Notes
- No changes to magnitude targets, A-FDW, TDC, leveling, or IR export behavior.
- Existing presets and workflows remain fully compatible.
[2.8.7] - 2026-02-04
Fixed
- Psychoacoustic smoothing corrected.
- IR windowing no longer affects filter level.
UI
- Updated UI text strings and help descriptions.
-
Little update to interface look
[2.8.6] - 2026-02-01
### Changed
- Refactored DSP-related code into a clearer, more modular file structure.
- Separated DSP logic from UI and orchestration layers to improve maintainability.
- Clarified responsibility boundaries between filter generation, windowing, and export logic.
- No functional changes to DSP algorithms or generated filters.
Internal
- DSP modules are now organized to allow easier future extensions.
- Reduced implicit cross-dependencies between DSP and UI code.
- Improved long-term stability by making DSP behavior less sensitive to UI-side changes.
[2.8.5] - 2026-02-01
DSP / IR export
- IR export window edge shape selection (Hann / Tukey)
- Added support for selecting IR window edge shape during FIR export.
- Tukey window includes adjustable alpha parameter (0–1, default 0.25).
- Window shape is applied only at IR export stage (WAV generation).
- REW-style asymmetric export placement fix
- When
rew_asymis selected, FIR impulse peak is placed causally (early in the impulse) instead of remaining centered. - Reduces effective playback latency compared to symmetric placement.
- When
UI / Pipeline
- IR window shape & alpha preserved through UI → pipeline → DSP
- Prevents silent fallback to legacy Hann window.
- Selected window shape and alpha are logged immediately after UI collection for traceability.
Notes
- No changes to FIR magnitude targets, phase correction algorithms, A-FDW, TDC, or auto-leveling behavior.
- Differences between Hann and Tukey exports are sample-accurate and produce non-identical FIR WAV files.
[2.8.4] - 2026-02-01
Misc
- Github actions now makes running files.
[2.8.3] - 2026-01-31
DSP update
- REW-style IR windowing enabled in DSP export path
- Adds support for REW-compatible symmetric and asymmetric IR windowing during FIR export.
- Windowing is applied only at IR export stage (WAV generation), not during correction, target fitting, leveling, or scoring.
- Supported modes:
auto– automatic window selection (default)off– no IR windowingrew_sym– REW-style symmetric windowrew_asym– REW-style asymmetric (causal) window
IO update
- IR windowing type is now included in exported filenames
- ZIP and FIR WAV filenames include a short windowing tag for traceability and A/B comparisons.
- Tags:
auto,off,sym,asym - Example:
CamillaFIR_<type>_sym_<timestamp>.zip - Example:
L_<type>_<fs>Hz_<timestamp>_sym.wav
Notes
- No change to correction targets, phase modes, FDW, TDC, or leveling behavior.
- This update improves reproducibility and comparability between different IR export strategies.
[2.8.2.3] - 2026-01-30
Io-update
- Fixed ZIP output when multi-rate is enabled. Generate a single CamillaDSP .yml using $samplerate$
DSP-update
- More precise leveling tilt used in magnitude calculation
[2.8.2.2] - 2026-01-29
Ui-update
- updated translations and phase plot to be more clear
[2.8.2.1] - 2026-01-28
Nothing changed DSP or UI
- changed file structure to more debug-friendly format
- filters go now to ./filters directory
[2.8.2] - 2026-01-27
Ui-update
- improved robustness of file upload parsing from browser & added xo_help translation
[v2.8.1.2] - 2026-01-27
Fixed
- Bug fix for modes selection, that was not saving ui state correctly
[2.8.1.1] - 2026-01-27
Ui-update
- Added modes selection (Basic & Advanced)
[2.8.1] – 2026-01-25
Fixed
- A-FDW bandwidth limits
- Corrected incorrect or overly permissive A-FDW bandwidth constraints.
- Prevents misleading smoothing widths and improves consistency between analysis and visualization.
Improved
- A-FDW & TDC guides
- Plot guides and annotations now reflect the effective (clamped) A-FDW bandwidth.
- Improves interpretability of confidence masking and decay-based correction limits.
Notes
- No changes to FIR magnitude targets, phase correction modes, or leveling behavior.
- Maintenance update focused on analysis clarity and safety transparency.
[2.8.0] - 2026-01-24
- Plot export robustness (ZIP outputs)
- Fixed a broken Plotly PNG export path caused by an invalid
try/exceptstructure. - ZIP exports now store dashboard plots as static PNG images generated via Plotly’s native Kaleido backend.
- Ensures exported plots exactly match the HTML dashboard “Download plot as PNG” output.
- Eliminates dependency on
.htmlfiles and localplotly.min.jsfor offline ZIP viewing.
- Fixed a broken Plotly PNG export path caused by an invalid
[2.7.9] – 2026-01-24
Fixed
- Custom house curve upload
- Fixed an issue where user-uploaded house curves could fail to load or apply correctly.
- Improves validation and consistency between UI preview and DSP processing.
Notes
- No changes to FIR magnitude, phase, or leveling behavior.
- Safe update focused on UI → DSP data integrity.
[2.7.8] – 2026-01-23
Added
- Stereo-linked auto-leveling (TXT-compatible default)
- SmartScan level window and gain are computed from a shared L/R reference and applied identically to both channels.
- Eliminates channel-dependent gain drift while preserving automatic delay alignment.
- Correction-band visualization
- Active magnitude correction range (
mag_c_min … mag_c_max) is now explicitly carried through DSP stats and visualized in plots. - Makes it immediately clear where correction is applied and where it is intentionally inactive.
- Active magnitude correction range (
- Reliability / confidence visualization
- Low-confidence frequency regions are visually shaded in plots.
- Helps explain why certain bands are protected or only lightly corrected (measurement reliability, A-FDW behavior).
Changed
- Auto-leveling behavior (default)
- Stereo leveling now uses a single shared window and offset instead of independent per-channel SmartScan decisions.
- Results are deterministic and TXT-compatible by default.
- Summary.txt clarity
- Level window and offset method explicitly indicate stereo-linked operation
(e.g.
ForcedOffset (StereoLink)).
- Level window and offset method explicitly indicate stereo-linked operation
(e.g.
Fixed
- Auto-align gain drift
- Fixed cases where left/right channels could diverge by several dB due to independent leveling window selection.
Notes
- Auto-align delay estimation is unchanged and remains fully automatic.
- FIR magnitude and phase are unaffected by alignment-only time shifts.
[2.7.7] – 2026-01-20
Added
- 2058-safe phase mode
- Disables room phase correction (confidence/FDW/excess-phase) and uses only theoretical crossover phase and minimum-phase where applicable.
- Independent slope limits for boost vs cut
- Separate dB/oct limits prevent gentle boosts from being flattened while still constraining aggressive cuts.
- TDC safety brakes
- Hard cap on total Temporal Decay Control reduction.
- Optional slope limit for predictable, stable decay shaping.
- DF smoothing (experimental)
- Gaussian smoothing with approximately constant Hz width across different sample rates and tap counts.
- Comparison mode
- Locks scoring and plots to a fixed analysis grid (fs/taps) for meaningful A/B comparisons.
- Multi-rate auto-taps mapping
- Maintains constant FIR time length across sample rates (44.1 kHz reference).
Changed
- Refactored leveling logic into a dedicated module for robustness and testability.
- Improved guard logic against unstable phase and excessive corrections.
[2.7.6] and earlier
- Initial public releases and iterative improvements to TDC, confidence masking, and the FIR generation pipeline.
- See commit history for detailed technical changes.