写真をPDFに
目的は、正しい順序の個別ページ、密な余白、端の線を保存することです。写真をローカルで処理します。このプロセスに特別なプラグインやMCPは必要ありません。
実証済みの方法
- ソースを検査する。 EXIFを考慮する。名前・時間・内容で順序を確認する。撮影時刻自体は順序を証明しない。表紙、見開き、撮り直しの重複、白紙を見つける。明るさだけでは薄い図面と白紙ページを確実に区別できない。紙が明るい背景(白い机、用紙、近くの画面)の上にあり、輪郭が検出されない場合は、濃い色のつや消し面で撮り直すよう依頼する。
- 用紙をマークする。 個別の用紙(文書、A4、横向きを含む)には
prepare --layout pagesを実行する。autoは、折りの兆候(背の影や折り目)がある場合にのみ幅広の輪郭を分割するが、特殊な用紙では誤ることがある。scan.py prepareは、ドラフトのマニフェストと輪郭付きのコンタクトシートを作成する。検出器は紙を明るく彩度の低い領域として見つけ、エッジを「紙→暗い背景」の急峻な遷移に引き寄せ、見開きの場合は折り目を探す。折り目は罫線が途切れる場所である。背の影は片方のページに乗るため、深い影の場合、折り目は明るさの変化の基部、暗い側に設定される。基準ノートでは、折り目の中央誤差は2~3ピクセルである。これはあくまで仮説である。flagsが空でないページ(gutter-*、partner-mismatch、touches-frame、aspect-outlier、one-side-unruled、margin-ink、contour、full-frame-fallback、duplicate)は、優先的に手動でマークする。残りは写真で確認する。検出器がモニター、レシート、または見開きの片方の半分を拾う可能性がある。scan.py inspectは、各コーナーの大きな切り抜きをフレーム分割単位で提供するので、それを使ってマニフェストのコーナーを修正する。各ページには、EXIF 回転後の座標で、TL、TR、BR、BL の4つのコーナーが割り当てられる。 - 遠近法を補正する。 デフォルトは、1ページあたり1つの射影行列である。自動検出されたエッジに追従して個別の行/列を動かさない。グリッド、テキスト、指、影がエッジと認識され、ページ全体に波が生じる可能性がある。明示的に要求された、反った本のページの完全な修正には、個別の実証済みアルゴリズムと追加の幾何学的検証が必要である。
- 余白を調整する。 どこでも均一に大きな余白を取るよりも、密なトリミングが推奨される。
bleed_pxのデフォルトは0である。個別に小さな余白を追加するのは、コーナー間の直線の外側に本当に書き込みや反った端に情報が残っている場合のみとする。文字の上部、点(ё、й)、左側の日付、折り目近くのテキスト、図面の下端を確認する。下端の行はしばしば端ぎりぎりまで達する。その場合の境界は端の中央値で決まり、密にはならない。密なエッジと紙の端の間にペンの線がある場合、prepareは自動的にエッジをそれらに移動する(margin_inkフィールド、幅の4%以内)。鉛筆は保護されないため、端近くの鉛筆の日付や署名は目視で確認する。反った端は直線で近似されるため、反ったページのコーナーは境界の外側にわずかに残ることがある。PDFの追加トリミングはcropコマンドで行い、再引き伸ばしやJPEG再圧縮は行わない。 - 薄い線を保存する。 ソフトな照明補正は許容される。ハードな2値化は鉛筆を消す可能性がある。表紙、写真、重要な色には
enhanceを無効にする。生成モデルで文字、図、またはフレームの欠落部分を描き足さない。OCRは、必要な場合または要求された場合にのみ追加する。 - 最終PDFを確認する。 利用可能なPDFスキルを使用して作成/確認を行い、そのスキルで規定されている操作マーカーを含める。
reviewはすべてのページをレンダリングし、コンタクトシートを作成し、端に背景や書き込みがあるページをリストする(edges.json)。compareは各写真ページを4%の余白と赤いトリミング枠とともに表示し、外側に何が残っているかを確認できる。最初のページだけでなく文書全体を閲覧する。大量処理のための効率的なスキーム:全ページでcompareを実行し、最大16ページの束に分けて、画像対応の安価なモデル(Claude Code では Sonnet、Codex ではgpt-5.6-luna)を使用する並列エージェントに、references/screening.md のタスクを変更せずに渡す。自身は、検証者がdefectと報告したページと、prepareでフラグが立ったページのみを開き、確認されたものだけを修正する。32ページのドラフトで8つの既知の3%以上のコーナー誤差があったテストでは、この方式は8つすべてを発見し(Sonnetが7つ、フラグが残り1つ)、誤検出は4つだった。Haikuは4つを発見し、誤検出のみを追加したため、Haiku単体では不十分である。2冊目のノート(32ページ、タスクは調整されていない)では、Sonnetとgpt-5.6-lunaは誤検出なしで目に見える背景の帯を発見したが、1.5~2%のコーナー誤差のあるページを見逃した。gpt-6.1-terraはほぼすべてを指摘したが、19枚のクリアページのうち12枚も含めており、節約にはならない。この方式は1冊のノートで検証され、タスクも同じページで作成されている。重要な文書や疑わしい場合は、すべてのページを自身で確認する。検証者の応答のページ番号は、同時に順序の確認にもなる。トリミング後は影響を受けたページを再確認し、幾何アルゴリズムを変更した後は文書全体を再確認する。ページ数と正しいconfigは、目視確認の代わりにはならない。
このようなデジタル化では、ユーザーは確認済みの白紙ページを削除することを好む。白紙を保持する明示的なリクエストは優先される。重複は、グリッドや筆跡の類似性ではなく、目視確認後に除外する。表紙は、別の指示がない限り保存する。見開きは、ソースがそのように構成されている場合、左から右に読む。
コマンド
スクリプトへのパスは、このスキルからの相対パスで指定する。スキーマとパラメータ: references/commands.md。前のノートからコーナー、パス、ページ番号、比率を流用しない。
python3 <skill>/scripts/scan.py prepare <photos> --work <work> --layout auto
python3 <skill>/scripts/scan.py inspect <work>/manifest.json --work <work>/inspect --ids 0006-L,0006-R
python3 <skill>/scripts/scan.py build <work>/manifest.json --output <work>/draft.pdf
python3 <skill>/scripts/scan.py measure <work>/draft-pages --work <work>/measure
python3 <skill>/scripts/scan.py review <work>/draft.pdf --work <work>/review
python3 <skill>/scripts/scan.py compare <work>/draft.scan.json --work <work>/compare
依存関係: Pillow、NumPy、OpenCV、ReportLab(写真用)。pypdfium2(crop 用)。Poppler pdftoppm(PDFからの review と measure 用)。インポートはコマンドごとに分かれている。利用可能なインタプリタ/既存の環境を確認する。必要に応じて、グローバルなPythonを変更せずに個別のvenvを使用する。OpenCV/NumPyがシステムパッケージとしてインストールされている場合、同じインタプリタで --system-site-packages を指定してvenvを作成する(python3 -m venv。uv venv はデフォルトで独自のPythonを使用し、システムのcv2を認識しない)。ネットワークは必須と想定しない。特定マシンのキャッシュからのパスをスキルに埋め込まない。
ページのアスペクト比とサイズ。 aspect: null は輪郭の辺から推定され、角度によって1~2%ずれることがある。方眼紙の場合は、ドラフトを収集して measure を実行する。方眼のピッチを検出し、ページの物理サイズを計算し、ノート全体に1つの aspect と --width-mm を提案する。値は出力から取得し、前のノートからは取得しない。同じ --width-mm で、すべてのPDFページは同じ物理サイズになる。そうしない場合、サイズはピクセルと --dpi から計算され、撮影距離に応じて変動する。
build は、含まれるページに reviewed: true を要求する。これはエージェントによるマークアップ確認のマークであり、ユーザーとの追加の調整ではない。既に渡された写真のルーチン処理について許可を求めない。
検出器の回帰テスト。 検証済みのノートのマニフェストをリファレンスとする。scan.py を変更した後、同じ写真で prepare を実行し、eval <新しいマニフェスト> --reference <リファレンス> を実行する。このコマンドは、ページ幅に対するコーナー誤差のパーセンテージ、フラグが立てられたページの割合、および「サイレント」エラー(誤差が --tolerance(デフォルト3%)を超えるがフラグが立てられていないページ)を表示する。サイレントエラーが --max-silent より多い場合、リターンコードは1になる。個人写真を含むリファレンスはスキルのリポジトリに置かない。
完了
- 元の写真は変更しない。既存のPDFは、新しいバージョンを確認した後に置き換える。部分的な修正のためにマークアップとパラメータを保存する。
- 再修正時は、まずファイルの最新性を確認する。JPEG再圧縮が累積しないようにする。
- 結果、ページ数、およびソースの重要な制限を報告する。書き込みの一部が既にフレーム外にある場合は、復元を主張するのではなく、その旨を明記する。
- このスキルは準備とコードの再作成を節約する。完全に自動化された境界認識と目視確認の省略を約束するものではない。