Watch together, in sync, each from your own copy

A six-character code puts two or more players on the same position, the same pauses and the same episode. Only the timeline travels between you — the film plays on each screen from that person's own file, link or torrent, at full quality.

Updated

Sharing a screen sends everybody a re-encoded copy of one person’s picture, at whatever quality the call allows. Frame Player does something else: every player in the room plays the film itself, and what the room shares is the timeline — where playback is, whether it is paused, how fast it runs and which file is on. Each screen shows the film at the quality of its own copy, and the room keeps every one of them on the same frame.

Starting a room

  1. Open Watch together… in the player’s menu and choose Create a room.
  2. Send the code to whoever is joining, or copy the link. The link opens a page with a button that starts Frame Player straight into the room, and tells anybody who does not have it yet where to get it.
  3. They enter the code in the same window, or click the link. For a torrent or a link their player opens what you are watching by itself; for a file on your disk they open their own copy. Either way they land on the same frame.

Two machines on one timeline: a seek on either lands both on the same frame.

From then on a pause, a seek, a change of speed or a jump to the next episode on any machine happens on all of them. The host can make the room follow only them with Only the host controls playback.

What is shared, and what stays yours

Position, pause, speed and the file that is playing are the room’s. Your volume, your window and the look of your subtitles stay yours. Two things sit in between, and the host decides them for the room:

  • The audio track is shared by default. A room is watching one film, and hearing a different soundtrack from the person next to you is a strange way to do it.
  • Subtitles are not shared by default. One person needs them and another does not; sharing the choice would mean switching them off for somebody who cannot follow the film without them.

Tracks travel as a description — language, title, codec — rather than as a track number, because the Russian dub that is track 2 in one copy is often track 3 in another.

What each person needs

How easy joining is depends on where the film comes from.

  • A torrent is the best case. The room shares the torrent’s identity, and every guest’s player connects to it by itself — nobody pastes a magnet — and fetches the file from the same swarm. It does not have to finish first: a room can watch a torrent that is still downloading, each person at the full quality of the release, with every player fetching the part the room is about to watch. A guest who joins in the middle of a season is watching within moments, and moving to the next episode moves everybody.
  • A link works when each person’s player can open it; pages that need yt-dlp are resolved on each machine separately.
  • A file on your disk cannot be sent. Each person opens their own copy. The player compares a fingerprint of the file and its length and says which of three things it is: the same release, a different rip of the same film (right length, different file — close, but a few frames can differ), or a different file. None of them is refused; a guest watching a different cut on purpose is told, not stopped.

How it stays in sync

Keeping two players together is mostly about not making things worse.

Small differences are corrected with speed, not with a jump. Jumping to fix a third of a second means decoding from the previous keyframe, which can stall a 4K file for two seconds and leave it further out than it started. Playing at 103 % for ten seconds fixes the same difference with nothing to see or hear, since mpv keeps the pitch where it was. Only a difference of more than two seconds is fixed with a seek.

The room waits for whoever is buffering. Everybody pauses at the same point and playback resumes by itself once they are ready. A pause somebody asked for is never lifted this way, and a player that has gone quiet is not allowed to hold the room for more than 45 seconds.

Compared with the usual ways

ComparedFrame PlayerSyncplayTelepartyScreen sharing
What you can watchYour own files, links and torrentsYour own filesFilms on Netflix, Disney+ and other servicesAnything on one screen
Each person needsFrame Player and a way to play the filmSyncplay, a supported player and their own copyA browser extension and their own subscriptionThe call app
PictureEach person’s own copy, full qualityEach person’s own copyThe service’s streamA re-encoded stream of one screen
A torrentEveryone is connected to it automatically — nobody pastes a magnetEach person finds and downloads it—Only the sharer needs it
Still downloadingWatch together while it downloads, each at full qualityEach person downloads it first—The sharer’s screen, re-encoded

Syncplay deserves a word: it has done this for mpv, VLC, MPC-HC and IINA for years and it is very good at it. The difference is that Frame Player has it built in, and that for a torrent or a link it opens the film for each guest instead of expecting everyone to have it already.

What the room server keeps

The room server exists to pass a timeline between players. It knows the room code, the names people chose to show, and what the room is watching; a file from a folder you marked private is shared as “hidden”, so the timeline syncs and its name never leaves your computer. There are no accounts and no chat, nothing is written to disk, and a room is forgotten five minutes after the last person leaves. The server is open source, and if you would rather run your own, its address is a setting.

Questions

Does everyone need their own copy of the video?

Everyone needs to be able to play it, and how depends on what it is. For a torrent or a link the player opens it for each person by itself. A file on somebody's disk cannot be sent, so each person opens their own copy and the player says whether it is the same release, a different rip of the same film, or a different file.

Does the video go through your server?

No, and it never will — that is the design, not a limit. The room server passes the timeline between players (position, pause, speed, which episode) and nothing else. Each player gets the film from its own disk, website or torrent.

What does the room server know?

The room code, the names people chose to show, the timeline, and what the room is watching — a torrent's identifier, a link, or a fingerprint of a local file. A file in a folder you marked private is shared as "hidden", and the room still syncs. Nothing is written to disk, and a room is forgotten five minutes after the last person leaves.

What if somebody's connection is slow?

The room waits. When one person is still buffering, everybody pauses at the same point and playback resumes by itself once they are ready. A player that stops responding altogether is not allowed to hold the room for more than 45 seconds.

Can I run my own room server?

Yes. It is a small open-source program with no database, in the same repository as the player, and its address is a field in Settings › General.

Open something.It will remember where you stopped.

$ brew install --cask risenxxx/tap/frame-player

Version 1.32.0macOS builds are notarizedWindows builds are unsigned and stop once at SmartScreen