Čeština

Privacy

How Kastry handles data

Kastry is a control panel for Twitch and Kick streamers. To work, it stores and processes some data about streamers, the viewers of their channels and people who send tips. This page describes which data, why, for how long and who we share it with. We never sell data to anyone and never use it for advertising.

Effective from 6.11.2026 · This English version is a translation; the Czech version is legally binding.

Who runs Kastry

Kastry is run by Ondřej Koubek (yzii230 on Twitch) and Tadeáš Svoboda (LokiNotLoki on Twitch), who is the controller of the personal data described below.

You can write to us at [email protected]. Use the same address for requests to access or delete your data.

Streamers (anyone with a Kastry account)

  • Data from Twitch: account ID, login and display name, profile picture and Twitch access tokens. We need the tokens so Kastry can do what the streamer turns on (alerts, chat bot, ads, clips) on the channel's behalf. We store them encrypted. We never see your Twitch email or password.
  • Data from Kick, when the streamer logs in with it or connects it: account ID, channel name and address, profile picture and access keys to Kick. We store them encrypted. We don't keep the email Kick sends and never see the Kick password.
  • Everything the streamer sets up in Kastry: overlays, uploaded images and sounds, commands, texts, rules and so on.
  • Editors the streamer has given access to: their Twitch ID and name and the last 200 actions they took in the panel.
  • Kastry's developers (the operator and a second developer) can open any channel's panel with the same rights as the streamer, so they can fix a problem at the streamer's request. Whatever they change shows up in the streamer's change history as “Kastry support”.
  • The stream schedule the streamer enters, and the history of their last 1,500 streams: when they started and ended, title, category, viewer count every 5 minutes and the stream's numbers (follows, subs, bits, raids, number of chat messages and chatters, who gifted the most subs and sent the most bits, and a tip summary). The schedule is sent to Twitch and Discord only if the streamer turns that on or sends it, and so is a day off message to chat or Discord. So that Kastry AI writes the day off message in the streamer's style, it keeps the last 8 day off messages the streamer sent and the last 20 of their own messages in their chat (without commands and links), as long as Kastry AI is on for the channel. When the streamer has a message suggested, the language model provider gets them as examples. Planned messages (the text, the time and where they go) are kept until they are sent and for a week after. For the automatic day off, Kastry keeps the last 7 messages it sent itself, so the next one is different.
  • When the streamer connects a Discord server: the server's ID and name and the bot's settings, including the texts of the bot's messages, welcomes and scheduled messages, and the IDs of messages the bot has sent.
  • When the streamer connects Instagram (professional accounts only): the account's ID, name and type and the Instagram access token (encrypted). Every 5 minutes Kastry uses it to load the account's new posts, reels and stories (image or video, caption, link and time) and sends them to the streamer's Discord server if they turn that on. It only remembers the IDs of posts already sent (the last 300) and never stores the images or videos themselves. Instagram can be disconnected at any time on the Social Suite page or in Instagram's settings (Apps and websites), which deletes the token.
  • When a member joins the Discord server or clicks a role button: the bot gives or removes the role directly on Discord and welcomes new members if the streamer turns that on. Kastry stores nothing about it.
  • When the streamer turns on Vertical clips: Kastry downloads the clip from their channel that they choose from Twitch, turns it into a vertical video and stores it for the channel with the captions and the facecam crop they mark. At most 20 videos are kept, each for at most 14 days, and the streamer can delete them at any time. The downloaded clip is deleted right after rendering. A clip the streamer plays while trimming is kept on the server for at most 30 minutes after it was last played, then deleted. For the caption style preview it keeps the picture of the channel's newest clip, the one Twitch shows publicly for the clip. When captions are on, it sends the clip's audio to Google (Gemini) to make captions from it. A guest, the game or a viewer's message read aloud may be heard in the clip; chat text and viewers' names are not sent. The caption text stays with the video and the streamer can edit it. When each word is spoken is worked out by a model right on the Kastry server, so the audio doesn't leave the server for that.
  • When the streamer turns on tips: their Stripe account ID or, if used, the PayPal credentials they enter (we store the secret key encrypted), and when a payment confirmation last arrived from them.
  • When the streamer uses the IRL relay: their encoder and OBS addresses and keys, and during the stream, every second, the bitrate, latency, packet loss and, for each connection (SIM), its share and what the phone app reports about it (latency, load), without IP addresses, for 90 days, plus a summary of the last 30 streams. This is used for signal stats and to train Kastry AI, which learns from the data of all channels using the IRL relay to spot an upcoming drop. The trained model contains only numbers (weights), not the data itself or anything that could identify a channel. The video itself only passes through the server to the streamer's OBS and is not stored. The IP address of the encoder and OBS appears only in the server log. For IRL switching we store the scene settings and the Twitch names of IRL managers the streamer enters. The OBS dock sends Kastry only scene and source names and whether OBS is streaming. When the streamer turns on OBS from Moblin, we store the address and password for Moblin; Moblin's requests and OBS's answers (status, scenes, audio, a preview image) only pass through the server between Moblin and the dock and are not stored. The OBS password stays in the dock only. When the streamer signs in to Kastry in the Kastry IRL Source plugin in OBS, we store a fingerprint (SHA-256) of its sign-in token with the channel and when it signed in and was last used, until it signs out or for 180 days after it was last used. The plugin gets from Kastry only the channel's name, whether the IRL stream is live and its bitrate, and the IRL stream's address for OBS.

