pager-reader
v0.1.2
Published
Capture paged documents on Windows and OCR them with Codex
Maintainers
Readme
pager-reader
pager-reader は、Windows上でページ表示される文書を連続撮影し、CodexでOCRするためのCLIとスキルです。CLIは画面選択・撮影・ページ送りだけを担当し、OCRと校正はCodexスキルが担当します。
インストール
現在の配布対象はWindows x64です。Node.js 18以降が必要です。npmからインストールします。
npm install --global pager-reader
pager-reader --version公開前の開発版を試す場合だけ、GitHubの main ブランチを直接指定できます。
npm install --global github:hachiware-labs/pager-reader#mainnpmパッケージに同梱されたVercel Skills互換の pager-reader スキルをCodexへ追加します。
$pagerReaderPackage = pager-reader skill-path
npx skills add $pagerReaderPackage `
--skill pager-reader `
--agent codex `
--global `
--yesscanからOCRまで通して実行する
対象文書をKindle、PDFビューア、ブラウザなどで開き、取得を始めるページを表示します。文書全体を取得する場合は先頭ページを表示してください。
Codexで次のように依頼します。
$pager-reader を使って「文書タイトル」をスキャンし、そのままOCRしてください。
対象モニターとページ送りキーは自動で検知し、ページ送りできなくなるまで取得してください。スキルは次の処理を続けて行います。
pager-reader scanを起動する- タイトル名の文書フォルダへ全ページを保存する
- Lunaで各ページ画像をOCRする
- 別のLunaが共通基準で全ページを監査する
- 閾値未満のうち監査点が下位5%以内のページだけを局所再読し、未解決ならSolが修正する
- 文書目次を活用したリーダーHTMLとテキストを生成する
- 完了を確認してscan画像を削除する
computer-useは使いません。画面取得とページ送りは pager-reader が行います。
OCR・監査・出力パラメータ
| パラメータ | 通し処理の標準値 | 内容 |
|---|---:|---|
| ocr_model | gpt-5.6-luna | 最初のOCRに使うモデル |
| audit | on | 原画像との独立監査 |
| audit_model | gpt-5.6-luna | OCRとは別の品質監査専用モデル |
| reread_on_low_quality | on | 監査で選ばれた下位ページを局所再読するか |
| reread_model | gpt-5.6-luna | 局所再読に使うモデル |
| repair_on_low_quality | on | 再読後も重大な問題が残るページを修正するか |
| repair_model | gpt-5.6-sol | 修正モデル |
| quality_threshold | 90 | Sol候補に含める監査点の上限(この値未満) |
| repair_max_pages | 5 | 1文書で修正モデルを使える最大ページ数 |
| repair_max_percent | 5 | 1文書で修正モデルを使える最大割合 |
| output_format | html | html、markdown、both |
| html_pages_per_file | 50 | 長文HTMLを分割するページ数。0 は分割しない |
| delete_scan_images_after_ocr | on | OCR完了後に pages/ を削除する |
初回Lunaには、段組み・読み順の判定、本文欠落の防止、数字・固有名詞・否定表現の保持、推測禁止を簡潔な専用プロンプトで指示します。監査は新しいLunaコンテキストで原画像とOCR結果を照合し、全ページを同じ採点基準で評価します。Sol候補は 監査点 < quality_threshold のページを低得点順に並べ、min(最大ページ数, floor(全ページ数 × 最大割合)) 件だけ選びます。選択ページをLunaで一度だけ局所再読し、再読後も閾値未満の場合だけSolを使います。標準値では139ページの文書でも最大5ページです。
依頼文で値を変更できます。
$pager-reader を使って「文書タイトル」をスキャンし、そのままOCRしてください。
OCRモデルはgpt-5.6-terra、監査はoff、出力はboth、scan画像は残してください。既存の文書フォルダをOCRするだけの場合、scan画像削除の標準値は off です。明示的に削除を依頼した場合だけ削除します。
モニターの自動選択
--monitor を省略した場合、モニターが一つなら自動選択されます。複数ある場合は各画面に「この画面を読む」と表示されるので、対象文書がある画面をクリックしてください。選択画面を閉じた後は、選択前に前面だった文書アプリへフォーカスを戻してから開始します。Windowsが復帰を拒否した場合は警告を表示するため、カウントダウン中に文書本文をクリックしてください。
番号を固定する場合だけ、次のように確認・指定します。
pager-reader monitors
pager-reader scan --title "文書タイトル" --monitor 0ページ送りキーの自動検知
既定の --turn-key auto は右、左、PageDownの順にキーを試し、画面が変化したキーを以後のページ送りに使います。左キーで進む文書も画面差分から自動検知されます。
自動検知は文書の先頭または末尾から開始してください。途中ページでは前後どちらのキーでも画面が変化するため、方向が分かっている場合は --turn-key left または --turn-key right を指定します。
scanだけ実行する
CLIから撮影だけ行う場合:
pager-reader scan `
--title "文書タイトル" `
--turn-key auto--output を省略した場合は、現在の作業ディレクトリ直下へ 文書タイトル フォルダを作成します。別の場所へ保存するときだけ --output <親ディレクトリ> を指定してください。
--max-pages を省略すると、ページ送りによる画面変化が確認できなくなるまで取得します。枚数を制限したい場合だけ --max-pages 200 のように指定してください。
開始前のカウントダウン中に対象アプリを前面へ出してください。標準の差分しきい値は 0.00005、ページ安定待ちは2.5秒です。変化が見えない場合はもう一度待って確認してから次のキーを送るため、描画遅延によるページ飛ばしを抑えます。同一に見える空白ページが続く可能性を考慮して5回までページ送りを続け、それでも変化しない場合に末尾と判断します。必要なら --stop-after-duplicates を増やせます。Ctrl+C を押すと、取得済みページを確定して終了します。
スキルへscanだけ依頼することもできます。
$pager-reader を使って「文書タイトル」をスキャンだけしてください。OCRはまだ行わないでください。既存のscan結果をOCRする
既存のpager-reader文書フォルダを指定すれば、撮影を繰り返さずOCRから再開できます。
$pager-reader を使って C:\path\to\文書タイトル の次の10ページをOCRしてください。既定では未処理ページを最大10ページずつ処理します。各ページの完了直後に保存するため、中断しても ocr_status を見て続きから再開できます。
scanで作成される形式
scan 直後の文書フォルダは、画像と処理状態だけを持つ最小構成です。manifest.json の format: "pager-reader" で形式を識別します。
<現在の作業ディレクトリ>/
└── 文書タイトル/
├── manifest.json
└── pages/
├── page-0001.png
├── page-0002.png
└── ...manifest.json: schema 1。文書タイトル、撮影状態、OCR状態、ページ一覧、画面差分、出力予定ファイル名を保持します。pages/page-XXXX.png: OCRと校正の原本になるページ画像です。- scan完了時は
capture_status: completed、ocr_status: pendingです。 - 同名フォルダがある場合は日時付きの別フォルダを作り、既存データを上書きしません。
scanだけではMarkdownやOCRテキストを作りません。
OCR後に作成される形式
標準の通し処理では、必要な画像をHTMLへ直接埋め込み、検証完了後に pages/ を削除します。HTMLはpagerアプリ風の文書リーダーになり、目次から本文へ移動できます。原文書に目次がある場合は、その章題と印刷ページ番号を優先して使います。目次がない場合は検出した見出しとページ範囲からナビゲーションを作ります。
<現在の作業ディレクトリ>/
└── 文書タイトル/
├── manifest.json
├── 文書タイトル.html
├── 文書タイトル.txt
├── 文書タイトル-html/ # 50ページを超える場合
│ ├── pages-0001-0050.html
│ └── pages-0051-0100.html
└── .ocr/
├── page-0001.json
├── page-0002.json
└── ...文書タイトル.html: 常にここから開くリーダー画面です。左側に文書目次、中央に本文を表示し、狭い画面では目次を開閉できます。図・表・数式・表紙・レイアウト依存ページ・不確実なページだけをData URLとして埋め込みます。文書タイトル-html/: 標準では51ページ以上の文書で作られる本文分割ファイルです。リーダーが内部で読み込むため、通常は直接開く必要がありません。分割数はhtml_pages_per_fileで変更できます。文書タイトル.txt: OCR本文だけをページ順に連結したプレーンテキストです。.ocr/page-XXXX.json: OCRモデル、本文、画像掲載判断、信頼度、印刷ページ番号、見出し、文書目次項目、専用のLuna品質監査、品質点数、Sol修正の有無、不確実箇所を保存します。manifest.json: ページごとの結果とocr_statusを更新します。全ページ完了時はocr_status: completedです。pages/: 通し処理では全成果物と監査記録の検証後に削除されます。OCRだけの処理では標準で残ります。
output_format=markdown または both を指定すると 文書タイトル.md も作成します。scan画像削除がOnの場合、Markdownに必要な画像だけを assets/ へコピーしてから pages/ を削除します。
コマンド
初版のCLIは撮影に必要な二つのコマンドだけを提供します。
pager-reader monitors
pager-reader scan --help開発とパッケージ作成
ソースからビルドする場合はRust 1.85以降とNode.js 18以降を用意します。
npm install
npm test
npm packnpm pack はWindows実行ファイル、npmランチャー、pager-reader スキルを一つのtarballへ収録します。
OCRは誤る可能性があります。重要な引用、数値、固有名詞は保存されたページ画像と照合してください。OSやアプリが保護する映像は黒画面になる場合があり、本ツールはその保護を迂回しません。利用する文書の著作権と利用条件に従ってください。
