{"id":49377288,"url":"https://github.com/biggiesmallcap-blip/noorwave","last_synced_at":"2026-05-31T12:00:56.031Z","repository":{"id":354305113,"uuid":"1203570172","full_name":"biggiesmallcap-blip/NOORwave","owner":"biggiesmallcap-blip","description":"Self-hosted TIDAL command center in Rust + SvelteKit. Hi-fi gapless playback, local library sync, learned discovery engine, Song Radio, Genre Galaxy (285 genres), automix with Camelot harmonic mixing, smart playlists, DSP audio analysis (BPM/key/energy), Ctrl+K command palette, LAN access, Tauri desktop app.","archived":false,"fork":false,"pushed_at":"2026-05-24T01:29:55.000Z","size":79343,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-24T02:24:26.598Z","etag":null,"topics":["audio-analysis","desktop-app","hifi","lan","lan-access","music","music-discovery","music-metadata","music-player","musicvideo","recommender-system","remote","roon","rust","self-hosted","sqlite","svelte","tauri","tidal","video"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/biggiesmallcap-blip.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"biggiesmallcap","thanks_dev":null,"custom":null}},"created_at":"2026-04-07T06:50:51.000Z","updated_at":"2026-05-24T01:23:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"8d47a2af-6a6d-4a36-b8af-8c6e45ebc787","html_url":"https://github.com/biggiesmallcap-blip/NOORwave","commit_stats":null,"previous_names":["biggiesmallcap-blip/noorwave"],"tags_count":53,"template":false,"template_full_name":null,"purl":"pkg:github/biggiesmallcap-blip/NOORwave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggiesmallcap-blip%2FNOORwave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggiesmallcap-blip%2FNOORwave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggiesmallcap-blip%2FNOORwave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggiesmallcap-blip%2FNOORwave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/biggiesmallcap-blip","download_url":"https://codeload.github.com/biggiesmallcap-blip/NOORwave/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biggiesmallcap-blip%2FNOORwave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33730241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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":["audio-analysis","desktop-app","hifi","lan","lan-access","music","music-discovery","music-metadata","music-player","musicvideo","recommender-system","remote","roon","rust","self-hosted","sqlite","svelte","tauri","tidal","video"],"created_at":"2026-04-28T03:06:32.284Z","updated_at":"2026-05-31T12:00:56.016Z","avatar_url":"https://github.com/biggiesmallcap-blip.png","language":"Rust","funding_links":["https://buymeacoffee.com/biggiesmallcap"],"categories":[],"sub_categories":[],"readme":"# NOORwave\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"1280\" height=\"640\" alt=\"NOORwave product card\" src=\"frontend/static/social/source-animated.svg\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA local-first hi-fi command center for your TIDAL library.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Lossless playback \u0026middot; library intelligence \u0026middot; DJ and radio tools \u0026middot; desktop plus phone remote\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"../../releases/latest\"\u003eDownload latest release\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#run-from-source\"\u003eRun from source\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#release-checklist\"\u003eRelease checklist\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Rust-2024-orange?style=flat-square\u0026logo=rust\" alt=\"Rust\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/SvelteKit-5-ff3e00?style=flat-square\u0026logo=svelte\" alt=\"SvelteKit\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Tauri-2-ffc131?style=flat-square\u0026logo=tauri\" alt=\"Tauri\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/SQLite-3-003b57?style=flat-square\u0026logo=sqlite\" alt=\"SQLite\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"MIT\"/\u003e\n\u003c/p\u003e\n\n## What It Is\n\nNOORwave is a desktop TIDAL player built around a simple idea: your streaming library should behave like a fast local music collection.\n\nIt syncs your TIDAL library into SQLite, gives you a real desktop app with tray and media-key support, adds lossless playback controls, and lets you shape the queue with search, radio, automix, DJ profiles, and a phone remote. The backend runs locally on your machine, so the app can stay quick, inspectable, and useful even when the library gets large.\n\n## Product Tour\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\"docs/assets/screenshot-home.png\"\u003e\u003cimg src=\"docs/assets/screenshot-home.png\" alt=\"Home screen\" width=\"100%\"/\u003e\u003c/a\u003e\n      \u003cbr/\u003e\u003csub\u003e\u003cstrong\u003eHome\u003c/strong\u003e - daily listening, recently played, new releases, now playing.\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\"docs/assets/screenshot-search.png\"\u003e\u003cimg src=\"docs/assets/screenshot-search.png\" alt=\"Search screen\" width=\"100%\"/\u003e\u003c/a\u003e\n      \u003cbr/\u003e\u003csub\u003e\u003cstrong\u003eSearch\u003c/strong\u003e - local library, TIDAL catalog, filters, queue actions.\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\"docs/assets/screenshot-discover.png\"\u003e\u003cimg src=\"docs/assets/screenshot-discover.png\" alt=\"Discover screen\" width=\"100%\"/\u003e\u003c/a\u003e\n      \u003cbr/\u003e\u003csub\u003e\u003cstrong\u003eDiscover\u003c/strong\u003e - learned similarity, blend discovery, song radio.\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\"docs/assets/screenshot-automix.png\"\u003e\u003cimg src=\"docs/assets/screenshot-automix.png\" alt=\"Automix screen\" width=\"100%\"/\u003e\u003c/a\u003e\n      \u003cbr/\u003e\u003csub\u003e\u003cstrong\u003eDJ tools\u003c/strong\u003e - automix, harmonic matching, queue control.\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Core Capabilities\n\n| Area | What NOORwave does |\n|---|---|\n| Library | Incremental TIDAL sync, local search, artist and album pages, playlists, duplicate detection, MusicBrainz and Last.fm enrichment. |\n| Playback | Lossless TIDAL playback, DASH segment seek, gapless transitions, crossfade, queue undo, shuffle modes, Windows WASAPI exclusive output. |\n| DJ and radio | Automix, Song Radio, Last.fm fallback, learned similarity, harmonic scoring, DJ profile controls, reasons on queued tracks. |\n| Discovery | Sound Space, blend discovery, training intensity tiers, safety preview, live ETA, model activation guidance. |\n| Desktop app | Tauri shell, tray controls, media keys, auto-updater, portable builds, Windows per-user installer. |\n| Phone remote | Installable `/remote` PWA for transport, queue, search, library browsing, action sheets, sleep timer. |\n| Video | TIDAL video search and in-app HLS playback with quality selector and autoplay. |\n\n## Why NOORwave\n\nNOORwave is for people who like TIDAL's catalog but want a better command center around it.\n\n- **TIDAL feels local.** Your saved tracks, albums, artists, playlists, and metadata live in a local database, so search and browsing do not feel trapped behind a remote app shell.\n- **Playback is treated as the product.** Lossless streaming, DASH seek behavior, gapless transitions, crossfade, media keys, tray controls, and Windows WASAPI exclusive mode are built into the core player.\n- **The queue is yours.** Play next, append, reorder, save, undo clear, shuffle by intent, inspect radio reasons, and keep automix from fighting your manual choices.\n- **DJ mode is a control surface, not a gimmick.** Profiles, harmonic matching, BPM and energy awareness, transition planning, and automix controls are there for shaping a session, not just filling silence.\n- **The phone remote makes it practical.** Open `/remote` from a phone on the LAN and control playback, queue, search, library pages, sleep timer, and track actions from the couch.\n\nThe point is not every integration NOORwave can talk to. The point is a faster, more controllable TIDAL setup for people who actively listen, build queues, and care how playback moves from one track to the next.\n\n## Download\n\nThe latest public build is on [GitHub Releases](../../releases/latest).\n\n| Platform | Artifact | Notes |\n|---|---|---|\n| Windows | `NOORwave-vX.Y.Z-windows-x64-setup.exe` | Per-user installer. Installs to `%LOCALAPPDATA%\\Programs\\NOORwave`. Updates in place from signed Tauri updater metadata. |\n| Windows | `NOORwave-vX.Y.Z-windows-x64.zip` | Portable fallback. Unzip anywhere and run `NOORwave.exe`. |\n| macOS ARM64 | `NOORwave-vX.Y.Z-macos-arm64.tar.gz` | Portable build. Gatekeeper may require `xattr -cr NOORwave noor-server`. |\n| macOS x64 | `NOORwave-vX.Y.Z-macos-x64.tar.gz` | Portable build. |\n| Linux x64 | `NOORwave-vX.Y.Z-linux-x64.tar.gz` | Portable build. |\n\nWindows builds are not CA-signed today. SmartScreen or Smart App Control can warn or block the first launch on strict systems. The installed updater payload is still signed with the project's Tauri updater key.\n\n## Run From Source\n\nPrerequisites:\n\n- Rust stable\n- Node 24\n- pnpm 10\n- A TIDAL account\n\n```powershell\n# Backend\ncargo run -p noor-server\n\n# Frontend dev server\ncd frontend\npnpm install\npnpm dev\n```\n\nOpen `http://127.0.0.1:3334` for the bundled app or the Vite URL printed by `pnpm dev` during frontend work.\n\nFor the desktop shell:\n\n```powershell\ncargo run -p noor-app\n```\n\n## Build And Verify\n\n```powershell\n# Rust\ncargo check -p noor-server\ncargo check -p noor-app\ncargo test --workspace --locked\n\n# Frontend\ncd frontend\npnpm check\npnpm test\npnpm run build\n```\n\nWindows portable package:\n\n```powershell\ncd frontend\npnpm run build\ncd ..\n.\\scripts\\build-portable.ps1\n```\n\n## Architecture\n\n```text\nnoor-app       Tauri 2 desktop shell, tray, media keys, updater\nnoor-server    Rust Axum server, SQLite, playback, integrations, WebSocket events\nfrontend       SvelteKit 2 and Svelte 5 UI, static build served by noor-server\ndocs           Specs, release notes, inventories, design memory\nscripts        Build, smoke, probe, and data utilities\n```\n\nThe Tauri shell starts `noor-server` as a sidecar. The same server also serves the LAN phone remote at `/remote`, which is why the backend stays a real HTTP server instead of being collapsed into Tauri IPC.\n\n## Current Status\n\nNOORwave is usable but still moving quickly. The `0.2.0` line is focused on integrating the active product branches into one coherent build, tightening the DJ and Last.fm flows, and making the release path less fragile.\n\nKnown constraints:\n\n- Genre Galaxy is live but still needs interaction and rendering polish.\n- ACRCloud fingerprint recognition is present as a placeholder, not a finished integration.\n- Linux and macOS builds are portable-only today.\n- Windows exclusive-mode audio is the most tuned output path.\n- This is a single-user local app, not a hosted multi-user service.\n\n## Release Checklist\n\nTags drive releases. Before tagging `vX.Y.Z`:\n\n1. Bump only `noor-server/Cargo.toml`, `noor-app/Cargo.toml`, `noor-app/tauri.conf.json`, and the matching `noor-app` / `noor-server` entries in `Cargo.lock`.\n2. Do not run bare `cargo update`.\n3. Keep both Windows artifacts: portable zip and NSIS setup exe.\n4. Keep `installMode: \"currentUser\"` in the NSIS config.\n5. Keep the Windows SmartScreen and Smart App Control note in release copy.\n6. Read `.github/workflows/release.yml` before changing release behavior.\n7. After CI publishes, prepend the human \"What's new\" section with `gh release edit vX.Y.Z --notes-file \u003ccombined.md\u003e`.\n\nInstalled Windows release-ready means a signed local `cargo tauri build --bundles nsis` has been tested, the `.sig` exists, and mutable data still lives under `%LOCALAPPDATA%\\NOORwave`.\n\n## Contributing\n\nUse small, focused changes. Keep Rust, Svelte, and TypeScript as the first-class languages. Do not commit local databases, generated build output, secrets, private signing keys, or machine-local config.\n\nUseful checks:\n\n```powershell\ngit status --short\ncargo fmt --all -- --check\ncd frontend\npnpm check\npnpm test\npnpm run build\n```\n\n## Disclaimer\n\nNOORwave uses TIDAL's unofficial API through PKCE OAuth2. It is not affiliated with, endorsed by, or associated with TIDAL Music AS or MQA Ltd. Use it at your own discretion and risk. Credentials are stored locally and encrypted in SQLite. NOORwave is intended for personal use only.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiggiesmallcap-blip%2Fnoorwave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbiggiesmallcap-blip%2Fnoorwave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiggiesmallcap-blip%2Fnoorwave/lists"}