A simple and elegant, pipewire graph editor

Overview

pw-viz

A simple and elegant, pipewire graph editor

demo image

This is still a WIP, node layouting is kinda jank at the moment.

Installation

A compiled binary is available on the releases page.

Building from source

Clone the repo:

git clone https://github.com/Ax9D/pw-viz
cd pw-viz

To build pw-viz, you will need to have Rust installed. The recommended way to install Rust is from the official download page, using rustup.

Once Rust is installed, you can build pw-viz:

cargo build --release

Next you can copy the resulting binary(pw-viz) which will be found inside target/release to a directory in your $PATH, like /usr/bin/

Controls

Description
Left Click + Drag Move nodes, create links between ports
Alt + Left Click + Drag Remove links
Middle Mouse + Drag Pan the graph
Ctrl Shows pipewire ids of nodes and ports

Zooming is not supported currently

Libraries Used

Thanks / Alternatives

Pipewire connection code is inspired by helvum's implementation helvum: A GTK patchbay for pipewire.

License

pw-viz is licensed under the terms of the GNU General Public License v3.0. See LICENSE.md for more info.

Comments
  • Arch KDE window is extremely small

    Arch KDE window is extremely small

    Running from terminal crashes the terminal, running from gdb shows that the app is running. but no window is visible.

    EDIT: Window is extremely small when it opens

    bug 
    opened by Quackdoc 8
  • Miscellaneous formatting and style changes

    Miscellaneous formatting and style changes

    Sorry for the low-hanging fruit PR. Went through and cleaned up formatting and some small code layout issues. No major business logic changes. Moved Node, Link, and Port definitions into graph.rs after pruning some unnecessary methods (like field getters). Didn't touch the topological sort implementation.

    opened by mkrasnitski 4
  • Basic implementation for interaction hints

    Basic implementation for interaction hints

    Closes #9

    Basic implementation that just statically shows canvas controls at the bottom of the canvas.

    I would like to replace the ASCII mouse button and alt key indicators with something more graphical, but while there is no shortage of general keyboard and mouse symbols there don't seem to be any for specific mouse buttons or the alt key. Yes there is ⎇ (U+2387) but I have never actually seen that being used. I expect event the mac equivalent ⌥ (U+2325) to be more widely understood. It seems the best way around this would be to either draw up icons for these and draw them as images among the labels or to craft a custom font that has the symbols in the unicode private use area and use that font for the labels. The font would probably be the better way to handle it since it scales automatically with DPI. I am however not familiar enough with egui so actually figuring out how to implement either solution will take a while. Pointers are welcome.

    opened by jansol 2
  • Show controls at the bottom à la Blender

    Show controls at the bottom à la Blender

    Fairly straightforward feature that does a lot for user friendliness. Blender updates these dynamically when modifier keys are pressed or a tool is in use, but in the case of pw-viz just showing a static list that also shows the modifier keys is probably enough.

    image

    enhancement good first issue 
    opened by jansol 2
  • DNF needs to be run with high privileges

    DNF needs to be run with high privileges

    dnf needs to be used with elevated privileges, it won't elevate by itself. Normal usage: sudo dnf install pipewire pipewire-devel clang libxcb-devel And also its cache is different for each user that runs it.

    opened by msmafra 1
  • Allow object labeling

    Allow object labeling

    image

    As you can see I have several different sof-hda-dsp and there's no way to tell them apart, labeling will allow me to add some comment to see what I'm working with.

    Thanks.

    opened by yarons 0
  • Add controls window

    Add controls window

    Hey, I noticed there is nowhere in the app where you can see the controls, and even though they are simple enough I thought it might be nice to have them somewhere. Only caveat is that if you add more controls then you'll have to remember to update this window too

    opened by SpyrosRoum 0
  • [Feature request] Alternate pan

    [Feature request] Alternate pan

    Currently panning uses the middle mouse button. This is impossible on for example laptops, due to not having a middle mouse button.

    Possible solutions:

    • CTRL+drag
    • arrow keys
    • scroll (vertical) and shift+scroll (horizontal)
    opened by TheArcaneBrony 0
  • app crashes and does not start

    app crashes and does not start

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: GlutinCreationError(NoAvailablePixelFormat)', /home/atri/.cargo/registry/src/github.com-1ecc6299db9ec823/egui_glium-0.15.0/src/epi_backend.rs:45:70
    stack backtrace:
       0:     0x563c69a88abd - <unknown>
       1:     0x563c698a62cc - <unknown>
       2:     0x563c69a87364 - <unknown>
       3:     0x563c69a87ac0 - <unknown>
       4:     0x563c69a86fa1 - <unknown>
       5:     0x563c69aa7ab8 - <unknown>
       6:     0x563c69aa7a36 - <unknown>
       7:     0x563c69aa79f2 - <unknown>
       8:     0x563c69867d70 - <unknown>
       9:     0x563c698680a2 - <unknown>
      10:     0x563c699940df - <unknown>
      11:     0x563c698afb0c - <unknown>
      12:     0x563c69a34c83 - <unknown>
      13:     0x563c69a19213 - <unknown>
      14:     0x563c69a33925 - <unknown>
      15:     0x7fc3ee77afd0 - __libc_start_call_main
                                   at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
      16:     0x7fc3ee77b07d - __libc_start_main_impl
                                   at ./csu/../csu/libc-start.c:409:3
      17:     0x563c6988293e - <unknown>
      18:                0x0 - <unknown>
    
    opened by k26pl 1
  • Using `egui_node_graph` vs `egui_nodes`

    Using `egui_node_graph` vs `egui_nodes`

    Recently, the developers of Blackjack, a 3D modelling app, have released their egui node graph implementation as a crate. It might be worth considering if its better for our use-case versus the existing fork of egui_nodes.

    opened by mkrasnitski 0
  • Panic on Zoom disconnect

    Panic on Zoom disconnect

    pw-viz panics on Zoom disconnect on my box (Debian unstable pipewire 0.3.42).

    Upgrading the dependency on simple_logger to 2.1.0 and then rebuilding seems to fix it.

    opened by BartMassey 1
  • Request: Snap screen back to origin

    Request: Snap screen back to origin

    If someone is dealing with a great number of nodes, the arrange function is really nice, but sometimes manually panning somewhere, then clicking arrange, can cause the user to need to hunt them down, it would be nice if it would also snap the user back to origin, or have a dedicated button to do so.

    opened by Quackdoc 0
