Introducing Singularity: Your browser's karaoke stage! Gather your friends for a local multiplayer singing experience. No downloads necessary, just pure musical fun in your browser.
🎉 Play any Song which is available in the Ultrastar Deluxe File Format
🎉 Local Multiplayer
🎉 Offline Mode for slow or metered Internet Connections
🎉 The Game can be installed as a Progressive Web App
🎉 User Management
- Install Docker
- Create a
docker-compose.ymlFile or clone the Repository and use the existingdocker-compose.yml- When creating your own
docker-compose.yml, paste in the following contents:services: singularity-db: image: mariadb:latest command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed volumes: - singularity-db:/var/lib/mysql restart: unless-stopped environment: TZ: UTC+1 MYSQL_ROOT_PASSWORD: <MYSQL-ROOT-PASSWORD> MYSQL_DATABASE: db MYSQL_USER: admin MYSQL_PASSWORD: <MYSQL-USER-PASSWORD> singularity: image: ghcr.io/singularity-game/singularity:main environment: APP_URL: <APP-URL> AUTHENTICATION_JWT_SECRET: <JWT-SECRET> DB_HOST: singularity-db DB_PORT: 3306 DB_USERNAME: admin DB_PASSWORD: <MYSQL-USER-PASSWORD> DB_DATABASE: db SMTP_SECURE: 'true' SMTP_HOST: <SMTP-HOST> SMTP_USERNAME: <SMTP-USER> SMTP_PASSWORD: <SMTP-PASSWORD> SMTP_FROM: <SMTP-FROM> SONG_DIRECTORY: songs ENABLE_AUTO_INDEXING: true volumes: - singularity-songs:/usr/src/app/songs ports: - 3333:3333 volumes: singularity-db: singularity-songs:
- Replace the Placeholders
<MYSQL-ROOT-PASSWORD>,<MYSQL-USER-PASSWORD>and<JWT-SECRET>with secure Passwords! - Replace the Placeholder
<APP-URL>with the URL your app will be running on. For examplehttp://localhost - Replace the Placeholders
<SMTP-HOST>,<SMTP-USER>,<SMTP-PASSWORD>and<SMTP-FROM>with the credentials from your SMTP Server. Without an SMTP Server, Singularity will be unable to send emails and you will be unable to create new users.
- When creating your own
- Run the command
docker compose up - Singularity will now be running on
<APP-URL>:3333. - You can login to Singularity with the Username:
adminand the Password:admin.
You need Ultrastar Files to play Singularity. You can download Ultrastar TXT Files, Audio Files, Video Files and Cover Files from the following Song Databases:
You can upload songs to Singularity under Settings > Songs > + New Song
Once Uploaded the Song will be playable!
-
Prerequisites:
- Install NodeJS: https://nodejs.org/
- Install Rust: https://rustup.rs/
- Install MariaDB: https://mariadb.org/
-
Create a new Database:
- On Windows open the
MySQL ClientSoftware, On Linux run themysqlcommand. - Run the following commands in mysql:
create database Singularity; grant all privileges on Singularity.* TO 'Singularity'@'%' identified by 'SECURE_PASSWORD'; flush privileges; - On Windows open the
-
Clone the repository
git clone https://github.com/Singularity-Game/Singularity.git -
Create the file
apps/singularity-api/src/config/appsettings.development.envwith the following content:DB_HOST=localhost DB_PORT=3306 DB_USERNAME=Singularity DB_PASSWORD=SECURE_PASSWORD DB_DATABASE=Singularity SMTP_SECURE= SMTP_HOST= SMTP_PORT= SMTP_USERNAME= SMTP_PASSWORD= SMTP_FROM= ENABLE_YOUTUBE=true APP_URL=http://localhost:4200 SONG_DIRECTORY=../../../songs AUTHENTICATION_JWT_SECRET=RANDOM_STRING_OF_CHARACTERS -
Create the file
ormconfig.tsin the root directory (next topackage.json) with the following content:import { DataSource } from 'typeorm'; export const connectionSource = new DataSource({ migrationsTableName: 'migrations', type: 'mariadb', host: 'localhost', port: 3306, username: 'Singularity', password: 'SECURE_PASSWORD', database: 'Singularity', logging: false, synchronize: false, name: 'default', entities: ['**/*.entity.ts'], migrations: ['apps/api/src/migrations'], });
-
Install Dependencies for Rust:
rustup install stable rustup override set stable rustup target add wasm32-unknown-emscripten --toolchain stable cargo install wasm-pack -
Run
npm install -
Run
npm run start -
Run
npm run start-api -
Open your Browser on
http://localhost:4200 -
The default credentials are Username:
adminand Password:admin
When you add, remove, or modify Entity Models, you must create a database migration. Typeorm can automatically generate Database Migrations with the following command:
npm run typeorm migration:generate -- -- ./apps/singularity-api/src/migrations/MIGRATION_NAME
Icons are taken from https://iconoir.com/
- This project is heavily inspired by Performous!
- This project uses the Pitch Detection library from Vocalous and pitch detection app!


