A GUI wrapper for testing and iterating on the aiosendspin server
Project description
Sendspin GUI
A GUI wrapper for testing and iterating on the aiosendspin server without needing to integrate with Music Assistant.
Features
- Server Management: Start/stop the Sendspin server with configurable settings
- Client Discovery: Automatic mDNS discovery of Sendspin clients on your network
- Group Management: Create and manage client groups for synchronized playback
- Audio Streaming: Stream audio files or test tones to groups
- Event Logging: Real-time event log with filtering capabilities
Installation
Prerequisites
- Python 3.12 or higher
Install with uv (recommended)
uv is a fast Python package installer.
# Install uv if you don't have it
pip install uv
# Install sendspin-gui
cd sendspin-gui
uv pip install -e .
# Or with dev dependencies
uv pip install -e ".[dev]"
Install with pip
cd sendspin-gui
pip install -e .
Usage
Run the GUI
# Using the installed command
sendspin-gui
# Or run as a module
python -m sendspin_gui
Quick Start
- Start the server: Configure the server ID, name, and port, then click "Start Server"
- Connect clients: Sendspin clients on your network will be discovered automatically (if mDNS is enabled)
- Create groups: Select clients and click "Create Group" to group them for synchronized playback
- Stream audio: Use the Stream panel to play test tones or audio files to your groups
GUI Overview
Server Panel
- Configure server ID and name
- Set the server port (default: 8765)
- Enable/disable mDNS for automatic discovery
- Start/stop the server
Clients Panel
- View all connected clients
- See client roles and group membership
- Select clients to create groups
- Disconnect individual clients
Groups Panel
- View all active groups
- Playback controls (play/stop)
- Volume control per group
- Expand groups to see and manage members
Stream Panel
- File: Browse and stream audio files (WAV, FLAC, MP3, etc.)
- Test Tone: Generate sine wave test tones at configurable frequencies
- URL: (Coming soon) Stream from network URLs
Event Log
- Real-time server events
- Filter by event type (info, success, warning, error)
- Clear log functionality
Development
Project Structure
sendspin-gui/
├── src/
│ └── sendspin_gui/
│ ├── __init__.py
│ ├── __main__.py
│ ├── app.py # Main application
│ ├── components/
│ │ ├── __init__.py
│ │ ├── server_panel.py
│ │ ├── clients_panel.py
│ │ ├── groups_panel.py
│ │ ├── event_log.py
│ │ └── stream_panel.py
│ └── utils/
│ ├── __init__.py
│ └── async_bridge.py
├── pyproject.toml
└── README.md
Running in development
# Install in editable mode with dev dependencies
uv pip install -e ".[dev]"
# or: pip install -e ".[dev]"
# Run the app
python -m sendspin_gui
Code style
The project uses ruff for linting:
ruff check src/
ruff format src/
Architecture Notes
The GUI uses customtkinter for a modern appearance and runs the asyncio event loop in a separate thread to avoid blocking the UI. The AsyncBridge utility handles communication between the tkinter main thread and the async server operations.
Related Projects
- aiosendspin - The underlying async Sendspin protocol library
- sendspin - A synchronized audio player built on aiosendspin
- Music Assistant - Full-featured music server that uses aiosendspin
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sendspin_dev_server-0.1.0.tar.gz.
File metadata
- Download URL: sendspin_dev_server-0.1.0.tar.gz
- Upload date:
- Size: 93.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3bcbc4c7e2343f4664036a851a139db44dbed1a873d13bc6615eb8856cc2d91
|
|
| MD5 |
09d68ff0b6ad52ef093afab6018bc0ce
|
|
| BLAKE2b-256 |
b88579cc1bb87f79ec0c519e2e7744d780a25353022315865210b999be475732
|
Provenance
The following attestation bundles were made for sendspin_dev_server-0.1.0.tar.gz:
Publisher:
publish.yml on chrisuthe/Sendspin-dev-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sendspin_dev_server-0.1.0.tar.gz -
Subject digest:
e3bcbc4c7e2343f4664036a851a139db44dbed1a873d13bc6615eb8856cc2d91 - Sigstore transparency entry: 870880630
- Sigstore integration time:
-
Permalink:
chrisuthe/Sendspin-dev-server@1564303d549101f34201dc1d6b0e06a186a888a2 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/chrisuthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1564303d549101f34201dc1d6b0e06a186a888a2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file sendspin_dev_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sendspin_dev_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b70681e7f39db08508f72b20854831d785566f3c82138a705289c40699e8edbc
|
|
| MD5 |
4c285a5b666d15eea66a69cb773951b0
|
|
| BLAKE2b-256 |
c6a0b569da6e5907314f78a68caeb181b70e9b8b4eb11f06596c9e13b0774b71
|
Provenance
The following attestation bundles were made for sendspin_dev_server-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on chrisuthe/Sendspin-dev-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sendspin_dev_server-0.1.0-py3-none-any.whl -
Subject digest:
b70681e7f39db08508f72b20854831d785566f3c82138a705289c40699e8edbc - Sigstore transparency entry: 870880637
- Sigstore integration time:
-
Permalink:
chrisuthe/Sendspin-dev-server@1564303d549101f34201dc1d6b0e06a186a888a2 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/chrisuthe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1564303d549101f34201dc1d6b0e06a186a888a2 -
Trigger Event:
release
-
Statement type: