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
- Host: GitHub
- URL: https://github.com/stuin/pipeflow
- Owner: stuin
- License: other
- Created: 2024-10-29T04:29:44.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-28T03:18:17.000Z (over 1 year ago)
- Last Synced: 2025-02-09T12:27:30.701Z (about 1 year ago)
- Size: 55.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
# PipeFlow
Fun-In-Progress GUI for [PipeWire](https://pipewire.org/)

## 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