photos

photos is a command for Claude Code from masterleopold/book-capture. It costs 13 tokens per session (579 once invoked), scanned A, original, MIT.

A command that imports photos of book pages, reads their text with OCR, and produces organised Markdown notes.

In plain words
What is it for?
Use it to capture a physical book from phone or scanner photos, sort pages by capture time or filename, rename them in order, and send them through OCR and Markdown generation.
Why use it?
It handles common phone-photo issues such as HEIC files, sideways pages, and page ordering before later processing.

Command for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: names the AskUserQuestion tool.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the book-capture plugin — 1 skill, 8 commands, 2 agents shipped together

Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add masterleopold/book-capture
Claude Code
/plugin install book-capture

Made for: Claude Code.

Or install book-capture, the plugin that ships this one along with the rest of its 1 skill, 8 commands, 2 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for photos

README.md
[![agentmods](https://agentmods.dev/badge/commands/masterleopold/book-capture/photos.svg)](https://agentmods.dev/commands/masterleopold/book-capture/photos)
Your own site
<a href="https://agentmods.dev/commands/masterleopold/book-capture/photos"><img src="https://agentmods.dev/badge/commands/masterleopold/book-capture/photos.svg" alt="Measured on agentmods" height="20"></a>
Per session 13 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 579 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00013 $0.00579
Opus 5 $0.00006 $0.00290
Sonnet 5 $0.00003 $0.00116
Haiku 4.5 $0.00001 $0.00058

Measured 6d ago against content hash 44d1f92c16b6, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade A, and why

photos scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

commands/photos.md · 36 lines

What it actually says

Photo Book Capture

Source is pre-selected: photos (a folder of camera photos — phone, scanner app — one per page).

Follow the full pipeline in ${CLAUDE_PLUGIN_ROOT}/commands/capture.md with source = photos. Skip the platform selection step; there is no browser and no login.

Photo-specific notes:

  • HEIC is read directly (an iPhone's default), alongside JPEG/PNG/TIFF. No pre-conversion step.
  • Photos are rotated upright from their EXIF orientation. A phone stores the sensor's landscape pixels with a "rotate me" tag; ignore it and every page is sideways, which OCR reads as nothing.
  • Order is the pipeline's weak point here. Kindle and PDF pages arrive in reading order for free; a photo folder does not. Import decides the order once, renames to page_NNN.webp, and everything downstream (/ocr, /generate) then behaves exactly as for a captured book.
    • --order time (default) — the photo's capture time, which is what you want when the filenames are unhelpful.
    • --order filename — natural sort (IMG_9 before IMG_10). Use this when a page was re-shot: it keeps its slot in the sequence, whereas in time order it jumps to the end of the book.
  • Originals are never modified or moved. The import writes WebP copies into the output directory.
  • Check the page order before running OCR. Pass --dry-run first to print the photo -> page_NNN mapping, and confirm the first and last pages are the ones you expect. A mis-ordered import produces a book whose text is subtly scrambled, which is far harder to notice later than a crash.
# Preview the ordering first
node "${CLAUDE_PLUGIN_ROOT}/scripts/import-photos.mjs" "<photo-dir>" --output-dir "<OUTPUT_DIR>" --dry-run

# Then import
node "${CLAUDE_PLUGIN_ROOT}/scripts/import-photos.mjs" "<photo-dir>" --output-dir "<OUTPUT_DIR>" [--order time|filename]

Photos already sitting in the captures tree (copied in by hand, rather than imported) can be compressed in place instead — this keeps their filenames, so use it only where nothing links to the images:

node "${CLAUDE_PLUGIN_ROOT}/scripts/compress-captures.mjs" "<captures-root>" --dry-run
Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 6d ago First seen · 36 lines · 13 tokens per session scan A 44d1f92c16b6

Subscribe to this mod's changes

photos is a command published in the GitHub repository masterleopold/book-capture (10 stars, last pushed 1mo ago), licensed MIT. It adds 13 tokens to every session and 579 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.