Skip to content

trusch/pipeflow

Pipeflow

A next-generation PipeWire graph and control application.

Pipeflow replaces the patchwork of Helvum, pavucontrol, and qpwgraph with a single, keyboard-driven tool for visual routing, live audio control, and reproducible configurations. Built in Rust with egui, it handles everything from casual desktop audio management to live performance routing.

Why Pipeflow?

Existing PipeWire tools are fragmented: Helvum visualizes but doesn't control, pavucontrol controls but doesn't route, qpwgraph routes but lacks safety features. Pipeflow combines all three into one cohesive application with stage-safe operation, saved setup recall, and remote control.

Features

  • Visual graph editing — Interactive node graph with pan, zoom, drag, and multi-select
  • Full audio control — Per-node and per-channel volume, mute, live signal metering with peak/RMS display
  • Link management — Create and remove connections between compatible ports
  • Saved setups — Save and restore trusted graph configurations
  • Command palette — Fuzzy-searchable keyboard command interface (Ctrl+K)
  • Safety modes — Normal, read-only, and stage mode to prevent accidental changes
  • Filtering & groups — Filter by media class, direction, or activity; organize nodes into groups
  • Node inspection — Detailed metadata, port lists, format info, and connection status
  • Remote control — Headless gRPC server mode with SSH tunnel support for controlling remote machines
  • Built-in help — Press H for contextual help throughout the UI

Run Modes

Pipeflow operates in three modes:

Mode Command Description
Local pipeflow Full GUI with local PipeWire connection (default)
Headless pipeflow --headless gRPC server, no GUI — for remote-controlled machines
Remote pipeflow --remote user@host GUI connecting to a remote headless instance via SSH tunnel

See docs/REMOTE.md for the full remote control guide.

Installation

Dependencies

Arch Linux:

sudo pacman -S pipewire pipewire-audio libpipewire

Fedora:

sudo dnf install pipewire-devel

Debian/Ubuntu:

sudo apt install libpipewire-0.3-dev libspa-0.2-dev

From Source

git clone https://github.com/trusch/pipeflow.git
cd pipeflow
cargo install --path .

Requires Rust 1.88+ (stable). The network feature (gRPC remote control) is enabled by default. To build without it:

cargo install --path . --no-default-features

Desktop Entry

To add Pipeflow to your application launcher:

sudo cp assets/pipeflow.desktop /usr/share/applications/

Usage

Quick Start

pipeflow          # Launch GUI
pipeflow -v       # Launch with verbose logging

Keyboard Shortcuts

Key Action
Ctrl+K / Ctrl+P / / Command palette
H Toggle help panel
I Toggle inspector
[ / ] Toggle left / right sidebar
+ / - Zoom in / out
Ctrl+0 Fit all
Ctrl+G Create group from selection
Delete Remove selected links
Escape Clear selection / close palette

Graph Navigation

  • Pan: Drag on empty space
  • Zoom: Scroll wheel or +/-
  • Select: Click, Shift+click for multi-select, or box select
  • Connect: Drag from an output port to an input port
  • Disconnect: Right-click a link, or select and press Delete

Safety Modes

Pipeflow includes protection modes to prevent accidental changes:

  • Normal mode — Full control, no restrictions
  • Read-only mode — Observe without risk of changes
  • Stage mode — Maximum protection for live performance (blocks all routing and volume changes)

Switch modes from the toolbar safety card or the command palette.

See docs/SAFETY.md for detailed guidance on when to use each mode.

CLI Reference

pipeflow [OPTIONS]

Options:
    --headless              Run as gRPC server without GUI
    --bind <ADDR>           gRPC bind address [default: 127.0.0.1:50051]
    --token <TOKEN>         Authentication token (also: PIPEFLOW_TOKEN env var)
    --remote <USER@HOST>    Connect to remote headless instance via SSH
    --ssh-port <PORT>       SSH port [default: 22]
    --remote-port <PORT>    Remote gRPC port [default: 50051]
    --local-port <PORT>     Local tunnel port [default: 50051]
    -i, --identity <FILE>   SSH identity file (private key)
    -v, --verbose           Enable verbose logging
    -h, --help              Print help
    -V, --version           Print version

Architecture

┌──────────────────────────────────────────────────────────────┐
│                      UI Layer (egui)                         │
│  GraphView │ NodePanel │ Meters │ CommandPalette │ Toolbar   │
└──────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────┐
│                    Application Core                          │
│        State Manager │ Command Handler │ Snapshot Engine     │
└──────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────┐
│                      Domain Layer                            │
│      Graph Model │ Audio Control │ Safety Controller         │
└──────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────┐
│                 PipeWire Integration                         │
│   Connection │ Registry │ Events │ Commands │ Meters         │
└──────────────────────────────────────────────────────────────┘

Key design decisions:

  • Shared state: Arc<RwLock<AppState>> for thread-safe access between UI and PipeWire threads
  • Immediate-mode GUI: egui with conditional repaint (60 Hz active, 4 Hz idle)
  • Channel-based IPC: crossbeam channels for PipeWire commands and events
  • Auto-reconnect: Exponential backoff reconnection to PipeWire daemon
  • Graceful degradation: Meter updates dropped before control commands under load

Documentation

Contributing

See CONTRIBUTING.md for development setup, code quality standards, and pull request guidelines.

License

Licensed under either of:

at your option.

Acknowledgments

  • PipeWire — The multimedia routing infrastructure
  • egui — Immediate mode GUI framework
  • egui-snarl — Node graph widget for egui
  • pipewire-rs — Rust bindings for PipeWire

About

A next-generation PipeWire graph and control application

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages