{"skill":{"slug":"book-capture-obsidian","displayName":"Book Capture Obsidian","summary":"Capture and normalize book metadata into Obsidian Markdown notes from photos or Goodreads CSV exports. Use for barcode and OCR ISBN extraction, metadata enri...","description":"---\nname: book-capture-obsidian\ndescription: Capture and normalize book metadata into Obsidian Markdown notes from photos or Goodreads CSV exports. Use for barcode and OCR ISBN extraction, metadata enrichment, idempotent note upsert, bulk migration, and dashboard generation.\n---\n\n# Book Capture Obsidian\n\nExecute this workflow to add or migrate books into an Obsidian vault.\n\n## Workflow\n\n1. Ask the user for the destination Obsidian vault path if missing.\n2. Read `references/configuration.md` and set environment variables.\n3. Choose one mode:\n   - Photo ingest with `scripts/ingest_photo.py`\n   - Goodreads CSV migration with `scripts/migrate_goodreads_csv.py`\n4. For Goodreads migration, prefer `--group-by-shelf` and Google enrichment enabled.\n5. Upsert notes with `scripts/upsert_obsidian_note.py`.\n6. Refresh the dashboard with `scripts/generate_dashboard.py`.\n7. Run validation and security checks:\n   - `sh scripts/run_ci_local.sh`\n   - `sh scripts/security_scan_no_pii.sh`\n\n## Required References\n\n- `references/configuration.md` for runtime settings and portability\n- `references/data-contracts.md` for normalized schema and output contracts\n- `references/migration-runbook.md` for Goodreads import sequence\n- `references/troubleshooting.md` for extraction and merge failures\n\n## Operating Rules\n\n- Require explicit vault destination (`BOOK_CAPTURE_VAULT_PATH` or `--vault-path`) before bulk writes.\n- Prefer barcode extraction first; use OCR as fallback.\n- Keep filenames human-readable (`Title - Author (Publisher, Year)`).\n- Keep `shelf` as property and include tag `book` in all notes.\n- Use shared compact series tags (for example `theexpanse`, `harrypotter`) when volume metadata exists; avoid separate series hub notes.\n- Preserve user notes section during updates.\n- Keep outputs deterministic and idempotent for repeated runs.\n- Do not store secrets or personal identifiers in generated artifacts.\n- Simplified frontmatter: keep only `title`, `author`, `publisher`, `year`, `isbn_10`, `isbn_13`, `cover`, `shelf`, `source`, `source_url`, `tags`. Remove `published_date`, `genre`, `status`, `date_started`, `date_read`, `needs_review`, `goodreads_book_id`.\n","topics":["CSV","OCR"],"tags":{"latest":"1.2.1"},"stats":{"comments":0,"downloads":652,"installsAllTime":25,"installsCurrent":1,"stars":1,"versions":11},"createdAt":1772760184129,"updatedAt":1778491742347},"latestVersion":{"version":"1.2.1","createdAt":1772907451080,"changelog":"Enhance photo import richness: semantic tag inference, optional related-links generation, canonical filename pattern Title - Author (Publisher, Year), and docs alignment with simplified frontmatter schema.","license":null},"metadata":null,"owner":{"handle":"ricardodpalmeida","userId":"s175vs3fbfrfxhb9kfg8tyhtc583vssr","displayName":"Ricardo Almeida","image":"https://avatars.githubusercontent.com/u/100843099?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089795051}}