Hi all 👋
I'm using PipeWire master
(1.5.0) and WirePlumber 0.5.8 on LinuxMint.
I'm building a modular DSP setup using libpipewire-module-filter-chain
from config files.
The following simple 1-node filter-chain works fine:
{
name = libpipewire-module-filter-chain
args = {
node.name = "eq_from_fly_plate"
filter.graph = {
nodes = [
{
type = builtin
label = param_eq
name = eq_from_fly_plate_lfe
config = { filename = "/.../eq_from_fly_plate.txt" }
}
]
}
}
}
This node shows up properly and I can manually patch it to HDMI using Helvum or pw-link
, and it passes audio.
When I try to load a more complex filter-chain with 3 nodes:
EQ → LADSPA (sc4) → EQ
...the node loads, but no audio goes through. It seems to be silently broken. Nothing shows up in Helvum/patchbay output for this sink.
{
name = libpipewire-module-filter-chain
args = {
node.name = "eq_hl_comp"
...
filter.graph = {
nodes = [
{ type = builtin, name = eq_before_comp, ... }
{ type = ladspa, name = compressor, plugin = sc4_1882, label = sc4, control = { "0"=..., ... } }
{ type = builtin, name = eq_after_comp, ... }
]
}
links = [
{ output = "eq_before_comp:Out" input = "compressor:In" }
{ output = "compressor:Out" input = "eq_after_comp:In" }
]
inputs = [ "eq_before_comp:In 1", "eq_before_comp:In 2" ]
outputs = [ "eq_after_comp:Out 1", "eq_after_comp:Out 2" ]
}
}
I verified that control = { "0" = ..., ... }
is required format. Still no audio or output appears.
I've verified that the graph loads and nodes are created by PipeWire — they appear in pw-cli
and
can be manually routed to HDMI via Helvum. However, even when simplified to a two-node chain
(e.g. param_eq → param_eq
, skipping the LADSPA compressor entirely), the result is the same:
audio flows through the graph virtually, but no actual DSP is applied.
The output signal is either silence or an unmodified passthrough, even though all links appear visually correct.
I also ensured that input/output port names, channel layouts, and formats are correctly defined and
that filter.graph.inputs
/outputs
match the final node.
I restarted PipeWire and WirePlumber with clean state, tested multiple EQ config files, and even moved
the failing part into a working structure.
Still, any multi-node graph (even very basic ones) silently fails to apply DSP,
unlike the one-node version which works reliably.
$ wireplumber --version
WirePlumber 0.5.8
# master
$ pipewire --version
PipeWire 1.5.0 (compiled and linked)
# master
$ systemctl --user restart wireplumber.service pipewire.{service,socket} pipewire-pulse.{service,socket}
Config is loaded via:
$ pw-config
{
"config.path": "/usr/share/pipewire/pipewire.conf",
"override.3.0.config.path": "/home/tomfun/.config/pipewire/pipewire.conf.d/01-pipewire.conf"
}
Does anyone know why a multi-node filter-chain
graph would silently fail, while a 1-node version works?
Thanks a lot 🙏
Also I've tried:
https://pipewire.pages.freedesktop.org/wireplumber/policies/software_dsp.html
Inspired by:
https://forum.artixlinux.org/index.php/topic,6668.0.html
Main doc seems missing simple and concise example of 2 nodes example (eq + eq):
https://docs.pipewire.org/page_module_filter_chain.html