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 DISCOVEREDThat 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
- Who you are: your email address if you sign in by email; your Discord user id, display name and verified email if you sign in with Discord. Nothing else from Discord.
- Linked apps: the name of each PC you link (its computer name, which you can see on your account page), when it was linked and when it last synced. The app's sign-in token is kept in Windows' credential store on your PC, and only as a one-way hash on our side.
- For each synced session, the same two files your PC has: the
.jsonlevent log, every line of it (events like the one above, including dialogue lines), and the.recap.jsonbeside it. Nothing is added to them. - Numbers worked out from those files (play time, deaths, tries per boss, areas), so your playthrough page loads without re-reading them.
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).