Skip to main content

Batch catalogue physical collections using visual dividers (QR codes) and automated image processing

Project description

visual-cataloguer

Batch catalogue physical collections using visual dividers (QR codes) and automated image processing.

The Problem

You have thousands of items (retro games, books, vinyl, tools) in boxes. You need them in a searchable database. Manual entry would take weeks.

The Solution

  1. Print QR code dividers (one per location/box/shelf)
  2. Photograph: divider → items → items → black frame → divider → ...
  3. Run viscatalog process ./photos
  4. Browse your collection via web UI or CLI

How It Works

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│ Load Image  │────▶│  Classify   │────▶│   Process   │
│ (ARW/JPG)   │     │ Image Type  │     │ Accordingly │
└─────────────┘     └─────────────┘     └─────────────┘
                           │
           ┌───────────────┼───────────────┐
           ▼               ▼               ▼
     ┌──────────┐    ┌──────────┐    ┌──────────┐
     │ LOCATION │    │  BLACK   │    │   GAME   │
     │ DIVIDER  │    │  FRAME   │    │   ITEM   │
     └──────────┘    └──────────┘    └──────────┘
  • Location Divider: QR code or text (e.g., "BOX-1", "SHELF-A3") - starts a new location
  • Black Frame: Dark image - ends current location
  • Game Item: Everything else - catalogued with OCR

Features

  • Merges photos from multiple cameras by EXIF timestamp
  • QR code detection (OpenCV) + OCR fallback (Tesseract)
  • RAW file support (.ARW Sony files via rawpy)
  • SQLite database with JPEG BLOBs (single portable file)
  • SHA256 deduplication for resume capability
  • Web interface for browsing, searching, and editing
  • Mobile-friendly UI (works on iPad/phone)
  • Robust error recovery (auto-creates UNKNOWN boxes for missed dividers)

Installation

# From PyPI
pip install visual-cataloguer

# With web interface support
pip install visual-cataloguer[web]

# Or clone and install
git clone https://github.com/retroverse-studios/visual-cataloguer.git
cd visual-cataloguer
uv sync --extra web

System dependencies:

Usage

Process Images

# Process all images in a directory (scans recursively)
viscatalog process -i ./photos -d ./collection.db

# Works with any folder structure:
#   ./photos/
#   ├── camera1/         (RAW files)
#   ├── camera2/         (JPEGs)
#   └── day2/
#       ├── alice/       (mixed formats)
#       └── bob/

# View statistics
viscatalog stats -d ./collection.db

# List locations
viscatalog list --locations -d ./collection.db

# Search items
viscatalog search "zelda" -d ./collection.db

Web Interface

# Start the web server
viscatalog serve -d ./collection.db --port 8000

# Then open http://localhost:8000

The web interface provides:

  • Browse: Grid view of all items with thumbnails
  • Search: Full-text search across titles and OCR text
  • Filter: By location, platform, completeness, listed/unlisted status
  • Edit: Update titles, platforms, notes, and location assignments
  • eBay workflow: Mark items as listed

API

The web server exposes a REST API:

# List items
curl http://localhost:8000/api/items

# Search
curl "http://localhost:8000/api/search?q=zelda"

# Get item details
curl http://localhost:8000/api/items/123

# Update item (e.g., reassign to different location)
curl -X PATCH http://localhost:8000/api/items/123 \
  -H "Content-Type: application/json" \
  -d '{"location_id": "SHELF-A3", "title_manual": "Legend of Zelda"}'

# Mark as listed on eBay
curl -X PATCH http://localhost:8000/api/items/123/mark-listed

# Get stats
curl http://localhost:8000/api/stats

Full API docs at http://localhost:8000/docs

Development

# Run tests
uv run pytest

# Type checking
uv run mypy cataloguer

# Linting
uv run ruff check cataloguer

License

MIT License - see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

visual_cataloguer-0.4.0.tar.gz (131.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

visual_cataloguer-0.4.0-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file visual_cataloguer-0.4.0.tar.gz.

File metadata

  • Download URL: visual_cataloguer-0.4.0.tar.gz
  • Upload date:
  • Size: 131.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for visual_cataloguer-0.4.0.tar.gz
Algorithm Hash digest
SHA256 86391a8b4c0cb9ee418f951f5b6a413cdda75d9b27345e5cedf7659a81224cd0
MD5 81498e27267b512efe11073f1a818761
BLAKE2b-256 781914f944b4f01f07a03cf9ee2c0fa47e69a04b8bff7f1a638df9ec23babf33

See more details on using hashes here.

File details

Details for the file visual_cataloguer-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for visual_cataloguer-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 371e9e8b2e080819bbda9c5abcaa88b6427c406fbe4ff114928beb8761d523b1
MD5 5e0c2989115e6d6958e7541a7edee445
BLAKE2b-256 6f5d0786220ec8b2bfae3a415db40b579d21fe51764cdff0954e3a8cd1483471

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page