Browser extension for synchronized video playback.
- Synchronize play, pause and seek actions between users.
- Send messages to each other using the chat feature.
- Free and open source. Have complete control over your data.
- Requires hosting your own sync server.
- Currently only supports Netflix.
This extension is based on a client-server architecture, and has two components:
- A browser extension (the client) to relay actions to / from the server.
- A server (seekserver) to coordinate communication between clients.
The browser extension can be installed from the
Chrome Web Store.
A simple websockets based python server is available at seekserver/server.py
.
To get started, every user needs to install the extension on their browsers.
However, only instance of the server can cater to multiple clients.
Follow these steps for detailed instructions on how to install the extension and setup the server.
You can either install the extension from the Chrome Web Store, or download the latest version of the extension as a ZIP file and manually install it. For simplicity, we recommend the Chrome Web Store.
You can install the extension from the Chrome Web Store.
- Download this repository. Go to https://github.com/nikhilweee/seeksync/,
click on the green
Code
button on the top right, then clickDownload ZIP
. Unzip the file after downloading. - On Chrome, open the extensions page. On the top right of the toolbar, click
⋮
>Extensions
->Manage Extensions
, or go tochrome://extensions
from the address bar. - Enable developer mode. Click the toggle on top right which says
Developer mode
. - Install the extension. Click on
Load unpacked
and navigate to the unzipped download location. Select the innerseeksync
folder.
The server is a simple python script that can be hosted on any machine with a
publicly reachable IP address. The server script is available at
seekserver/server.py
. An easy way to run the server is to host it on any cloud
VM provider with a public IP. You can either run the server manually, or use
Docker Compose. The instructions assume that you are running the server on a
linux machine with a public IP of 11.22.33.44
.
Just navigate to seeksync/seekserver
and spin up a container:
$ # Run this from seeksync/seekserver
$ docker compose up -d
The server should be ready to serve connections at 11.22.33.44:5678
A working installation of Python is required.
-
Create a virtual environment (optional)
$ # Run this from seeksync/seekserver $ python3 -m venv .venv $ source .venv/bin/activate
-
Install dependencies
$ pip install -r requirements.txt
-
Start the server
$ python server.py
Like before, clients should be able to connect to 11.22.33.44:5678
Follow these steps to setup a connection to the server and enjoy watching videos in sync.
- Activate the extension by clicking its icon on the toolbar. If the icon isn't visible, click on the extensions button (shaped like a jigsaw) on the toolbar and click SeekSync. You should see the sidepanel open up.
- On the sidepanel, click
⚙
and enter some details.- In the server field, enter the public IP of your server
11.22.33.44:5678
. - The room name can be anything as long as all users use the same room name.
- Choose any username to identify yourself in the room.
- In the server field, enter the public IP of your server
- Click the toggle right next to the settings icon. If everything goes well,
you should see a message saying
Connected to <server address>
.
- To watch videos together as a group, ask all users to connect using the same server and the same room. Make sure each user sets a unique username.
- Start watching something on a supported platform. Other users should get a message with the link to the video that you are watching. Ask them to click on that link so they are "on the same page".
- From here on, every user watching the same video should have synchronized playback. Whenever someone performs an action (pause, play or seek), the action will be performed for all users. A message will also appear on the chat window every time someone performs an action.
- If you face any issues, try refreshing the page to trigger a refresh.
- To disconnect and exit the room, press the toggle next to
⚙
.
Additional documentation can be found in DOCS.md.