Camera-driven book intake and checkout inventory system for Books in Hand, a nonprofit keeping books out of landfills. Deterministic size-bucketing, barcode/OCR/vision-LLM backfill, FastAPI kiosk backend.
Find a file
2026-07-13 10:17:31 -07:00
bookmark feat: add CSV catalogue data layer 2026-07-13 10:11:49 -07:00
tests feat: add CSV catalogue data layer 2026-07-13 10:11:49 -07:00
.gitignore chore: scaffold bookmark project structure 2026-07-13 10:08:41 -07:00
AGENTS.md docs: add AGENTS.md project context (CLAUDE.md symlinked for compatibility) 2026-07-13 10:06:17 -07:00
CLAUDE.md docs: add AGENTS.md project context (CLAUDE.md symlinked for compatibility) 2026-07-13 10:06:17 -07:00
CONTRIBUTING.md chore: add MIT LICENSE and CONTRIBUTING.md, set SPDX license in pyproject 2026-07-13 10:17:05 -07:00
LICENSE chore: add MIT LICENSE and CONTRIBUTING.md, set SPDX license in pyproject 2026-07-13 10:17:05 -07:00
pyproject.toml chore: add MIT LICENSE and CONTRIBUTING.md, set SPDX license in pyproject 2026-07-13 10:17:05 -07:00
README.md docs: add project README for early-stage stakeholder visibility 2026-07-13 10:17:31 -07:00

Bookmark

A camera-driven book intake and checkout inventory system, built for Books in Hand, a nonprofit that keeps books out of landfills and in people's hands.

Bookmark replaces manual book logging with a guided, camera-based workflow: a volunteer places a book on a marked platform, the system photographs the front and back, sorts it into a size category for tax/reporting purposes, and later backfills the catalogue with title, author, and ISBN — all running on local hardware, no cloud dependency.

This project is fully open source and is being built and donated as volunteer/client work — it isn't part of any commercial product line.

Status

Early / active development. The intake station (Phase 1) is being built now. Not yet runnable end-to-end.

Phase What it does Status
1 — Intake station Camera capture, guided front/back flow, deterministic size bucketing, CSV catalogue In progress
2 — Batch OCR/ISBN backfill Barcode decode + local vision-LLM fallback to fill in title/author/ISBN Planned
3 — Checkout station Track books leaving inventory, reusing the intake identification pipeline Planned

How it works (Phase 1)

  1. A downward-facing webcam looks at a fixed platform with printed nested size-boundary markers (small / medium / large).
  2. A volunteer centers the book; capture fires automatically or on a button press (configurable).
  3. The system photographs the front, determines size — deterministically, by checking which physical markers are covered, not by any AI/ML step — then prompts the volunteer to flip the book and photographs the back.
  4. Every book gets a row in a CSV catalogue: images, size bucket, and a status that later pipeline stages (OCR backfill, checkout) update.

Full design rationale lives in AGENTS.md (also readable as CLAUDE.md — same file, symlinked for compatibility with different AI coding tools).

Why this matters for a nonprofit

  • No cloud costs, no vendor lock-in. Everything runs on donated hardware; no per-book or per-scan fees.
  • Deterministic where it counts. Size-bucket counts feed Books in Hand's year-end tax and 501(c)(3) reporting — that number is computed from physical measurements, not inferred by a model, so it can't drift or hallucinate.
  • Volunteer-friendly. The intake flow is designed to be usable by volunteers with no technical background — guided steps, big buttons, no login required.

Development

Requires Python 3.11+.

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -v

Full setup, calibration, and end-to-end testing instructions will land here once the intake station is runnable (tracked in the project's implementation plan).

License

MIT — see LICENSE.