A graphical user interface for Orpheus-dl that makes queuing up multiple downloads and browsing for tracks, albums, and playlists easier and more intuitive. This project leverages the Orpheus-dl Python API to provide a modern, user-friendly front end while preserving the rich CLI output during downloads.
This project is licensed under the MIT License - see the LICENSE file for details.
-
Search & Browse:
Perform searches by track, album, or artist. Results are displayed in a list with detailed metadata (e.g. track/album name, artist, version/edition, and media ID). -
Queue Management:
Easily add search results to a download queue using double-click or via an "Add to Queue" button. Visual indicators ("(Queued)") mark items that have already been added. -
Batch Download:
Process the entire queue at once. The CLI output is displayed in an integrated terminal area during downloads, providing real-time feedback and progress details. -
Queue Editing:
Remove items from the queue using the Delete key or a "Remove Selected" button. The search results list automatically refreshes to remove the "(Queued)" indicator for items that have been removed from the queue. -
Settings Panel:
Configure default modules for covers, lyrics, and credits. Drop-down menus allow you to choose a separate module for each (or select "Default" to use the main module). Additional settings (e.g. download path, quality) are read from the configuration file. -
Keyboard Shortcuts:
- Press Enter in the search field to initiate a search.
- Double-click search results to add them to the queue.
- Press Delete in the queue list to remove selected items.
Main Module: The main service is selected via a drop-down in the Search tab.
Third-Party Modules: The default configuration for covers, lyrics, and credits can be set in your settings file (e.g., config/settings.json) under the "global": { "module_defaults": { ... } } section. The GUI also provides drop-downs in the Settings tab to override these defaults.
- Clone or download this repository
- Copy the entire directory (or its contents) to the root of your Orpheus-dl installation
- Your directory structure should look like this:
OrpheusDL/ # Your Orpheus-dl root directory ├── orpheus.py # Orpheus-dl main file ├── orpheus/ # Orpheus-dl core folder ├── modules/ # Orpheus-dl modules ├── orpheus_gui.py # GUI entry point (from this repo) ├── core/ # GUI core components (from this repo) ├── models/ # GUI data models (from this repo) ├── config/ # GUI configuration (from this repo) ├── services/ # GUI services (from this repo) └── ui/ # GUI interface (from this repo) - Run the GUI with:
python orpheus_gui.py
When you run the GUI for the first time, it will automatically create:
default_module.txt- stores your default module selectionconfig/settings.json- Orpheus-dl configuration (if it doesn't exist)
Note: The GUI reads from the same config/settings.json that Orpheus-dl uses, so your existing settings are preserved.
-
Orpheus-dl:
Your application relies on Orpheus-dl being installed. Make sure you have a working Orpheus-dl installation (including theorpheus.pyfile and the accompanyingorpheus/folder). You can clone or download Orpheus-dl from its GitHub repository. -
Python: The application requires Python 3.7 or later. (Tkinter is used for the GUI and is typically included with standard Python distributions.)
This application uses a modular architecture for better maintainability:
orpheus_gui.py- Main entry point (run this file)core/- Orpheus API integration and type definitionsmodels/- Queue management and search result handlingconfig/- Configuration file managementservices/- Download orchestration and command executionui/- User interface components and tab layouts
The original single-file version is preserved as orpheus_gui_legacy.py if needed for reference.
If you were using the old single-file version:
- The new version is fully compatible - no configuration changes needed
- Your existing
default_module.txtandconfig/settings.jsonwill work as-is - Simply replace
orpheus_gui.pywith the new directory structure - The functionality is identical, just better organized
Problem: You get errors like ModuleNotFoundError: No module named 'core' or ImportError: cannot import name 'OrpheusGUI'
Solution: Make sure you copied all directories (core/, models/, config/, services/, ui/) to your Orpheus-dl root directory, not just orpheus_gui.py.
Problem: The application shows an initialization error on startup.
Solution: Verify that:
- You're running the GUI from the Orpheus-dl root directory
- The
orpheus.pyfile exists in the same directory - The
orpheus/folder exists and containscore.py
Problem: The window doesn't appear or closes right away.
Solution:
- Make sure Python 3.7+ is installed:
python --version - Verify Tkinter is available:
python -m tkinter(should open a test window) - Check for error messages in the terminal/console
The legacy single-file version is available as orpheus_gui_legacy.py if you need it.
Orpheus-dl: The underlying CLI tool and Python API by OrfiTeam/OrpheusDL Tkinter: For providing the GUI framework. Thanks to everyone who contributed ideas and feedback!