# Mopidy

Mopidy is an extensible music server written in Python.

Mopidy plays music from local disk, Spotify, SoundCloud, Google Play Music, and more. You edit the playlist from any phone, tablet, or computer using a range of MPD and web clients.

Stream music from the cloud

Vanilla Mopidy only plays music from your local disk and radio streams. Through extensions, Mopidy can play music from cloud services like Spotify, SoundCloud, and Google Play Music. With Mopidy's extension support, backends for new music sources can be easily added.

Mopidy is just a server

Mopidy is a Python application that runs in a terminal or in the background on Linux computers or Macs that have network connectivity and audio output. Out of the box, Mopidy is an MPD and HTTP server. Additional frontends for controlling Mopidy can be installed from extensions.

Everybody use their favorite client

You and the people around you can all connect their favorite MPD or web client to the Mopidy server to search for music and manage the playlist together. With a browser or MPD client, which is available for all popular operating systems, you can control the music from any phone, tablet, or computer.

Mopidy on Raspberry Pi

The Raspberry Pi is a popular device to run Mopidy on, either using Raspbian or Arch Linux. It is quite slow, but it is very affordable. In fact, the Kickstarter funded Gramofon: Modern Cloud Jukebox project used Mopidy on a Raspberry Pi to prototype the Gramofon device. Mopidy is also a major building block in the Pi Musicbox integrated audio jukebox system for Raspberry Pi.

Mopidy is hackable

Mopidy's extension support and Python, JSON-RPC, and JavaScript APIs makes Mopidy perfect for building your own hacks. In one project, a Raspberry Pi was embedded in an old cassette player. The buttons and volume control are wired up with GPIO on the Raspberry Pi, and is used to control playback through a custom Mopidy extension. The cassettes have NFC tags used to select playlists from Spotify.

Getting started

To get started with Mopidy, start by reading Installation.

Getting help

If you get stuck, you can get help at the Mopidy discussion forum. We also hang around at IRC on the `#mopidy` channel at irc.freenode.net. The IRC channel has public searchable logs.

If you stumble into a bug or have a feature request, please create an issue in the issue tracker. If you're unsure if it's a bug or not, ask for help in the forum or at IRC first. The source code may also be of help.

If you want to stay up to date on Mopidy developments, you can follow @mopidy on Twitter. There's also a mailing list used for announcements related to Mopidy and Mopidy extensions.

Usage

- Installation
  - Debian/Ubuntu: Install from apt.mopidy.com
  - Arch Linux: Install from community
  - OS X: Install from Homebrew
  - Install from source
  - Raspberry Pi
- Configuration
  - Default configuration
  - Core config section
  - Audio configuration
  - Logging configuration
  - Proxy configuration
  - Extension configuration
  - Adding new configuration values
- Running Mopidy
  - Updating the library
  - Stopping Mopidy
  - Running as a service
- Running as a service
  - Configuration
  - mopidy user
  - Subcommands
  - Service management with systemd
  - Service management on Debian
  - Service on OS X
  - Configure PulseAudio
- Advanced audio setups
  - Custom audio sink
  - Streaming through Icecast
- Troubleshooting
  - Sharing config and log output
  - Show effective configuration
  - Show installed dependencies
  - Debug logging
  - Debugging deadlocks
  - Debugging GStreamer

Extensions

- Mopidy-Local
  - Generating a local library
  - Updating the local library
  - Pluggable library support
  - Configuration
- Mopidy-File
  - Configuration
- Mopidy-M3U
  - Migrating from Mopidy-Local playlists
  - Editing playlists
  - Configuration
- Mopidy-Stream
  - Configuration
- Mopidy-HTTP
  - Hosting web clients
  - Configuration
- Mopidy-MPD
  - Limitations
  - Configuration
- Mopidy-SoftwareMixer
  - Configuration
- Mixer extensions
  - Mopidy-ALSAMixer
  - Mopidy-Arcam
  - Mopidy-dam1021
  - Mopidy-NAD
  - Mopidy-SoftwareMixer
  - Mopidy-Yamaha
- Backend extensions
  - Mopidy-AudioAddict
  - Mopidy-Banshee
  - Mopidy-Bassdrive
  - Mopidy-Beets
  - Mopidy-Dirble
  - Mopidy-dLeyna
  - Mopidy-File
  - Mopidy-GMusic
  - Mopidy-InternetArchive
  - Mopidy-Local
  - Mopidy-Local-Images
  - Mopidy-Local-SQLite
  - Mopidy-OE1
  - Mopidy-Podcast
  - Mopidy-Podcast-gpodder
  - Mopidy-Podcast-iTunes
  - Mopidy-radio-de
  - Mopidy-SomaFM
  - Mopidy-SoundCloud
  - Mopidy-Spotify
  - Mopidy-Spotify-Tunigo
  - Mopidy-Stream
  - Mopidy-Subsonic
  - Mopidy-TuneIn
  - Mopidy-VKontakte
  - Mopidy-YouTube
- Frontend extensions
  - Mopidy-EvtDev
  - Mopidy-HTTP
  - Mopidy-MPD
  - Mopidy-MPRIS
  - Mopidy-Notifier
  - Mopidy-Scrobbler
  - Mopidy-Touchscreen
  - Mopidy-TtsGpio
  - Mopidy-Webhooks
- Web extensions
  - Mopidy-API-Explorer
  - Mopidy-Local-Images
  - Mopidy-Material-Webclient
  - Mopidy-Mobile
  - Mopidy-Moped
  - Mopidy-Mopify
  - Mopidy-MusicBox-Webclient
  - Mopidy-Party
  - Mopidy-Simple-Webclient
  - Mopidy-Spotmop
  - Mopidy-WebSettings
  - Mopster
  - Mopidy-Jukepi
  - Other web clients

Clients

- HTTP clients
- MPD clients
  - MPD console clients
  - MPD graphical clients
  - MPD Android clients
  - MPD iOS clients
  - MPD web clients
- MPRIS clients
  - Ubuntu Sound Menu
  - Rygel
- UPnP clients
  - Mopidy as an UPnP MediaRenderer
  - The UPnP-Inspector client
  - Other clients

About

- Authors
- Sponsors
- Changelog
- Versioning

Development

- Contributing
  - Asking questions
  - Helping users
  - Issue guidelines
  - Pull request guidelines
- Development environment
  - Initial setup
  - Running Mopidy from Git
  - Running tests
  - Writing documentation
  - Working on extensions
  - Contribution workflow
- Release procedures
  - Creating releases
- Code style
- Extension development
  - Anatomy of an extension
  - cookiecutter project template
  - Example README.rst
  - Example setup.py
  - Example __init__.py
  - Example frontend
  - Example backend
  - Example command
  - Example web application
  - Running an extension
  - Python conventions
  - Use of Mopidy APIs
  - Logging in extensions
  - Making HTTP requests from extensions
  - Testing extensions

Reference

- Glossary
- mopidy command
  - Synopsis
  - Description
  - Options
  - Built in commands
  - Extension commands
  - Files
  - Examples
  - Reporting bugs
- API reference
  - Concepts
  - Basics
  - Web/JavaScript
  - Audio
  - Utilities
- Module reference
  - `mopidy.local` --- Local backend
  - `mopidy.mpd` --- MPD server

## Indices and tables

- Index
- Module Index