ChessCam Privacy Policy

ChessCam helps you recognize moves from a physical chessboard, review games, and optionally share a live game view with another device. This notice explains what stays on your device, what ChessCam sends and why, and your choices and rights.

Who is responsible

Marius Phillips, Orresteinen 21 A, 5916 Isdalstø, Norway, is the data controller for the data described here: the party responsible for it under data protection law (the GDPR). For privacy questions or to use your rights, contact marius.e.phillips@gmail.com.

Camera processing

ChessCam uses the camera to recognize the board and pieces. Camera frames are processed on the device. ChessCam never uploads photos, video or sound. The only camera images that can leave the device are the recognition-data images described below, and only after you allow it.

Internal test builds used by the ChessCam team can keep a recording of how moves were recognized, for testing. Those recordings stay on the test device and are never uploaded. Released versions of ChessCam do not include this feature.

Game data

Games, move lists, FEN positions, PGN text and analysis results are stored on your device unless you choose a sharing or export feature, or they are part of recognition data you allowed.

For a game over the board you can type the players' names. They are optional, can be any nickname, are stored with the game on your device and are written into its PGN. They leave the device only if you share the game live or export it.

If you fix a misread move with Fix move, the corrected move replaces the recorded one. The list of other moves it offers is kept in memory only for the current match.

Coaching

Key moments, the live coach and the mistake deck use the Stockfish engine on the device. The live coach is off until you turn it on, and it works only against the bot and in analysis, never in two-player, online or Lichess games. Positions you save to the mistake deck stay on this device; you can clear the deck in Settings.

Live watching and online games

If live watching is on, ChessCam sends the current game state (moves, FEN, PGN with any player names you typed, the watch code and the update time) to the ChessCam server so another device can watch the game live. Anyone with the watch code can see this, including the player names. Turning live watching on reserves the watch code on the server at once, with an empty board. Online games with a friend use the same server. The server deletes a game about 6 hours after its last update. A live-shared game is never used as recognition data.

Two separate data streams

ChessCam can send two kinds of data, each with its own switch in Settings: Send diagnostics and Help improve recognition. Diagnostics are on by default. Help improve recognition is off until you allow it: the first time you open the camera for a game that could be used, ChessCam asks once, and Not now keeps it off. You can change either switch at any time. Turning a switch off stops that stream at once and deletes anything it has not yet sent from the device. The two streams are sent at different times, stored in different places and share no ID, so they are never linked to each other.

Diagnostics

Diagnostics help us find bugs and slow devices. They hold: errors, as the error type and a short code made from the app’s own file names and line numbers where the error happened; the last 30 app actions, as fixed labels such as Play or Undo, in order and without times; the state at the error (the page, the screen, the recognition engine, whether the models were loaded and whether a clock was running, never the position or the moves); the app version and build; the system version and the browser’s main version, such as iOS 26.0 and Safari 26; the device model (iPhone or iPad on Apple devices, the Android model name, or “desktop”); load and speed measurements as ranges; counts of recognition and connection problems; and feature use such as screen views, taps and settings choices. Error messages and stack traces are never sent.

They never hold an ID, the time of day, your location, camera images or game content. They are sent in small batches while the app is idle. Our server dates each report with the day it arrives. It uses the country of the network request only for monthly totals, never in a report, and stores a country with fewer than 20 reports that month as “other”. An Android model is kept only once at least 20 app sessions that month report it; until then it is stored as “other Android”. Individual error reports are kept for 90 days, totals for 24 months.

Recognition data

Recognition data helps us train and tune move recognition. It is collected only after you allow it, and only from camera games on this device, two-player or against the bot, that start from the normal starting position and last at least 10 moves (counting each side’s move). It never comes from online, Lichess, tournament or live-shared games, or from games that were already in your library.

For each such game it holds: the full list of moves; up to 12 moments where recognition had trouble (a move you fixed, an undo, a mismatch, a close call, a recovery, a stall or a disagreement) and 2 to 4 random moves for comparison, each with the position before the move, the move played, recognition scores (numbers) for up to 4 frames, the 3 likeliest moves and how close they were; your move fixes (what was recorded, what you chose, and roughly how soon); counts for the game; the lighting, board angle and board size as ranges; a rough device speed class (low, mid or high); and the app version, such as 1.2.

It also holds up to 12 camera images per game, taken around the moments where recognition had trouble: before, during and after the move. Each image is the part of the camera view the recognition model reads, as a JPEG of 480 × 288 pixels and about 150 KB: the board with a margin, widened to the model’s shape. That often covers most of the camera view, and all of it when the board fills the frame. The images can show hands and arms, other people at or behind the table and their faces, and anything else in that view.

Recognition data never holds an ID, an account, a name, the device model, your location, country or language, or the time of day. A random number per game only lets our server replace a partial save with the final report; the server removes it at its next daily batch, or after about 14 days when the final report never arrives. When you leave the app during a game, a small part without images is sent. The full report and its images are sent after Exit game, after leaving the camera screen, or at the next launch, after a random wait of 30 seconds to 5 minutes. Our server holds new reports until its daily batch, removes the per-game number, mixes the day’s games together and stores them with the month only, in Cloudflare’s EU region. Recognition data is kept for 24 months.

Your rights

You have the right to access your personal data, to have it corrected or deleted, to restrict its use, to data portability, and to withdraw your consent at any time.

Right to object. You can object at any time to diagnostics, which rest on our legitimate interest. Turning Send diagnostics off in Settings stops them at once; you can also write to marius.e.phillips@gmail.com.

Neither stream holds a name, an account or an ID, so once data has left your device we cannot tell which reports are yours, and cannot show, correct or delete them for you. Turning a switch off stops new data and deletes what has not been sent. Games stored on your device can be deleted in History.

You can complain to a data protection authority: in Norway, Datatilsynet (the Norwegian Data Protection Authority), or the authority where you live or work.

Where data is kept

The ChessCam website and server, including live watching, online games, diagnostics and recognition data, run on Cloudflare, which processes the data for us as our processor. Recognition data is stored in Cloudflare’s EU region. Diagnostics are stored in Cloudflare’s network, where Cloudflare chooses the location, which can be outside the EEA.

Cloudflare, Inc. is based in the United States, and a request can be handled in a Cloudflare data center outside the EEA, including in the United States. These transfers are covered by Cloudflare’s data processing addendum, which includes the EU Standard Contractual Clauses, and by Cloudflare’s certification under the EU-U.S. Data Privacy Framework.

Local game history stays on your device until you delete it. Live-shared and online games: about 6 hours after the last update. Diagnostics: individual error reports 90 days, totals 24 months. Recognition data, including images: 24 months.

Lichess (optional)

If you sign in to Lichess to play a Lichess game, ChessCam talks to lichess.org directly from your device. Your Lichess sign-in token and the moves of those games go to Lichess, not to the ChessCam server, and Lichess’s own privacy policy applies. The token stays on your device until you disconnect Lichess or it expires. Disconnecting also asks Lichess to revoke a token you signed in with, but not one you pasted yourself. Lichess games are never used as recognition data.

Children

ChessCam has no accounts and does not ask for ages. Player names for a game over the board are optional and can be nicknames. Diagnostics work the same way for every user. Recognition data is collected only after someone taps Allow on this device. Both can be turned off in Settings at any time, including by a parent on a child’s device.

Feedback

Feedback opens a draft in your email app. You choose what to write and whether to include app version and platform details. The message is sent only when you send the email.

Changes

We update this notice when what ChessCam collects changes. The date at the top shows the last update.