-
released this
2026-08-16 08:47:35 -05:00 | 0 commits to main since this release📅 Originally published on GitHub: Sun, 16 Aug 2026 13:58:14 GMT
🏷️ Git tag created: Sun, 16 Aug 2026 13:47:35 GMTUpstream sync
Aligned to upstream commit
41d3b9c(249 commits sinceabbc2a6). Upstream has rewritten its playback stack in the meantime:- Native TIDAL queries via
HiFiClient+ a new "Unified Playback" API (Cloudflare Turnstile protected) + Deezer fallback. The old HiFi proxy instances are all gone. - Accounts moved to better-auth, native OAuth via
@capacitor/browserand themonochrome://auth-callbackdeep link.
The wrapper keeps working because the WebView runs with
hostname: monochrome.tfas origin, so Turnstile and the CORS checks treat it like the official site. Full-length playback is back (no more 0:29 / 1:40 previews).Changes
- Dropped 2 build-time patches that no longer apply:
storage.jsstreaming-instance fallback (upstream removed the hardcoded list) andHiFi.tstracks.albums.coverArt(merged upstream). The remaining 12/12 patches apply cleanly. AndroidManifest.xml: added themonochrome://auth-callbackintent-filter for the native login flow.build-web.sh: recreatedist-web.zipfrom scratch and prune staleassets/on deploy.versionCode13,versionName2.9.0.
Verified
Tested on an emulator (Pixel 6, API 35): search returns 100 tracks, playing "Creep" and skipping to the next track both work, MediaSession reports
PLAYING, foreground service notification is shown.Download
Install with adb:
adb install -r Monochrome-debug.apkIf you're upgrading from an older build and something looks off, clear the app data once (Settings > Apps > Fabiodalez Music > Clear data).
Downloads
- Native TIDAL queries via
-
v2.8.1: Fix Tidal proxy Stable
released this
2026-05-11 08:40:42 -05:00 | 1 commits to main since this release📅 Originally published on GitHub: Mon, 11 May 2026 13:41:01 GMT
🏷️ Git tag created: Mon, 11 May 2026 13:40:42 GMTFix
- Tidal proxy: migrated from
tidal-api.geeked.wtftotidal-proxy.monochrome.tf(official Cloudflare-backed proxy on monochrome.tf infrastructure)
Root cause
The upstream switched the Tidal API proxy in commit
abbc2a6. The old proxytidal-api.geeked.wtfwas causing streaming failures. The new proxytidal-proxy.monochrome.tfis the official instance used by monochrome.tf, confirmed working.Upstream sync
Aligned to upstream commit
abbc2a6. All 11/11 patches pass without changes.Download
Install with adb:
adb install -r Monochrome-debug.apkDownloads
- Tidal proxy: migrated from
-
released this
2026-05-07 17:48:34 -05:00 | 2 commits to main since this release📅 Originally published on GitHub: Fri, 08 May 2026 07:32:32 GMT
🏷️ Git tag created: Thu, 07 May 2026 22:48:34 GMTChanges
- New Qobuz proxy: added
trypt-hifi-dl-456461932686.us-west1.run.appas primary fallback instance - Theme FOUC fix: theme preloaded from localStorage before page render — eliminates white flash on startup
- New official instance:
if-it-runs-ship-it.loladded as upstream failover mirror
Upstream sync
Aligned to upstream commit
8cf6740(monochrome-music/monochrome). All 11/11 patches pass without changes.Download
Install with adb:
adb install -r Monochrome-debug.apkDownloads
- New Qobuz proxy: added
-
released this
2026-05-03 10:49:18 -05:00 | 4 commits to main since this release📅 Originally published on GitHub: Sun, 03 May 2026 15:49:36 GMT
🏷️ Git tag created: Sun, 03 May 2026 15:49:18 GMTFix
- Artist page: track rows now show real album cover images instead of random Picsum placeholders
Root cause
The Tidal API artist endpoint was requested with
tracks,tracks.albumsbut nottracks.albums.coverArt. Album objects arrived in the responseincludedarray without theircoverArtrelationship, soresolveArtworkId(albumItem, 'coverArt')returnednullfor every track, triggering thegetCoverUrl(null)Picsum fallback.Adding
tracks.albums.coverArtto the include parameter lets the API return the full artwork relationship and UUID, displaying real covers.Downloads
-
released this
2026-05-03 09:58:50 -05:00 | 6 commits to main since this release📅 Originally published on GitHub: Sun, 03 May 2026 14:59:07 GMT
🏷️ Git tag created: Sun, 03 May 2026 14:58:50 GMTChanges
Sync with upstream eb3558a (+6 commits).
Tidal API proxy (upstream eb3558a)
All calls to
openapi.tidal.comandapi.tidal.comare now automatically routed throughtidal-api.geeked.wtf, a reverse proxy with correct CORS headers. Previously, direct calls toapi.tidal.comwere blocked by CORS in the Android WebView and fell back silently to monochrome proxy instances. Now the upstream code handles this transparently.AAC 320KBPS downloads (upstream 758726c)
Fixed incorrect bitrate for high-quality AAC transcoding:
HIGHquality now correctly uses 320kbps instead of 256k.Other upstream changes
- am-lyrics library update
- Option to disable the Parties button from settings
Patches still active
HiFi.ts: addartists.profileArtto unified search include (fix Picsum artist covers)app.js: search debounce 3000ms -> 800msstorage.js: add live streaming instances to hardcoded fallbackui.js: enrich albums missing artist/cover from track datacache.js: per-type TTL + query normalization (trim/lowercase/NFD diacritics)api.js:limit=100on all search endpointsvite.config.ts: workbox audio/videoCacheFirst->NetworkOnly
Downloads
-
released this
2026-05-02 04:53:09 -05:00 | 7 commits to main since this release📅 Originally published on GitHub: Sat, 02 May 2026 09:53:30 GMT
🏷️ Git tag created: Sat, 02 May 2026 09:53:09 GMTFix
Search felt very slow: after finishing typing, the app waited 3 full seconds before navigating to results. Reduced the debounce from 3000ms to 800ms.
The auto-search now triggers 800ms after the last keystroke, which is the standard for responsive search bars. Pressing Enter still triggers immediately (no debounce). Showing results for partial queries (e.g. "radio" before "radiohead") is normal search behavior.
What changed
app.js: searchinputdebounce 3000ms -> 800ms
Downloads
-
released this
2026-05-02 04:24:20 -05:00 | 8 commits to main since this release📅 Originally published on GitHub: Sat, 02 May 2026 09:31:42 GMT
🏷️ Git tag created: Sat, 02 May 2026 09:24:20 GMTFix
Artist cards in search results were showing random placeholder images (picsum.photos) instead of real artist profile photos.
Root cause: the unified search (
q=) inHiFi.tsusedinclude=...artistsbut omittedartists.profileArt. Without that field, the Tidal v2 JSON:API response included artist objects with noprofileArtrelationship and noartworksentries inincluded.resolveArtworkId(item, 'profileArt')always returned null, so every artist card calledgetArtistPictureUrl(null)and got a random Picsum URL.The per-artist search tab (
a=) already hadartists.profileArtand was unaffected. Only the unified search (q=) was broken.Fix: add
artists.profileArtto theincludeQinclude string inHiFi.ts(patch #55 inbuild-android.sh). Verified on device: all 12 artist cards in search results now load real images fromresources.tidal.com.Also fixed:
fm-logger.jswas being copied to the Vite source directory (js/) instead of the static assets directory (public/js/), so Vite never included it in the dist bundle. Moved topublic/js/so the on-device console logger works correctly.What changed
- Artist covers: unified search now includes
artists.profileArtin the Tidal v2 API request - fm-logger.js: copied to
public/js/so Vite includes it indist/js/as a static asset
Patches active
HiFi.ts: addartists.profileArtto unified search include (new — fixes Picsum artist covers)storage.js: add live streaming instances to hardcoded fallbackui.js: enrich albums missing artist/cover from track datacache.js: per-type TTL + query normalization (trim/lowercase/NFD diacritics)api.js:limit=100on all search endpointsvite.config.ts: workbox audio/videoCacheFirst->NetworkOnlyandroid-service.js: foreground audio service, localStorage bootstrap for streaming instancesfm-logger.js: console output saved toDownloads/FabiodalezMusic/
Downloads
- Artist covers: unified search now includes
-
released this
2026-05-01 05:27:16 -05:00 | 10 commits to main since this release📅 Originally published on GitHub: Fri, 01 May 2026 10:42:34 GMT
🏷️ Git tag created: Fri, 01 May 2026 10:27:16 GMTFix
Streaming playback was occasionally returning only a 1:40 preview instead of the full track. Root cause: a previous patch forced the native HiFiClient for streaming (
shouldTryNative=true), but the browser client credentials are not premium — only the proxy instances have premium credentials. Removed the patch: streaming now always goes through proxy instances.Also removed
window.__tidalOriginExtensionfrom the Android wrapper scripts. This flag was originally used to tell upstream to use direct CDN URLs instead ofaudio-proxy.binimum.org, but it is no longer needed since the WebView origin is already set tohttps://monochrome.tf(see v2.3.0), which satisfies all proxy and CDN authentication.What changed
- Streaming playback: removed forced native HiFiClient — proxies handle full-quality playback
__tidalOriginExtensionremoved:capacitor.config.tsserver.hostname = monochrome.tfmakes this flag redundant- Upstream sync: d308dac (+67 commits since v2.3.0) — Qobuz multi-instance failover, HiFi artist duration fix (ISO 8601), lossy download transcoding fix
Patches still active
storage.js: addfrankfurt-2.monochrome.tfto streaming fallback listui.js: enrich albums missing artist/cover from track datacache.js: per-type TTL + query normalization (trim/lowercase/NFD diacritics)api.js:limit=100on all search endpointsvite.config.ts: workbox audio/videoCacheFirst->NetworkOnlyfm-logger.js: console output saved toDownloads/FabiodalezMusic/android-service.js: service worker unregistered, foreground audio service active
Downloads
-
released this
2026-04-22 13:01:15 -05:00 | 12 commits to main since this release📅 Originally published on GitHub: Wed, 22 Apr 2026 18:01:38 GMT
🏷️ Git tag created: Wed, 22 Apr 2026 18:01:15 GMTFix
Audio playback was failing on fresh installs because the Capacitor WebView used
Origin: https://localhost, which Tidal API proxies and CDN reject with 403. Existing installs worked because they had cached tokens and stream URLs from when the proxies accepted any origin.What changed
- WebView origin:
https://localhost->https://monochrome.tf-- proxies and CDN now accept our requests - TidalWebViewClient: new native Java class that intercepts audio requests to Tidal CDN and re-sends them with
Origin: https://listen.tidal.com(equivalent to the Chrome extension "Monochrome Tidal Bypass") window.__tidalOriginExtension: tells upstream code to use direct CDN URLs instead of the brokenaudio-proxy.binimum.orgproxy- Service Worker blocked: prevents workbox from intercepting audio fetches (CacheFirst on audio causes CORS failures)
- Native HiFiClient for streaming: tries direct Tidal API before proxy instances
- Search album enrichment: albums missing artist/cover in search results are enriched from track data
Downloads
- WebView origin:
-
released this
2026-04-22 09:58:11 -05:00 | 13 commits to main since this release📅 Originally published on GitHub: Wed, 22 Apr 2026 14:58:29 GMT
🏷️ Git tag created: Wed, 22 Apr 2026 14:58:11 GMTChanges
Search
- Reverted debounce to upstream default (3000ms) -- the reduced values (500ms, 700ms) caused the search page to render for partial queries while still typing
- New: albums in search results that are missing artist name or cover art are now enriched from track data in the same response. This works around the v2 Tidal API not populating album relationships correctly in search results.
UI
- Removed pull-to-refresh -- it was triggering false page reloads when scrolling up on album/artist pages
- Fixed scroll position: navigating to an album or artist page now starts at the top instead of landing mid-page
Upstream
Synced to
b6b425a(latest upstream/main)Downloads
mirror of
https://github.com/fabiodalez-dev/Monochrome-Android-APK.git
synced 2026-10-18 23:07:33 -05:00