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

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

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.