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
Metadata
Release files for sendspin-dev-server 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sendspin_dev_server-0.1.0.tar.gz | 93.5 kB | With provenance | Details for sendspin_dev_server-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sendspin_dev_server-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for sendspin_dev_server-0.1.0-py3-none-any.whl |
Total release size: 121.8 kB
Release files / sendspin_dev_server-0.1.0.tar.gz
| Download URL | sendspin_dev_server-0.1.0.tar.gz |
|---|---|
| Size | 93.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e3bcbc4c7e2343f4664036a851a139db44dbed1a873d13bc6615eb8856cc2d91
|
|
BLAKE2b-256 checksum How to use checksums |
b88579cc1bb87f79ec0c519e2e7744d780a25353022315865210b999be475732
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 29, 2026.
Transparency logRelease files / sendspin_dev_server-0.1.0-py3-none-any.whl
| Download URL | sendspin_dev_server-0.1.0-py3-none-any.whl |
|---|---|
| Size | 28.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b70681e7f39db08508f72b20854831d785566f3c82138a705289c40699e8edbc
|
|
BLAKE2b-256 checksum How to use checksums |
c6a0b569da6e5907314f78a68caeb181b70e9b8b4eb11f06596c9e13b0774b71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 29, 2026.
Transparency logSecurity for sendspin-dev-server 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for sendspin_dev_server-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.