{"id":37231280,"url":"https://github.com/melodee-project/melodee","last_synced_at":"2026-01-15T03:42:43.943Z","repository":{"id":258913757,"uuid":"875799760","full_name":"melodee-project/melodee","owner":"melodee-project","description":"Industrial grade self-hosted streaming music server.","archived":false,"fork":false,"pushed_at":"2026-01-11T20:18:30.000Z","size":33167,"stargazers_count":40,"open_issues_count":10,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-11T20:24:41.721Z","etag":null,"topics":["homelab","media-server","melodee","music-server","music-streaming","opensubsonic","plex-alternative","scrobbling","self-hosted","streamer","streaming-api","streaming-audio","subsonic","subsonic-api","subsonic-server","supersonic"],"latest_commit_sha":null,"homepage":"https://melodee.org/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/melodee-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"sphildreth"}},"created_at":"2024-10-20T21:16:21.000Z","updated_at":"2026-01-10T22:19:19.000Z","dependencies_parsed_at":"2025-04-13T03:33:43.880Z","dependency_job_id":"7921e4b3-c81b-4a18-84df-a56f4cd9ac1e","html_url":"https://github.com/melodee-project/melodee","commit_stats":null,"previous_names":["sphildreth/melodee","melodee-project/melodee"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/melodee-project/melodee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melodee-project%2Fmelodee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melodee-project%2Fmelodee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melodee-project%2Fmelodee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melodee-project%2Fmelodee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/melodee-project","download_url":"https://codeload.github.com/melodee-project/melodee/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melodee-project%2Fmelodee/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homelab","media-server","melodee","music-server","music-streaming","opensubsonic","plex-alternative","scrobbling","self-hosted","streamer","streaming-api","streaming-audio","subsonic","subsonic-api","subsonic-server","supersonic"],"created_at":"2026-01-15T03:42:43.299Z","updated_at":"2026-01-15T03:42:43.933Z","avatar_url":"https://github.com/melodee-project.png","language":"C#","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"graphics/melodee_logo.png\" alt=\"Melodee Logo\" height=\"120px\" /\u003e\n\n  # Melodee\n\n  **A music system designed to manage and stream music libraries with tens of millions of songs**\n\n  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n  [![.NET](https://github.com/melodee-project/melodee/actions/workflows/dotnet.yml/badge.svg)](https://github.com/melodee-project/melodee/actions/workflows/dotnet.yml)\n  [![CodeQL](https://github.com/melodee-project/melodee/actions/workflows/codeql.yml/badge.svg)](https://github.com/melodee-project/melodee/actions/workflows/codeql.yml)\n  [![Discord](https://img.shields.io/discord/1337921126210211943)](https://discord.gg/bfMnEUrvbp)\n\n  [🌐 Try Demo](https://demo.melodee.org) • [Features](#features) • [Quick Start](#quick-start) • [Documentation](#documentation) • [Contributing](#contributing) • [Support](#support)\n\u003c/div\u003e\n\n---\n\n## 🎵 Overview\n\nMelodee is a comprehensive music management and streaming system built with .NET 10 and Blazor. It provides a complete solution for processing, organizing, and serving large music libraries through both RESTful and OpenSubsonic-compatible APIs.\n\nDesigned with homelab enthusiasts in mind, Melodee runs efficiently on a wide range of hardware from single-board computers like Raspberry Pi to full server setups, making it perfect for self-hosted music streaming in home environments.\n\n## 🌐 Try the Demo\n\nExperience Melodee before installing! Our official demo server is available at:\n\n**🎧 [https://demo.melodee.org](https://demo.melodee.org)**\n\n### Quick Start\n\n- **Login**: Username `demo` / Password `Mel0deeR0cks!`\n- **Or Register**: Create a free non-admin account (no email verification required)\n- **Reset Cycle**: All user data is purged every 24 hours at midnight UTC\n\n### What You Can Test\n\n- ✅ **Browse \u0026 Stream**: Pre-loaded sample music (permissively licensed)\n- ✅ **Create Playlists**: Build and share custom playlists\n- ✅ **Search**: Test full-text search across artists, albums, and songs\n- ✅ **Multiple Clients**: Compatible with Subsonic, OpenSubsonic, and Jellyfin clients\n- ✅ **API Explorer**: Interactive API documentation at `/scalar/v1`\n- ✅ **User Requests**: Submit requests for missing albums or songs\n\n### Demo Limitations\n\n- ❌ **No File Uploads**: Upload functionality is disabled for security\n- ❌ **No Admin Access**: Admin features are not available to demo users\n- ⚠️ **Limited Concurrent Users**: Maximum 100 simultaneous connections\n- 🔄 **24-Hour Reset**: All user accounts and data are deleted daily\n\n\u003e **Note**: The demo server is for testing only. For production use, please [install Melodee](https://melodee.org/installing/) on your own infrastructure.\n\n### Key Capabilities\n\n- **📁 Smart Media Processing**: Automatically converts, cleans, and validates inbound media\n- **🎛️ Staging Workflow**: Optional manual editing before adding to production libraries\n- **⚡ Automatic Ingestion**: Drop files → play music (validated albums flow through automatically)\n- **🔄 Automated Jobs**: Cron-based scheduling with intelligent job chaining\n- **📝 User Requests**: Submit and track requests for missing albums/songs, with automatic completion when matches are detected\n- **🎙️ Podcast Support**: Subscribe to podcasts, auto-download episodes, playback tracking with resume positions\n- **🎵 OpenSubsonic API**: Compatible with popular Subsonic and OpenSubsonic clients\n- **🎬 Jellyfin API**: Compatible with Jellyfin music clients (Finamp, Feishin, Streamyfin)\n- **🌐 Melodee API**: Fast RESTful API for custom integrations\n- **🌐 Modern Web UI**: Blazor Server interface with Radzen UI components\n- **🎛️ Jukebox**: Server-side playback with queue/control support (OpenSubsonic jukeboxControl; MPV/MPD backends)\n- **🎉 Party Mode**: Shared listening sessions with a collaborative queue and DJ/Listener roles\n- **🐳 Container Ready**: Full Docker/Podman support with PostgreSQL\n\n![Melodee Web Interface](graphics/Snapshot_2025-02-04_23-06-24.png)\n\n## 🎶 Music Ingestion Pipeline\n\nMelodee features a fully automated music ingestion pipeline. Simply drop your music files into the inbound folder and they'll be processed, validated, and made available for streaming—typically within 15-20 minutes.\n\n```\n┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐\n│     INBOUND     │     │     STAGING     │     │     STORAGE     │     │    DATABASE     │\n│   (Drop zone)   │────▶│    (Review)     │────▶│   (Published)   │────▶│   (Playable)    │\n│                 │     │                 │     │                 │     │                 │\n│  Drop files     │     │  Validated \u0026    │     │  Final home     │     │  Indexed \u0026      │\n│  here           │     │  ready albums   │     │  for music      │     │  streamable     │\n└─────────────────┘     └─────────────────┘     └─────────────────┘     └─────────────────┘\n        │                       │                       │                       │\n        ▼                       ▼                       ▼                       ▼\n  LibraryInbound          StagingAuto             LibraryInsert            API Clients\n    ProcessJob             MoveJob                   Job                   can stream\n   (every 10 min)        (every 15 min)          (chains auto)\n```\n\n### How It Works\n\n| Step | What Happens | Automatic? |\n|------|--------------|------------|\n| **1. Drop** | Place music files (MP3, FLAC, etc.) in the inbound folder | You do this |\n| **2. Process** | Files are scanned, metadata extracted, validated, and moved to staging | ✅ Automatic |\n| **3. Review** | Albums marked \"Ok\" are automatically promoted; others await manual review | ✅ Automatic for valid albums |\n| **4. Move** | Validated albums move from staging to storage library | ✅ Automatic |\n| **5. Index** | Albums in storage are indexed into the database | ✅ Automatic |\n| **6. Stream** | Music is available via OpenSubsonic API and web player | Ready to play! |\n\n### Automatic vs Manual Mode\n\n**Automatic Mode (Default)**: Jobs chain together—when one completes successfully, it triggers the next. Well-tagged music flows from inbound to playable without intervention.\n\n**Manual Mode**: Trigger jobs individually from the admin UI for troubleshooting or when you want to review albums before promotion. Manual triggers don't chain, giving you full control.\n\n### When Manual Review is Needed\n\nAlbums that don't pass validation (missing tags, artwork issues, etc.) stay in staging for manual review. You can:\n- Edit metadata and artwork in the web UI\n- Mark albums as \"Ok\" when ready\n- Use the \"Move Ok\" button to promote them\n- Delete albums that shouldn't be imported\n\n## 🚀 Quick Start\n\n### 🌐 Try the Demo First!\n\nBefore installing, test drive Melodee on our demo server:\n\n👉 **[https://demo.melodee.org](https://demo.melodee.org)** (Username: `demo`, Password: `Mel0deeR0cks!`)\n\n### Automated Setup (Recommended)\n\n```bash\ngit clone https://github.com/melodee-project/melodee.git\ncd melodee\npython3 scripts/run-container-setup.py --start\n```\n\nThe script handles preflight checks, runtime detection, secure configuration, building, and startup.\n\n📖 **Full installation guide**: [melodee.org/installing](https://melodee.org/installing/)\n\n### 📦 Updating Melodee\n\n```bash\ncd melodee\ngit pull\npython3 scripts/run-container-setup.py --update\n```\n\nYour data (database, music library, playlists) is preserved during updates. Database migrations run automatically.\n\n📖 **Full upgrade guide**: [melodee.org/upgrade](https://melodee.org/upgrade/)\n\n## 🏠 Homelab Deployment\n\nMelodee is designed to run in homelab environments with support for various hardware configurations:\n\n- **Single Board Computers**: Raspberry Pi 4/5, Rock 5B, Odroid N2+\n- **Home Servers**: Intel NUC, custom builds, used desktops\n- **NAS Integration**: Mount external storage for large music collections\n- **Container Orchestration**: Docker Compose, Podman Compose, or Docker Swarm\n\n📖 **Deployment guides**: [melodee.org/installing](https://melodee.org/installing/) | [melodee.org/upgrade](https://melodee.org/upgrade/)\n\n### 🗂️ Volume Management\n\nMelodee uses several persistent volumes for data storage:\n\n| Volume | Purpose | Description |\n|--------|---------|-------------|\n| `melodee_data_protection_keys` | Security | ASP.NET Core data protection keys |\n| `melodee_db_data` | Database | PostgreSQL data |\n| `melodee_inbound` | Incoming Media | New media files to be processed |\n| `melodee_logs` | Logs | Application log files |\n| `melodee_playlists` | Playlists | Admin-defined (JSON-based) dynamic playlists |\n| `melodee_podcasts` | Podcasts | Downloaded podcast episodes |\n| `melodee_staging` | Staging Area | Media ready for manual review |\n| `melodee_storage` | Music Library | Processed and organized music files |\n| `melodee_templates` | Templates | Email and notification templates |\n| `melodee_themes` | Themes | Custom theme packs |\n| `melodee_user_images` | User Content | User-uploaded avatars |\n\nTo backup your data:\n```bash\n# Backup volumes\npodman volume export melodee_storage \u003e melodee_storage_backup.tar\npodman volume export melodee_db_data \u003e melodee_db_backup.tar\n\n# Restore volumes\npodman volume import melodee_storage melodee_storage_backup.tar\npodman volume import melodee_db_data melodee_db_backup.tar\n```\n\n## ✨ Features\n\n### 🎛️ Media Processing Pipeline\n\n1. **Inbound Processing**\n   - Converts media to standard formats\n   - Applies regex-based metadata cleanup rules\n   - Validates file integrity and metadata completeness\n   - Extracts and validates album artwork\n\n2. **Staging Management**\n   - Automatic promotion of validated (\"Ok\") albums\n   - Manual editing of metadata for albums needing review\n   - Album art management and replacement\n   - Quality control workflow with status tracking\n\n3. **Production Libraries**\n   - Automated scanning and indexing\n   - Multiple storage library support\n   - Real-time database updates\n   - Artist, album, and song relationship management\n\n### 🔄 Background Jobs\n\nMelodee includes a comprehensive job scheduling system powered by Quartz.NET:\n\n| Job | Purpose | Default Schedule |\n|-----|---------|------------------|\n| **ArtistHousekeepingJob** | Cleans up artist data and relationships | Daily at midnight |\n| **ArtistSearchEngineHousekeepingJob** | Updates artist search index | Daily at midnight |\n| **ChartUpdateJob** | Links chart entries to albums | Daily at 2 AM |\n| **LibraryInboundProcessJob** | Scans inbound, processes files to staging | Every 10 minutes |\n| **LibraryInsertJob** | Indexes storage albums into database | Daily at midnight (+ chained) |\n| **MusicBrainzUpdateDatabaseJob** | Updates local MusicBrainz cache | Monthly |\n| **NowPlayingCleanupJob** | Cleans stale now-playing entries | Every 5 minutes |\n| **PodcastCleanupJob** | Enforces retention policies on downloaded episodes | Daily at 3 AM |\n| **PodcastDownloadJob** | Downloads queued podcast episodes | Every 5 minutes |\n| **PodcastRecoveryJob** | Resets stuck downloads and cleans orphaned files | Every hour |\n| **PodcastRefreshJob** | Fetches new episodes from subscribed podcasts | Every 30 minutes |\n| **StagingAutoMoveJob** | Moves \"Ok\" albums from staging to storage | Every 15 minutes (+ chained) |\n\nJobs can be manually triggered, paused, or monitored from the admin UI at `/admin/jobs`.\n\n### 🔍 Melodee Query Language (MQL)\n\nMQL is a powerful query language for advanced music library searches. Access it via the **Advanced** button in the Search page.\n\n**Syntax highlights:**\n- **Field-specific search**: `artist:\"Pink Floyd\" album:\"The Wall\"`\n- **Numeric comparisons**: `year:\u003e=2000 rating:\u003e3 duration:\u003c300`\n- **Date ranges**: `added:last-week lastPlayedAt:-30d`\n- **Boolean logic**: `(rock OR metal) AND NOT live`\n- **Regex patterns**: `title:/.*remix.*/i`\n\n**Example queries:**\n```\n# Find highly-rated jazz you haven't heard recently\ngenre:Jazz rating:\u003e=4 lastPlayedAt:\u003c-90d\n\n# Pink Floyd albums from the 70s\nartist:\"Pink Floyd\" year:1970-1979\n\n# Recently added music you haven't played yet\nadded:-7d plays:0\n```\n\nSee the full [MQL Documentation](https://melodee.org/mql/) for complete field reference and examples.\n\n### 🔌 Plugin Architecture\n\n- **Media Format Support**: AAC, AC3, M4A, FLAC, OGG, APE, MP3, WAV, WMA, and more\n- **Metadata Sources**: iTunes, Last.FM, MusicBrainz, Spotify, Brave Search\n- **File Parsers**: NFO, M3U, SFV, CUE sheet metadata files\n\n### 🌍 Multi-Language Support\n\nMelodee features comprehensive localization with support for 10 languages:\n\n| Language | Code | Status | RTL |\n|----------|------|--------|-----|\n| English (US) | en-US | ✅ 100% | - |\n| Arabic | ar-SA | 🔄 29% | ✅ |\n| Chinese (Simplified) | zh-CN | 🔄 35% | - |\n| French | fr-FR | 🔄 34% | - |\n| German | de-DE | 🔄 39% | - |\n| Italian | it-IT | 🔄 38% | - |\n| Japanese | ja-JP | 🔄 34% | - |\n| Portuguese (Brazil) | pt-BR | 🔄 39% | - |\n| Russian | ru-RU | 🔄 35% | - |\n| Spanish | es-ES | 🔄 35% | - |\n\n- **Language Selector**: Available in the header for quick switching\n- **User Preference**: Language choice is saved to your user profile and persists across sessions\n- **RTL Support**: Full right-to-left layout support for Arabic\n\n#### 🌐 Help Translate Melodee!\n\nWe welcome translation contributions from the community! Strings marked with `[NEEDS TRANSLATION]` in the resource files need native speaker review.\n\n**How to contribute translations:**\n\n1. Find your language file in `src/Melodee.Blazor/Resources/SharedResources.\u003ccode\u003e.resx`\n2. Search for `[NEEDS TRANSLATION]` entries\n3. Replace the placeholder with your native translation\n4. Submit a pull request\n\nResource files are standard .NET `.resx` XML format. You can edit them with any text editor or Visual Studio's resource editor.\n\n**Current translation needs:** ~965-1,123 strings per language need native translations (out of 1,577 total). See [Contributing Guide](CONTRIBUTING.md) for details.\n\n### 🌐 OpenSubsonic API\n\nFull compatibility with Subsonic 1.16.1 and OpenSubsonic specifications:\n\n- Real-time transcoding (including OGG and Opus)\n- Playlist management\n- User authentication and permissions\n- Album art and metadata serving\n- Scrobbling support (Last.fm)\n\n#### OpenSubsonic Compatibility Matrix\n\nSee the [OpenSubsonic Compatibility Matrix](https://melodee.org/opensubsonic-matrix) for detailed endpoint support, client compatibility, and known limitations.\n\n#### Tested OpenSubsonic Clients\n\n- [MeloAmp (desktop)](https://github.com/melodee-project/meloamp)\n- [Melodee Player (Android Auto)](https://github.com/melodee-project/melodee-player)\n- [Airsonic (refix)](https://github.com/tamland/airsonic-refix)\n- [Dsub](https://github.com/DataBiosphere/dsub)\n- [Feishin](https://github.com/jeffvli/feishin)\n- [Symphonium](https://symfonium.app/)\n- [Sublime Music](https://github.com/sublime-music/sublime-music)\n- [Supersonic](https://github.com/dweymouth/supersonic)\n- [Ultrasonic](https://gitlab.com/ultrasonic/ultrasonic)\n\n### 🎬 Jellyfin API\n\nMelodee provides a Jellyfin-compatible API that allows popular Jellyfin music clients to connect:\n\n- Full media browsing (artists, albums, songs)\n- Streaming with transcoding support\n- Playlist management\n- Favorites and play state tracking\n- Session and playback reporting\n- Instant mix generation\n\n#### Tested Jellyfin Clients\n\n- [Finamp](https://github.com/jmshrv/finamp) - iOS, Android, Desktop\n- [Feishin](https://github.com/jeffvli/feishin) - Desktop (Jellyfin mode)\n- [Streamyfin](https://github.com/streamyfin/streamyfin) - iOS, Android\n- [Gelli](https://github.com/dkanada/gelli) - Android\n\n### 📝 Custom Blocks\n\nAdd custom Markdown content to pages for branding, announcements, or policies:\n\n- **Flexible Placement**: Top and bottom slots on login, register, forgot-password, and reset-password pages\n- **Markdown Support**: Write content in Markdown with automatic HTML rendering\n- **Security First**: Strict HTML sanitization prevents XSS attacks and injection\n- **Auto-Caching**: File-based caching with automatic invalidation on changes\n- **Zero Configuration**: Drop `.md` files in `${MELODEE_DATA_DIR}/custom-blocks/{page}/{slot}.md` and they appear instantly\n\nPerfect for terms of service links, support contact information, or custom branding messages.\n\n### 🔐 Authentication\n\nMelodee supports multiple authentication methods:\n\n- **Username/Password**: Traditional authentication with JWT tokens\n- **Google Sign-In**: OAuth 2.0 authentication via Google (configurable)\n\n#### API Authentication\n\nAll API endpoints (except public endpoints) require a Bearer token:\n\n```bash\ncurl -H \"Authorization: Bearer \u003cJWT_TOKEN\u003e\" https://your-server/api/v1/albums\n```\n\n#### Token Refresh\n\nMelodee implements secure token rotation:\n- **Access tokens**: Short-lived (15 minutes default)\n- **Refresh tokens**: Long-lived (30 days default) with automatic rotation\n\n#### Google Sign-In Configuration\n\nTo enable Google Sign-In, configure the following in `appsettings.json`:\n\n```json\n{\n  \"Auth\": {\n    \"Google\": {\n      \"Enabled\": true,\n      \"ClientId\": \"your-google-client-id.apps.googleusercontent.com\",\n      \"AllowedHostedDomains\": [],\n      \"AutoLinkEnabled\": false\n    },\n    \"SelfRegistrationEnabled\": true\n  }\n}\n```\n\nFor API documentation including authentication endpoints, access `/scalar/v1` on a running instance. Download the OpenAPI specification at `/openapi/v1.json`. For OpenSubsonic API, refer to the [OpenSubsonic specification](https://opensubsonic.netlify.app/).\n\n## 🏗️ Architecture\n\n### Components\n\n| Component | Description | Technology |\n|-----------|-------------|------------|\n| **Melodee.Blazor** | Web UI and OpenSubsonic API server | Blazor Server, Radzen UI |\n| **Melodee.Cli** | Command-line interface | .NET Console App |\n| **Melodee.Common** | Shared libraries and services | .NET Class Library |\n\n### System Requirements\n\n- **.NET 10.0** or later\n- **PostgreSQL 17** (included in container deployment)\n- **2GB RAM** minimum (4GB recommended)\n- **Storage**: Varies based on music library size\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/melodee-project/melodee.git\n   cd melodee\n   ```\n\n2. **Install .NET 10 SDK**\n   ```bash\n   # Follow instructions at https://dotnet.microsoft.com/download\n   ```\n\n3. **Run locally**\n   ```bash\n   dotnet run --project src/Melodee.Blazor\n   ```\n\n### Code of Conduct\n\nThis project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md).\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 💬 Support\n\n- **Melodee Music System**: [Home](https://melodee.org)\n- **Discord**: [Join our community](https://discord.gg/bfMnEUrvbp)\n- **Issues**: [GitHub Issues](https://github.com/melodee-project/melodee/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/melodee-project/melodee/discussions)\n\n## 📚 Documentation\n\nFor comprehensive documentation, including installation guides, configuration options, homelab deployment strategies, and API references, visit [https://www.melodee.org](https://www.melodee.org).\n\n## 🙏 Acknowledgments\n\n- Built with [.NET 10](https://dotnet.microsoft.com/)\n- UI powered by [Radzen Blazor Components](https://blazor.radzen.com/)\n- Job scheduling by [Quartz.NET](https://www.quartz-scheduler.net/)\n- Compatible with [OpenSubsonic](https://opensubsonic.netlify.app/) specification\n- Music metadata from [MusicBrainz](https://musicbrainz.org/), [Last.FM](https://last.fm/), [Spotify](https://spotify.com/), and [Brave Search](https://brave.com/search/api/)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  Made with ❤️ by the Melodee community\n\u003c/div\u003e\n","funding_links":["https://ko-fi.com/sphildreth"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelodee-project%2Fmelodee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmelodee-project%2Fmelodee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelodee-project%2Fmelodee/lists"}