β–Ά PLAY

Catalog every
tape you own.

Photograph your shelf, let AI read the spines, and every tape gets an ID, a condition and a price, so you know what you own, what it's worth, and what to sell.

HOW IT WORKS

Shelf to spreadsheet in three steps.

VHS Box runs in your browser and on your own server. Point a webcam or phone at the shelf and work through the pile.

01 Β· CAPTURE

Snap the shelf

The multi-spine crop grabs five tapes per shot. Press Space to stage frames and Enter to send them all. Barcode scanning fills titles from UPC lookups.

Akiraβœ“
Jawsβœ“
Ghostbustersβœ“
02 Β· REVIEW

AI reads the titles

A local Ollama vision model (llava) or the Claude Vision API reads each spine and cover. You get review cards to confirm, edit, or swipe away, then one tap on βœ“ All.

VHS-0001AkiraIn Coll.
VHS-0003GhostbustersFor Sale
VHS-0005Night of the…For Sale
03 Β· COLLECT

An ID, a condition, a price

Every tape gets a permanent VHS-XXXX ID, a condition grade, a status and a value estimate. Export CSV/JSON, print price tags, or generate eBay/Mercari sell drafts.

20-SECOND SHORT

The whole pitch, narrated.

The launch video, cut vertical with captions for Shorts, Reels and TikTok: snap the shelf, confirm what the AI read, and every tape gets an ID, a condition and a price.

WHAT'S SHIPPED

Built for the whole pile.

πŸ“·

Capture queue

Stage webcam frames, then batch them to AI. Zoom slider, torch toggle, and crop presets for covers, a single spine, or five spines.

⚑

Batch metadata fill

Fills year, label, value and genre tags for incomplete tapes, cross-checked against OMDb.

🏷️

Status & condition

Track in collection, for sale, sold, donated, missing, or wanted. Grade great to poor, with notes and multiple photos.

πŸ”

Search & filter

Full-text search over title, label, barcode, notes and tags. Filter by status, condition, label, tag and year range.

🧱

Wall view

A masonry wall of covers or a shelf of spines. Click any tape to open its details.

πŸ’Έ

Sell drafts

Copy-ready eBay and Mercari titles, descriptions and suggested prices for every tape marked for sale.

πŸ–¨οΈ

Exports & tags

CSV (formula-injection safe), JSON round-trip with photos, printable lists and dashed-border price tags.

πŸ”—

Share your shelf

Optional Google sign-in and a public /c/<uuid> link per collection. Runs single-user if you skip auth.

πŸ“±

Phone-ready

Responsive layout, rear-camera preference, and an auto-generated LAN HTTPS cert so the camera works on your phone.

HIDDEN TRACKS

Yes, there are easter eggs.

Long-press any tape for a full-screen FBI warning followed by its trailer. Some titles do more:

🦈 Jaws: the two-note theme, accelerating
πŸ‘» Ghostbusters: green slime flash
🧟 Night of the Living Dead: flicker + groan
🏎️ Speed Racer: engine rev
πŸ“Ί CRT scanlines toggle
πŸ“³ Shake your phone for static
πŸŽ‰ Confetti at 50 / 100 / 200 tapes
β—€β—€ REW Β· SETUP

Run it on your box.

Express + PostgreSQL in Docker. Bring a Postgres URL (Neon works) and optionally a local Ollama or an Anthropic API key for AI scanning.

# clone and configure
$ git clone https://github.com/nitsuah/vhs.git
$ cd vhs
$ cp .env.example .env   # set DATABASE_URL + HOST_IP

# start it
$ docker compose -f config/docker-compose.yml up -d --build

# open http://localhost:8080
# phone camera: https://<LAN-IP>:8443
AI scanning: uses Ollama (llava:7b) locally or the Claude Vision API via ANTHROPIC_API_KEY.
Phones: install the auto-generated CA from /api/ca-cert once (check its SHA-256 fingerprint against the host first, see the README) and the camera works over LAN HTTPS.
Serverless: the same Express app also deploys as a Netlify Function.
πŸ“Ό Be Kind, Rewind!