Blog Post · MiSTer Activity Log

How I turned stuff into things.

Written by Robin64 20/07/2026

--- MiSTer Playlog Viewer

Why?

I hang out in a nice little retro gaming channel on Discord, and one user posted a very nice looking activity log for Mischief Makers which was apparently from his emulation frontend on Android. I was kind of jealous. Why can't I have nice pretty activity logs too?

All my retro gaming these days is done on a MiSTer FPGA system (specifically a SuperStation One), so I looked into it a little bit. There didn't really seem to be anything out there, which was a little disheartening. But then I came across playtime.sh, a small script for MiSTer systems written by wizzo. Wizzo does a ton of amazing tools, and I'm already using his excellent Zaparoo Frontend on my MiSTer, so I looked into it. This tool would create and then update a playtime.db file on the root of the SDCard every so often, and I wanted to see if there was anything I could do with that.

After copying the file from the MiSTer to my PC, I quickly figured out the format and threw together a very crude page that could load that file and parse the information.

The first working version

The first version deliberately kept the scope small. You uploaded playlog.db in the browser, and the site showed the most recently played games, total playtime, and the systems that appeared in the database.

The core data comes from the playlog.db file. All I needed to do was look at start and stop events to figure out play sessions and go from there.

The earliest version focused on one job: making the contents of playlog.db readable. Sadly you can't get data from before playlog.sh was installed, for obvious reasons, but here we have data for both Secret of Mana and Super Mario All-Stars!

So what about now?

The current version is closer to a personal gaming dashboard than a file viewer. It keeps the playlog attached to an account, lets the owner update it, and provides several ways to explore the history.

Recent activity

See the latest games played, their systems, playtime, and recent sessions.

System pages

Browse every game associated with a particular MiSTer core or platform.

Detailed game pages

Inspect times played, average playtime, longest playtime, dates, and monthly activity.

Calendar view

See which games were played on each day and open them directly from the calendar.

Personal screenshots

Add up to three screenshots to a game while keeping them tied to the account.

Shareable profiles

Create a read-only public link without exposing account controls or private details.

The main view combines recent activity with a broader summary of the owner's MiSTer history.

Each game gets its own page.

Adding RetroAchievements

Thanks to odelot, MiSTer had recently gotten a bunch of cores with RetroAchievements support. This got me very interested, and so I started playing through a bunch of old games just to test out the feature. Honestly, I was kind of hooked. Individual achievements themselves don't interest me too much, but the site also has criteria for marking a game as "Beaten", and then beating every achievement for a game marks it as "Mastered". Okay, that sounds fun. So I set out to beat Secret of Mana on the MiSTer using this shiny new RA-enabled core, and I did. Actually I'm close to Mastering it now, but I digress.

You may have noticed in some screenshots above that it seems to be using data from RetroAchievements. Well this is thanks to RA having a nice easy-to-use API. A user registered on RA can just generate a Web API key, and then that key can be stored in their Playlog Viewer account for the site to make calls as needed. So if a user does link to RA, they get a whole lot more functionality on Playlog Viewer, including seeing achievement progress on games and seeing games both Beaten and Mastered on the full calender view.

Of course, I know some people detest achievements, so it was important to keep this entirely optional, but I really do think it greatly enhances the site if you do link and play with RA cores on MiSTer.

Local playtime and external achievement progress appear together on the same game page.

Adding Screenshots

I dunno, I just thought this would be neat! I decided to let a user attach three screenshots they may have taken while playing to each game. I figured that if you beat a game and take a screenshot, like I often do, it might be nice to keep it here. And then one screenshot seemed stingy, so I made it three.

A good use would be to show the ending screen if you beat a game.

Automatic MiSTer sync

Manually copying playlog.db from the MiSTer worked, but it quickly became the weakest part of the experience. I wanted a way for the browser to just find the MiSTer on the local network and grab the file, but that doesn't seem possible. I had to rethink.

Then I wondered if a script could be made to upload files from the MiSTer itself. As it turns out, the answer was yes! After a bit of tinkering, a few fails, and a bunch of errors, I had a script that would upload the playlog.db file to a location of my choosing. Now, a user can download a file, unzip it to their /Scripts/ folder on the MiSTer, and have the MiSTer device to all the work.

The installer also checks MiSTer's configuration and enables recents=1, creating a backup before changing anything. Each account uses a private sync token, which can be revoked and regenerated from the dashboard.

The moment the MiSTer successfully uploaded its own playlog was when the project stopped feeling like a personal little project and more like something everyone could use.

Automatic syncing removes the annoying step of having to find the playlog.db file each time.

What I learned while building it

The biggest lesson was that small tools become useful through iteration. The original database reader was functional, but the project became something I wanted to keep using only after many rounds of polish and workflow improvements.

Remove repetitive steps

Automatic syncing was more valuable than adding another statistics panel.

Real data finds real bugs

Different ROM sets, long titles, discs, dates, and systems exposed edge cases quickly.

Presentation changes meaning

Raw playtime becomes more engaging when connected to dates, achievements, and screenshots.

Polish compounds

No single spacing or naming fix transforms the product, but hundreds of them do.

What comes next

MiSTer remains the centre of the project, but one thing I'd like to add is support for Zaparoo. Zaparoo isn't just a frontend for MiSTer devices, it's a launcher for other platforms, and because it's made by wizzo too, I should be able to figure out a way to let users pick if they are using a MiSTer setup or a Zaparoo setup.

Possible future additions include combined timelines, richer public profiles, more advanced statistics, improved journaling and screenshots, and imports from other retro-gaming platforms. Who knows, really? Open to suggestions.