A generic GUI for controlling Sushi over gRPC, built with Python and QT. It can control both local instances and remote devices. Intended for testing and development.
It is assumed you have Python 3 on your system. And that Sushi is running on your local machine or on a remote device with a known IP.
git clone ...
git submodule update --init --recursive
The preferred way to install deps is in a virtual environment. Here is how to do it with the builtin venv module. Using
virtualenv instead is also possible.
python3 -m venv venvwill create a virtual environment named venv with your installed Pythonsource venv/bin/activateto activate that environmentpip install -r requirements.txtto install all the dependencies in the environment
That being said, we recommend using uv to run sushi-gui as it is easier and more convenient than the manual environment
setup detailed above.
For installation instructions, refer to https://docs.astral.sh/uv/getting-started/installation/
Once installed, start sushi-gui with uv run sushi-gui.py.
sushi-grpc-api is included in this repo as a submodule. It contains the proto definition file for Sushi.
In the Sushi repo, you will find the .proto definition file for Sushi. By default, this GUI will use that.
In case you need to use another proto file, you should set the environment variable SUSHI_GRPC_ELKPY_PROTO to that path.
Also, note that Sushi comes with its proto file when you check it out. Specifically in sushi/rpc_interface/protos/sushi_rpc.proto.
So setting environment variable like that:
$ export SUSHI_GRPC_ELKPY_PROTO=path_to_sushi/rpc_interface/protos/sushi_rpc.proto
will make the GUI use the proto file included with Sushi.
If you find yourself using this often and wanting to set the variable once and for all, you should add the command to your
.bashrc or .zshrc, depending on which shell you are using.
Assuming that the virtual environment is activated:
python3 sushi-gui.py
Or, if you have uv installed:
$ uv run sushi-gui.py
The GUI lets you specify an IP address and port number to connect to. Simple as that.
In case you need to hard-code a different default address than localhost:51051, feel free
to edit sushi-gui.py:4:
SUSHI_ADDRESS = 'localhost:51051'
with the new default address.
The list of plugins avaliable in the drop-down menu "Add Plugin" is controlled by the JSON file installed_plugins.json. By default, this has a list of Gx and airwindows plugins avaiable with the Sushi bundle for desktop computer.
You can specify another JSON plugin database with the --plugins-file argument, for example with:
$ uv run sushi-gui.py --plugins-file installed_plugins_target.json
you can load the correct definitions for the plugin installed on a target Elk Audio OS embedded device running an image with the plugin pack installed.
Although meant as a debugging/testing tools for Sushi developers, this GUI does not implement all of Sushi's features. Most notably, a certain behavior one might expect after learning about Sushi's notification system is missing:
Sushi allows for adding processor anywhere in the processor stack. But this GUI does not. When adding a plugin, it will always add it at the bottom of the stack, i.e. in the last position in the audio flow.
This limitation gets even more annoying when the processor addition is done via other means which do allow for insertion in any position because this GUI will not reflect the new ordering: the new plugin will always be shown at the bottom of the stack even though it is actually somewhere else. Keep that in mind.
Copyright 2023 Elk Audio AB, Stockholm, Sweden.