npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

pager-reader

v0.1.2

Published

Capture paged documents on Windows and OCR them with Codex

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#main

npmパッケージに同梱されたVercel Skills互換の pager-reader スキルをCodexへ追加します。

$pagerReaderPackage = pager-reader skill-path
npx skills add $pagerReaderPackage `
  --skill pager-reader `
  --agent codex `
  --global `
  --yes

scanからOCRまで通して実行する

対象文書をKindle、PDFビューア、ブラウザなどで開き、取得を始めるページを表示します。文書全体を取得する場合は先頭ページを表示してください。

Codexで次のように依頼します。

$pager-reader を使って「文書タイトル」をスキャンし、そのままOCRしてください。
対象モニターとページ送りキーは自動で検知し、ページ送りできなくなるまで取得してください。

スキルは次の処理を続けて行います。

  1. pager-reader scan を起動する
  2. タイトル名の文書フォルダへ全ページを保存する
  3. Lunaで各ページ画像をOCRする
  4. 別のLunaが共通基準で全ページを監査する
  5. 閾値未満のうち監査点が下位5%以内のページだけを局所再読し、未解決ならSolが修正する
  6. 文書目次を活用したリーダーHTMLとテキストを生成する
  7. 完了を確認して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 | htmlmarkdownboth | | 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.jsonformat: "pager-reader" で形式を識別します。

<現在の作業ディレクトリ>/
└── 文書タイトル/
    ├── manifest.json
    └── pages/
        ├── page-0001.png
        ├── page-0002.png
        └── ...
  • manifest.json: schema 1。文書タイトル、撮影状態、OCR状態、ページ一覧、画面差分、出力予定ファイル名を保持します。
  • pages/page-XXXX.png: OCRと校正の原本になるページ画像です。
  • scan完了時は capture_status: completedocr_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 pack

npm pack はWindows実行ファイル、npmランチャー、pager-reader スキルを一つのtarballへ収録します。

OCRは誤る可能性があります。重要な引用、数値、固有名詞は保存されたページ画像と照合してください。OSやアプリが保護する映像は黒画面になる場合があり、本ツールはその保護を迂回しません。利用する文書の著作権と利用条件に従ってください。