Viewers of channels that use Kastry

When a streamer uses Kastry, Kastry reads their chat and the events on their channel. Depending on what the streamer has turned on, the following is stored about viewers:

  • Twitch name together with points, watch time, last chat message and time of last activity. Used for loyalty points and for command variables (e.g. when the bot last saw you here). Kept until the streamer deletes it or closes their account. When the streamer imports points or watch time from StreamElements, Kastry downloads their channel's public StreamElements leaderboard (names and numbers) and keeps the higher number for each viewer.
  • When Kastry also runs on Kick or YouTube: for a viewer who chats there, their Kick ID and name, or their YouTube channel ID and name, and when they first and last chatted there. Used so a viewer can be found by name, isn't mixed up with a viewer of the same name on Twitch, and so Kastry knows who is chatting for the first time (Twitch says this itself). Anyone who doesn't chat there for 180 days is forgotten.
  • Newcomers in chat: when the streamer has Stats › Newcomers turned on (the default), for a viewer who chats on the channel for the first time Kastry remembers their ID and name on Twitch, Kick or YouTube, when they first chatted and in which stream, when Kastry last saw them (a chat message or watching the live stream), and when they first came back for another stream. It doesn't store messages. The streamer sees the numbers and the names of those who came back. The record is deleted after 30 days, and immediately if the streamer turns counting off.
  • Channel events (follow, sub, bits, raid, point rewards, a watch streak a viewer shares in chat) with the name and any message: the last 200 events. Daily summaries contain no names. For follows we remember the account ID so a repeated follow doesn't give points twice.
  • Names for the end-of-stream credits (who followed, subscribed, donated, chatted) for the current or last stream.
  • How many people wrote in chat during a stream and who comes back to later streams (Stats › Chat loyalty): for this, Kastry remembers only fingerprints (hashes) of the names of those who chatted, for the last 60 streams, not the names. It counts messages per day and per stream as numbers only.
  • Giveaway entries, song requests (name and link), quotes, wheel of fortune spins (the last 20), viewer challenges (who contributed how many points) and the countdown (who extended the timer, the last 30 entries).
  • Quotes from chat messages: when a mod or the streamer saves a viewer's message as a quote (by replying in chat or in the OBS dock), Kastry stores the message text, the author's name, when it was saved and the game being played on stream. The quote shows in the streamer's panel and in chat when someone calls it up with a command. Kept until the streamer deletes it.
  • The !permit command: the name of a viewer a mod has allowed to post a link is kept only in the server's memory, for at most a minute.
  • Moderator log: the last 100 messages deleted by the chat filter, that got a timeout or ban, or that the insult filter would have deleted (name, message and reason), so the streamer can see whether the filter also catches normal messages.
  • Insult filter: when the streamer has it on, Kastry AI judges chat messages and tip messages right on our server. It stores the text only in the moderation log and among the training samples (see the next item). To give a longer penalty for repeated insults, it remembers the viewer's Twitch ID and the times of their insults for the channel, for as long as the streamer sets (at most 30 days). To adapt to the channel's mods, for borderline messages it stores only a number (how much the message looks like an insult) and whether a mod deleted it, without text, names or IDs, for 60 days.
  • Samples of chat messages without names, from which Kastry AI learns to recognise insults in Czech: messages deleted by a mod or the filter, the last messages of viewers who got a timeout or ban, messages the insult filter found possibly insulting (without emotes, links and @mentions), and about 5% of other messages. At night it sends the text of messages deleted by a mod or found possibly insulting by the insult filter to language model providers that don't use it for training (Groq and Cloudflare; it asks two and the verdict counts only if they agree) to decide whether they are insults - this is the label used for training. We send them to no one else. Training happens only on our server. Kept for at most 180 days. The streamer can turn this off in Chat protection.
  • The “Catch-up summary” feature keeps chat messages only in the server's memory, for at most an hour, and never stores or sends them anywhere.
  • The unified OBS dock chat keeps the latest 150 Twitch, Kick and YouTube messages in server memory only. Kick messages are also sent to Chat Box, Emote Wall and custom overlay widgets and their editor previews; they may be shown publicly on stream. This relay does not save messages to disk.
  • Shared chat on Twitch (the streamer shares chat with another channel): Kastry only shows messages from the other channel's viewers in the dock with that channel's name, and chat protection may delete them in the streamer's chat (they are then in the moderation log). No points, watch time, stats or Kastry AI come from them. Who from the other channel chatted (Twitch ID and login) and the IDs of their messages are kept only in the server's memory, for at most 6 hours, so their deleted message isn't used as a training sample and their ban isn't put on the shared banlist.
  • Shared banlist: when the streamer turns it on and shares it, the ID and login of a viewer banned on their Twitch or Kick channel, the channel and the time of the ban are visible to other Kastry channels that use the banlist. Messages and the reason for the ban are not shared. The record is kept for at most 180 days and is deleted when the streamer stops sharing or removes the ban from the list.
  • Raid shield: when it's on, Kastry watches the streamer's Twitch chat for waves of bots and new accounts, only on our server. For viewers who chat there for the first time, send the same message as other accounts or chat during a raid, it asks Twitch when their account was created and keeps that only in the server's memory, for at most a day. Accounts it flags during a raid (name, account age and the start of the message) are kept only in memory, for at most 2 hours after the raid, and shown only to the streamer and their team. When the channel uses the shared banlist, whether the viewer was banned elsewhere also counts. A ban of flagged accounts is written to the moderation log and, when sharing, to the shared banlist, like any other ban.
  • Minigames (duel, heist, quiz) only change viewers' points. Who plays with whom is kept only in memory until the game ends.
  • When the streamer allows a chat feature only for followers or has a command with follow age, Kastry asks Twitch whether and since when the viewer follows the channel. It keeps the answer only in the server's memory, for at most 30 minutes, and never stores it.
  • For Hype moments (automatic clips) we remember only message counts and words written by several people, never whole messages or names.
  • When the streamer has “Learn from chat” turned on, Kastry AI learns during the stream which moments are worth a clip. For the channel it stores at most 600 chat surges: the time, the number of messages and people, and words written by several people, without messages or names. From Twitch it takes only the time and ID of clips viewers made on the channel, not who made them. It applies only to that channel, is never sent anywhere and is deleted when the streamer turns learning off.
  • Clip suggestions after the stream (unless the streamer turns them off): during the stream, every 10 seconds Kastry remembers only the number of chat messages and the number of people who chatted, without messages or names, plus big events: a raid with the name of the channel that sent it, and the size of a tip, the number of bits or gifted subs without names. Messages from the partner channel in shared chat don't count. After the stream it picks at most 8 suggestions (the time in the stream, the reason and a suggested title) and deletes the message counts shortly after the stream. Suggestions are kept from the last 3 streams, for at most 14 days. The language model provider that suggests the clip title gets only the kind of moment, the numbers and the stream's category. A clip on Twitch is only created when the streamer creates it.
  • For custom commands we count how many times and when they were last used (counts for the last 30 days and in total), without names, so the streamer can see which commands chat uses. The numbers are deleted together with the command.
  • When a viewer links Discord on the kastry.net/ucet page (or linked earlier through the kastry.net/propojit page, which is gone): their Discord ID and name, the ID, login and display name of the Twitch account connected in their Discord, when the link was made and the roles Kastry gave them on Discord. When logging in, Discord shows Kastry the list of accounts connected in Discord; Kastry takes only Twitch from it and stores neither the rest nor the access from Discord. The link can be removed on the same page at any time.
  • Points for Discord: when the streamer switches them on, the bot on their Discord server notes every minute which linked viewers are in a voice channel with other people or wrote a message there in the last 10 minutes. The bot doesn't read the text of messages and notes nobody who isn't linked. The note is overwritten every minute and Kastry adds points to the viewer's Twitch account from it. Off stream, it remembers for the channel until the end of the day how many points for Discord each viewer got that day, for the daily cap.
  • Kick follows: the first follow Kastry receives after a channel is connected is saved as the viewer ID, username and date for followage. Earlier follows are unknown and repeat follows do not replace the date. The record remains until the account is deleted; removal can be requested at [email protected].
  • When Kastry also runs on Kick: when a viewer last chatted, only in the server's memory, so they get points for watching (Kick doesn't say who is watching). It's forgotten after 10 minutes without a message, or when the stream on Kick ends.
  • When a viewer links Kick with Twitch on the kastry.net/ucet page: their Twitch and Kick ID and name and when the link was made, once for all of Kastry. Points and watch time from Kick are added to the Twitch account on every channel when linking, and stay there after unlinking. Logging in with Twitch or Kick asks for nothing else; Kastry throws the access away right away and doesn't store the email Kick sends. Who is logged in on the page is remembered only by a cookie in the viewer's browser. The link can be removed on the same page at any time.
  • When a viewer joins the wheel of fortune themselves (with a chat command or on the kastry.net/kolo/channel page): the name they enter, or, when logging in with Twitch or using the chat command, their Twitch ID, login and display name, until the streamer removes them from the wheel or clears the list. The name shows on the wheel on stream and on that page, and the bot tags the winner in chat. Logging in with Twitch asks for no permissions; Kastry throws the Twitch access away right away. Who joined is remembered only by a cookie in the viewer's browser, so they can join the next wheel with one click. You can leave the wheel on the same page at any time.

