LIBPIPEWIRE-MODULE-EXAMPLE-FILTER(7)

πŸ’– libpipewire-module-example-filter(7) πŸ’–

okay so bestie, this is a page from the Miscellaneous Information Manual, section 7 β€” the whole title-and-section situation is libpipewire-module-example-filter(7). Let's get into it 🫢


✨ NAME ✨

libpipewire-module-example-filter β€” the Example Filter, aka your lil starter pack πŸ“¦


🌸 DESCRIPTION 🌸

The example filter is genuinely the bestie-approved starting point if you wanna write a custom filter. it's giving template, it's giving blueprint, it's giving "copy me and make me yours" πŸ’…

ngl though, for the real tea you gotta go read the source code. we point you there for more info, periodt. πŸ“–


πŸŽ€ MODULE NAME πŸŽ€

libpipewire-module-example-filter

yes bestie, the name is literally the same as the page. iconic behavior. πŸ‘‘


πŸ’… MODULE OPTIONS πŸ’…

  • node.description β€” a human readable name for the filter streams. so like, the cute name instead of the filter-PID-MODULEID goblin string ✨
  • capture.props = {} β€” the properties you wanna pass to the input stream 🎧
  • playback.props = {} β€” the properties you wanna pass to the output stream πŸ”Š

πŸ”₯ GENERAL OPTIONS πŸ”₯

These ones have well-known behavior, no mystery no cap. and the best part? most of these can go in the global configuration or on the individual streams. pick your lane, both slay πŸ¦‹

  • remote.name
  • audio.rate
  • audio.channels
  • audio.layout
  • audio.position
  • media.name
  • node.latency
  • node.description
  • node.group
  • node.link.group
  • node.virtual
  • node.name β€” see the notes down below πŸ‘‡ if you don't specify it, it defaults to filter-PID-MODULEID. so if you see that in your graph, that's why bestie 😭

🌈 Stream only properties 🌈

  • media.class
  • node.name β€” if you don't give it per stream, the global node.name gets prefixed with input. and output. to generate a capture stream node.name and a playback stream node.name respectively. so cute, so automatic, so demure πŸŽ€

🌟 EXAMPLE CONFIGURATION OF A VIRTUAL SOURCE 🌟

okay here's the moment you've been waiting for β€” a whole virtual source setup, ready to go πŸ’– drop this in ~/.config/pipewire/pipewire.conf.d/my-example-filter.conf:

# ~/.config/pipewire/pipewire.conf.d/my-example-filter.conf

context.modules = [
{   name = libpipewire-module-example-filter
    args = {
      node.description = "Example Filter"
      capture.props = {
          audio.position = [ FL FR ]
          node.passive = true
      }
      playback.props = {
          node.name = "Example Filter"
          media.class = "Audio/Source"
          audio.position = [ FL FR ]
      }
    }
}
]

and if you're feeling spicy and wanna do it straight from the CLI instead, you can load that module right up like this 🧚

pw-cli -m lm libpipewire-module-example-filter '{ audio.position=[FL FR] }'

aaaand that's the whole page bestie, no cap, every last detail preserved and accounted for πŸ’œ

this was brought to you by PipeWire version 1.6.11 ✨ β€” libpipew...le-filter(7), slaying in a terminal near you since forever. bye bestie, go filter something gorgeous πŸŒΈπŸ’…πŸ¦‹
πŸ“¦ where this page comes from