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:latestcommand: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressedvolumes: - singularity-db:/var/lib/mysqlrestart: unless-stoppedenvironment: TZ: UTC+1MYSQL_ROOT_PASSWORD: <MYSQL-ROOT-PASSWORD>MYSQL_DATABASE: dbMYSQL_USER: adminMYSQL_PASSWORD: <MYSQL-USER-PASSWORD>singularity: image: ghcr.io/singularity-game/singularity:mainenvironment: APP_URL: <APP-URL>AUTHENTICATION_JWT_SECRET: <JWT-SECRET>DB_HOST: singularity-dbDB_PORT: 3306DB_USERNAME: adminDB_PASSWORD: <MYSQL-USER-PASSWORD>DB_DATABASE: dbSMTP_SECURE: 'true'SMTP_HOST: <SMTP-HOST>SMTP_USERNAME: <SMTP-USER>SMTP_PASSWORD: <SMTP-PASSWORD>SMTP_FROM: <SMTP-FROM>SONG_DIRECTORY: songsENABLE_AUTO_INDEXING: truevolumes: - singularity-songs:/usr/src/app/songsports: - 3333:3333volumes: 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.gitCreate 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_CHARACTERSCreate the file
ormconfig.tsin the root directory (next topackage.json) with the following content:import{DataSource}from'typeorm';exportconstconnectionSource=newDataSource({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-packRun
npm installRun
npm run startRun
npm run start-apiOpen your Browser on
http://localhost:4200The 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!


