pipewire-props(7) Miscellaneous Information Manual pipewire-props(7)
NAME
pipewire-props - PipeWire object property reference.
DESCRIPTION
PipeWire describes and configures audio and video elements with objects
of the following main types:
Node
Audio or video sink/source endpoint
Device
Sound cards, bluetooth devices, cameras, etc. May have multiple
nodes.
Monitor
Finding devices and handling hotplugging
Port
Audio/video endpoint in a node
Link
Connection between ports, that transporting audio/video between
them.
Client
Application connected to PipeWire.
All objects have properties ('props'), most of which can be set in
configuration files or at runtime when the object is created.
Some of the properties are 'common properties' (for example
node.description) and can be set on all objects of the given type. Other
properties control settings of a specific kinds of device or node (ALSA,
Bluetooth, ...), and have meaning only for those objects.
Usually, all the properties are configured in the session manager
configuration. For how to configure them, see the session manager
documentation. In minimal PipeWire setups without a session manager,
they can be configured via context.objects in pipewire.conf(5).
See also
WirePlumber configuration
COMMON DEVICE PROPERTIES
These are common properties for devices.
device.name # string
A (unique) name for the device. It can be used by command-line and
other tools to identify the device.
device.param.PARAM = { ... } # JSON
Set value of a device Param to a JSON value when the device is
loaded. This works similarly as pw-cli(1) set-param command. The
PARAM should be replaced with the name of the Param to set, ie. for
example device.Param.Props = { ... } to set Props.
device.plugged # integer
when the device was created.
As a uint64 in nanoseconds.
device.nick # string
a short device nickname
device.description # string
localized human readable device one-line description.
Ex. 'Foobar USB Headset'
device.serial # string
Serial number if applicable.
device.vendor.id # integer
vendor ID if applicable
device.vendor.name # string
vendor name if applicable
device.product.id # integer
product name if applicable
device.product.name # string
product ID if applicable
device.class # string
device class
device.form-factor # string
form factor if applicable.
One of 'internal', 'speaker', 'handset', 'tv', 'webcam',
'microphone', 'headset', 'headphone', 'hands-free', 'car', 'hifi',
'computer', 'portable'
device.icon # string
icon for the device.
A base64 blob containing PNG image data
device.icon-name # string
an XDG icon name for the device.
Ex. 'sound-card-speakers-usb'
device.intended-roles # string
intended use.
A space separated list of roles (see media.role) this device is
particularly well suited for, due to latency, quality or form
factor.
device.disabled = false # boolean
Disable the creation of this device in session manager.
There are other common device.* properties for technical purposes and
not usually user-configurable.
See also
Key Names in the API documentation for a full list.
COMMON NODE PROPERTIES
The properties here apply to general audio or video input/output
streams, and other nodes such as sinks or sources corresponding to real
or virtual devices.
Identifying Properties
These contain properties to identify the node or to display the node in
a GUI application.
node.name
A (unique) name for the node. This is usually set on sink and
sources to identify them as targets for linking by the session
manager.
node.description
A human readable description of the node or stream.
media.name
A user readable media name, usually the artist and title. These are
usually shown in user facing applications to inform the user about
the current playing media.
media.title
A user readable stream title.
media.artist
A user readable stream artist
media.copyright
User readable stream copyright information
media.software
User readable stream generator software information
media.language
Stream language in POSIX format. Ex: en_GB
media.filename
File name for the stream
media.icon
Icon for the media, a base64 blob with PNG image data
media.icon-name
An XDG icon name for the media. Ex: audio-x-mp3
media.comment
Extra stream comment
media.date
Date of the media
media.format
User readable stream format information
object.linger = false
If the object should outlive its creator.
device.id
ID of the device the node belongs to.
Classifying Properties
The classifying properties of a node are use for routing the signal to
its destination and for configuring the settings.
media.type
The media type contains a broad category of the media that is being
processed by the node. Possible values include 'Audio', 'Video',
'Midi'
media.category
What kind of processing is done with the media. Possible values
include:
• Playback: media playback.
• Capture: media capture.
• Duplex: media capture and playback or media processing in general.
• Monitor: a media monitor application. Does not actively change
media data but monitors activity.
• Manager: Will manage the media graph.
media.role
The Use case of the media. Possible values include:
• Movie: Movie playback with audio and video.
• Music: Music listening.
• Camera: Recording video from a camera.
• Screen: Recording or sharing the desktop screen.
• Communication: VOIP or other video chat application.
• Game: Game.
• Notification: System notification sounds.
• DSP: Audio or Video filters and effect processing.
• Production: Professional audio processing and production.
• Accessibility: Audio and Visual aid for accessibility.
• Test: Test program.
media.class
The media class is to classify the stream function. Possible values
include:
• Video/Source: a producer of video, like a webcam.
• Video/Sink: a consumer of video, like a display window.
• Audio/Source: a source of audio samples like a microphone.
• Audio/Sink: a sink for audio samples, like an audio card.
• Audio/Duplex: a node that is both a sink and a source.
• Stream/Output/Audio: a playback stream.
• Stream/Input/Audio: a capture stream.
The session manager assigns special meaning to the nodes based on
the media.class. Sink or Source classes are used as targets for
Stream classes, etc..
Scheduling Properties
node.latency = 1024/48000
Sets a suggested latency on the node as a fraction. This is just a
suggestion, the graph will try to configure this latency or less for
the graph. It is however possible that the graph is forced to a
higher latency.
node.lock-quantum = false
When this node is active, the quantum of the graph is locked and not
allowed to change automatically. It can still be changed forcibly
with metadata or when a node forces a quantum.
JACK clients use this property to avoid unexpected quantum changes.
node.force-quantum = INTEGER
While the node is active, force a quantum in the graph. The last
node to be activated with this property wins.
A value of 0 unforces the quantum.
node.rate = RATE
Suggest a rate (samplerate) for the graph. The suggested rate will
only be applied when doing so would not cause interruptions (devices
are idle) and when the rate is in the list of allowed rates in the
server.
node.lock-rate = false
When the node is active, the rate of the graph will not change
automatically. It is still possible to force a rate change with
metadata or with a node property.
node.force-rate = RATE
When the node is active, force a specific sample rate on the graph.
The last node to activate with this property wins.
A RATE of 0 means to force the rate in node.rate denominator.
node.always-process = false
When the node is active, it will always be joined with a driver
node, even when nothing is linked to the node. Setting this property
to true also implies node.want-driver = true.
This is the default for JACK nodes, that always need their process
callback called.
node.want-driver = true
The node wants to be linked to a driver so that it can start
processing. This is the default for streams and filters since
0.3.51. Nodes that are not linked to anything will still be set to
the idle state, unless node.always-process is set to true.
node.pause-on-idle = false
node.suspend-on-idle = false
When the node is not linked anymore, it becomes idle. Normally idle
nodes keep processing and are suspended by the session manager after
some timeout. It is possible to immediately pause a node when idle
with this property.
When the session manager does not suspend nodes (or when there is no
session manager), the node.suspend-on-idle property can be used
instead.
node.loop.name = null
node.loop.class = data.rt
Add the node to a specific loop name or loop class. By default the
node is added to the data.rt loop class. You can make more specific
data loops and then assign the nodes to those.
Other well known names are main-loop.0 and the main node.loop.class
which runs the node data processing in the main loop.
priority.driver # integer
The priority of choosing this device as the driver in the graph. The
driver is selected from all linked devices by selecting the device
with the highest priority.
Normally, the session manager assigns higher priority to sources so
that they become the driver in the graph. The reason for this is
that adaptive resampling should be done on the sinks rather than the
source to avoid signal distortion when capturing audio.
clock.name # string
The name of the clock. This name is auto generated from the card
index and stream direction. Devices with the same clock name will
not use a resampler to align the clocks. This can be used to link
devices together with a shared word clock.
In Pro Audio mode, nodes from the same device are assumed to have
the same clock and no resampling will happen when linked together.
So, linking a capture port to a playback port will not use any
adaptive resampling in Pro Audio mode.
In Non Pro Audio profile, no such assumption is made and adaptive
resampling is done in all cases by default. This can also be
disabled by setting the same clock.name on the nodes.
Session Manager Properties
node.autoconnect = true
Instructs the session manager to automatically connect this node to
some other node, usually a sink or source.
node.exclusive = false
If this node wants to be linked exclusively to the sink/source.
node.target = <node.name|object.id>
Where this node should be linked to. This can be a node.name or an
object.id of a node. This property is deprecated, the target.object
property should be used instead, which uses the more unique
object.serial as a possible target.
target.object = <node.name|object.serial>
Where the node should link to, this can be a node.name or an
object.serial.
node.dont-reconnect = false
When the node has a target configured and the target is destroyed,
destroy the node as well. This property also inhibits that the node
is moved to another sink/source.
Note that if a stream should appear/disappear in sync with the
target, a session manager (WirePlumber) script should be written
instead.
node.passive = false
This is a passive node and so it should not keep sinks/sources busy.
This property makes the session manager create passive links to the
sink/sources. If the node is not otherwise linked (via a non-passive
link), the node and the sink it is linked to are idle (and
eventually suspended).
This is used for filter nodes that sit in front of sinks/sources and
need to suspend together with the sink/source.
node.link-group = ID
Add the node to a certain link group. Nodes from the same link group
are not automatically linked to each other by the session manager.
And example is a coupled stream where you don't want the output to
link to the input streams, making a useless loop.
stream.dont-remix = false
Instruct the session manager to not remix the channels of a stream.
Normally the stream channel configuration is changed to match the
sink/source it is connected to. With this property set to true, the
stream will keep its original channel layout and the session manager
will link matching channels with the sink.
priority.session # integer
The priority for selecting this node as the default source or sink.
Format Properties
Streams and also most device nodes can be configured in a certain format
with properties.
audio.rate = RATE
Forces a samplerate on the node.
audio.channels = INTEGER
The number of audio channels to use. Must be a value between 1 and
64.
audio.format = FORMAT
Forces an audio format on the node. This is the format used
internally in the node because the graph processing format is always
float 32.
Valid formats include: S16, S32, F32, F64, S16LE, S16BE, ...
audio.allowed-rates
An array of allowed samplerates for the node. ex. '[ 44100 48000 ]'
Other Properties
node.param.PARAM = { ... } # JSON
Set value of a node Param to a JSON value when the device is loaded.
This works similarly as pw-cli(1) set-param command. The PARAM
should be replaced with the name of the Param to set, ie. for
example node.param.Props = { ... } to set Props.
node.disabled = false # boolean
Disable the creation of this node in session manager.
AUDIO ADAPTER PROPERTIES
Most audio nodes (ALSA, Bluetooth, audio streams from applications, ...)
have common properties for the audio adapter. The adapter performs
sample format, sample rate and channel mixing operations.
All properties listed below are node properties.
Merger Parameters
The merger is used as the input for a sink device node or a capture
stream. It takes the various channels and merges them into a single
stream for further processing.
The merger will also provide the monitor ports of the input channels and
can apply a software volume on the monitor signal.
monitor.channel-volumes = false
The volume of the input channels is applied to the volume of the
monitor ports. Normally the monitor ports expose the raw unmodified
signal on the input ports.
Resampler Parameters
Source, sinks, capture and playback streams contain a high quality
adaptive resampler. It uses sinc based resampling with linear
interpolation of filter banks to perform arbitrary resample factors. The
resampler is activated in the following cases:
• The hardware of a device node does not support the graph samplerate.
Resampling will occur from the graph samplerate to the hardware
samplerate.
• The hardware clock of a device does not run at the same speed as the
graph clock and adaptive resampling is required to match the clocks.
• A stream does not have the same samplerate as the graph and needs to
be resampled.
• An application wants to activate adaptive resampling in a stream to
make it match some other clock.
PipeWire performs most of the sample conversions and resampling in the
client (Or in the case of the PulseAudio server, in the pipewire-pulse
server that creates the streams). This ensures all the conversions are
offloaded to the clients and the server can deal with one single format
for performance reasons.
Below is an explanation of the options that can be tuned in the sample
converter.
resample.quality = 4
The quality of the resampler. from 0 to 14, the default is 4.
Increasing the quality will result in better cutoff and less
aliasing at the expense of (much) more CPU consumption. The default
quality of 4 has been selected as a good compromise between quality
and performance with no artifacts that are well below the audible
range.
See Infinite Wave for a comparison of the performance.
resample.disable = false
Disable the resampler entirely. The node will only be able to
negotiate with the graph when the samplerates are compatible.
Channel Mixer Parameters
Source, sinks, capture and playback streams can apply channel mixing on
the incoming signal.
Normally the channel mixer is not used for devices, the device channels
are usually exposed as they are. This policy is usually enforced by the
session manager, so we refer to its documentation there.
Playback and capture streams are usually configured to the channel
layout of the sink/source they connect to and will thus perform channel
mixing.
The channel mixer also implements a software volume. This volume
adjustment is performed on the original channel layout. ex: A stereo
playback stream that is up-mixed to 5.1 has 2 a left an right volume
control.
channelmix.disable = false
Disables the channel mixer completely. The stream will only be able
to link to compatible sources/sinks with the exact same channel
layout.
channelmix.min-volume = 0.0
channelmix.max-volume = 10.0
Gives the min and max volume values allowed. Any volume that is set
will be clamped to these values.
channelmix.normalize = false
Makes sure that during such mixing & resampling original 0 dB level
is preserved, so nothing sounds wildly quieter/louder.
While this options prevents clipping, it can in some cases produce
too low volume. Increase the volume in that case or disable
normalization.
channelmix.lock-volumes = false
Completely disable volume or mute changes. Defaults to false.
channelmix.mix-lfe = true
Mixes the low frequency effect channel into the front center or
stereo pair. This might enhance the dynamic range of the signal if
there is no subwoofer and the speakers can reproduce the low
frequency signal.
channelmix.upmix = true
Enables up-mixing of the front center (FC) when the target has a FC
channel. The sum of the stereo channels is used and an optional
lowpass filter can be used (see channelmix.fc-cutoff).
Also enabled up-mixing of LFE when channelmix.lfe-cutoff is set to
something else than 0 and the target has an LFE channel. The LFE
channel is produced by adding the stereo channels.
If channelmix.upmix is true, the up-mixing of the rear channels is
also enabled and controlled with the channelmix-upmix-method
property.
channelmix.upmix-method = psd
3 methods are provided to produce the rear channels in a surround
sound:
1. none. No rear channels are produced.
2. simple. Front channels are copied to the rear. This is fast but
can produce phasing effects.
3. psd. The rear channels as produced from the front left and right
ambient sound (the difference between the channels). A delay and
optional phase shift are added to the rear signal to make the
sound bigger.
channelmix.lfe-cutoff = 150
Apply a lowpass filter to the low frequency effects. The value is
expressed in Hz. Typical subwoofers have a cutoff at around 150 and
200. The default value of 0 disables the feature.
channelmix.fc-cutoff = 12000
Apply a lowpass filter to the front center frequency. The value is
expressed in Hz.
Since the front center contains the dialogs, a typical cutoff
frequency is 12000 Hz.
This option is only active when the up-mix is enabled.
channelmix.rear-delay = 12.0
Apply a delay in milliseconds when up-mixing the rear channels. This
improves specialization of the sound. A typical delay of 12
milliseconds is the default.
This is only active when the psd up-mix method is used.
channelmix.stereo-widen = 0.0
Subtracts some of the front center signal from the stereo channels.
This moves the dialogs more to the center speaker and leaves the
ambient sound in the stereo channels.
This is only active when up-mix is enabled and a Front Center
channel is mixed.
channelmix.hilbert-taps = 0
This option will apply a 90 degree phase shift to the rear channels
to improve specialization. Taps needs to be between 15 and 255 with
more accurate results (and more CPU consumption) for higher values.
This is only active when the psd up-mix method is used.
dither.noise = 0
This option will add N bits of random data to the signal. When no
dither.method is specified, the random data will flip between
[-(1<<(N-1)), 0] every 1024 samples. With a dither.method, the
dither noise is amplified with 1<<(N-1) bits.
This can be used to keep some amplifiers alive during silent
periods. One or two bits of noise is usually enough, otherwise the
noise will become audible. This is usually used together with
session.suspend-timeout-seconds to disable suspend in the session
manager.
Note that PipeWire uses floating point operations with 24 bits
precission for all of the audio processing. Conversion to 24 bits
integer sample formats is lossless and conversion to 32 bits integer
sample formats are simply padded with 0 bits at the end. This means
that the dither noise is always only in the 24 most significant
bits.
dither.method = none
Optional dithering can be done on the quantized output signal.
There are 6 modes available:
1. none No dithering is done.
2. rectangular Dithering with a rectangular noise distribution.
This adds random bits in the [-0.5, 0.5] range to the signal
with even distribution.
3. triangular Dithering with a triangular noise distribution. This
add random bits in the [-1.0, 1.0] range to the signal with
triangular distribution around 0.0.
4. triangular-hf Dithering with a sloped triangular noise
distribution.
5. wannamaker3 Additional noise shaping is performed on the sloped
triangular dithering to move the noise to the more inaudible
range. This is using the 'F-Weighted' noise filter described by
Wannamaker.
6. shaped5 Additional noise shaping is performed on the triangular
dithering to move the noise to the more inaudible range. This is
using the Lipshitz filter.
Dithering is only useful for conversion to a format with less than
24 bits and will be disabled otherwise.
Debug Parameters
debug.wav-path = ''
Make the stream to also write the raw samples to a WAV file for
debugging purposes.
Other Parameters
These control low-level technical features:
clock.quantum-limit
See pipewire.conf(5)
resample.peaks = false # boolean
Instead of actually resampling, produce peak amplitude values as
output. This is used for volume monitoring, where it is set as a
property of the 'recording' stream.
resample.prefill = false # boolean
Prefill resampler buffers with silence. This affects the initial
samples produced by the resampler.
adapter.auto-port-config = null # JSON
If specified, configure the ports of the node when it is created,
instead of leaving that to the session manager to do. This is useful
(only) for minimal configurations without a session manager.
Value is SPA JSON of the form:
{
mode = "none", # "none", "passthrough", "convert", "dsp"
monitor = false, # boolean
control = false, # boolean
position = "preserve" # "unknown", "aux", "preserve"
}
See spa_param_port_config for the meaning.
ALSA PROPERTIES
Monitor properties
alsa.use-acp # boolean
Use ALSA Card Profiles (ACP) for device configuration.
alsa.udev.expose-busy # boolean
Expose the ALSA card even if it is busy/in use. Default false. This
can be useful when some of the PCMs are in use by other applications
but the other free PCMs should still be exposed.
Device properties
api.alsa.path # string
ALSA device path as can be used in snd_pcm_open() and
snd_ctl_open().
api.alsa.use-ucm = true # boolean
When ACP is enabled and a UCM configuration is available for a
device, by default it is used instead of the ACP profiles. This
option allows you to disable this and use the ACP profiles instead.
This option does nothing if api.alsa.use-acp is set to false.
api.alsa.soft-mixer = false # boolean
Setting this option to true will disable the hardware mixer for
volume control and mute. All volume handling will then use software
volume and mute, leaving the hardware mixer untouched. This can be
interesting to work around bugs in the mixer detection or decibel
reporting. The hardware mixer will still be used to mute unused
audio paths in the device. Use api.alsa.disable-mixer-path to also
disable mixer path selection.
api.alsa.disable-mixer-path = false # boolean
Setting this option to true will disable the hardware mixer path
selection. The hardware mixer path is the configuration of the mixer
depending on the jacks that are inserted in the card. If this is
disabled, you will have to manually enable and disable mixer
controls but it can be used to work around bugs in the mixer. The
hardware mixer will still be used for volume and mute. Use
api.alsa.soft-mixer to also disable hardware volume and mute.
api.alsa.ignore-dB = false # boolean
Setting this option to true will ignore the decibel setting
configured by the driver. Use this when the driver reports wrong
settings.
device.profile-set # string
This option can be used to select a custom ACP profile-set name for
the device. This can be configured in UDev rules, but it can also be
specified here. The default is to use 'default.conf' unless there is
a matching udev rule.
device.profile # string
The initial active profile name. The default is to start from the
'Off' profile and then let session manager select the best profile
based on its policy.
api.acp.auto-profile = true # boolean
Automatically select the best profile for the device. The session
manager usually disables this, as it handles this task instead. This
can be enabled in custom configurations without the session manager
handling this.
api.acp.auto-port = true # boolean
Automatically select the highest priority port that is available
('port' is a PulseAudio/ACP term, the equivalent of a 'Route' in
PipeWire). The session manager usually disables this, as it handles
this task instead. This can be enabled in custom configurations
without the session manager handling this.
api.acp.probe-rate # integer
Sets the samplerate used for probing the ALSA devices and collecting
the profiles and ports.
api.acp.pro-channels # integer
Sets the number of channels to use when probing the 'Pro Audio'
profile. Normally, the maximum amount of channels will be used but
with this setting this can be reduced, which can make it possible to
use other samplerates on some devices.
api.alsa.split-enable # boolean
For UCM devices with split PCMs, don't split to multiple PCMs using
alsa-lib plugins, but instead add api.alsa.split properties to
emitted nodes with PCM splitting information.
Node properties
audio.channels # integer
The number of audio channels to open the device with. Defaults
depends on the profile of the device.
audio.rate # integer
The audio rate to open the device with. Default is 0, which means to
open the device with a rate as close to the graph rate as possible.
audio.format # string
The audio format to open the device in. By default this is
'UNKNOWN', which will open the device in the best possible bits
(32/24/16/8..). You can force a format like S16_LE or S32_LE.
audio.position # JSON array of strings
The audio position of the channels in the device. This is auto
detected based on the profile. You can configure an array of channel
positions, like '[ FL, FR ]'.
audio.allowed-rates # JSON array of integers
The allowed audio rates to open the device with. Default is '[ ]',
which means the device can be opened in any supported rate.
Only rates from the array will be used to open the device. When the
graph is running with a rate not listed in the allowed-rates, the
resampler will be used to resample to the nearest allowed rate.
api.alsa.period-size # integer
The period size to open the device in. By default this is 0, which
will open the device in the default period size to minimize latency.
api.alsa.period-num # integer
The amount of periods to use in the device. By default this is 0,
which means to use as many as possible.
api.alsa.headroom # integer
The amount of extra space to keep in the ringbuffer. The default is
0. Higher values can be configured when the device read and write
pointers are not accurately reported.
api.alsa.start-delay = 0 # integer
Some devices need some time before they can report accurate hardware
pointer positions. In those cases, an extra start delay can be added
to compensate for this startup delay. This sets the startup delay in
samples.
api.alsa.disable-mmap = false # boolean
Disable mmap operation of the device and use the ALSA read/write API
instead. Default is false, mmap is preferred.
api.alsa.disable-batch # boolean
Ignore the ALSA batch flag. If the batch flag is set, ALSA will need
an extra period to update the read/write pointers. Ignore this flag
from ALSA can reduce the latency. Default is false.
api.alsa.use-chmap # boolean
Use the driver provided channel map. Default is true when using UCM,
false otherwise because many driver don't report this correctly.
api.alsa.multi-rate # boolean
Allow devices from the same card to be opened in multiple sample
rates. Default is true. Some older drivers did not properly
advertise the capabilities of the device and only really supported
opening the device in one rate.
api.alsa.htimestamp = false # boolean
Use ALSA htimestamps in scheduling, instead of the system clock.
Some ALSA drivers produce bad timestamps, so this is not enabled by
default and will be disabled at runtime if it looks like the ALSA
timestamps are bad.
api.alsa.htimestamp.max-errors # integer
Specify the number of consecutive errors before htimestamp is
disabled. Setting this to 0 makes htimestamp never get disabled.
api.alsa.disable-tsched = false # boolean
Disable timer-based scheduling, and use IRQ for scheduling instead.
The 'Pro Audio' profile will usually enable this setting, if it is
expected it works on the hardware.
api.alsa.auto-link = false # boolean
Link follower PCM devices to the driver PCM device when using IRQ-
based scheduling. The 'Pro Audio' profile will usually enable this
setting, if it is expected it works on the hardware.
latency.internal.rate # integer
Static set the device systemic latency, in samples at playback rate.
latency.internal.ns # integer
Static set the device systemic latency, in nanoseconds.
api.alsa.path # string
UNDOCUMENTED
api.alsa.open.ucm # boolean
Open device using UCM.
api.alsa.bind-ctls # boolean
UNDOCUMENTED
iec958.codecs # JSON array of string
Enable only specific IEC958 codecs. This can be used to disable some
codecs the hardware supports. Available values: PCM, AC3, DTS, MPEG,
MPEG2-AAC, EAC3, TRUEHD, DTSHD
api.alsa.split.parent # boolean
PCM is UCM SplitPCM parent PCM, to be opened with SplitPCM set.
api.alsa.split.position # JSON
(SPA JSON list) If present, this is a virtual device corresponding
to a subset of channels in an underlying PCM, listed in this
property. Informative property.
api.alsa.split.hw-position # JSON
(SPA JSON list) Channel map of the underlying split PCM.
Informative property.
BLUETOOTH PROPERTIES
Monitor properties
The following are settings for the Bluetooth device monitor, not device
or node properties:
bluez5.roles = [ a2dp_sink a2dp_source bap_sink bap_source
bap_bcast_sink bap_bcast_source hfp_hf hfp_ag ] # JSON array of string
Enabled roles.
Currently some headsets (Sony WH-1000XM3) are not working with both
hsp_ag and hfp_ag enabled, so by default we enable only HFP.
Supported roles:
• hsp_hs (HSP Headset),
• hsp_ag (HSP Audio Gateway),
• hfp_hf (HFP Hands-Free),
• hfp_ag (HFP Audio Gateway)
• a2dp_sink (A2DP Audio Sink)
• a2dp_source (A2DP Audio Source)
• bap_sink (LE Audio Basic Audio Profile Sink)
• bap_source (LE Audio Basic Audio Profile Source)
• bap_bcast_sink (LE Audio Basic Audio Profile Broadcast Sink)
• bap_bcast_source (LE Audio Basic Audio Profile Broadcast Source)
bluez5.codecs # JSON array of string
Enabled A2DP codecs (default: all). Possible values: sbc, sbc_xq,
aac, aac_eld, aptx, aptx_hd, aptx_ll, aptx_ll_duplex, faststream,
faststream_duplex, lc3plus_h3, ldac, opus_05, opus_05_51,
opus_05_71, opus_05_duplex, opus_05_pro, opus_g, lc3.
bluez5.default.rate # integer
Default audio rate.
bluez5.default.channels # integer
Default audio channels.
bluez5.hfphsp-backend # integer
HFP/HSP backend (default: native). Available values: any, none,
hsphfpd, ofono, native
bluez5.hfphsp-backend-native-modem # string
bluez5.dummy-avrcp player # boolean
Register dummy AVRCP player. Some devices have wrongly functioning
volume or playback controls if this is not enabled. Default: false
bluez5.enable-sbc-xq # boolean
Override device quirk list and enable SBC-XQ for devices for which
it is disabled.
bluez5.enable-msbc # boolean
Override device quirk list and enable MSBC for devices for which it
is disabled.
bluez5.enable-hw-volume # boolean
Override device quirk list and enable hardware volume fo devices for
which it is disabled.
bluez5.hw-offload-sco # boolean
HFP/HSP hardware offload SCO support (default: false).
This feature requires a custom configuration that routes SCO audio
to ALSA nodes, in a platform-specific way. See tests/examples/bt-
pinephone.lua in WirePlumber for an example. Do not enable this
setting if you don't know what all this means, as it won't work.
bluez5.a2dp.opus.pro.channels = 3 # integer
PipeWire Opus Pro audio profile channel count.
bluez5.a2dp.opus.pro.coupled-streams = 1 # integer
PipeWire Opus Pro audio profile coupled stream count.
bluez5.a2dp.opus.pro.locations = 'FL,FR,LFE' # string
PipeWire Opus Pro audio profile audio channel locations.
bluez5.a2dp.opus.pro.max-bitrate = 600000 # integer
PipeWire Opus Pro audio profile max bitrate.
bluez5.a2dp.opus.pro.frame-dms = 50 # integer
PipeWire Opus Pro audio profile frame duration (1/10 ms).
bluez5.a2dp.opus.pro.bidi.channels = 1 # integer
PipeWire Opus Pro audio profile duplex channels.
bluez5.a2dp.opus.pro.bidi.coupled-streams = 0 # integer
PipeWire Opus Pro audio profile duplex coupled stream count.
bluez5.a2dp.opus.pro.bidi.locations = 'FC' # string
PipeWire Opus Pro audio profile duplex coupled channel locations.
bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000 # integer
PipeWire Opus Pro audio profile duplex max bitrate.
bluez5.a2dp.opus.pro.bidi.frame-dms = 400 # integer
PipeWire Opus Pro audio profile duplex frame duration (1/10 ms).
bluez5.bcast_source.config = [] # JSON
Example:
bluez5.bcast_source.config = [
{
"broadcast_code": "Børne House",
"encryption: false,
"sync_factor": 2,
"bis": [
{ # BIS configuration
"qos_preset": "16_2_1", # QOS preset name from table Table 6.4 from BAP_v1.0.1.
"audio_channel_allocation": 1, # audio channel allocation configuration for the BIS
"metadata": [ # metadata configurations for the BIS
{ "type": 1, "value": [ 1, 1 ] }
]
}
]
}
]
bluez5.bap-server-capabilities.rates # Array of integers
Supported sampling frequencies for the LC3 codec (default: all).
Possible values: 8000, 16000, 24000, 32000, 44100, 48000
bluez5.bap-server-capabilities.durations # Array of doubles
Supported frame durations for the LC3 codec (default: all). Possible
values: 7.5, 10
bluez5.bap-server-capabilities.channels # Array of integers
Supported audio channel counts for the LC3 codec (default: [1, 2]).
Possible values: 1, 2, 3, 4, 5, 6, 7, 8
bluez5.bap-server-capabilities.framelen_min # integer
Minimum number of octets supported per codec frame for the LC3 codec
(default: 20).
bluez5.bap-server-capabilities.framelen_max # integer
Maximum number of octets supported per codec frame for the LC3 codec
(default: 400).
bluez5.bap-server-capabilities.max_frames # integer
Maximum number of codec frames supported per SDU for the LC3 codec
(default: 2).
Device properties
bluez5.auto-connect # boolean
Auto-connect devices on start up. Disabled by default if the
property is not specified.
bluez5.hw-volume = [ hfp_ag hsp_ag a2dp_source ] # JSON array of string
Profiles for which to enable hardware volume control.
bluez5.profile # string
Initial device profile. This usually has no effect as the session
manager overrides it.
bluez5.a2dp.ldac.quality = 'auto' # string
LDAC encoding quality Available values:
• auto (Adaptive Bitrate, default)
• hq (High Quality, 990/909kbps)
• sq (Standard Quality, 660/606kbps)
• mq (Mobile use Quality, 330/303kbps)
bluez5.a2dp.aac.bitratemode = 0 # integer
AAC variable bitrate mode. Available values: 0 (cbr, default), 1-5
(quality level)
bluez5.a2dp.opus.pro.application = 'audio' # string
PipeWire Opus Pro Audio encoding mode: audio, voip, lowdelay
bluez5.a2dp.opus.pro.bidi.application = 'audio' # string
PipeWire Opus Pro Audio duplex encoding mode: audio, voip, lowdelay
bluez5.bap.cig = 'auto' # integer, or 'auto'
Set CIG ID for BAP unicast streams of the device.
Node properties
bluez5.media-source-role # string
Media source role for Bluetooth clients connecting to this instance.
Available values:
• playback: playing stream to speakers
• input: appear as source node.
PORT PROPERTIES
Port properties are usually not directly configurable via PipeWire
configuration files, as they are determined by applications creating
them. Below are some port properties may interesting for users:
port.name # string
port name
port.alias # string
port alias
See also
Key Names in the API documentation for a full list.
LINK PROPERTIES
Link properties are usually not directly configurable via PipeWire
configuration files, as they are determined by applications creating
them.
See also
Key Names in the API documentation for a full list.
CLIENT PROPERTIES
Client properties are usually not directly configurable via PipeWire
configuration files, as they are determined by the application
connecting to PipeWire. Clients are however affected by the settings in
pipewire.conf(5) and session manager settings.
Note
Only the properties pipewire.* are safe to use for security purposes
such as identifying applications and their capabilities, as clients
can set and change other properties freely.
Below are some client properties may interesting for users.
application.name # string
application keys
application name. Ex: 'Totem Music Player'
application.process.id # integer
process id (pid)
pipewire.sec.pid # integer
Client pid, set by protocol.
Note that for PulseAudio applications, this is the PID of the
pipewire-pulse process.
See also
Key Names in the API documentation for a full list.
RUNTIME SETTINGS
Objects such as devices and nodes also have parameters that can be
modified after the object has been created. For example, the active
device profile, channel volumes, and so on.
For some objects, the parameters also allow changing some of the
properties. The settings of most ALSA and virtual device parameters can
be configured also at runtime.
These settings are available in device parameter called Props in its
params field. They can be seen e.g. using pw-dump <id> for an ALSA
device:
{
...
"Props": [
{
...
"params": [
"audio.channels",
2,
"audio.rate",
0,
"audio.format",
"UNKNOWN",
"audio.position",
"[ FL, FR ]",
"audio.allowed-rates",
"[ ]",
"api.alsa.period-size",
0,
"api.alsa.period-num",
0,
"api.alsa.headroom",
0,
"api.alsa.start-delay",
0,
"api.alsa.disable-mmap",
false,
"api.alsa.disable-batch",
false,
"api.alsa.use-chmap",
false,
"api.alsa.multi-rate",
true,
"latency.internal.rate",
0,
"latency.internal.ns",
0,
"clock.name",
"api.alsa.c-1"
]
}
...
They generally have the same names and meaning as the corresponding
properties.
One or more params can be changed using pw-cli(1):
pw-cli s <id> Props '{ params = [ "api.alsa.headroom" 1024 ] }'
These settings are not saved and need to be reapplied for each session
manager restart.
ALSA CARD PROFILES
The sound card profiles ('Analog stereo', 'Analog stereo duplex', ...)
except 'Pro Audio' come from two sources:
• UCM: ALSA Use Case Manager: the profile configuration system from
ALSA. See https://github.com/alsa-project/alsa-ucm-conf/
• ACP ('Alsa Card Profiles'): Pulseaudio's profile system ported to
PipeWire. See
https://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles/
See the above links on how to configure these systems.
For ACP, PipeWire looks for the profile configuration files under
• ~/.config/alsa-card-profile
• /etc/alsa-card-profile
• /usr/share/alsa-card-profile/mixer`.
The path and profile-set files are in subdirectories paths and profile-
sets of these directories. It is possible to override individual files
locally by putting a modified copy into the ACP directories under
~/.config or /etc.
OTHER OBJECT TYPES
Technically, PipeWire objects is what are manipulated by applications
using the PipeWire API.
The list of object types that are usually 'exported' (i.e. appear in pw-
dump(1) output) is larger than considered above:
• Node
• Device
• Port
• Link
• Client
• Metadata
• Module
• Profiler
• SecurityContext
Monitors do not appear in this list; they are not usually exported, and
technically also Device objects. They are considered above as a separate
object type because they have configurable properties.
Metadata objects are what is manipulated with pw-metadata(1)
Modules can be loaded in configuration files, or by PipeWire
applications.
The Profiler and SecurityContext objects only provide corresponding
PipeWire APIs.
INDEX
Monitor properties
• alsa.udev.expose-busy
• alsa.use-acp
• bluez5.a2dp.opus.pro.bidi.channels
• bluez5.a2dp.opus.pro.bidi.coupled-streams
• bluez5.a2dp.opus.pro.bidi.frame-dms
• bluez5.a2dp.opus.pro.bidi.locations
• bluez5.a2dp.opus.pro.bidi.max-bitrate
• bluez5.a2dp.opus.pro.channels
• bluez5.a2dp.opus.pro.coupled-streams
• bluez5.a2dp.opus.pro.frame-dms
• bluez5.a2dp.opus.pro.locations
• bluez5.a2dp.opus.pro.max-bitrate
• bluez5.bap-server-capabilities.channels
• bluez5.bap-server-capabilities.durations
• bluez5.bap-server-capabilities.framelen_max
• bluez5.bap-server-capabilities.framelen_min
• bluez5.bap-server-capabilities.max_frames
• bluez5.bap-server-capabilities.rates
• bluez5.bcast_source.config
• bluez5.codecs
• bluez5.default.channels
• bluez5.default.rate
• bluez5.dummy-avrcp
• bluez5.enable-hw-volume
• bluez5.enable-msbc
• bluez5.enable-sbc-xq
• bluez5.hfphsp-backend
• bluez5.hfphsp-backend-native-modem
• bluez5.hw-offload-sco
• bluez5.roles
Device properties
• api.acp.auto-port
• api.acp.auto-profile
• api.acp.pro-channels
• api.acp.probe-rate
• api.alsa.disable-mixer-path
• api.alsa.ignore-dB
• api.alsa.path
• api.alsa.soft-mixer
• api.alsa.split-enable
• api.alsa.split.parent
• api.alsa.use-ucm
• bluez5.a2dp.aac.bitratemode
• bluez5.a2dp.ldac.quality
• bluez5.a2dp.opus.pro.application
• bluez5.a2dp.opus.pro.bidi.application
• bluez5.auto-connect
• bluez5.bap.cig
• bluez5.hw-volume
• bluez5.profile
• device.class
• device.description
• device.disabled
• device.form-factor
• device.icon
• device.icon-name
• device.intended-roles
• device.name
• device.nick
• device.param.PARAM
• device.plugged
• device.product.id
• device.product.name
• device.profile
• device.profile-set
• device.serial
• device.vendor.id
• device.vendor.name
Node properties
• adapter.auto-port-config
• api.alsa.auto-link
• api.alsa.bind-ctls
• api.alsa.disable-batch
• api.alsa.disable-mmap
• api.alsa.disable-tsched
• api.alsa.headroom
• api.alsa.htimestamp
• api.alsa.htimestamp.max-errors
• api.alsa.multi-rate
• api.alsa.open.ucm
• api.alsa.path
• api.alsa.period-num
• api.alsa.period-size
• api.alsa.split.hw-position
• api.alsa.split.position
• api.alsa.start-delay
• api.alsa.use-chmap
• audio.allowed-rates
• audio.channels
• audio.format
• audio.position
• audio.rate
• bluez5.media-source-role
• channelmix.disable
• channelmix.fc-cutoff
• channelmix.hilbert-taps
• channelmix.lfe-cutoff
• channelmix.lock-volumes
• channelmix.max-volume
• channelmix.min-volume
• channelmix.mix-lfe
• channelmix.normalize
• channelmix.rear-delay
• channelmix.stereo-widen
• channelmix.upmix
• channelmix.upmix-method
• clock.name
• clock.quantum-limit
• debug.wav-path
• device.id
• dither.method
• dither.noise
• iec958.codecs
• latency.internal.ns
• latency.internal.rate
• media.artist
• media.category
• media.class
• media.comment
• media.copyright
• media.date
• media.filename
• media.format
• media.icon
• media.icon-name
• media.language
• media.name
• media.role
• media.software
• media.title
• media.type
• monitor.channel-volumes
• node.always-process
• node.autoconnect
• node.description
• node.disabled
• node.dont-reconnect
• node.exclusive
• node.force-quantum
• node.force-rate
• node.latency
• node.link-group
• node.lock-quantum
• node.lock-rate
• node.loop.class
• node.loop.name
• node.name
• node.param.PARAM
• node.passive
• node.pause-on-idle
• node.rate
• node.suspend-on-idle
• node.target
• node.want-driver
• object.linger
• priority.driver
• priority.session
• resample.disable
• resample.peaks
• resample.prefill
• resample.quality
• stream.dont-remix
• target.object
Port properties
• port.alias
• port.name
Client properties
• application.name
• application.process.id
• pipewire.sec.pid
AUTHORS
The PipeWire Developers
<https://gitlab.freedesktop.org/pipewire/pipewire/issues>; PipeWire is
available from <https://pipewire.org>
SEE ALSO
pipewire.conf(5)
PipeWire 1.4.2 pipewire-props(7)
Generated by dwww version 1.16 on Sat Oct 3 06:47:38 CEST 2026.