SHUTTERPARTY

Privacy Policy — SHUTTERPARTY

Last updated: 2026-08-24

This document describes what the SHUTTERPARTY Twitch Extension actually does, checked against the source. Every retention figure below is a constant in src/ebs/src/lib.js.

Published by Noriaki Tabuchi, Japan.

Contact: tabuchin.room@gmail.com


The short version

What we receive

When you press the button, the extension sends Twitch's signed token for your session, and — if the press was paid — the receipt Twitch issued for that purchase. It also sends whether you have asked to stay anonymous, and — with a receipt, never on its own — the display name that receipt gave it. From these we read:

WhatWhere it comes fromWhy
opaque_user_idTwitch's signed tokenRate limiting, and "one free credit per minute"
channel_idTwitch's signed tokenWhich channel the press belongs to
Bits amount and transactionIdTwitch's signed receiptTo move the goal bar, and to refuse the same receipt twice
Display nameThe receipt Twitch issues for a Bits purchase, which carries it. A press that came with no receipt carries no name, whatever it claimsTo caption the photograph that was bought — the only kind that is ever captioned — and, when that purchase is the one that fills the bar, to say who started the SHUTTER PARTY. Truncated to 25 characters, and not used at all if you have asked to stay anonymous

We do not read your real Twitch user id. The opaque_user_id is a pseudonymous identifier issued by Twitch; it differs per channel and per viewer, and nothing in this service can reverse it.

We do not receive: your email address, your Twitch login, your IP address as stored data, your chat messages, or anything you type.

What we store, and for how long

State lives in a Cloudflare Durable Object, one per channel, currently pinned to the Asia-Pacific region. Per channel:

StoredRetention
opaque_user_id → the times of your recent presses30 seconds, then dropped
opaque_user_id → when you last advanced the bar for free, and how many free photographs you have taken this broadcast60 seconds for the first, until the broadcast ends for the second
opaque_user_idthat you asked for your name not to appearUntil you turn it off and press again, which clears it. Only stored for viewers who ask for it, and all it can say is that they asked
Bits transactionId → when it was honoured24 hours, after which no receipt bearing it can still be presented. This is what stops a receipt being spent twice
Display name of a buyer whose paid photo has not been drawn yet, or whose purchase has filled the barUntil that photograph is taken, or that SHUTTER PARTY is announced — normally under a second, and never past the end of the broadcast it was bought in
The channel's bar total, goal, and settingsFor as long as the channel uses the extension

Nothing here is a profile, nothing is used for advertising, and nothing is sold or shared with any third party.

Three of these outlive the minute, each for its own reason. A receipt identifier is kept for 24 hours because that is how long a receipt can still be presented, and forgetting it sooner would let the same purchase be spent twice. The count of free photographs is kept until the broadcast ends, because that is what a per-broadcast allowance means. And choosing to keep your name off a photograph is a decision you made — it would be worth little if it forgot itself when you closed the tab, so it is kept until you change it back. Changing it back deletes the record rather than storing a "no". Everything else in the table is bookkeeping that stops meaning anything within a minute.

A buyer's name has an outer limit, and not only a typical one. It is held because a purchase that has not been photographed yet still has a photograph owed to it — the broadcaster's OBS may be restarting, or several purchases may be queued ahead of it. That is a matter of seconds while a broadcast is running. But a broadcast can also simply end with one still waiting, and a name kept "until the photograph is taken" would then be kept for as long as the channel existed. So when a channel comes back after a gap long enough to be a different broadcast, the waiting photographs are let go of, and the names with them. The Bits are not affected: they reached the goal bar when the button was pressed, and the bar is still there.

What we never store

The broadcaster's side

A broadcaster running SHUTTERPARTY may choose a folder on their own computer for the photographs to be saved into. That is off unless they turn it on, and those files are theirs: they live on their machine, we cannot read them, and we cannot delete them.

The photographs appear on a public Twitch broadcast, which means anyone watching can see and record them. That is what the extension is for. A broadcaster controls what can be photographed by choosing a capture scene and by choosing which scenes the button works in.

Cookies and similar technologies

The viewer-facing extension sets no cookies and stores nothing in your browser.

Children

The extension is not directed at children. Twitch's own Terms of Service require account holders to be 13 or older.

Your rights

Under the GDPR and similar laws you may ask what we hold about you, ask for it to be corrected or deleted, and object to processing.

Practically, there is a limit worth stating plainly: we cannot identify you. The only identifier we hold is Twitch's per-channel opaque id, and we have no way to connect it to a person or an account. If you want a specific record removed, you would need to tell us the opaque id yourself — the extension's own frame is the only place it appears. In almost every case the answer is simpler: everything tied to a viewer is deleted automatically within 60 seconds, with three exceptions: a receipt identifier, which is deleted 24 hours after the purchase; the count of free photographs you have taken, which is cleared when the broadcast ends; and a request to keep your name off photographs, which your next press clears once you have turned it off. Until then it is doing the one thing it was stored for — keeping your name off — and it cannot say anything about you beyond that you asked.

Requests: tabuchin.room@gmail.com

Sub-processors

Twitch (Amazon)Hosts the extension, issues the tokens, processes Bits
CloudflareRuns the backend service and stores the per-channel state described above

Changes

If this policy changes materially, the extension version notes will say so. The date at the top always reflects the current text.

Terms of Service · Twitch