Watch videos, listen to music or tune in for a live stream and all that with your friends. Web-SyncPlay is a software that lets you synchronise your playback with all your friends with a clean modern Web-UI written in React for Next.js, designed using Tailwind CSS and build on top of react-player.
YouTube videos
Facebook videos
SoundCloud tracks
Streamable videos
Vimeo videos
Wistia videos
Twitch videos
DailyMotion videos
Vidyard videos
Kaltura videos
Files playable via <video> or <audio> element as well as:
HLS streams
DASH streams
Everything that is extractable via yt-dlp and allowed via CORS
I would have loved to keep the original Player-UIs for ease of use, but they are usually being embedded as an iframe, as such the software would be limited to the included API of the vendors. This is sadly not an option if you want to make sure that everyone stays synchronised and there is no feedback loop of commands.
To run this software on your own hardware, you will need to have Docker or any other container engine installed.
For ease of use there is an example docker-compose.yml file provided, which you can copy and adjust to fit your deployment.
Simply create a .env file in the same directory and run docker-compose config to see if the docker-compose file is
correctly configured.
Otherwise, you could simply run the images separately via the docker command:
To start the temporary in memory database redis:
docker run -d -p 6379:6379 redis
Now run the actual service via:
docker run -d -p 8081:8081 -e REDIS_URL=redis://your-ip:6379 websyncplay/websyncplay
To get started with running the project directly via node, clone the repository via:
git clone https://github.com/Web-SyncPlay/Web-SyncPlay
When you are trying to develop on the project simply run
yarn dev
You can now view the project under http://localhost:3000 with hot reloads
To run an optimized deployment you need to run the following two commands:
yarn build && yarn start
| Parameter | Function | Default |
|---|---|---|
SITE_NAME |
The name of your site | "The Anime Index" |
PUBLIC_DOMAIN |
Your domain or IP, remove trailing slash | "https://piracy.moe" |
REDIS_URL |
Connection string for the redis cache database | "redis://redis:6379" |
After deployment open your browser and visit http://localhost:8081 or however you address the server. It is strongly recommended putting a reverse proxy using TLS/SSL in front of this service.
Warning: currently not functional, if you want to keep using it use the v1.0 tag
A necessary prerequisite is to make your video files available to this service as e.g. HLS/DASH streams or as a simple natively playable file via an endpoint publicly accessible via a URL. Make sure your CORS setting allow content to be fetched from this service.
Having started the service on one of your servers you can then embed the included embed into your website. You don't have to manually update the iframe when playing a playlist, as this is already handled automatically.
<YOUR_ENDPOINT>: your endpoint from where this service will be accessible, e.g. https://sync.example.com
<ROOM_ID>: the room ID in which participants will be kept in sync. It is recommended to handle the generation of new
ID-string on your side, you don't have to do anything on the server side here, the room will be auto created.
<YOUR_MEDIA_URL>: publicly accessible media url, from which you serve your video/audio
For playing only a single file the service can be embedded via
<iframe
allow="fullscreen; autoplay; encrypted-media; picture-in-picture"
style="border:none;"
width="100%"
height="100%"
src="https://github.com/Web-SyncPlay/Web-SyncPlay/raw/v2.0.1/<YOUR_ENDPOINT>/embed/player/<ROOM_ID>?url=<YOUR_MEDIA_URL>"
>
</iframe>
If you want to sync playback across a playlist, you need to adjust the embed
<START_INDEX>: index of the queue array, indicates from which point playback should start
<ITEM_1>, <ITEM_2> ... <ITEM_N>: playlist item, the same as <YOUR_MEDIA_URL>, they need to be passed in the
order you want them to be ordered
<iframe
allow="fullscreen; autoplay; encrypted-media; picture-in-picture"
style="border:none;"
width="100%"
height="100%"
src="https://github.com/Web-SyncPlay/Web-SyncPlay/raw/v2.0.1/<YOUR_ENDPOINT>/embed/player/<ROOM_ID>?queueIndex=<START_INDEX>&queue=<ITEM_1>&queue=<ITEM_2>...&queue=<ITEM_N>"
>
</iframe>
You can already disable the player UI by adding &controlsHidden=true to the src link of the embed.
It is also possible to disable the syncing handler by adding &showRootPlayer=true. This is not recommended as this
will break the sync-process of the playback.
It is planned to create an api to communicate with the player and be able to use your own custom player to control playback.
$ claude mcp add Web-SyncPlay \
-- python -m otcore.mcp_server <graph>