Tips

When a viewer sends a tip through a Kastry page, we store the name they enter, their message, the amount, the currency and the payment ID, for the last 10,000 payments on each channel. Older payments are merged into daily totals that keep only the name and amount of the day's biggest tip and totals per name for the leaderboard of the most generous viewers. The name and message show on stream (alert, text-to-speech, leaderboard), because that is what a message with a tip is for. Card or PayPal account details are processed directly by Stripe or PayPal. Kastry never sees them.

After a streamer's account is deleted, each payment keeps only its date, payment method, amount, currency, payment ID, fees and whether it was refunded or disputed, and older payments keep their daily totals, all without the donors' names and messages. This is kept for 5 years from the end of the year the payment was made in, because accounting and tax rules require it.

In Kastry, the streamer can download their channel's data, including the names and messages that came with the tips they received.

When the streamer turns on Video with a tip and a viewer adds a YouTube video link to a tip, we also store with the tip the video ID, the time it should start from, how many seconds will play, and the video's title and length from YouTube. Until payment, the video is stored with the pending payment. After payment it waits in the channel's queue (name, amount, message and video) until the streamer plays or declines it; the last 30 handled videos stay in the queue. On stream the video plays through YouTube together with the name and the amount.

Sharing pictures

When someone logs in with Twitch on kastry.net/upload and uploads pictures (up to 20 under one link), we store them, their type and size, when they were uploaded and until when they stay, and the uploader's Twitch ID, login and display name. Photos (jpg, webp) and cropped pictures are drawn again by the browser before the upload, which removes the location and camera data (EXIF). GIFs are uploaded as they are. The server's operational log records the uploader's login and the IDs of the picture and the album.

