Synchronized video viewing with chat and other features. Lightweight modern implementation and a very easy way to run locally.
Default channel example: https://synctube.onrender.com/
- Control video playback for all users with active
Leaderbutton - Start watching local videos while uploading them to the server, before upload completes
- External
vtt/srt/asssubtitles support - External audiotrack / voiceover support
/30,/-21, etc chat commands to rewind video playback by seconds- Hotkeys (
Alt-Pfor global play/pause, etc) - Compact view button with page fullscreen on Android
- Playback rate synchronization (with leader)
- Links mask:
foo.com/bar${1-4}.mp4to add multiple items - Override every front-end file you want (
user/resfolder) - Native mobile client
- Enable
requestLeaderOnPauseto allow global pause by any user, withoutLeaderbutton - Enable
unpauseWithoutLeaderto allow global unpause for non-leaders
- Youtube (videos, shorts, streams and playlists)
- Streamable
- VK
- Peertube (with
pt:url prefix) - Raw mp4 videos and m3u8 playlists (or any other media format supported in browser)
- Iframes (without sync)
- Open
4200port in your router settings (port is customizable) npm ciin this project folder (NodeJS 14+ required)- Run
node build/server.js - Open showed "Local" link for yourself and send "Global" link to friends
As alternative, you can install Docker and run:
docker build -t synctube . docker run --rm -it -p 4200:4200 -v ${PWD}/user:/usr/src/app/user synctube
or
docker compose up -d
- (Docker container hides real local/global ips, so you need to checkout it manually)
If you want to enable Cache on server feature for Youtube player, you can also run:
npm i https://github.com/RblSb/ytdlp-nodejsAnd install ffmpeg on your server system, it's only used to build single mp4 from downloaded audio/video tracks. Default cache size is 3.0 GiB.
It just works, but you can also check user/ folder for server settings and additional customization.
- Login with any nickname
- Add your video url with "plus" button below (youtube or direct link to mp4 for example)
- Now it plays and syncs for all page users, well done
- You can click "leader" button to get access to global video controls (play/pause, seeking, playback speed)
- If you want to restrict permissions or add admins/emotes, see
Configurationabove
/1h9m54- Command format to rewind video by1 hour 9 minutes 54 seconds/-1h9m54- Same, but rewinds back/ad- Rewind sponsored block in active YouTube video/fb(/flashback) - Rewind video to a prev time if someone rewinded/restarted video accidentally/volume 2.6- Change player volume in0-1range or boost it in0-3range for quiet videos/clear- Clear chat. Admin clears chat globally/help- Show initial tutorial message
/ban Guest 1 2h- Ban userGuest 1ip for2 hours/unban Foo(/removeBan) - Unban userFoo/kick Foo- ForceFoodisconnection until page reload/dump- Download state dump to report issues/crash- Crash server if you need to test your auto-restart solution
- Create app and commit repo to get build
- Remove
user/folder from.gitignoreand commit it to change default configuration - Add
APP_URLconfig var withyour-app-link.herokuapp.comvalue if you need to prevent sleeping when clients online
- Install Haxe 4.3, VSCode and Haxe extension
haxelib install allto install extern libs- If you skipped
Setupsection before:npm ci - Open project in VSCode and press
F5for client+server build and run
- Redesign by Austin Riddell
- Original idea by Calvin Montgomery
- Default emotes by emlan