Winamp MPRIS Bridge

A Python-based bridge that provides an MPRIS2 interface for Winamp/WACUP on Linux (running via Wine/Proton). This allows Linux desktop environments (like KDE Plasma, GNOME, or any MPRIS-compatible media widget) to control playback and display track metadata.

Features

  • Metadata Extraction: Primarily uses the Winamp window title for high-fidelity metadata (Artist, Album, Title).
  • Playback Controls: Supports Play, Pause, Next, Previous, and Stop via the Winamp Web Interface.
  • Live Position Tracking: Extrapolates playback position for smooth progress bars in your desktop's media widget.
  • Robustness: Gracefully handles Winamp being offline and automatically reconnects when it starts.
  • Systemd Integration: Can be run as a background user service conforming to XDG standards.
  • XDG Compliance: Installs to ~/.local/bin, logs to ~/.local/state/winamp-mpris/, and stores PID in $XDG_RUNTIME_DIR.

Prerequisites

1. Winamp Web Interface Plugin

The bridge communicates with Winamp through the Winamp Web Interface plugin.

  • Download: Winamp Web Interface v7.5.10 (Source included in repository).
  • Installation: Install the plugin in Winamp/WACUP.
  • Configuration:
    1. Open Winamp Preferences -> Plug-ins -> General Purpose.
    2. Configure "Winamp Web Interface".
    3. Set a Username (default: winamp) and Password (default: llama).
    4. Ensure the server is running (default port: 5666).
    5. In the Users tab, ensure the user has Play permissions.

2. Winamp/WACUP Title Formatting

To ensure the bridge can extract correct metadata, you must configure Winamp to show specific information in its window title.

  • Open Winamp Preferences -> Titles.
  • Set the Taskbar/Window title format to:
    %artist%%album%%title% | %playback_time%/%length% - Winamp
    
    (Note: The separator between Artist, Album, and Title should be an en-dash or a simple dash -).

3. Linux Dependencies

Install the required Python libraries, wmctrl, and libnotify (for notifications):

# Python dependencies
pip install requests pydbus beautifulsoup4 pygobject

# System tools
sudo dnf install wmctrl libnotify  # or sudo apt install wmctrl libnotify

Installation & Setup

The project includes an XDG-compliant installer:

chmod +x install.sh
./install.sh

This will:

  1. Install the script to ~/.local/bin/winamp-mpris.
  2. Install and enable the systemd user service winamp-mpris.service.
  3. Start the bridge immediately.

Logs and Monitoring

  • Logs: tail -f ~/.local/state/winamp-mpris/bridge.log
  • Systemd Logs: journalctl --user -u winamp-mpris.service -f
  • PID File: $XDG_RUNTIME_DIR/winamp-mpris.pid

Testing with busctl

You can manually interact with the MPRIS interface:

# Get playback status
busctl --user get-property org.mpris.MediaPlayer2.winamp /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player PlaybackStatus

# Send commands
busctl --user call org.mpris.MediaPlayer2.winamp /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player PlayPause

Technical Details

  • D-Bus Bus: org.mpris.MediaPlayer2.winamp
  • Object Path: /org/mpris/MediaPlayer2
  • Polling Rate: 1 second (updates metadata from window title and checks Web UI for status).

Troubleshooting

  • 401 Unauthorized: Ensure the Winamp Web Interface credentials match those in winamp-mpris and that the user has "Play" permissions in the plugin's Users tab.
  • Controls not working: Ensure the Winamp Web Interface is accessible at http://localhost:5666.
  • No Metadata: Ensure wmctrl -l can see the Winamp window and the title matches the expected format.
  • KDE Plasma 6: If using Plasma 6 on Wayland, you may need to grant "Remote Control" permissions when prompted.
Description
Daemon for integrating Winamp/WACUP with mpris media controls on Linux (KDE).
Readme 10 MiB
Languages
C++ 81.3%
Python 9%
C 8.4%
HTML 0.8%
Shell 0.5%