Anyone with the link can see the pictures. The uploader's name is not shown with them; only the operators of Kastry see it. An album uploaded by a streamer has the background they set in Kastry. The pictures are deleted at the time the uploader picks (1 hour to 30 days), or at once when the uploader deletes them. Only a streamer with a Kastry account can keep them forever; they then stay until the streamer deletes them. A link in the chat of a channel that uses the Unified chat in the OBS dock shows to the streamer in the dock as a preview. Discord and other apps download the picture when someone sends them the link.

For a reported album we store only the reason and time of the report, not who reported it. The operators can delete the album and block the uploader from uploading; that deletes all of their pictures, and the block keeps their Twitch ID and display name. The Twitch login asks for no permissions and Kastry discards Twitch's access right away. Who is logged in on the page is remembered only by a cookie in the browser.

Website visitors

The website uses only the cookies needed to log in and to remember your language. We don't use analytics or advertising cookies. We keep IP addresses in memory only briefly to limit abuse (too many requests). The server keeps operational logs, which are deleted after about 30 days. Your browser downloads the website's fonts from Google Fonts, so Google will see your IP address.

Why we're allowed to

  • For streamers: so we can provide the service they turned on themselves.
  • For viewers and those who send tips: the legitimate interest of the streamer and of us in the channel's features working (points, alerts, moderation, credits) and in chat safety. Message samples without names, from which Kastry AI learns to recognise insults, are part of chat safety; questions without names are so that Kastry AI answers questions in chat correctly.
  • For linking Discord and joining the wheel of fortune: the consent of the viewer, who does it themselves and can undo it.
  • For picture sharing: to provide the service the uploader chose, and our legitimate interest in keeping illegal content from spreading through Kastry.
  • For the payment records kept after an account is deleted: a legal obligation (accounting and tax rules), Art. 6(1)(c) GDPR.

