
A Windows desktop app that visualizes your gaming history from Playnite's GameActivity logs. It shows period views (Day/Week/Month/Year), All Activity, a per-game Sessions (ledger) view, and a Top Activity overlay. The UI is themable via INI and supports PNG-skinned charts, gamepad input (XInput), and optional SFX/music.This as is inspired by NX-aćtivity log from tallbl0nde

- How it works
- Sync: On first run, the app copies Playnite's GameActivity/*.json and library/games.db into app_data/database/... next to the EXE. It also builds a local app_data/icons cache.
- Load & aggregate: Sessions are parsed and summed per game, and binned by the selected period.
- Render: A Matplotlib chart + list/ledger are rendered with your theme settings. The Top Activity overlay shows period highlights.
- Extract the ZIP anywhere you have write access (no admin needed).
- Keep this structure intact: ShadasActivityLog.exe assets/ # configs, skins, audio, dotnetlitedb.dll (see below) app_data/ # created on first run
- Double-click ShadasActivityLog.exe. Required files next to the EXE
- assets/config.ini (and any .ini/skins you use).
- assets/dotnetlitedb.dll — Required to read Playnite's games.db (LiteDB) directly. You can copy it from playnite folder.
- Why: Playnite stores library metadata (e.g., game name, CoverImage) in a LiteDB database. This DLL provides a minimal, read-only bridge so the app can resolve names/covers consistently and prefetch the correct icon per GUID without relying on brittle file guesses.
- If missing: The app still runs, but library lookups and icon prefetch may be degraded (names might fall back to IDs; covers may be missing or generic).
- Packaging note: For one-file EXE builds, include it via your packager's "add data" mechanism so it ends up in assets/ at runtime.
Data retention & Playnite deletions (read this)
-
If you delete a game in Playnite, you usually lose its playtime history in Playnite.
-
This app preserves your history. It keeps local copies of GameActivity JSON under app_data/database/playdata/, so playtime remains visible here even after you remove the game from Playnite.
-
Want it gone here too? Manually delete the corresponding JSON in app_data/database/playdata/ (and optionally its icon folder in app_data/icons/<GUID>/ and any snapshots in app_data/log_backups/backup_YYYY-MM-DD/). That's the only way to fully purge it from this app.

First launch: folder layout
On first run the app will create:
app_data/ database/ playdata/ # copied GameActivity JSON games.db # copied Playnite DB (if found) icons/ # one cover per <GUID> (prefetched/pruned) log_backups/ backup_YYYY-MM-DD/ # daily JSON snapshots (read-only backups)
Configuration (INI)
-
Bar widths/caps per period, label fonts, colors, and skin PNGs.
-
Day view can map hours to multiple "skins."
-
Backup behavior (enable/retention/auto-zip).
-
Top bar/list/ledger font sizes.
-
Scrollbar skinning (width/radius/pngs).
-
Gamepad and audio (volumes, enable/disable).
Controls & Audio
-
Gamepad: XInput (Xbox-style) supported out of the box (D-pad/ABXY/shoulders/back).
-
Audio: Optional SFX/music if Qt Multimedia is available; volumes are INI-controlled.
Logs & Support
-
A playactivity.log file is written next to the EXE. If something looks wrong (no icons, empty chart), check the log and confirm app_data/database/playdata and app_data/database/games.db exist.
Known limitations
-
Windows-only paths assumed for Playnite (%AppData%\Roaming\Playnite). If Playnite isn't installed, manually place your JSONs in app_data/database/playdata and (optionally) a valid games.db in app_data/database.
-
If assets/dotnetlitedb.dll is missing, names/covers may be incomplete (the app won't touch your Playnite DB; it is read-only even when present).
Straight talk
This EXE build prioritizes reliability and deterministic visuals. If you need a portable build without games.db access, it will run—but expect reduced metadata and icon accuracy. Keep assets/dotnetlitedb.dll in place if you want full fidelity for names and covers.
Controls
Gamepad (XInput)
-
D-pad / Left stick — navigate lists
-
Right stick — fast scroll
-
A — confirm / open (on a game = open Sessions)
-
B — back / close
-
X — Filter dialog (disabled in All Activity)
-
Y — Date picker
-
LB / RB — switch period (Day ⇄ Week ⇄ Month ⇄ Year)
-
LT / RT — decreasing/increasing date on picked filter
-
START / Menu — Sort dialog
-
L3 (press left stick) — toggle Top Activity overlay
L3+R3 — exit app
Keyboard
-
Arrow keys — navigate
-
Enter — confirm / open
-
Backspace — back / close
-
F — Filter, S — Sort, D — Date
-
D / W / M / Y — Day / Week / Month / Year
-
PgUp / PgDn / Home / End — fast scrolling
Alt+F4 — exit app
License / credits
-
App code & docs: MIT (LICENSE included).
-
Third-party:
-
PySide6/Qt (LGPLv3),
-
Matplotlib (BSD),
-
LiteDB (MIT; used via dotnetlitedb.dll),
-
Python (PSF), if embedded.
-
-
Playnite is a trademark of its owner. This project is not affiliated with or endorsed by Playnite.
Download Shadas Activity Log V1.0: https://www.mediafire.com/file/e61rvsi85fpxjs7/Shadas_PlayActivity_V1.zip/file
Download testing Database
https://www.mediafire.com/file/ik1j2br316lt243/Shadas_Activity_Testing_Database.zip/file