Releases(v0.1.0)
Owner
Forcing electrons to do maths
null
Simple, performant graph generator for Feynman diagrams* ⚛️

Feynman diagram generator ⚛️ A simple generator of "Feynman diagram" permutations (as defined by problem 781). Incrementally builds isomorphically uni

eugene huang 3 Jan 1, 2023
Theorem relational dependencies automatic extraction and visualization as a graph for Lean4.

Lean Graph Interactive visualization of dependencies for any theorem/definitions in your Lean project. How to use In your browser: lean-graph.com Or r

Patrik Číhal 8 Jan 3, 2024
GraphScope: A One-Stop Large-Scale Graph Computing System from Alibaba

A One-Stop Large-Scale Graph Computing System from Alibaba GraphScope is a unified distributed graph computing platform that provides a one-stop envir

Alibaba 2.2k Jan 1, 2023
Graph data structure library for Rust.

petgraph Graph data structure library. Supports Rust 1.41 and later. Please read the API documentation here Crate feature flags: graphmap (default) en

null 2k Jan 9, 2023
A graph library for Rust.

Gamma A graph library for Rust. Gamma provides primitives and traversals for working with graphs. It is based on ideas presented in A Minimal Graph AP

Metamolecular, LLC 122 Dec 29, 2022
🦀 Rust Graph Routing runtime for Apollo Federation 🚀

Apollo Router The Apollo Router is a configurable, high-performance graph router for a federated graph. Getting started Follow the quickstart tutorial

Apollo GraphQL 502 Jan 8, 2023
A graph crate with simplicity in mind

A graph crate with simplicity in mind. Prepona aims to be simple to use (for users of the crate) and develop further (for contributors). Nearly every

Mohamad Amin Rayej 80 Dec 15, 2022
Graph API client writen in Rust

graph-rs Now available on stable Rust at crates.io graph-rs-sdk = "0.1.0" 0.1.0 and above use stable Rust. Anything before 0.1.0 uses nightly Rust. M

Sean Reeise 56 Jan 3, 2023
Rust library for of graph ensembles

Rust library for random graph ensembles Minimal Rust version: 1.55.0 Implements simple sampling and monte carlo (or rather markov-) steps, that can be

Yannick Feld 2 Dec 14, 2022
A Graph implemented using nothing but `Vec`s in rust

VecGraph A Graph implemented using nothing but Vecs in rust. Details The graph is implemented using two Vecs: nodes and edges. nodes stores "nodes". w

null 1 Jan 27, 2022
Kiss3d - Keep it simple, stupid 3d graphics engine for Rust.

Kiss3d - Keep it simple, stupid 3d graphics engine for Rust.

Sébastien Crozet 1.2k Dec 26, 2022
CLI for image processing with histograms, binary treshold and other functions

Image-Processing-CLI-in-Rust CLI for processing images in Rust. Some implementation is custom and for some functionality it uses 3rd party libraries.

Miki Graf 25 Jul 24, 2022
GLFW3 bindings and idiomatic wrapper for Rust.

glfw-rs GLFW bindings and wrapper for The Rust Programming Language. Example extern crate glfw; use glfw::{Action, Context, Key}; fn main() { le

PistonDevelopers 546 Jan 3, 2023
Safe and rich Rust wrapper around the Vulkan API

Vulkano See also vulkano.rs. Vulkano is a Rust wrapper around the Vulkan graphics API. It follows the Rust philosophy, which is that as long as you do

null 3.6k Jan 3, 2023
A cool, fast maze generator and solver written in Rust

MazeCruncher Welcome to maze cruncher! Download Standalone Here Usage To get started, just run the standalone .exe in target/release or compile and ru

null 69 Sep 20, 2022
A high-performance SVG renderer, powered by Rust based resvg and napi-rs.

resvg-js resvg-js is a high-performance SVG renderer, powered by Rust based resvg and napi-rs. Fast, safe and zero dependencies! No need for node-gyp

一丝 744 Jan 7, 2023
Sub-pixel precision light spot rendering library for astronomy and video tracking applications.

Planetarium Sub-pixel precision light spot rendering library for astronomy and video tracking applications. Example usage use planetarium::{Canvas, Sp

Sergey Kvachonok 5 Mar 27, 2022
A cargo subcommand for creating GraphViz DOT files and dependency graphs

cargo-graph Linux: A cargo subcommand for building GraphViz DOT files of dependency graphs. This subcommand was originally based off and inspired by t

Kevin K. 213 Nov 24, 2022
Szalinski: A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations

Szalinski: A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations

UW PLSE 24 Aug 15, 2022