Git Product home page Git Product logo

accompanist's Introduction

Accompanist โ€” a self-hosted karaoke system with AI

How to run

Prerequisites: Docker

Install nvidia-container-runtime to use GPU inside Docker containters as follows. Actually, you can skip this part and remove "deploy" section in compose.yaml. But in this case, the track processing time will increase significantly, so better do it, if you have a GPU. You can also skip this step and run celery worker locally without Docker (see "Running backend locally").

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

How to run the system:

git clone https://github.com/m-danya/accompanist
cd accompanist
cp .env.sample .env

Since this project uses Genius API for obtaining lyrics for tracks, you need to get token for Genius API. In can be done in 90 seconds:

Go to https://genius.com/api-clients and obtain Client Access Token. You can enter any app name an use any "App Website URL". After you get the token, place it into your .env file (corresponding variable is GENIUS_CLIENT_ACCESS_TOKEN).

Let's continue:

mkdir storage-volume
docker-compose up -d --build
docker exec -it accompanist-backend-1 alembic upgrade head
# open http://localhost in your browser

Development notes

This project uses ruff for formatting and linting. For VS Code, just install the "Ruff" extension and reload the editor.

If you're using VS Code, install these extensions for frontend development: "Vue Official" and "Prettier".

The .vscode/launch.json file is included in this repo to help developers to easily run the frontend and backend locally. To run the system locally, you need to follow the instructions both above and below this paragraph.

If you want to run backend and frontend without Docker, you still need these containers to be running:

docker compose up -d nginx db rabbitmq

You can view the current Celery tasks queue using Flower on http://localhost:5555.

You can access the admin panel at http://localhost:8000/admin.

Running frontend locally

cd frontend
nvm install 20
nvm use 20
npm install
# run "Vue.js" configuration in VS code or:
npm run serve

Running backend locally

sudo apt install python3.10 python3.10-venv
python3.10 -m venv venv
source venv/bin/activate
poetry install

# 1. Running FastAPI backend
# run "FastAPI" configuration in VS code or:
STORAGE_PATH=./storage-volume uvicorn accompanist.main:app --reload

# 2. Running Celery  worker for processing albums
# run "Celery worker" configuration in VS code or:
STORAGE_PATH=./storage-volume celery -A accompanist.celery.main.app worker --loglevel info -E

Local network deployment

You may want to deploy this app in your local network, for example, to access it from your mobile device, connected to the same Wi-Fi network. In this case, just change the DEPLOYMENT_HOST variable in your .env file from 127.0.0.1 to your local IP address (look for an IP address like 192.168.1.7 in the output of ifconfig). After docker compose up -d --build, you will be able to access the system at ${DEPLOYMENT_HOST}:${DOCKER_FRONTEND_PORT}.

TODOs

Possible todos

  • [All the "TODO"s in the code]
  • DragAndDrop albums at the main page
  • Fix admin panel being available only at ${FASTAPI_PORT} but not at ${NGINX_PORT}
  • Tune Genius search query (e.g. remove the parentheses in track title)
  • Skip banned tracks from album
  • Show albums/tracks collection with filters
    • Extract TrackLine component to reuse in collection
    • Sort by cover colors (just for fun)
  • Descriptive error messages on frontend (e.g. for Genius API)
  • Add paging for albums & tracks
  • Put vocals track into "practice mode", mix with karaoke?
  • Add router to frontend (to support links like /album/123)
  • Show track name in page title
  • Shuffle mode (for karaoke-labeled tracks with autoplay)
  • Download tracks' studio versions (ignore clip versions from YT Music)
  • Collection management: order of albums / stars / rating
  • Add editing text from frontend (to edit Genius parser's mistakes)
  • Run alembic upgrade head at launching?
  • Publish docker image(s) to Docker Hub
  • Different gradient backgounds for different songs (random + choosing)
  • Frontend localization
  • Add Telegram bot wrapper for the backend
  • Add mypy (+ CI)
  • Add tests

accompanist's People

Contributors

m-danya avatar litvan007 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.