All-in-one webbased karaoke system with YouTube support
Project description
Syng is an all-in-one karaoke software, consisting of a backend server, a web frontend and a playback client. Karaoke performers can search a library using the web frontend, and add songs to the queue. The playback client retrieves songs from the backend server and plays them in order.
Currently, songs can be accessed using the following sources:
- YouTube. The backend server queries YouTube for the song and forwards the URL to the playback client. The playback client then downloads the video from YouTube for playback.
- S3. The backend server holds a list of all file paths accessible through the s3 storage, and forwards the chosen path to the playback client. The playback client then downloads the needed files from the s3 for playback.
- Files. Same as S3, but all files reside locally on the playback client.
The playback client uses mpv for playback and can therefore play a variety of file formats, such as mp3+cdg
, webm
, mp4
, ...
Client
To host a karaoke event, you only need to use the playback client. You can use the publicly available instance at https://syng.rocks as your server.
Installation
The preferred way to install the client is via Flathub.
Alternatively Syng can be installed via the Python Package Index (PyPI). When installing the client it is mandatory to include the client
flag:
pip install 'syng[client]'
This installs both the playback client (syng client
) and a configuration GUI (syng gui
).
Note: When installing via PyPI, you need to have mpv installed on the playback client, and the mpv
binary must be in your PATH
.
Running
The simplest way to run Syng is through the configuration GUI. Executing syng
without parameters will open the GUI, from which you can start configure and start the playback client. You can start the playback client without the GUI using syng client
.
Web clients should connect to the server using a room code, that can be configured in the client.
Configuration
You can either configure Syng using the GUI or via a text editor by editing ~/.config/syng/config.yaml
. There are the following settings:
server
: URL of the server to connect to.room
: The room code for your karaoke event. Can be chosen arbitrarily, but must be unique. Unused rooms will be deleted after some time. Note: Everyone, that has access to the room code can join the karaoke event.secret
: The admin password for your karaoke event. If you want to reconnect with a playback client to a room, these must match. Additionally, this unlocks admin capabilities to a web client, when given under "Advanced" in the web client.waiting_room_policy
: One ofnone
,optional
,forced
. When a performer wants to be added to the playback queue, but has already a song queued, they can be added to the waiting room.none
disables this behavior and performers can have multiple songs in the queue,optional
gives the performer a notification, and they can decide for themselves, andforced
puts them in the waiting room every time. Once the current song of a performer leaves the queue, the song from the waiting room will be added to the queue.last_song
:none
or a time in ISO 8601. When a song is added to the queue, and its ending time exceeds this value, it is rejected.preview_duration
: Before every song, there is a short slide for the next performer. This sets how long it is shown in seconds.key
: If the server, you want to connect to is in private or restricted mode, this will authenticate the client. Private server reject unauthenticated playback clients, restricted servers limit the searching to be client only.
In addition to the general config, has its own configuration under the sources
key of the configuration.
YouTube
Configuration is done under sources
→ youtube
with the following settings:
enabled
:true
orfalse
.channels
: list of YouTube channels. If this is a nonempty list, Syng will only search these channels, otherwise YouTube will be searched as a whole.tmp_dir
: YouTube videos will be downloaded before playback. This sets the directory, where YouTube videos are stored.start_streaming
:true
orfalse
. Iftrue
, videos will be streamed directly usingmpv
, if the video is not cached beforehand. Otherwise, Syng waits for the video to be downloaded.
S3
Configuration is done under sources
→ s3
with the following settings:
enabled
:true
orfalse
.extensions
: List of extensions to be searched. For karaoke songs, that separate audio and video (e.g. CDG files), you can usemp3+cdg
to signify, that the audio part is amp3
file and the video is acdg
file. For karaoke songs, that do not separate this (e.g. mp4 files), you can simply usemp4
.endpoint
: Endpoint of the s3.access_key
Access key for the s3.secret_key
: Secret key for the s3.secure
: Iftrue
usesssl
, otherwise not.bucket
: Bucket for the karaoke files.index_file
: Cache file, that contains the filenames of the karaoke files in the s3.tmp_dir
: Temporary download directory of the karaoke files.
Files
Configuration is done under sources
→ files
with the following settings:
enabled
:true
orfalse
.extensions
: List of extensions to be searched. For karaoke songs, that separate audio and video (e.g. CDG files), you can usemp3+cdg
to signify, that the audio part is amp3
file and the video is acdg
file. For karaoke songs, that do not separate this (e.g. mp4 files), you can simply usemp4
.dir
: Directory, where the karaoke files are stored.index_file
: Cache file, that contains the filenames of the karaoke files in the s3.
Default configuration
config:
key: ''
last_song: null
preview_duration: 3
room: <Random room code>
secret: <Random secret>
server: https://syng.rocks
waiting_room_policy: none
sources:
files:
dir: .
enabled: false
extensions:
- mp3+cdg
index_file: ~/.cache/syng/files-index
s3:
access_key: ''
bucket: ''
enabled: false
endpoint: ''
extensions:
- mp3+cdg
index_file: ~/.cache/syng/s3-index
secret_key: ''
secure: true
tmp_dir: /tmp/syng
youtube:
channels: []
enabled: true
start_streaming: false
tmp_dir: /tmp/syng
Server
If you want to host your own Syng server, you can do that, but you can also use the publicly available Syng instance at https://syng.rocks.
Installation
Installation is done via pip.
pip install 'syng[server]'
Running
Running syng server
will start the server.
Configuration
Configuration is done via command line arguments, see syng server --help
for an overview.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file syng-2.0.1.tar.gz
.
File metadata
- Download URL: syng-2.0.1.tar.gz
- Upload date:
- Size: 317.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.10.6-10-MANJARO
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aab01688e1ff47183097b8d0a1a7382c775a28f4564dc0955639b1e65f6134db |
|
MD5 | 4e4795209b2f5769eef24abde75ab6c4 |
|
BLAKE2b-256 | 50733e00a401e7acab4f1a71d1e4e449d44205760cf3931e30c0c1c1a572e589 |
File details
Details for the file syng-2.0.1-py3-none-any.whl
.
File metadata
- Download URL: syng-2.0.1-py3-none-any.whl
- Upload date:
- Size: 274.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.10.6-10-MANJARO
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 696230dfc606cefb435319063813236f0be2cb9fa4d6223d0071b346a38e53c6 |
|
MD5 | c2ab3df5bef77faa019e9945d37aefec |
|
BLAKE2b-256 | db6ab711404ec82456ef32662376040fe9a8dac8a49a50fd0c551cc50ab35b5a |