Privacy policy
samestream is a free browser extension that keeps a video in sync for people watching it together. This page says what it sends, where that goes, who can see it and how long it is kept. samestream is published by an individual developer (“we” below), not a company. It has no accounts and no ads. We do not sell data, and we do not use it or pass it on for advertising or anything else outside samestream.
On your device
- The extension’s scripts run on the pages and frames you open, so that samestream can find the video when you want to watch together. A small script on each page also notes the addresses of video streams the page’s own player loads and, when the player gives the browser the video in pieces, the size of each piece and a 32-bit checksum of its last 256 bytes (for the first 16 pieces of the picture and of the sound, then one each time the player’s buffer reaches another minute of the video). They are kept in the session trace (below) to learn whether they tell two files of the same length apart; samestream compares them with your partner’s to tell whether you both play the same file, and for that sends your partner the sizes and checksums of the first pieces (numbers only). The script does not change any request and reads no other part of the video. It also tells samestream when the page opens a window (never its address), and which action (such as play, pause or seek) the browser asked of the page’s own media-key handlers. While samestream looks at a paused video, the script sets play and pause handlers of its own where the page has none, for 25 seconds at most, so that a media key still plays or pauses your video.
- Until you start or join a room, nothing these scripts see leaves your device.
- The extension stores on your device the name you enter, a random participant id, your agreement to the use of session traces (below) and when you gave it, the “Skip video ads” switch, uploads that wait for a connection, and which controls on which sites did nothing when samestream clicked them. It also keeps a random key that lets the relay recognise the session traces this browser uploaded when you ask to delete them, and a count of those requests; the key leaves your device only with that request. When you choose the episode in a player yourself while samestream is looking for it, or samestream’s own clicks there find it, it keeps, for up to 20 sites and 30 days, the kinds and names of the buttons and list items used, with the season and episode numbers and the voice replaced by placeholders, so that it can do the same on that site next time. While you are in a room, it also keeps the room, your participant id, your name, the tab, the address of the room’s page and a count of the messages it sent, for up to 15 minutes after you last used it, so that samestream can rejoin after it is updated or reloaded, or its window or the browser is closed; and the times it last reloaded the page or the player, opened a page or acted on the player for you (times only), so that it does not do so too often. Removing the extension deletes them.
- In the browser’s session memory, until the browser closes, it also keeps the room you are in with its recent steps and what samestream currently makes of the page’s videos (which one is the film, where it stands, whether an ad plays), and the addresses of the frames in your open tabs, which its scripts report so that it can find the player’s frame, and the room tab’s recent navigations: their addresses and whom samestream took them for (you, the page or itself). It keeps there too the session trace in progress (its key, its numbering, and the header its uploads carry: the room, your participant id, the version of samestream, the site’s host name and when the trace began), the tab and the page of a samestream link while that link opens, and how many times its background script has started.
When you watch together
Once you have agreed to the use of session traces (below), clicking “Watch together”, or opening a samestream link, puts the tab in a room. Rooms work with samestream 4.0 and later only: an older version is told to update and joins no room. The tab then connects to the samestream relay, a server we run on Cloudflare, and sends:
- your name and your random participant id;
- playback: play, pause, seek, position and speed, and what you choose in samestream;
- about every 2 seconds while the room plays or your copy is not ready, and at once when that changes: whether your video is the room’s, its position and whether it is paused; when your copy is not ready, why (an ad, buffering, loading or finding the video, your own choice of another video, a seek that does not land, a stretch only your copy has, the player refusing to start or pausing itself), since when, where your video stopped, when samestream expects it to be ready and what it is doing about it (for example reloading the player); whether samestream is asking you something and since when you have not answered; whether you chose not to be waited for; whether your tab is in view; and the round-trip time of your connection to the relay;
- the page you are watching: its address, the address of its player’s frame, a digest of its video file’s address, and the season, episode, voice, length and frame rate of its video;
- the names of the buttons and list items in the page or its player that you clicked to choose the video (up to six), so that your partner’s samestream can choose the same;
- frame fingerprints: 64-bit numbers computed on your device from a 32 × 18 brightness grid of the video’s frames — of the playing video, and of a few moments samestream looks at to check whether your copy and your partner’s show the same episode — used to match your copy of the video with your partner’s. No images or sound leave your device. When a video’s frames cannot be read directly, samestream may capture the visible tab for a moment, reduce the video’s area on your device to the same 64-bit numbers and discard the picture. The picture and those numbers stay on your device; the session trace keeps only how near they came to your partner’s and the verdict.
- for a check of whether one copy shows the room’s episode: the moments to look at (seconds only), sent by the samestream that checks to a partner whose video is paused, and that partner’s frame fingerprints at those moments, sent back (samestream moves the paused video there for a moment, shows the picture where it stopped meanwhile, and puts it back); the relay passes each only to that one member and keeps none.
The other people in your room see your name, what you do with playback, which page you are on and which of its buttons and list items you clicked to choose the video, and why the room is waiting for you: the reason, since when and until when samestream expects it, what samestream is doing about it, which question it asked you, and whether you chose not to be waited for, were away or did not answer, and whether samestream is still checking that your video is the room’s or its picture has just stopped matching the room’s. The relay keeps the room’s state (names, playback, the current page) while the room is in use. When everyone has left, it keeps only what lets the room’s link open the video where the room stopped: the page’s address, the address of its player’s frame, the digest of its video file’s address, its season, episode, voice, length and frame rate, the playback position and random participant ids, without names. It deletes it 30 days after everyone has left.
The AI that reads the player
To find the season, episode or voice in a player, samestream may send the roles and visible names of the buttons, links, tabs, lists, menus, selects and headings of the video page and its player frames, and of the other elements those pages make clickable, saying which ones they are, which of them are selected or expanded, or look set apart from the rest, and their order, up to 96,000 characters, through the relay to Cloudflare Workers AI, which runs the model. It never includes what you type into fields, sections the extension recognises as comments, reviews or account areas, or forms with a password field. The answer, which items on the page to click, goes back only to you. The relay does not keep it and does not pass it to anyone else; your session trace holds a copy.
With those roles and names, samestream sends the model the season, episode and voice the room is watching (or, when the room’s video names none, the episode after the one it watched before), so that the model can say which items to click; it never sends the room’s page, its link, or the names of the people in the room. The model is DeepSeek V4.1 Flash, or Kimi K2.6 if that fails.
Session traces
While a tab is in a room, the extension uploads a session trace to the relay: the record of what samestream did and why. It holds playback events, the clicks samestream made on the player and what they changed, the video ads it skipped, the titles and addresses of the room’s pages and their frames, and a digest of each video file’s address, the addresses the room’s tab began to open (also ones that never opened, with the browser’s error code when there was one, or the word “refused”), the names in the room, for each frame sample only whether its picture was flat (never its fingerprint), and for each comparison with your partner’s frames only its outcome (near or far, the distance, the lag and the verdict), the sizes and checksums of video pieces (above), how near the numbers of a captured tab came to your partner’s and the verdict, when samestream could not read a video’s frames (above), and the text sent to the AI with the AI’s answer. In those addresses, the value of each query parameter and random-looking parts of the folders become short digests; the parameters’ names stay; IP addresses become a fixed placeholder; the file name stays as it is, and the part after “#” and any login details are dropped. It also holds what you chose in samestream, your answers to its questions (such as whether the video on your screen is the room’s episode), the names of the buttons and list items you clicked to choose the video (above), and when you clicked or pressed a key on the page; that record never says which key or what you typed. For each click, touch or key press it also holds its kind (pointer, touch or key), which of the page’s videos it landed on and where against it (on its picture, on its lowest part where the progress bar usually is, with how far along the video’s width, or outside it), whether a key is one players use to seek or to play and pause (never which key), and when the press ended; of the keys typed into a text field (all but Enter, which can send a form), only the first after the field got focus, marked as typed there (never which field, which key or what was typed), and nothing of the keys of a password field; when a text field on the page got or lost focus (yes or no, never which field); which media actions (play, pause, stop, seek, previous or next track) the page’s own media-key handlers were called with, and a play or pause key that reached samestream’s own handlers while it looked at your paused video; for each video event, whether the video was seeking or muted and which command of samestream’s caused it; for each navigation of the room’s tab: its kind, how the browser classed it (typed, a link, Back or Forward, a reload, a redirect), whether the page started it itself, whom samestream took it for, and its times; for each click, touch or key press, and each media key the page or samestream handled: an id, its exact time and whether the browser counted it as your activation; and the address of a link you pressed, only when that link opened in the room’s tab, shortened as above; how samestream matched your video to the room’s (by the page’s address and length, by what the page says it plays, by your answer, or by the picture) and why a match ended; the assistant’s steps: the season, episode and voice it looked for, the reading it sent, its answer, which kind of button or list item it clicked, and what each click changed; what the page says it plays: the name, series, season and episode it describes for search engines, the title, artist and album it gives the browser’s media controls, and the item the site’s player marks as current (its name and number, as the page shows it); the reports every video of the page’s frames gives about once a second (position, paused or playing, length, loading and buffering state, speed, whether it is muted or has a sound track, whether it loops or starts by itself, its size and how much of the tab it covers, whether it is in view, how many frames it drew, whether it sits over the page as an overlay, whether something of the page lies over its picture (yes or no, nothing of what covers it), whether an ad’s own skip button or its countdown is over its picture (yes or no), how long its time stood while it said it played, an error the browser reported for it, and a digest of its video file’s address); and what samestream did and why, including how sure it was about each change (for example whether a jump was yours or the player’s), how far and at what speed it placed your copy against the room’s (seconds and a rate, numbers only), which moments of your video it looked at to compare with the room’s (it moves your paused video there for a moment, shows the picture where you stopped meanwhile, and puts it back) and whether they matched (seconds and numbers only), the start and end times of subtitle lines near the moments it checks (numbers only, never their words), why your copy was not ready and what it tried (reloading the player or the page, a tap, a question to you), the room’s waits and clock as it heard them, and which of its messages the relay received. It also holds, when a room needs a newer version, each time samestream asked Chrome for its update and Chrome’s answer. At its start it notes the version and build of samestream, whether it was installed from the Chrome Web Store, its protocol, whether “Skip video ads” is on and how many times samestream’s background script has started since the browser opened or samestream was last updated or turned on. Traces are stored in Cloudflare Workers KV and deleted automatically after 30 days. Traces are stored under a random id of this browser, not under your name.
Before your first room, samestream asks you once, in its popup or on the page a samestream link opens: “Session traces are kept for 30 days. The developer may read them to fix and improve samestream.” Only after you click Agree does it start or join a room; until then it sends nothing. Your agreement is kept on your device with the date you gave it. Versions of samestream before 2.0.3 did not ask.
Research recordings
Versions of samestream before 4.0 had a switch, “Record this session for research”. Recordings made with it are deleted from the relay 30 days after they were uploaded. samestream 4.0 records none.
Who can see it
- People in your room see your name, playback, current page, the buttons and list items you clicked to choose the video and why the room is waiting for you, as above.
- Cloudflare hosts the relay (Workers, Durable Objects, Workers KV) and runs the AI models (Workers AI). Cloudflare also keeps logs of requests to the relay for a few days. A request’s log includes its address, which for a room connection contains the room id, the protocol’s version and a key that is the same in every copy of samestream, and for a trace upload the room id, your participant id, the number of the trace’s part and the site’s host name; it can also include your IP address and the approximate location Cloudflare derives from it. See Cloudflare’s privacy policy.
- The developer can read traces and recordings only with a private key that the extension does not have, and the request logs only in the relay’s Cloudflare account. We read the session traces of people who agreed (above) to find and fix problems and to improve samestream: one session at a time, and as statistics across sessions, such as how often a step works on a kind of player. Such a trace also holds what that person’s samestream saw of the room, including the other people’s names and what they did with playback. A trace of someone who did not agree, and the logs of a session’s requests, we open only to look into a problem that someone in that session reported, or to investigate abuse or a security issue. Research recordings are read to improve how samestream recognises players. To do so we may download a trace or a recording to the developer’s computer. What we learn from them, such as how a site’s player behaves, and statistics across sessions can stay in samestream’s code and notes, without your name.
Nobody else. We do not sell this data, use it for advertising or to decide anyone’s creditworthiness, or transfer it except as described here.
Your IP address: Cloudflare sees it with every request. The relay uses it only to limit how often one address can connect (30 times a minute) and does not store it itself; it can appear in Cloudflare’s request logs, as above.
How long it is kept
- Room state: while the room is in use, then without names until 30 days after everyone has left.
- The AI’s answers: not kept by the relay on their own; a copy is part of the session trace.
- Session traces: 30 days on the relay.
- Research recordings: 30 days from each upload, on the relay.
- Copies the developer downloads: a session’s trace until the fix or improvement it was downloaded for is done, or until you delete your traces; a research recording, and research material made from it, for as long as that research uses it.
- Cloudflare’s request logs: a few days.
- Data on your device: until you remove the extension; what is in the browser’s session memory, until the browser closes.
Your choices
- Apart from a request to delete your traces (below), nothing is sent until you start or join a room. “Leave” in the popup takes the tab out of it. “Don’t wait for me” lets the room play on without you.
- samestream asks your agreement once, before your first room, and starts no room without it. It stays on your device until you remove the extension; to delete the traces already uploaded, use “Delete my traces” in the popup.
- “Delete my traces” in the popup has the relay delete, within a few minutes, every session trace this browser uploaded, and marks them deleted so that copies the developer downloaded with its trace tool, the only way it downloads traces, are deleted the next time the tool runs. Traces that the other people in your room uploaded also hold your name and what you did with playback, and traces from before you last installed samestream are not linked to this browser; to have those deleted, write to us.
- Remove the extension to stop everything and delete what it stored on your device.
- To ask what we hold about you, or to have your traces or recordings deleted, from the relay and from any copies, before they expire, write to us with roughly when and on which site you watched, and the name you used in the room.
Chrome Web Store
The use of information received by samestream adheres to the Chrome Web Store User Data Policy, including the Limited Use requirements.
Contact
Questions and requests: the contact address on samestream’s Chrome Web Store page. If this policy changes, this page changes with it and shows the new date.