diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index dd49f58..f7d5492 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,26 +1,52 @@ # ------------------------------------------------------------ # Base Image # ------------------------------------------------------------ -FROM mcr.microsoft.com/devcontainers/base:debian +FROM debian:unstable-slim + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 # ------------------------------------------------------------ # System Dependencies # ------------------------------------------------------------ -RUN apt update && apt upgrade -y && \ +RUN apt-get update && apt-get upgrade -y && \ apt-get install -y --no-install-recommends \ + curl \ + ca-certificates \ git \ - git-lfs \ + build-essential \ + sudo \ fish \ + unzip \ + xz-utils \ + libatomic1 \ + libc6 \ + wget \ nodejs \ - npm \ - curl + npm && \ + rm -rf /var/lib/apt/lists/* + +# ------------------------------------------------------------ +# Create Non-Root User +# ------------------------------------------------------------ +ARG USERNAME=devuser +ARG UID=1000 +ARG GID=1000 + +RUN groupadd --gid ${GID} ${USERNAME} && \ + useradd --uid ${UID} --gid ${GID} -m -s /usr/bin/fish ${USERNAME} && \ + echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +USER ${USERNAME} +WORKDIR /home/${USERNAME} # ------------------------------------------------------------ # Install Bun (Non-Root) # ------------------------------------------------------------ -ENV BUN_INSTALL="$HOME/.bun" -ENV PATH="$BUN_INSTALL/bin:$PATH" - +ENV BUN_INSTALL=/home/${USERNAME}/.bun +ENV PATH="${BUN_INSTALL}/bin:${PATH}" + RUN curl -fsSL https://bun.sh/install | bash # ------------------------------------------------------------ @@ -32,11 +58,11 @@ RUN curl -fsSL https://opencode.ai/install -o opencode-install && \ rm opencode-install # Add OpenCode to PATH permanently -ENV PATH="$HOME/.opencode/bin:$PATH" +ENV PATH="/home/${USERNAME}/.opencode/bin:${PATH}" # ------------------------------------------------------------ # Ensure fish is Default Shell # ------------------------------------------------------------ ENV SHELL=/usr/bin/fish -CMD ["fish"] \ No newline at end of file +CMD ["fish"] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2219b51..f8f1c0b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,14 +26,16 @@ Thank you for your interest in contributing to Monochrome! This guide will help ### Quick Start -1. **Fork and clone the repository:** +1. Fork the Repository + +2. clone the repository: ```bash git clone https://github.com/YOUR_USERNAME/monochrome.git cd monochrome ``` -2. **Install dependencies:** +3. Install dependencies: ```bash bun install @@ -41,7 +43,7 @@ Thank you for your interest in contributing to Monochrome! This guide will help npm install ``` -3. **Start the development server:** +4. Start the development server: ```bash bun run dev @@ -49,7 +51,7 @@ Thank you for your interest in contributing to Monochrome! This guide will help npm run dev ``` -4. **Open your browser:** +5. Open your browser: Navigate to `http://localhost:5173/` --- @@ -118,12 +120,12 @@ monochrome/ - **`/js`** - All JavaScript source code - Keep modules focused and single-purpose - Use ES6+ features - - Add JSDoc comments for complex functions + - Keep the code easy to work with/maintain - **`/public`** - Static assets copied directly to build - Images should be optimized before adding - Keep file sizes reasonable - - Use appropriate formats (WebP where possible) + - Use appropriate formats (PNG where possible) --- diff --git a/DOCKER.md b/DOCKER.md index 74a4e5d..f6bd93e 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -10,19 +10,6 @@ docker compose up -d Visit `http://localhost:3000` -### With PocketBase - -```bash -cp .env.example .env -# Edit .env -- set PB_ADMIN_EMAIL and PB_ADMIN_PASSWORD -docker compose --profile pocketbase up -d -``` - -- Monochrome: `http://localhost:3000` -- PocketBase admin: `http://localhost:8090/_/` - -Configure PocketBase collections per [self-hosted-database.md](self-hosted-database.md). - ### Development ```bash diff --git a/INSTANCES.md b/INSTANCES.md index 7dfd12d..1e92790 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -17,6 +17,14 @@ The official Monochrome instance maintained by the core team: ## Community Instances +### Community Monochrome Instances + +These instances are community instances of Monochrome & its WebUI: + +| Provider | URL | Status | +| ------------- | ---------------------------------------- | --------- | +| **Squid.WTF** | [mono.squid.wtf](https://mono.squid.wtf) | Community | + ### UI-Only Instances These instances provide the tidal-ui web interface, not monochrome: @@ -40,21 +48,21 @@ These are available API endpoints that can be used with Monochrome or other Hi-F ### Official & Community APIs -| Provider | URL | Notes | -| ----------------- | ----------------------------------- | ---------------------------------------------------------- | -| **Monochrome** | `https://monochrome-api.samidy.com` | Official API - [See Note](https://rentry.co/monochromeapi) | -| | `https://api.monochrome.tf` | Official API | -| | `https://arran.monochrome.tf` | Official API | -| **squid.wtf** | `https://triton.squid.wtf` | Community hosted | -| **Lucida (QQDL)** | `https://wolf.qqdl.site` | Community hosted | -| | `https://maus.qqdl.site` | Community hosted | -| | `https://vogel.qqdl.site` | Community hosted | -| | `https://katze.qqdl.site` | Community hosted | -| | `https://hund.qqdl.site` | Community hosted | -| **Spotisaver** | `https://hifi-one.spotisaver.net` | Community hosted | -| | `https://hifi-two.spotisaver.net` | Community hosted | -| **Kinoplus** | `https://tidal.kinoplus.online` | Community hosted | -| **Binimum** | `https://tidal-api.binimum.org` | Community hosted | +| Provider | URL | Notes | +| ----------------- | ----------------------------------- | ---------------- | +| **Monochrome** | `https://monochrome-api.samidy.com` | Official API | +| | `https://api.monochrome.tf` | Official API | +| | `https://arran.monochrome.tf` | Official API | +| **squid.wtf** | `https://triton.squid.wtf` | Community hosted | +| **Lucida (QQDL)** | `https://wolf.qqdl.site` | Community hosted | +| | `https://maus.qqdl.site` | Community hosted | +| | `https://vogel.qqdl.site` | Community hosted | +| | `https://katze.qqdl.site` | Community hosted | +| | `https://hund.qqdl.site` | Community hosted | +| **Spotisaver** | `https://hifi-one.spotisaver.net` | Community hosted | +| | `https://hifi-two.spotisaver.net` | Community hosted | +| **Kinoplus** | `https://tidal.kinoplus.online` | Community hosted | +| **Binimum** | `https://tidal-api.binimum.org` | Community hosted | --- @@ -95,6 +103,5 @@ Want to add your instance to this list? ## Related Resources -- [Self-Hosting Guide](self-hosted-database.md) - Host your own instance - [Contributing Guide](CONTRIBUTE.md) - Contribute to the project -- [Main Repository](https://github.com/SamidyFR/monochrome) - Source code +- [Main Repository](https://github.com/monochrome-music/monochrome) - Source code diff --git a/README.md b/README.md index 41c6cb2..684b282 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,11 @@

