This batch implements the validated PR-2 / PR-3 workstreams. PR-2b: continued captions in vnext - add figure continuation helpers - mark continuation legends in candidate indexing - run ContinuationCaptionPass before PrimarySamePagePass - emit unique continuation records with trace metadata - skip continuation legends in ordinary same-page proposals PR-2a: short-caption geometry - reuse _TRUNCATED_LEGEND_ONLY_PATTERN - add narrow short-caption branch at the vnext group/page seam - require same page, same column/x-overlap, tight gap, and local uniqueness - avoid global threshold changes or score_figure_match edits PR-3: completeness normalization and additive status split - normalize legacy/vnext figure completeness shapes - keep overall unchanged - add structure_status, figure_status, table_status, dimension_statuses, status_reasons Verification: - 443 targeted tests passing - real-vault rebuilds: * SKXTCE6M: unmatched_legends 6->0, overall green * SRNJDAA2: unmatched_legends 9->0, figure green * 6QNRHRKX: matched 0->4, figure yellow (improved, not solved) * 9DM6MCIF: unmatched_legends 3->0, figure green * XGT9Z257: unmatched_legends 4->0, figure green * V4UTP5X7: figure green while structure remains red |
||
|---|---|---|
| .agents/skills | ||
| .github | ||
| .husky | ||
| .omp | ||
| .opencode | ||
| .planning | ||
| .tmp/tail_pdf_samples | ||
| audit | ||
| docs | ||
| fixtures | ||
| node_modules | ||
| paperforge | ||
| project | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| _master_funcs.txt | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CONTEXT-MAP.md | ||
| CONTEXT.md | ||
| CONTRIBUTING.md | ||
| INSTALLATION.md | ||
| LICENSE | ||
| manifest.json | ||
| OCR-V2-READINESS-SUMMARY.md | ||
| package-lock.json | ||
| package.json | ||
| paperforge.json | ||
| PROJECT-MANAGEMENT.md | ||
| pyproject.toml | ||
| README.en.md | ||
| README.md | ||
| README.zh-CN.md | ||
| README.zh.md | ||
| requirements.txt | ||
| REVIEW.md | ||
| skills-lock.json | ||
PaperForge
简体中文 · English
铸知识为器,启洞见之明。 — Forge Knowledge, Empower Insight.
PaperForge brings your Zotero library into Obsidian. Sync papers, run OCR, extract figures, and do AI-assisted deep reading — all inside a single vault.
0. What PaperForge Is
PaperForge is not just an Obsidian plugin. It has two parts:
| Part | What | Does | Where |
|---|---|---|---|
| Obsidian Plugin | main.js + manifest.json + styles.css |
Dashboard, buttons, settings UI | .obsidian/plugins/paperforge/ in your vault |
| Python Package | paperforge |
Sync, OCR, Doctor, repair | Your system Python (pip install) |
The plugin is the interface. The Python package is the engine. Every button you click in the plugin actually runs a Python command behind the scenes.
After installing the plugin, you MUST verify that the Python package is also installed and version-matched.
1. Install the Obsidian Plugin
Option A: BRAT (Recommended)
- Install BRAT from the Obsidian community plugin browser
- Open BRAT settings →
Add Beta Plugin - Enter:
https://github.com/LLLin000/PaperForge - BRAT downloads the latest
main.js,manifest.json, andstyles.cssand installs them - Settings → Community Plugins → enable PaperForge
BRAT auto-detects GitHub Release updates. No manual downloads needed.
Option B: Manual Download
- Go to Releases
- Download the three files:
main.js,manifest.json,styles.css - Create
.obsidian/plugins/paperforge/in your vault - Put the three files there
- Restart Obsidian → Settings → Community Plugins → enable PaperForge
Manual install does not auto-update. You'll need to re-download for each new version.
2. Install the Python Package
After enabling the plugin, open the PaperForge settings tab. You'll see a Runtime Status section:
Plugin v1.5.0 → Python Package v1.5.0 ✓ Matched
- If it says "Not installed" → click Open Wizard to re-run the setup process
- If it says "Mismatch" → the Python package auto-updates when the plugin updates. If it didn't succeed, click Update Runtime to manually trigger
3. Quickstart
# 1. Export from Zotero (Better BibTeX JSON, Keep updated) to exports/
# 2. Sync
paperforge sync
# 3. Mark a paper for OCR in its frontmatter: do_ocr: true
# 4. Run OCR
paperforge ocr
# 5. Mark for deep reading: analyze: true
# 6. In your Agent chat:
/pf-deep <zotero_key>
Documentation
| If you want to | Read |
|---|---|
| Full tutorial, from install to deep read | Getting Started |
| Troubleshooting | Troubleshooting |
| Command reference | Commands |
| How to update | Update Guide |
| Architecture / Maintenance / Release | Architecture |
| AI Agent collaboration | AGENTS.md |
License
CC BY-NC-SA 4.0. Non-commercial use only.
Acknowledgments
Built on PaddleOCR, Obsidian, Better BibTeX for Zotero, and other great open-source projects.