A full-stack web application to add and update music metadata, convert between audio formats, and optionally download music with metadata baked in.
Note
The downloading feature is disabled by default. If possible, please support artists and purchase the music you love! This feature exists solely to provide a safe, clean alternative to sketchy download sites for hard-to-find audio.
- Metadata Tagging: Search across multiple music services and manually apply metadata to your local audio files.
- Organized Library: Optionally auto-save processed files into a clean, browsable folder structure (
Artist / Album (Year) / Track.ext) to keep your collection tidy. - Audio Conversion: A dedicated, separate feature to convert your audio files between different audio formats.
- Multi-Service Search: Fetch rich metadata seamlessly from Deezer, YouTube Music, and iTunes/Apple Music.
- Frontend: React, Vite, TypeScript, Tailwind CSS, shadcn/ui
- Backend: Python, Flask, Waitress,
uv - Audio & API Engine:
ffmpeg(for audio processing),yutipy(for music service APIs) - Infrastructure: Docker, Podman, Docker Compose
This project is structured as a monorepo, keeping the backend and frontend codebases separate but working together seamlessly.
.
โโโ .devcontainer/ # VS Code Dev Container configuration for seamless development
โโโ backend/ # Backend logic, API routes, and configuration
โโโ data/ # Persistent storage for settings, secrets, and library (created at runtime)
โโโ frontend/ # Frontend UI, components, and Vite configuration
โโโ .env.example # Example environment variables for the whole application
โโโ compose.yml # Docker Compose configuration
โโโ Dockerfile # Multi-stage build for production
โโโ README.md # You are here!
โโโ run.sh # Interactive launcher script
AriaBox uses environment variables to configure the entire application. You can define these in two ways:
- By creating a
.envfile in the project root (copy.env.exampleto get started). - By passing them directly in the
environmentsection ofcompose.yml.
| Variable | Default (Local) | Default (Docker) | Description |
|---|---|---|---|
DATA_DIR |
./data |
/app/data |
Directory for settings, secrets, and your organized music library. Local runs: Relative to project root. Container runs: Path inside the container. |
DEFAULT_LANGUAGE |
en |
en |
Fallback language if no user settings exist. Used for searching music. |
DEFAULT_LOCATION |
US |
US |
Fallback location if no user settings exist. Used for searching music. |
HOST_URL |
0.0.0.0 |
0.0.0.0 |
The host IP to bind the server to. |
HOST_PORT |
8960 |
8960 |
The port to run the application on. |
SECRET_KEY |
Auto-generated |
Auto-generated |
Flask secret key. Auto-generated and saved if not provided. |
Important
If you are using Docker or Podman, the DATA_DIR environment variable corresponds to the directory inside the container and must always match the right side of your volume mapping in compose.yml. For example, if you map /home/me/Music:/app/data, your DATA_DIR must be set to /app/data.
You can use the interactive launcher script to quickly run AriaBox with or without a container engine:
- Make the script executable:
chmod u+x run.sh
- Run the script:
./run.sh
Make sure you have Docker or Podman installed.
The recommended way to run AriaBox is using a container engine. This handles all dependencies (including ffmpeg) and builds both the frontend and backend automatically. You can either pull the pre-built image directly from GitHub Container Registry, or build it locally from the source code.
- First, create a directory wherever you want to store AriaBox's data and configuration. For example, in your home directory:
mkdir ~/AriaBox cd ~/AriaBox
- Create
compose.ymlfile inside this directory. You can either download thecompose.example.ymlfrom the project root of this repository and rename it tocompose.yml, or create a newcompose.ymlfile and paste the contents ofcompose.example.ymlinto it. - Create
.envfile inside the same directory. Similarly, download the.env.examplefrom the project root and rename it to.env, or create a new.envfile and copy the contents of.env.exampleinto it. - Open the
.envfile and update the values as needed. For example, you can set a customSECRET_KEYor adjust theDATA_DIRif necessary. - Run the AriaBox:
docker compose up -d # Or for Podman: podman compose up -d - Open your browser and navigate to
http://127.0.0.1:8960(If you changedHOST_PORTvariable, change8960to that instead).
- Clone the repository and change directory into the project:
git clone https://github.com/CheapNightbot/AriaBox.git && cd AriaBox
- Copy the example environment variable
.env.examplefile as.envto create your configuration:cp .env.example .env
- (Optional) Open the newly created
.envfile and adjust any values as needed. - (Optional) Look at the
compose.ymlfile and adjust any settings or volume mappings as needed. - Run the application:
# For Docker: docker compose up --build -d # For Podman: podman compose up --build -d
- Open your browser and navigate to
http://127.0.0.1:8960(If you changedHOST_PORTvariable, change8960to that instead).
Note
Rootless Docker/Podman Support: AriaBox fully supports rootless Docker and Podman. If you are using rootless setup, please ensure you have configured the necessary user namespace variables in your .env file (as shown in .env.example) to resolve permission mapping issues between the host and the container.
Volume Mapping: The default configuration maps a local data folder to the container's /app/data directory. AriaBox will automatically create this folder to store your runtime settings, auto-generated secret keys, and your organized music library.
Running directly involves two steps: building the frontend first, and then running the backend, which serves the frontend's built files.
Important
Prerequisite: You must have ffmpeg installed and available in your system's PATH. Basic metadata tagging will function without it, but audio conversion and download features require ffmpeg to process the files.
- Clone the repository and change directory into the project:
git clone https://github.com/CheapNightbot/AriaBox.git && cd AriaBox
- Copy the example environment variable
.env.examplefile as.envto create your configuration:cp .env.example .env
- (Optional) Open the newly created
.envfile and adjust any values as needed. - From the project root directory, install frontend dependencies & build the frontend:
# Change directory to frontend cd frontend # Install dependencies pnpm install --frozen-lockfile --silent # Build frontend pnpm run build
- Again, from the project root directory, start AriaBox:
# Change directory to backend cd backend # Install dependencies uv sync # Run AriaBox ~ uv run ariabox
- Open your browser and navigate to
http://127.0.0.1:8960.
For a seamless development experience, this project includes a fully configured .devcontainer directory.
Note
The development workflow is 100% the same whether you use the .devcontainer or your host machine! The only benefit of the devcontainer is that Python, uv, Node, pnpm, and ffmpeg are already pre-installed for you. You will still need to open two terminals and run the same commands.
Terminal 1: Backend Change directory into the backend folder, install dependencies, and run the backend using Flask in debug mode:
cd backend
uv sync
uv run flask run --debug
# If developing inside a devcontainer or WSL, run this instead to listen on all hosts:
# uv run flask run --debug --host 0.0.0.0The Flask development server will start on http://127.0.0.1:5000.
Terminal 2: Frontend Change directory into the frontend folder, install dependencies, and run the Vite development server:
cd frontend
pnpm install
pnpm run dev
# If developing inside a devcontainer or WSL, run this instead to listen on all hosts:
# pnpm run dev --host 0.0.0.0The Vite development server will start on http://localhost:5173 and automatically proxy API requests to the backend running on port 5000.
me (secretly? sometime) sing cover songs, but the original song rarely have downloads for instrumental/karaoke version. on top of that, some only provide mp3 file and if you not know / notice, mp3 have this weird "feature" (not bug) where it adds little "padding" (? or really silence) at the beginning and end, which completely breaks timing (but converting to wav or any other format not have that)!!! so, me got so tired of sketchy, ad-filled websites just to download & convert audio and decided to create ArixBox ~
This project is developed for educational and personal use only.
- AriaBox is not affiliated with, endorsed by, or sponsored by Deezer, YouTube, Apple Music, or any other music service mentioned.
- All trademarks and service marks are the property of their respective owners.
- The author/creator is not responsible for any misuse of this software. Users are strongly encouraged to respect copyright laws and support artists by purchasing their music through official channels.
