• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

CamillaFIR v2.5.0 - Automated Mixed Phase FIR Generator (Python/WebUI)

VilhoValittu

Member
Joined
Jan 6, 2026
Messages
19
Likes
54
Hi everyone,

I wanted to share a tool I've been developing called CamillaFIR. It's a Python-based utility designed to automate the creation of high-precision FIR correction filters based on acoustic measurements (REW exports).

While originally designed for CamillaDSP workflow, the tool generates standard IEEE 32-bit float .wav impulse response files. This means the filters are universally compatible with any convolution engine (MiniDSP, Roon, Equalizer APO, FusionDSP, etc.).

Key Features in v2.5.0:

  • Advanced Phase Strategies: Supports Linear Phase, Minimum Phase, and a sophisticated Mixed Phase reconstruction (Linear Phase bass for timing + Minimum Phase treble for natural decay).
  • Time-of-Flight (TOF) Correction: The DSP engine automatically detects and removes acoustic delay (distance-based phase slope) before calculating excess phase. This ensures the correction targets actual group delay distortions, not just distance.
  • Frequency-Dependent Regularization: Prevents over-correction. It allows aggressive modal correction in the bass (<200Hz) while applying heavy regularization in the treble to prevent "phasiness" and preserve the natural sound signature.
  • Automated Workflow: Just upload your L/R measurements, select your target curve (Harman, Toole, etc.), and the tool generates filters for all common sample rates (44.1k - 192k).
Inspiration:This project is heavily inspired by the work of OCA (Obsessive Compulsive Audiophile): https://www.youtube.com/@ocaudiophile

Downloads & Links:

Installation (Source):Requires Python 3.10+. Clone the repo, install requirements (pip install numpy scipy pywebio matplotlib requests), and run python CamillaFIR.py.

Feedback needed!

(Disclaimer: This text was structured and generated by AI, as I find technical writing and structuring challenging. The code and the acoustic logic are my own work/implementation.)

Github link updated.
 
Last edited:
Thanks, I like the sound of this. I've been using OCA's A1 Evo Acoustix a lot recently.

I've got a Raspberry Pi 5 with a Hifiberry Dac8x lying around.........I may play about with this.
 
I just used Claude Code to analyse the repo and it couldn't find any reference to subwoofers and it's 2 channel (mono or stereo modes).

May I ask if I'm correct?
 
You are correct. The repo does not feature a multi-channel routing matrix (like 2.1 or 5.1). It generates correction filters for 2 channels, but those channels can represent subwoofers if the measurements provided to the tool are from those specific drivers. For example, you can perform measurements in "LFE+Main" mode where the subwoofers are active along with the main speakers. In this case, the tool treats the combined output as a single response and generates a filter that corrects the total system response, ensuring seamless integration. The tool includes a crosover (xo) tab that allows you to input frequencies and slopes of existing crossovers to linearize their phase response, improving the transition between subs and mains.
 
You are correct. The repo does not feature a multi-channel routing matrix (like 2.1 or 5.1). It generates correction filters for 2 channels, but those channels can represent subwoofers if the measurements provided to the tool are from those specific drivers. For example, you can perform measurements in "LFE+Main" mode where the subwoofers are active along with the main speakers. In this case, the tool treats the combined output as a single response and generates a filter that corrects the total system response, ensuring seamless integration. The tool includes a crosover (xo) tab that allows you to input frequencies and slopes of existing crossovers to linearize their phase response, improving the transition between subs and mains.
Thank you
 
Update to v2.6.2: Update to v.2.6.3
- Temporal Decay Control (TDC): Actively dampens room modes (ringing) in the time domain. It doesn't just lower the volume; it actively reduces the decay time (ms) of the resonance.
- Asymmetric Linear Phase: Achieves perfect phase linearity with a specialized (default 100ms/500ms, changeable by user) windowing strategy, effectively eliminating audible pre-ringing while maintaining full low-frequency resolution.
- Adaptive FDW (A-FDW): An intelligent windowing engine that modulates cycle counts based on acoustic confidence masking—preventing over-correction of chaotic reflections.- Acoustic Intelligence: Automated reflection tracking and measurement reliability analysis.
-Room analyze at summary.txt
 
