The Webcam Problem

The Python barcode scanner worked well in principle. Point your webcam at a PAL PS1 barcode, get an instant lookup: does this variant exist? Which images are missing? Do I need to photograph this before it goes back on eBay?

The problem was the webcam. A mediocre webcam introduced enough noise and distortion that scans were unreliable, it would take too long for the script to find and scan the barcode and the camera took a long time to focus on the right object.

The fix was obvious once I thought about it: my phone is a far better camera than any webcam I own, it is always within arm’s reach, and it goes where the games are.

Rebuilding as an Android App

The Android app replicates everything the Python scanner did, but with a proper camera pipeline behind it. The core loop is the same: scan an EAN-13 barcode, look it up against the PALPSXDB database, report back on what we have and what we are missing.

The key difference is reliability. The phone camera handles varying light conditions, worn barcodes, and awkward angles without needing multiple fallback strategies. A scan that used to take two seconds of uncertain jitter now locks in almost instantly.

The database lookup data is hosted on the site as a structured JSON file, which the app pulls down and caches locally. This means the lookup works offline once the cache is warm, and updating the database on the site automatically propagates to the app on next sync.

Scanning a game, checking database coverage, and starting a photo session.

Photo Session Mode

The biggest addition over the original Python tool is photo session mode.

Once a scan confirms a variant needs documentation, the app can open a guided photo session. It walks through each required category - front, back, disks, manuals - prompting for shots in sequence. When the session ends, the images are automatically named and filed using the correct variant slug, ready to drop straight into the asset pipeline.

Previously this meant scanning a game, noting down the variant slug, taking photos in the camera roll, and copying files across to specific folders. That process took time and was labourious. The session mode eliminates all of that friction by handling naming and filing at capture time because we have the data there already, so we can leverage it in getting the right images into the right folders.

The EAN Tracking Improvement

The original scanner queried a local SQLite copy of the database directly as it ran from my site development environment. That worked but required the execution to have access to the local database file the website uses to generate the site content.

The new system uses a purpose-built lookup file generated from the database and served from .com. It contains every known EAN mapped to its variant details and current image coverage status. The app caches this locally and refreshes it on demand.

This means the EAN tracking is always tied to the live state of the database. When new variants are added or image coverage improves, regenerating and deploying the JSON file updates every device using the app automatically - no manual database copying required.

The New Standard Pipeline

This is now the only pipeline I use for games coming through my hands.

Pick up a game. Scan it. The app tells me immediately whether it is in the database, which variant it is, and whether the documentation is complete. If images are missing, I start a photo session on the spot. The files land in the right place with the right names. When I next run an update for the site, all is done automatically.

The combination of a reliable camera, instant database lookup, guided photo sessions, and automatic file naming has removed most of the friction from the documentation workflow. Games that would have sat in a pile waiting to be dealt with later now get processed immediately, while they are still in hand.


The PALPSXDB Android scanner is part of the ongoing effort to document every PAL PlayStation variant with high-quality images and accurate metadata. If you’re working with PAL games and want to contribute, get in touch.