libpipew...discover(7)
π libpipewire-module-snapcast-discover π
okay bestie so this is a page from the Miscellaneous Information Manual (that's the manual name, keep it in your notes π) and we're talking about libpipew...discover(7) β the snapcast discovery situation. buckle up, it's cute AND useful.
β¨ NAME β¨
libpipewire-module-snapcast-discover β Snapcast Discover π
π¦ DESCRIPTION π¦
so basically it automatically creates a Snapcast sink device based on zeroconf information. no cap, it just does it for you. β¨
This module will load module-protocol-simple for each announced stream that matches the rule with the create-stream action, and passes the properties to the module. π
If no stream.rules are given, it will create a sink for all announced snapcast servers. all of them. every single one. π
A new stream will be created on the snapcast server with the given snapcast.stream-name or PipeWire-<hostname>. You will need to route this new stream to clients with the snapcast control application β that part is on you, bestie π«Ά
π MODULE NAME π
libpipewire-module-snapcast-discover
π MODULE OPTIONS π
Options specific to the behavior of this module β the little knobs, the vibes dials:
snapcast.discover-localβ allow discovery of local services as well.falseby default. (so bestie, by default it's not doing this, got it? π)stream.rules=<rules>: match rules, usecreate-streamactions. See Protocol Simple for module properties. π
πΈ stream.rules matches πΈ
the things it can match on, iconic:
snapcast.ipβ the IP address of the snapcast serversnapcast.portβ the port of the snapcast serversnapcast.ifindexβ the interface index where the snapcast announcement was receivedsnapcast.ifnameβ the interface name where the snapcast announcement was receivedsnapcast.nameβ the name of the snapcast serversnapcast.hostnameβ the hostname of the snapcast serversnapcast.domainβ the domain of the snapcast server
π§ stream.rules create-stream π§
In addition to all the properties that can be passed to Protocol Simple, you can also set these lil extras:
snapcast.stream-nameβ The name of the stream on a snapcast server.node.nameβ The name of the sink that is created on the sender.
π EXAMPLE CONFIGURATION π
here's the whole thing, verbatim, don't touch the formatting bestie, it's giving precision:
# ~/.config/pipewire/pipewire.conf.d/my-snapcast-discover.conf
context.modules = [
{ name = libpipewire-module-snapcast-discover
args = {
stream.rules = [
{ matches = [
{ snapcast.ip = "~.*"
#snapcast.port = 1000
#snapcast.ifindex = 1
#snapcast.ifname = eth0
#snapcast.name = ""
#snapcast.hostname = ""
#snapcast.domain = ""
}
]
actions = {
create-stream = {
#audio.rate = 44100
#audio.format = S16LE # S16LE, S24_32LE, S32LE
#audio.channels = 2
#audio.position = [ FL FR ]
#
# The stream name as is appears on the snapcast
# server:
#snapcast.stream-name = "PipeWire"
#
# The name of the sink on the sender:
#node.name = "Snapcast Sink"
#
#capture = true
#server.address = [ "tcp:4711" ]
#capture.props = {
#target.object = ""
#node.latency = 2048/48000
#media.class = "Audio/Sink"
#}
}
}
}
]
}
}
]
π«Ά notice how everything is commented out with #? that's the default config energy β uncomment what you actually want, don't just rawdog it. π
π SEE ALSO π
Protocol Simple
and that's the whole page, you ate it up fr fr π
β¨ this was PipeWire version 1.6.11, drop number libpipew...discover(7) β go be the main character of your audio routing, obsessed with you, byeee ππ¦π
π¦ where this page comes from
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms