No description
Find a file
gpulch cde7080052 fix: address code review feedback
Inline fixes:
- Remove TDRC frame from ID3 writer (ID3v2.3 uses TYER only, not TDRC)
- Add try/finally cleanup in worker to prevent VFS leaks on errors
- Fix Blob creation to use Uint8Array directly (avoid extra bytes)
- Replace loadFFmpeg race guard with promise singleton pattern
- Add -map_metadata -1 to strip source metadata (prevent duplicate ID3)

Error handling improvements:
- Create MP3EncodingError class with code property for reliable detection
- Update api.js to use instanceof check instead of string matching
- Pass AbortSignal to encodeToMp3 for proper cancellation support
- Remove error re-wrapping in mp3-encoder.js (preserve original errors)

Technical details:
- Promise singleton ensures FFmpeg loads once even with concurrent calls
- AbortSignal listener properly cleaned up on success/error/abort
- Virtual FS cleanup in finally block prevents file leaks
- MP3EncodingError.code = 'MP3_ENCODING_FAILED' for robust detection
2026-02-23 10:49:05 +01:00
.github Update funding source to Ko-fi 2026-02-15 00:52:00 +02:00
extensions/js.neutralino.discordrpc fix codeql suggestions 2026-02-18 03:30:20 +00:00
functions change max size to 100mb as thats the maximum allowed by CF workers 2026-02-22 18:21:55 +02:00
js fix: address code review feedback 2026-02-23 10:49:05 +01:00
public lol 2026-02-20 20:42:12 +03:00
scripts fix all linting (js/html/css) 2026-02-13 18:01:46 +01:00
.dockerignore first modular docker files system 2026-02-06 21:35:59 +01:00
.env.example remove "automatic" for .env configuration 2026-02-13 22:21:30 +01:00
.gitignore WIP: neutralino 2026-02-10 13:52:06 +01:00
.htmlhintignore Add linting infrastructure (ESLint, Stylelint, HTMLHint, Prettier) and GitHub Action with auto-fix 2026-01-11 00:25:05 +01:00
.htmlhintrc Add linting infrastructure (ESLint, Stylelint, HTMLHint, Prettier) and GitHub Action with auto-fix 2026-01-11 00:25:05 +01:00
.prettierignore Add linting infrastructure (ESLint, Stylelint, HTMLHint, Prettier) and GitHub Action with auto-fix 2026-01-11 00:25:05 +01:00
.prettierrc Add linting infrastructure (ESLint, Stylelint, HTMLHint, Prettier) and GitHub Action with auto-fix 2026-01-11 00:25:05 +01:00
.stylelintrc.json build: fix CI linting errors and update lockfile 2026-02-10 11:19:20 +01:00
AUTH_GATE.md remove "automatic" for .env configuration 2026-02-13 22:21:30 +01:00
bun.lock feat: add MP3 320kbps download option with ffmpeg.wasm 2026-02-22 19:13:03 +01:00
CONTRIBUTE.md Change instances.json in favour of Workers which have live API uptime 2026-02-21 14:56:55 +00:00
DESIGN.md add (and somewhat enforce) design.md 2026-02-16 14:38:58 +00:00
docker-compose.yml fix: default off, show custom db in settings when missing envs, redirect logged-in /login 2026-02-09 20:20:33 +01:00
DOCKER.md auto-fix linting 2026-02-06 21:53:17 +01:00
Dockerfile Update Dockerfile to use bun, please remove bun install step if youre gonna use npm to build and run 2026-02-20 17:35:19 +02:00
Dockerfile.dev let's try with npm instead of bun... 2026-02-06 21:35:59 +01:00
eslint.config.js style: auto-fix linting issues 2026-02-13 19:50:40 +00:00
index.html feat: add MP3 320kbps download option with ffmpeg.wasm 2026-02-22 19:13:03 +01:00
INSTANCES.md Change instances.json in favour of Workers which have live API uptime 2026-02-21 14:56:55 +00:00
legacy.html basically monochrome 2.0 lol 2026-01-24 15:13:19 +03:00
license un-AiSlop the docs (2.0) 2026-02-06 12:03:15 +03:00
neutralino.config.dev.json style: auto-fix linting issues 2026-02-20 14:01:48 +00:00
neutralino.config.json style: auto-fix linting issues 2026-02-20 14:01:48 +00:00
package.json feat: add MP3 320kbps download option with ffmpeg.wasm 2026-02-22 19:13:03 +01:00
README.md Update README.md 2026-02-22 19:27:28 +02:00
self-hosted-database.md style: auto-fix linting issues 2026-02-19 13:55:31 +00:00
styles.css Fix mobile scroll container to restore browser URL bar collapse 2026-02-21 23:51:27 +01:00
todo.md JSPF playlist imports + plausible 2026-02-15 16:30:54 +00:00
vite-plugin-auth-gate.js refacto : clarity and selector consistency 2026-02-13 22:21:30 +01:00
vite.config.js feat: add MP3 320kbps download option with ffmpeg.wasm 2026-02-22 19:13:03 +01:00