Who we share data with

Only with services Kastry can't work without, and only what they need:

  • Contabo: the server in the European Union that Kastry runs on.
  • Cloudflare: connecting the website to the internet, backups and email forwarding.
  • Twitch: login, chat, channel events, clips the streamer creates (including from clip suggestions), and the stream schedule when the streamer lets Kastry write it there.
  • Kick: login, chat and channel events, when the streamer uses Kick.
  • Discord: the bot on the streamer's server and account linking. When the streamer turns it on, also their posts, reels and stories from Instagram.
  • Instagram (Meta): when the streamer connects it, only logging in to their account and reading their own posts. We don't send viewers' data to Instagram.
  • Stripe and PayPal: tip payments.
  • Poskytovatelé jazykových modelů, které Kastry AI používá k psaní textů: Groq, Google (Gemini), OpenAI, Anthropic and Cloudflare. Posíláme jim only titulek a kategorii streamu (i těch naplánovaných v rozvrhu, s jejich časy), souhrnná čísla, zadání, která streamer sám napíše, názvy a odpovědi příkazů a u Hype momentů slova, která v chatu napsalo víc lidí. Zprávy diváků ani jména jim neposíláme. Zvuk klipů, ze kterých streamer dělá video na výšku s titulky, dostává jen Google (Gemini) (víc v části o streamerech).
  • YouTube, BetterTTV, 7TV and StreamElements: the video title in a song request and the title and length of a video a viewer adds to a tip (YouTube gets only the video link), the channel's emote list, and the channel's public leaderboard and command list when the streamer imports them. When the streamer pastes their StreamElements token, Kastry uses it once to download their timers, quotes, counters, commands and overlays (including the images and sounds they have uploaded to StreamElements, which it saves among their uploaded files) and never stores the token. We don't send them viewers' personal data.

Some of these services are based in the USA. Data is transferred there on the basis of the European Commission's standard contractual clauses or the EU–US Data Privacy Framework, depending on what each service uses.

How long we keep data

  • A streamer's account and settings, for as long as they use the account. They can delete it themselves in Kastry under Backup and migration › Delete account: Kastry disconnects Twitch, Kick, YouTube, Instagram and Discord at once and deletes the PayPal Client Secret, after 7 days it deletes the channel's data and its shared images, and until then the deletion can be cancelled. They can download the channel's data and the income report before that; after the deletion Kastry can no longer provide them.
  • Kastry does not delete the Stripe account it created for tips. It can be closed on request at [email protected].
  • Records of tip payments kept after an account is deleted (without the donors' names and messages, see Tips): 5 years from the end of the year the payment was made in.
  • The record of an account deletion request and of what Kastry did while deleting (account ID and times, no names): 3 years.
  • Viewers' data as described above. The streamer can delete points and watch time in the panel at any time.
  • Nightly backups of a channel's settings (overlays, commands, bot settings and the team with its permissions, without access keys) are stored unencrypted in Cloudflare R2 for at most 180 days, and the server also keeps the last 7 backups of each channel. We don't make a full backup of the server. Backups of a deleted account are gone after 180 days at the latest.
  • The server's operational logs: about 30 days.

Your rights

You have the right to know what data we hold about you, to have it corrected or deleted, to restrict its processing, to object to it and to receive it in a machine-readable form. Write to us at [email protected]; we'll reply within a month at the latest. As a viewer you can also go straight to the streamer, who can delete your points and watch time themselves.

The streamer downloads their channel's data themselves in Kastry under Backup and migration › Download my data.

If you think we handle data wrongly, you can complain to the Czech Office for Personal Data Protection (uoou.gov.cz).

Changes

When Kastry starts storing or sending something new, we'll update this page and change the date at the top.