Last edited:
Nice bit of work my fren... Keeping up with your changes... I use the Hang Loose Convolver as a plugin to Audirvana and your FIR filters works a charm for my kit as did some of OCA's original work... I was hoping you might add support for the "industry standard" config file that the HLC uses...
Cordially,
-DD-
 
Nice bit of work my fren... Keeping up with your changes... I use the Hang Loose Convolver as a plugin to Audirvana and your FIR filters works a charm for my kit as did some of OCA's original work... I was hoping you might add support for the "industry standard" config file that the HLC uses...
Cordially,
-DD-
That's easy to add. I will do that update some point today.
 
Please update to version 2.7.2. Minor bug fixes on the engine. All works now flawlesly (hopefully) with different gear. Added automatic generation of "industry standard" config file & small changes to ui.
 
Last edited:
I believe the new config file (.cfg) should look like the following:

44100 2 2 0
0 0
0 0
L_Mixed_44100Hz_1955_150126.wav
0
0.0
0.0
R_Mixed_44100Hz_1955_150126.wav
0
1.0
1.0

This works and I have seen at least two separate examples in as many documents...
Cordially,
-DD-
 
Last edited:
I believe the new config file (.cfg) should look like the following:

44100 2 2 0
0 0
0 0
L_Mixed_44100Hz_1955_150126.wav
0
0.0
0.0
R_Mixed_44100Hz_1955_150126.wav
0
1.0
1.0

This works and I have seen at least two separate examples in as many documents...
Cordially,
-DD-
You are right, I will fix this.
 
Audirvana has just released a Beta of their own convolver... I will test that over the next several days and see if that will play nicely with your FIR Generator...
That might give you some more visibility, if that is something you would be interested in... Know that I appreciate your contribution to the audio community at large...
 
Feedback needed!

(Disclaimer: This text was structured and generated by AI, as I find technical writing and structuring challenging. The code and the acoustic logic are my own work/implementation.)

Github link updated.

I installed CamillaFIR on Linux Mint following the instructions in the github link. I get the following error when trying to start the application server:

Traceback (most recent call last):
File "/home/tforsythe/Git/CamillaFIR/camillafir.py", line 22, in <module>
import camillafir_plot as plots
File "/home/tforsythe/Git/CamillaFIR/camillafir_plot.py", line 6, in <module>
import plotly.graph_objects as go
ModuleNotFoundError: No module named 'plotly'

Note: Under "Usage" the command provided is "python CamillaFIR.py", but in my installation camillafir.py is all lower case. Hence I used "python camillafir.py".
 
It looks like plotly is missing from requirements.txt. If you're not using a virtualenv I'd suggest installing it via Mint's package management - probably:
Code:
sudo apt install python3-plotly
 
All requiments :

python3 -m venv venv source venv/bin/activate
pip install numpy scipy pywebio matplotlib
 
Why would you enter them manually rather than using your requirements.txt as the list of packages to install?
Code:
pip install -r requirements.txt
That way there's no problem with people accidentally missing one out when copying, and the instructions don't need to change when you add a new dependency.

Also does one of those pull in plotly as a dependency? I'd prefer to have anything non-core that you import listed in requirements.txt in case whatever it is that pulls it in stops depending on it in a future revision.
 
This looks excellent and I'm looking forward to giving it a try... Can you elaborate on how the TDC works? Is it active cancellation of modes in the sense of using a delayed + inverted signal?
 
It looks like plotly is missing from requirements.txt. If you're not using a virtualenv I'd suggest installing it via Mint's package management - probably:
Code:
sudo apt install python3-plotly
In the Linux Mint repo it is just named "plotly". I installed it in the virtual environment using "pip install plotly". It is working!
 
Back
Top Bottom