Monochrome Logo

Monochrome

An open-source, privacy-respecting, ad-free music app.

WebsiteDonateFeaturesInstallationUsageSelf-HostingContributing

GitHub stars GitHub forks GitHub issues


What is Monochrome?

Monochrome is an open-source, privacy-respecting, ad-free TIDAL web UI, built on top of Hi-Fi. It provides a beautiful, minimalist interface for streaming high-quality music without the clutter of traditional streaming platforms.

image


Features

Audio Quality

  • High-quality Hi-Res/lossless audio streaming
  • Support for local music files
  • Intelligent API caching for improved performance

Interface

  • Dark, minimalist interface optimized for focus
  • Customizable themes
  • Accurate and unique audio visualizer
  • Offline-capable Progressive Web App (PWA)
  • Media Session API integration for system controls

Library & Organization

  • Recently Played tracking for easy history access
  • Comprehensive Personal Library for favorites
  • Queue management with shuffle and repeat modes
  • Playlist import from other platforms
  • Public playlists for social sharing
  • Smart recommendations for new songs, albums & artists

Lyrics & Metadata

  • Lyrics support with karaoke mode
  • Genius integration for lyrics
  • Track downloads with automatic metadata embedding

Integrations

  • Account system for cross-device syncing
  • Last.fm and ListenBrainz integration for scrobbling
  • Unreleased music from ArtistGrid
  • Dynamic Discord Embeds
  • Multiple API instance support with failover

Power User Features

  • Keyboard shortcuts for power users

Quick Start

Live Instance

Our Recommended way to use monochrome is through our official instance:

monochrome.tf

For alternative instances, check INSTANCES.md.


Self-Hosting

NOTE: Accounts wont work on self-hosted instances.

git clone https://github.com/monochrome-music/monochrome.git
cd monochrome
docker compose up -d

Visit http://localhost:3000

For PocketBase, development mode, and advanced setups, see DOCKER.md.

Option 2: Manual Installation

Prerequisites

Local Development

  1. Clone the repository:

    git clone https://github.com/monochrome-music/monochrome.git
    cd monochrome
    
  2. Install dependencies:

    bun install
    # or
    npm install
    
  3. Start the development server:

    bun run dev
    # or
    npm run dev
    
  4. Open your browser: Navigate to http://localhost:5173/

Building for Production

bun run build
# or
npm run build

Usage

Basic Usage

  1. Visit the Website or your local development server
  2. Search for your favorite artists, albums, or tracks
  3. Click play to start streaming
  4. Use the media controls to manage playback, queue, and volume

Keyboard Shortcuts

Shortcut Action
Space Play/Pause
Next track
Previous track
Volume up
Volume down
M Mute/Unmute
L Toggle lyrics
F Fullscreen
/ Focus search

Account Features

To sync your library, history, and playlists across devices:

  1. Click the "Accounts" Section
  2. Sign in with Google or Email
  3. Your data will automatically sync across all devices

Contributing

We welcome contributions from the community! Please see our Contributing Guide for:

  • Setting up your development environment
  • Code style and linting
  • Project structure
  • Commit message conventions
  • Deployment information

As seen on FMHY

Made with ❤️ by the Monochrome team

Star History

Star History Chart