- Website • - Donate • - Features • - Installation • - Usage • - Self-Hosting • + Website - + Donate - + Features - + Usage - + Self-Hosting - Contributing

@@ -39,8 +38,14 @@ **Monochrome** is an open-source, privacy-respecting, ad-free [TIDAL](https://tidal.com) web UI, built on top of [Hi-Fi](https://github.com/binimum/hifi-api). It provides a beautiful, minimalist interface for streaming high-quality music without the clutter of traditional streaming platforms.

- - image + + Image of 'NASIR' By Nas On Monochrome + +

+ +

+ + Image of 'Jump Out' By Osamason On Monochrome

@@ -50,15 +55,16 @@ ### Audio Quality -- High-quality Hi-Res/lossless audio streaming +- High-quality High-Res/lossless audio streaming - Support for local music files -- Intelligent API caching for improved performance +- API caching for improved performance ### Interface - Dark, minimalist interface optimized for focus -- Customizable themes -- Community Theme Store +- Animated Album Covers For Supported Albums +- High-quality Music Videos +- Customizable themes & Community Theme Store - Accurate and unique audio visualizer - Offline-capable Progressive Web App (PWA) - Media Session API integration for system controls @@ -71,6 +77,8 @@ - Playlist import from other platforms - Public playlists for social sharing - Smart recommendations for new songs, albums & artists +- Infinite Recommendation Radio +- Explore Page (Hot & New) for discovering newly added music and whats trending overall or within each genre ### Lyrics & Metadata @@ -85,6 +93,7 @@ - Last.fm and ListenBrainz integration for scrobbling - Unreleased music from [ArtistGrid](https://artistgrid.cx) - Dynamic Discord Embeds +- Artist Biography + Social Links for learning more about your favorite artists - Multiple API instance support with failover ### Power User Features @@ -107,7 +116,9 @@ For alternative instances, check [INSTANCES.md](INSTANCES.md). ## Self-Hosting -NOTE: We only allow authorized domains to use our firebase authentication system, so unless you switch to your own firebase project, accounts wont work. +NOTE: Accounts will not work on self-hosted instances. Our Appwrite authentication system only allows authorized domains. + +We had to heavily customize the authentication system and write several custom scripts to support features like SMTP and Google OAuth (which are currently bugged in Appwrite). Because of this, we can no longer provide a self-hostable accounts system. ### Option 1: Docker (Recommended) @@ -144,7 +155,7 @@ docker compose down docker compose up -d ``` -For PocketBase, development mode, and advanced setups, see [DOCKER.md](DOCKER.md). +For development mode and advanced setups, see [DOCKER.md](DOCKER.md). ### Option 2: Manual Installation diff --git a/index.html b/index.html index d8e8e0c..9954827 100644 --- a/index.html +++ b/index.html @@ -36,12 +36,16 @@ - + +
+ +
+
+
+ Finding more songs for you... +