libpipew...-loopback(7) Miscellaneous Information Manuallibpipew...-loopback(7)
NAME
libpipewire-module-loopback - Loopback
DESCRIPTION
The loopback module passes the output of a capture stream unmodified to
a playback stream.
It can be used to construct a link between a source and sink but also to
create new virtual sinks or sources or to remap channel between streams.
Because both ends of the loopback are built with streams, the session
manager can manage the configuration and connection with the sinks and
sources.
MODULE NAME
libpipewire-module-loopback
MODULE OPTIONS
• node.description: a human readable name for the loopback streams
• target.delay.sec: delay in seconds as float (Since 0.3.60)
• capture.props = {}: properties to be passed to the input stream
• playback.props = {}: properties to be passed to the output stream
GENERAL OPTIONS
Options with well-known behavior. Most options can be added to the
global configuration or the individual streams:
• remote.name
• audio.rate
• audio.channels
• audio.position
• media.name
• node.latency
• node.description
• node.group
• node.link.group
• node.virtual
• node.name : See notes below. If not specified, defaults to 'loopback-
PID-MODULEID'.
Stream only properties:
• media.class
• node.name : if not given per stream, the global node.name will be
prefixed with 'input.' and 'output.' to generate a capture and
playback stream node.name respectively.
CHANNEL HANDLING
Channels from the capture stream are copied, in order, to the channels
of the output stream. The remaining streams are ignored (when capture
has more channels) or filled with silence (when playback has more
channels).
When a global channel position is set, both capture and playback will be
converted to and from this common channel layout. This can be used to
implement up or downmixing loopback sinks/sources.
EXAMPLE CONFIGURATION OF SOURCE TO SINK LINK
This loopback links a source node to a sink node. You can change the
target.object properties to match your source/sink node.name.
# ~/.config/pipewire/pipewire.conf.d/my-loopback-0.conf
context.modules = [
{ name = libpipewire-module-loopback
args = {
capture.props = {
# if you want to capture sink monitor ports,
# uncomment the next line and set the target.object
# to the sink name.
#stream.capture.sink = true
target.object = "alsa_input.usb-C-Media_Electronics_Inc._TONOR_TC-777_Audio_Device-00.mono-fallback"
node.passive = true
node.dont-reconnect = true
}
playback.props = {
target.object = "alsa_output.usb-0d8c_USB_Sound_Device-00.analog-surround-71"
node.dont-reconnect = true
node.passive = true
}
}
}
]
EXAMPLE CONFIGURATION OF A VIRTUAL SINK
This Virtual sink routes stereo input to the rear channels of a 7.1
sink.
# ~/.config/pipewire/pipewire.conf.d/my-loopback-1.conf
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "CM106 Stereo Pair 2"
#target.delay.sec = 1.5
capture.props = {
node.name = "CM106_stereo_pair_2"
media.class = "Audio/Sink"
audio.position = [ FL FR ]
}
playback.props = {
node.name = "playback.CM106_stereo_pair_2"
audio.position = [ RL RR ]
target.object = "alsa_output.usb-0d8c_USB_Sound_Device-00.analog-surround-71"
node.dont-reconnect = true
stream.dont-remix = true
node.passive = true
}
}
}
]
EXAMPLE CONFIGURATION OF A VIRTUAL SOURCE
This Virtual source routes the front-left channel of a multi-channel
input to a mono channel. This is useful for splitting up multi-channel
inputs from USB audio interfaces that are not yet fully supported by
alsa.
# ~/.config/pipewire/pipewire.conf.d/my-loopback-2.conf
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "Scarlett Focusrite Line 1"
capture.props = {
audio.position = [ FL ]
stream.dont-remix = true
node.target = "alsa_input.usb-Focusrite_Scarlett_Solo_USB_Y7ZD17C24495BC-00.analog-stereo"
node.passive = true
}
playback.props = {
node.name = "SF_mono_in_1"
media.class = "Audio/Source"
audio.position = [ MONO ]
}
}
}
]
EXAMPLE CONFIGURATION OF AN UPMIX SINK
This Virtual sink has 2 input channels and 6 output channels. It will
perform upmixing using the PSD algorithm on the playback stream.
# ~/.config/pipewire/pipewire.conf.d/my-loopback-3.conf
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "Upmix Sink"
audio.position = [ FL FR ]
capture.props = {
node.name = "effect_input.upmix"
media.class = Audio/Sink
}
playback.props = {
node.name = "effect_output.upmix"
audio.position = [ FL FR RL RR FC LFE ]
node.passive = true
stream.dont-remix = true
channelmix.upmix = true
channelmix.upmix-method = psd
channelmix.lfe-cutoff = 150
channelmix.fc-cutoff = 12000
channelmix.rear-delay = 12.0
}
}
}
]
EXAMPLE CONFIGURATION OF A DOWNMIX SOURCE
This Virtual source has 2 input channels and a mono output channel. It
will perform downmixing from the two first AUX channels of a pro-audio
device.
# ~/.config/pipewire/pipewire.conf.d/my-loopback-4.conf
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "Downmix Source"
audio.position = [ AUX0 AUX1 ]
capture.props = {
node.name = "effect_input.downmix"
target.object = "alsa_input.usb-BEHRINGER_UMC404HD_192k-00.pro-input-0"
node.passive = true
stream.dont-remix = true
}
playback.props = {
node.name = "effect_output.downmix"
media.class = Audio/Source
audio.position = [ MONO ]
}
}
}
]
SEE ALSO
pw-loopback : a tool that loads the loopback module with given
parameters.
PipeWire 1.4.2 libpipew...-loopback(7)
Generated by dwww version 1.16 on Sat Oct 3 07:31:44 CEST 2026.