Mopidy plugin for Songhive instances
  • Python 99.9%
  • Shell 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Fabio Manganiello 6e8d8ea875
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
Bump version: 0.1.3 → 0.1.4
2026-09-26 21:23:15 +02:00
.drone fix: correct twine upload artifact glob 2026-09-20 01:14:51 +02:00
mopidy_songhive Bump version: 0.1.3 → 0.1.4 2026-09-26 21:23:15 +02:00
tests perf: add persistent metadata cache and parallelize lookups 2026-09-20 20:53:57 +02:00
.drone.yml chore(ci): install girepository deps for backend tests 2026-09-20 00:57:14 +02:00
.gitignore feat: add Mopidy Songhive extension with CI and packaging 2026-09-20 00:39:03 +02:00
.pre-commit-config.yaml feat: add Mopidy Songhive extension with CI and packaging 2026-09-20 00:39:03 +02:00
CHANGELOG.md Bump version: 0.1.3 → 0.1.4 2026-09-26 21:23:15 +02:00
LICENSE feat: add Mopidy Songhive extension with CI and packaging 2026-09-20 00:39:03 +02:00
MANIFEST.in feat: add Mopidy Songhive extension with CI and packaging 2026-09-20 00:39:03 +02:00
pyproject.toml Bump version: 0.1.3 → 0.1.4 2026-09-26 21:23:15 +02:00
README.md perf: add persistent metadata cache and parallelize lookups 2026-09-20 20:53:57 +02:00
setup.cfg feat: add Mopidy Songhive extension with CI and packaging 2026-09-20 00:39:03 +02:00

Mopidy-Songhive

Mopidy extension for playing music from a Songhive instance.

Features

  • Browse libraries, playlists, artists, albums, genres and tags
  • Followed podcasts exposed in their own folder, one sub-folder per show; episodes stream straight from the source enclosure URL
  • Favorite tracks exposed as a browsable folder
  • Full text search across tracks, albums and artists (plus cached federated objects)
  • Playlist editing: create, delete, rename, add/remove/reorder tracks
  • Streams through Songhive's /api/v1/stream/{track_id} endpoint, including optional server-side transcoding
  • Federated content: remote objects resolve and play through the instance's remote lookup
  • Direct URL lookup — paste any Songhive or federated URL prefixed with songhive: (e.g. songhive:https://music.example.com/tracks/abc123)
  • Track metadata is cached on disk and seeded straight from collection listings, so queueing a browsed album, playlist or podcast needs no extra requests; metadata is re-fetched when a track plays to stay fresh, and the remaining lookups run concurrently

Requirements

  • Mopidy >= 4.0
  • Python >= 3.9

Installation

Install by running:

pip install mopidy-songhive

Or install the development version:

pip install -e .

Configuration

Add the extension to your mopidy.conf:

[songhive]
enabled = true
hostname = https://music.example.com
api_token = <your api token>

api_token is optional: without it the extension runs anonymously and only sees public content; playlists and favorites become read-only. Create a token on the Songhive web interface under Settings → API tokens. Tokens are sent as Authorization: Bearer headers and, for audio streaming, injected into GStreamer's HTTP source — they are only ever sent to the configured hostname.

Additional options:

# Comma-separated allowlist of library names to show (default: all)
libraries = Music, Audiobooks

# Format for displaying album names (default: {title})
album_format = {title} ({release_year})

# Optional server-side transcoding for streams
transcode_format = opus     # mp3|ogg|flac|aac|opus
transcode_bitrate = 128     # kbps

URI scheme

songhive:track:123, songhive:album:123, songhive:artist:123, songhive:playlist:123, songhive:library:123, songhive:genre:rock, songhive:tag:favorites, songhive:podcast:123 / songhive:podcast_episode:123 for podcasts, songhive:remote:<object_id> for federated content, and songhive:<http(s) url> for direct URL lookups.