Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
eqtui
A keyboard-driven parametric EQ for PipeWire that lives in the terminal. Built with Ratatui.
EasyEffects is great, but sometimes I just want a simple EQ — not a full DSP pipeline with a GTK(now Qt) UI. And also i want to learn little bit about DSP stuff.
Runs as a background daemon so the EQ keeps going even after closing the TUI.
Quick Start
Close with q — the EQ keeps running. Re-attach anytime with eqtui attach.
Keybindings
eqtui uses Vim-inspired keybindings across several modes.
Normal Mode (Navigation & Quick Actions)
| Key | Action |
|---|---|
q |
Quit TUI (Daemon stays running) |
Tab |
Switch focus between Devices and Pipeline (EQ) |
j / Down |
Move selection down |
k / Up |
Move selection up |
h / Left |
Move column selection left (Pipeline only) |
l / Right |
Move column selection right (Pipeline/Devices) |
i |
Enter Insert Mode to edit selected cell |
v |
Enter Visual Mode |
: |
Enter Command Mode |
a |
Add a new EQ band |
dd |
Delete selected EQ band |
gg |
Jump to the first EQ band |
r |
Reset selected band (Gain: 0, Q: 1) |
R |
Reset all bands in current profile |
+ / = |
Increment selected cell value |
- |
Decrement selected cell value |
{ / } |
Switch to previous/next profile |
b |
Toggle EQ Bypass |
c / C |
Toggle connection to selected device (Devices only) |
Insert Mode (Cell Editing)
| Key | Action |
|---|---|
Enter |
Confirm changes and return to Normal Mode |
Esc |
Cancel changes and return to Normal Mode |
Backspace |
Delete character |
Any char |
Type into cell |
Filter Types: In the "Type" column, type PK (Peak), LS (LowShelf), or HS (HighShelf).
Visual Mode (Bulk Operations)
| Key | Action |
|---|---|
j / Down |
Move selection down |
k / Up |
Move selection up |
d |
Delete selected EQ band and return to Normal Mode |
Esc |
Return to Normal Mode |
Command Mode
| Command | Action |
|---|---|
:q |
Quit TUI |
:w |
Save current profile to profiles.toml |
:flat |
Set all gains in current profile to 0.0dB |
:load <path> |
Load a PEQ file (AutoEQ/Squiglink format) |
:bypass |
Toggle EQ Bypass |
:preamp <val> |
Set preamp gain (e.g., :preamp -6.0) |
:add [freq] |
Add a band at optional frequency (default 1000Hz) |
Esc |
Clear command and return to Normal Mode |
Features (the short version)
- Daemon/TUI split — EQ engine stays alive when the UI closes
- Parametric EQ — frequency, gain, Q, filter type per band
- AutoEQ import —
:loadany PEQ file from AutoEQ / Squiglink - Profile system — save/switch presets with
:w - Vim-ish controls — Normal/Insert/Visual/Command modes
- No GTK, no Qt — just a terminal and PipeWire
Config & Profiles
Settings are stored in standard XDG locations.
- Config:
~/.config/eqtui/config.toml - Profiles:
~/.config/eqtui/profiles.toml - Logs:
~/.local/share/eqtui/eqtui.log
Profile System
There are 5 profile slots available for saving different presets.
- Saving & Applying: Use
:wto save the current EQ bands and preamp gain to the active slot. This also sends the settings to the audio engine. - Switching: Use
{and}to navigate between profiles. - Persistence: The daemon loads these profiles automatically on startup.
- External Files: Profiles can be linked to external PEQ files. These profiles are read-only and display an
[RO]indicator in the TUI.
Resetting Profiles
To reset EQ setings there is three ways:
- Reset All Bands (
R): Resets every band in the current profile (Gain: 0.0, Q: 1.0). - Reset Selected Band (
r): Resets only the highlighted band (Gain: 0.0, Q: 1.0). - Flatten Gains (
:flat): Sets all gains to 0.0dB but keeps your frequencies and Q values.
Normal vs Read-Only ([RO])
| Feature | Normal Profile | [RO] Profile |
|---|---|---|
| Reset in UI | Yes | Yes (Temporary) |
| Apply to Sound | Yes (:w) |
No (Locked to file) |
| Save to Disk | Yes (:w) |
No (Locked to file) |
Note: Changes made to [RO] profiles in the TUI are temporary and cannot be saved or applied to the DSP engine.
Profile File Format
The profiles.toml file contains an array of 5 profiles. A profile can either define its own bands or link to an external path.
Example with external file:
[[]]
= "AutoEQ Preset"
= "@eqs/CVJVIVIANS1_Filters.txt"
Example with inline data:
[[]]
= "Custom Tune"
= -6.0
[[]]
= 100.0
= 3.5
= 0.7
= "LowShelf"
Fields:
path: (Optional) Portable path to an external PEQ file. Use@for paths relative to the config directory.preamp: Global gain offset in dB.bands: List of EQ filters (ignored ifpathis set).frequency: Center frequency in Hz.gain: Boost or cut in dB.q: Quality factor (bandwidth).filter_type: Either"Peak","LowShelf", or"HighShelf".
Customizing Keys
You can change the default controls in your config.toml:
[]
= 'b'
= 'a'
= 'd'
[]
= '\n'
= '\x1b'
Background Process Details
The daemon uses a few standard Linux mechanisms to work correctly:
- XDG_RUNTIME_DIR: The Unix socket is placed here. The daemon will not start if this variable is missing.
- User Check: The daemon only accepts connections from the same user ID that started it.
- File Locking: Uses a lock file to make sure only one daemon instance runs at a time.
- POSIX Daemon: Uses standard
forkandsetsidto detach from the terminal.
Install from Source
Needs PipeWire and a Nerd Font.
Project by SiputBiru — patches welcome but no promises :^)