Skip to main content

Minimal Squeezebox player for Lyrion Music Server

Project description

Squeezy

Minimal Squeezebox-compatible player for Lyrion Music Server (formerly Logitech Media Server). Advertises as a player on your network, receives streaming audio, and plays it back through your default audio output. Supports synchronized playback with other players.

Requirements

  • macOS, Linux, or Windows
  • Python 3.9+
  • ffmpeg

Install

Pick whichever method suits you. All three result in a squeezy command on your PATH.

Option 1: pipx (recommended)

# macOS
brew install ffmpeg pipx
pipx install squeezy

# Debian/Ubuntu
sudo apt install ffmpeg pipx
pipx install squeezy

Option 2: Homebrew tap (macOS only)

brew tap catcatcatcatcatcatcatcatcatcat/tap
brew install squeezy

This installs ffmpeg automatically as a dependency.

Option 3: From source

git clone https://github.com/catcatcatcatcatcatcatcatcatcat/squeezy.git
cd squeezy
python3 -m venv .venv
source .venv/bin/activate
pip install .

For development (run directly without installing):

./run.sh -n "My Speaker" -vv

Squeezy checks for updates on startup and will notify you when a new version is available.

Usage

# Auto-discover server on local network
squeezy

# Specify server and player name
squeezy -s 192.168.1.100 -n "Kitchen Speaker"

# Custom MAC address (for persistent player identity)
squeezy -m aa:bb:cc:dd:ee:ff

# List available audio output devices
squeezy -l

# Use a specific audio output (substring match, case-insensitive)
squeezy -d "HDMI" -n "Living Room"

# Verbose logging (connection, playback events, volume changes)
squeezy -v

# Debug logging (protocol-level detail: strm commands, STAT packets)
squeezy -vv

# Check installed version
squeezy --version

Your player will appear in the Lyrion Music Server web UI. Select it from the player dropdown to start streaming.

Project Structure

src/squeezy/
├── squeezy.py              # Main player orchestrator & audio pipeline
├── audio/
│   └── stream_decoder.py   # Thread-safe PCMBuffer
├── protocol/
│   ├── handler.py          # SlimProto message handlers (strm, audg, setd, etc.)
│   ├── slimproto.py        # Protocol constants & packet builders
│   └── lms_client.py       # LMS message operations
├── network/
│   ├── server_connection.py # TCP/UDP socket management & discovery
│   ├── lms_metadata.py     # LMS JSON-RPC track metadata queries
│   └── status_server.py    # Unix socket status server
└── config/
    ├── config.py           # XDG-compliant config persistence
    └── metadata.py         # ICY metadata & LAME gapless parsing

Contributing

See DEVELOPER.md for a full walkthrough of the repo structure, how to set up a dev environment, and how to cut a release.

How it works

Squeezy implements the SlimProto protocol to communicate with Lyrion Music Server:

  1. Discovers the server via UDP broadcast on port 3483
  2. Registers as a player via TCP (HELO packet)
  3. Receives stream commands from the server
  4. Fetches audio via HTTP, decodes with ffmpeg, outputs via miniaudio
  5. Reports playback status back to the server for sync coordination

Uninstall

# If installed via pipx
pipx uninstall squeezy

# If installed via Homebrew
brew uninstall squeezy
brew untap catcatcatcatcatcatcatcatcatcat/tap

Releasing (for maintainers)

See DEVELOPER.md for the full release process. The short version: bump version in pyproject.toml, tag, build, upload to PyPI, update the Homebrew tap.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

squeezy-0.4.0.tar.gz (57.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

squeezy-0.4.0-py3-none-any.whl (50.6 kB view details)

Uploaded Python 3

File details

Details for the file squeezy-0.4.0.tar.gz.

File metadata

  • Download URL: squeezy-0.4.0.tar.gz
  • Upload date:
  • Size: 57.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for squeezy-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8028bed82e93fe350a61e7d9d55e47df8ae8c65401a4f23d3c6d67d9fec0044e
MD5 f98ebc911b2d205209765eaae13c9257
BLAKE2b-256 0ce19a853bcf69aa52adf7c473d12394fea77703ef4f35f99be869193a9defcb

See more details on using hashes here.

File details

Details for the file squeezy-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: squeezy-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 50.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for squeezy-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9f948bfb27638ecf2120f26feff84d02670d98f7b0703a650abce35c4721370e
MD5 5d5d2ae18386ddb2702e0b3a8ae158a4
BLAKE2b-256 a9b0e4e817202d5199d052c400773f296d46afcda70730ed10e5e3125fade6fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page