https://github.com/iharob/khelvum
A native KDE/Qt6 patchbay for PipeWire
https://github.com/iharob/khelvum
Last synced: 10 days ago
JSON representation
A native KDE/Qt6 patchbay for PipeWire
- Host: GitHub
- URL: https://github.com/iharob/khelvum
- Owner: iharob
- Created: 2026-05-29T23:08:52.000Z (10 days ago)
- Default Branch: main
- Last Pushed: 2026-05-29T23:09:26.000Z (10 days ago)
- Last Synced: 2026-05-30T01:09:25.905Z (10 days ago)
- Language: C++
- Size: 43.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# khelvum
A native **KDE / Qt 6** patchbay for [PipeWire](https://pipewire.org/), ported from
[Helvum](https://gitlab.freedesktop.org/pipewire/helvum) (the GTK patchbay that ships
with PipeWire).
khelvum shows every audio, video and MIDI node as a box in a live graph and lets you
connect or disconnect ports by dragging between them. It talks to PipeWire directly
through the libpipewire C API and renders the graph with `QGraphicsView`.
Linux only — it manages PipeWire/PulseAudio routing, so there is no cross-platform build.
## Architecture
| Area | File(s) | Notes |
|------|---------|-------|
| PipeWire connection | `src/pw/PwConnection.*` | Owns a `pw_thread_loop`; registry + per-object proxy listeners; link create/destroy. Emits Qt signals (queued) carrying plain value types. |
| Value types | `src/pw/PwTypes.h` | `NodeData` / `PortData` / `LinkData`, media-type enum. |
| Graph model | `src/model/GraphModel.*` | Turns PipeWire events into `QGraphicsItem`s, lays nodes out in output / other / input columns. |
| Canvas | `src/graph/GraphView.*` | Anchored Ctrl+scroll zoom (0.3–4.0×), middle-drag pan, drag-to-connect. |
| Items | `src/graph/{NodeItem,PortItem,LinkItem}.*` | Node boxes, port anchors, cubic-bezier links. |
| Window | `src/ui/MainWindow.*` | `KXmlGuiWindow`, status bar, zoom widget. |
The PipeWire loop runs on its own thread; callbacks copy data into value types and emit
queued signals to the GUI thread. UI → server requests (create/destroy link) take the
thread-loop lock and call the C API directly.
## Building
```sh
cmake -B build -G Ninja
cmake --build build
./build/khelvum
```
Requires Qt 6, KDE Frameworks 6 (CoreAddons, I18n, XmlGui, ConfigWidgets, Crash),
extra-cmake-modules and `libpipewire-0.3` development headers.