Mornye, as a Python package.
Mornye Python puts the metadata, tagging and lyrics engine into your own code. Run it from a script, a terminal, a browser tab or Docker, with providers you add yourself as extensions.
import asyncio
from mornye import AsyncMornye
async def main():
async with AsyncMornye(
output_dir="./music",
services=["ext:tidal-web"],
) as client:
info, tracks = await client.get_playlist(PLAYLIST_URL)
print(f"{info['name']}: {len(tracks)} tracks")
asyncio.run(main())
For servers, scripts and your own apps
The phone and desktop apps are for opening and using. This package is for building Mornye into something else.
Sync and async APIs
Mornye for scripts and CLI wrappers. AsyncMornye for asyncio apps and web backends such as FastAPI, with one shared connection pool.
Four ways to run it
A native window with --gui, the same interface in a browser with --web, a guided terminal UI with --tui, or a standalone executable.
Extensions you choose
Nothing is bundled. Point it at a registry you trust, install the providers you want, and it falls back between them. Ed25519 signature checks are optional.
Tags and lyrics
MusicBrainz enrichment and synced lyrics, embedded and as .lrc, word by word where the source has it. Karaoke takes and covers from the wrong artist are rejected.
Library tools
Find duplicates by acoustic fingerprint, re-fetch files below a target quality, import a playlist from a CSV and see your library as numbers in the dashboard.
Made to run unattended
Docker, watch mode, artist follows, webhook and ntfy notifications, a durable SQLite queue and a versioned REST API with per-account quotas.
- Windows
- macOS
- Linux
Made by Bartolo
Mornye Python is built and maintained by Bartolo (@BartolomeoRusso9), not by the developer of the phone and desktop apps. Bartolo wrote most of its code, leads its development and is now part of the Mornye organization on GitHub.
Bugs and ideas for the Python package go to its own issue tracker.
Common questions
I installed it. Why can it only read metadata?expand_more
Mornye Python ships with no provider and no default extension source. Add a registry you trust, then install at least one extension. The Extensions guide walks through it.
Should I use this or the apps?expand_more
For personal use with no code, the phone app or desktop app is simpler. Pick the Python package for servers, NAS boxes, scheduled jobs, your own apps or anything that runs without a screen.
Which API should I start with?expand_more
Mornye is synchronous and fits scripts and automation. AsyncMornye runs on asyncio and fits web backends and other async apps. The API reference covers both.
How do I run the Linux executable?expand_more
Mark it as executable with chmod +x Mornye-Linux-x86_64, then run it with a link and an output folder. ARM boards such as a Raspberry Pi use Mornye-Linux-arm64.
Can I open the web interface from another device?expand_more
By default --web listens on this machine only. Before you bind it to your network, set --web-token or turn on --web-multiuser, and put HTTPS in front of it.
Where do I report a problem?expand_more
In the Mornye Python issue tracker. Bartolo maintains this package, so issues about the phone or desktop apps belong in their own repositories.
Is it open source?expand_more
Yes. Mornye Python is released under the MIT License, and all of its code is public in the repository.