An open API service indexing awesome lists of open source software.

https://github.com/stuin/pipeflow

Fun-In-Progress GUI for PipeWire
https://github.com/stuin/pipeflow

Last synced: about 1 year ago
JSON representation

Fun-In-Progress GUI for PipeWire

Awesome Lists containing this project

README

          

# PipeFlow

Fun-In-Progress GUI for [PipeWire](https://pipewire.org/)

![](screenshot.png)

## Features

- Display Nodes, Ports and Links
- Create and destroy Links
- Set channel volume (for ALSA and PulseAudio)
- Move Nodes (but will be reset after model changes!)

## Todo

- for wireplumber things wait for v0.5, has big changes?
- https://www.collabora.com/news-and-blog/blog/2023/06/15/wireplumber-event-dispatcher-new-simplified-way-handling-pipewire-events/
- user change node/port label
- user set auto/default links/nodes!
- how to best auto layout?
- can we set all (audio) nodes channelVolume?
- seems we can for alsa and pulse. what about jack?
- what is softVolume?
- show live audio levels?
- un/lock channel volume sliders
- can we use https://gitlab.com/matpi/pipewire-py ?
- i guess we would look `pw-dump` code for howto?

## Bugs

- find them polish loops... (and why does it still work, or what is not working?!)

## Theme

`theme.ini` file is loaded from these dirs in this order:

- Next to program
- User: `$XDG_CONFIG_HOME/pipeflow` (default `$HOME/.config/pipeflow`)
- System: `pipeflow` dir in `$XDG_CONFIG_DIRS` (default `/etc/xdg/`)

## Requirements

- `pyside6` - https://doc.qt.io/qtforpython-6/
- `python3` - https://www.python.org/
- `qt6-declarative` - https://doc.qt.io/qt-6/qtqml-index.html
- `pw-dump`, `pw-link` and `pw-cli` - https://pipewire.org/

## Packaging

- Copy dir `libpipeflow` to Pythons system include dir
- Copy dir `PipeFlow` to QMLs system include dir
- Copy file `pipeflow` to system bin dir
- Copy file `main.qml` to `/usr/lib/pipeflow/main.qml`
- Copy file `theme.ini` to `/etc/xdg/pipeflow/theme.ini`

> see [`distro/archlinux/PKGBUILD`](distro/archlinux/PKGBUILD) for an example

## Development

The python code provides following things to QML:

|thing|description|
|-----|-----------|
|`NodeModel`|List Model of PipeWire Nodes|
|`LinkModel`|List Model of PipeWire Links|
|`PwLink`|Functions to call `pw-link`|
|`PwCli`|Functions to call `pw-cli`|
|`Theme`|Theme properties|

And the QML UI "simply" builds around these models, and calls functions to request changes to PipeWire...

If you have [`entr`](http://eradman.com/entrproject/) installed, you can start `pipeflow` in "hot reloading" way with:

```
$ make hot
```

> restart this if you add files

## Links

- TODO: any thips? https://github.com/dyegoaurelio/simple-wireplumber-gui
- https://docs.pipewire.org/page_objects_design.html
- https://doc.qt.io/qtforpython-6/examples/example_qml_editingmodel.html
- volume infos https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3351

## Licence

MIT