Privacy

Frames never leave your PC. The only thing that ever goes online is the text of your event log: to the model you choose, with your own key, when a recap is written; and to your account, if you sign in and turn sync on.

What the app reads

While a supported game is running, the app captures the screen twice a second and runs text recognition on a few fixed areas: the centre banner, the boss bar, the item pop-up, the subtitles. Frames are processed in memory and discarded. None is saved unless you ask for debug frames on the command line.

It never reads or changes the game's memory or files. It watches the process list only to notice when a supported game starts and stops.

What it stores, on your PC

One append-only log per session, in %LOCALAPPDATA%\previously-on. Each line is one event, like this:

{"kind": "event", "ts": "2026-09-16T21:33:08.330", "t_rel": 396.5,
 "type": "boss_engaged", "text": "Grafted Scion", "conf": 0.998,
 "region": "boss_bar", "raw": ["Grafted Scion"], "frame_index": 793}

Beside each log, a .recap.json holds the recap, your playthrough's state (place, objective, open threads, NPCs met), and the conversations it attributed. Settings and your API key are in config.json, readable only by your user account.

What it sends, and when

Only when a recap is written, at the end of a session or when you ask for one. The app sends a compact transcript of that session's log, plus the previous playthrough state, to OpenAI or Anthropic, whichever you picked, using your key. This is the start of a real one:

Session 2026-09-16 22:02 · 59m · 0 deaths · Glintstone Dragon Adula still standing

[0:00:02] dialogue:
  #0 She is the deadliest of all Bloody Fingers. She's felled many an old hand already.
  #1 But in spite of her cessblood zealotry, Eleonora is a proud knight.
#6 [0:00:48] item: Golden Seed
#7 [0:00:59] area: Liurnia of the Lakes
#8 [0:01:22] item: Thin Beast Bones ×2 (#8-#9)
#17 [0:03:33] area: Academy of Raya Lucaria
#20 [0:04:41] checkpoint: LOST GRACE DISCOVERED

That text is all the model gets. There are no frames, no screenshots, no file paths and nothing about your PC. What the provider does with it is covered by your agreement with them (OpenAI, Anthropic).

Without a key, nothing is sent at all. Stats, the timeline, search and the share card work fully offline.

What we collect

Without an account, nothing. The app has no telemetry, no analytics and no crash reporting. This website runs no trackers, and sets no cookie unless you sign in.

If something is wrong in a session, Export for a bug report… on that session's page saves the log and recap as a zip, for you to attach to a GitHub issue if you choose. It holds no frame, no key and no path.

Accounts and sync

An account is optional, and sync is off until you turn it on, one game at a time, in the app's Settings. Frames, screenshots, API keys and your settings never sync.

What the account stores

Everything synced is private: only you, signed in, can see it. Dialogue, recaps and conversations are never shown to anyone else.

Where it goes

The account server runs on Fly.io, in Paris. Your account, your linked PCs, and each synced session's numbers and recap text are kept in a database at Neon, in Frankfurt. The files themselves are kept in Cloudflare R2, in Europe. Neon and R2 encrypt what they store; the account server keeps nothing itself. This site is served by Cloudflare. Sign-in emails are sent through Resend, which sees your address and the link. Nothing is sold or shared, and no one else gets your files.

The one cookie

Signing in sets po_session on api.previouslyon.gg: it keeps you signed in for 30 days, and does nothing else. Signing in with Discord also sets po_oauth for up to ten minutes, to check the reply really comes from Discord. No other cookie, no tracker, no analytics.

How long it is kept, and leaving

On the free plan the cloud keeps the last 30 days of sessions; older ones are deleted from our side every day, never from your PC. From your account page you can download everything as a zip in the app's own folder layout, delete one game's sessions, sign out a linked PC, or delete the account, which deletes every synced file at once.

Check it yourself

The app is open source. Three modules make network requests: recap/provider.py (recaps, to the model you picked), and app/account.py and app/sync.py (sign-in and sync, to api.previouslyon.gg, only once you sign in).