mcpField
P
paper-poster-html

paper-poster-html

github.com/wanshuiyinデザイン・UI18.2k319 回インストール4 日前に更新
リポジトリ

paper-poster-html について

paper-poster-htmlは、論文からHTMLのポスターを作成し、PlaywrightでPDFに出力するスキルです。測定に基づくレイアウトゲート、図の出典検証、制約付きの修正手順により、研究者の印刷用ポスター制作を支援します。

主な機能

  1. 01会場仕様に合わせた印刷キャンバス設定
  2. 02論文内容の計画と主張の監査
  3. 03論文図の出典と面積の検証
  4. 04レイアウト・スタイル・素材のゲート実行
  5. 05定められた制約内でのレビューと修正

活用シーン

  1. 01論文から学会ポスターを作成
  2. 02ポスター寸法と印刷レイアウトを確認
  3. 03ポスター図の論文出典を追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wanshuiyin/auto-claude-code-research-in-sleep --skill paper-poster-html

インストール後、Claude Code で/paper-poster-htmlを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

DESIGN_FINAL.md
IMPLEMENTATION_CONVENTIONS.md
NOTICE.md
LICENSES/
posterly-MIT.txt
scripts/
asset_check.py
extract_pdf_figures.py
poster_check.py
preprocess_figures.py
render_preview.py
run_gates.py
style_check.py
scripts/_posterly/
__init__.py
canvas.py
measure.py
polish.py
preflight.py
render.py
textutil.py
verify_final.py
templates/
COMPONENTS.md
landscape_4col.html
landscape_hero.html
portrait_2col.html
README.md
templates/tokens/
acl.json
cvpr.json
generic.json
iclr.json
icml.json
neurips.json

詳細

Paper Poster(HTML):測定をゲート条件とするポスター生成

各レビュアー枠の前に、Selectable Reviewers に従います: 呼び出し設定 → .aris/reviewer.json → Claude Code のデフォルト(Codex MCP)の順に解決し、 reviewer_route.py を正規のヘルパー解決機構経由で使用します。この枠のティア、新しいコンテキスト、ソース/画像入力、決定論的ゲートを維持してください。 以下の Codex の例/固定設定は backend=codex にのみ適用されます。それ以外のルートでは、それぞれ独自の初回呼び出し/返信の契約を使用します。ルートと実際に返された ID を保存してください。 利用できない選択肢は REVIEW_UNAVAILABLE です。実際のファミリー/完了状況/スコープに基づいて採否を分類してください。 呼び出し時に指定されたレビュアー/モデル/effort の上書き設定は、レビュアーを含む子プロセスに引き継ぎます。生成ワーカーに変更はありません。

正確な印刷用キャンバス(@page { size: W H })向けにスタイル設定した HTML ファイル 1 つを、Playwright の印刷エミュレーションで PDF にレンダリングします。目視ではなく、測定を繰り返してください — 画面プレビューはあてになりません。正しいビューポートでの印刷エミュレーションだけが正確な結果を示します。中核となるゲート機構は posterly(MIT、© 2026 Ruishuo Chen — NOTICE.md と LICENSES/posterly-MIT.txt を参照)をベースにしています。ARIS では、スタイル規律ゲート、図版の出典情報ゲート、モデル横断のレビューループ、パッチループを避けるための修正用語体系を追加しています。

このスキルが存在する理由(防ぐ失敗)

前身のパイプラインでは、色が 30 色以上、実際の論文図版はゼロ、キャンバスが画面ピクセル基準で、巨大なボックス内に数式が小さく浮かぶポスターが生成され、その後 12 回以上のレビューを重ねるうちに さらに悪化 しました。各回で新しいバッジ色や専用 SVG パッチが追加されたのです。解決策は注意喚起ではなく、構造的な対策です:

  1. 美的評価の前にハードゲートを実行する(配置、スタイル、アセットが先に PASS しなければなりません。未測定のポスターをレビュアーに見せることはありません)。
  2. 修正用語体系を限定する — ビジュアルレビューによる修正で変更できるのは、デザイントークン、カタログ登録済みのコンポーネント全体、コンテンツの再配分、アセット、またはキャンバスの選択のみです。新しいインラインスタイル/新しい hex 値/専用の装飾は、構造上禁止されています。
  3. 2 色相の規律を、スタイルの提案ではなく機械的なチェックとして適用する。
  4. 出典情報マニフェスト付きの実際の論文図版を必須とし、満たさない場合はゲートで失敗させる。

メンタルモデル

paper (.tex / PDF) ──► content plan + claim→evidence audit (codex, fresh)
                              │
   figures extracted ─────────┤  FIGURE_MANIFEST.json (provenance, sha256)
   (real paper figures ONLY)  ▼
   template scaffold ──► fill ──► run_gates.py            ◄─── HARD, loop here
                                  preflight → style → asset → measure → polish
                              │ all hard gates PASS
                              ▼
                    Claude visual review (≤3 issues × ≤3 rounds, fix-vocabulary only)
                              │ score ≥ 9
                              ▼
                    codex final cross-model review (fresh thread, full HTML+PDF)
                              │ pass
                              ▼
                    verify-final → poster.pdf + GATE_REPORT.json

定数

  • SKILL_SCRIPTS = ${CLAUDE_SKILL_DIR}/scripts — すべてのヘルパーは単一の所有者によって管理され、このスキルに同梱されています(Arch C)。ディレクトリが見つからない場合はインストールが壊れています。中止して、スキルを再インストールするようユーザーに伝えてください(Policy A — ゲートこそがスキルです。代替手段を独自に用意してはいけません)。
  • REVIEWER_MODEL = gpt-6-astra、推論 xhigh、レビュー呼び出しごとに新しいスレッドを使用(mcp__codex__codex。レビュー境界をまたいで codex-reply を使用してはいけません)。
  • CANVAS — Phase 0 で確認する、開催会場の公式仕様に基づきます。決めつけてはいけません。 (既知の基準:ICLR 2026 メイン会場は、公式印刷サービスの仕様で 185×90 cm の横向きです。ICML/NeurIPS では一般に 60×36 インチの横向き、ワークショップのポスターでは 61×91 cm の縦向きがよく使われます。仕様は毎年変わるため、確認してください。)
  • PALETTE — デフォルトは templates/tokens/generic.json(スレートブルーのアクセント #2D5F8B +ゴールドのハイライト #C9A24A +ニュートラル)で、すべての会場に適用されます。会場別のパックは — venue-colors: true を指定した場合にのみ使われます。紫を基調としたアクセント(色相 250~285)は、ユーザーが — allow-purple: true を指定しない限り禁止です。
  • AUTO_PROCEED = false — 🚦 のチェックポイントごとに明示的な確認を待ちます。
  • OUTPUT_DIR = 作業ディレクトリ内の poster_html/。

ワークフロー

フェーズ 0 — 再開、依存関係、会場仕様
  1. 再開:poster_html/POSTER_STATE.json が status: in_progress(24 時間以内)の状態で存在する場合は、保存されたフェーズから再開します。
  2. 依存関係(順にたどる代替手段):
    • Playwright + 同梱の Chromium → 見つからない場合は python3 -m playwright install chromium を実行 → インストールに失敗してもシステムに Chrome があれば、スクリプトは channel="chrome" にフォールバックします → すべて失敗した場合は、コンテンツプランとひな形のみを作成できます。その場合はすべてに 「印刷検証未完了」 と表示し、最終 PDF を出力してはなりません。
    • pdfinfo が見つからない場合は、PyMuPDF で PDF の寸法を読み取ります。PNG のレビュー用レンダリングには、pdftoppm または PyMuPDF のいずれかが必要です。
    • MathJax:tex-svg.js を一度ダウンロードして poster_html/assets/mathjax/ に保存し、HTML からローカルのファイルを参照します。CDN はドラフトでのみ使用できます。計測ゲートでは、MathJax が未レンダリングの場合はどちらの場合も必ず失敗します。
  3. 会場仕様の確認(最新情報):会場の公式ポスター作成要項ページを参照します(検索 + 取得)。寸法、向き、最小フォントサイズ、ロゴの使用規定、匿名性に関する規則、ファイル形式を抽出します。{spec, source_url, retrieved} を POSTER_STATE.json に記録します。仕様は毎年変更されるため、キャッシュされた仕様を黙って再利用してはなりません。

🚦 チェックポイント:会場仕様の表(キャンバス、向き、ソース URL)と選択したテンプレートを提示します。待機します。

フェーズ 0.5 — デザインの確認(AskUserQuestion を一度にまとめて実施)

質問は一度だけ、4 つ以内にします。レイアウトテンプレート(templates/README.md から選択)、配色(汎用パック/会場パック/制約内のカスタム)、ロゴと会場マーク(パスまたは「なし」— 捏造は厳禁。会場のロゴ使用規定を確認)、QR コードのリンク先(論文/コード/プロジェクトページ/なし — qrencode または python-qrcode を使ってオフラインで生成し、リモート QR サービスの URL は使用しません)。回答は POSTER_STATE.json の design_decisions に保存し、後から「改善」する前に必ず再読み込みして、意図的な選択を元に戻さないようにします。

フェーズ 1 — 論文の取り込み、コンテンツ計画、主張の監査
  1. 論文のソース(.tex が理想的。なければ PDF)を読みます。タイトル/著者/所属、 主要な数値 3~5 件、主要な手法(数式は原文のまま)、主な結果 (表/図とそれらが示す内容)、要点を抽出します。 poster_html/POSTER_CONTENT_PLAN.md を作成し、どの列に何を配置するか、カードごとの 文字数を定めます。目標密度(表のセル、キャプション、著者行、フッターを除く): 標準的なポスターは 550~850 語、理論と実証の両方を含む高密度ポスターは 750~1050 語です。 ただし後者は、コンパクトなコンポーネント(eqn-anatomy、flow-strip、 derived-col、claim-pills、keybox--4)を 2 つ以上使う場合に限ります。 4 列の横長ポスターが 500 語未満なら、テンプレートがヒーロー/ビジュアル重視でない限り、 プロ仕様の高密度ポスターと並べると情報がまばらに見えることを警告します。 1100 語を超える場合も、ユーザーが高密度モードを指定していない限り警告します。 可能な場合、箇条書きは 8 語以下にします。密度は長い文章ではなく、構成によって高めます。 文章よりコンパクトな構成を優先します。論文に明示的な目的関数、アルゴリズム、定理の仕組み、 またはベースライン比較がある場合は、次のうち少なくとも 2 つを抽出します: (1) 実証目的関数/損失関数の構成、(2) 数式の項ごとの構成、 (3) 論文中の変数に基づく手法のフロー図、(4) 手法とベースラインの行を比較する差分列、 (5) 実装/理論を 4 項目で示すキーボックス、(6) 数値が多いポスター向けの主張/証拠ピル表。 アルゴリズムを捏造しないでください。論文に目的関数しかない場合、コンポーネント名には 「目的関数フロー」または「損失関数の構成」を使い、「アルゴリズム」とは呼びません。
  2. モデル横断のコンテンツ監査(新しい Codex スレッド、xhigh)を行います。コンテンツ計画のパスと論文ソースのパス(要約は付けず、パスのみ)を渡し、次の形式で主張から証拠への対応表を作成するよう依頼します:| claim on poster | paper file:line | paper says (verbatim) | match? |。match の値は {OK, NUMERIC-MISMATCH, OVERCLAIM, MISSING-PRECONDITION, NOT-IN-PAPER, SCOPE-NARROWED} のいずれかです。poster_html/CLAIM_EVIDENCE.md に保存します。
  3. OK でない行をすべて修正するか、ユーザーが了承したトレードオフとして記録します。

🚦 チェックポイント:コンテンツ計画と監査の概要。ここで待ちます。

フェーズ 2 — 論文の実際の図(出典の確認が条件)

ソースの優先順位:

  1. 論文ソースの figures/(ベクター形式の SVG/PDF → 利用可能なら inkscape/pdf2svg で SVG に変換し、そうでなければレンダリング時のピクセル数の 2 倍以上でラスタライズします)。
  2. PDF のみの場合:extract_pdf_figures.py contact-sheet と auto を使って候補領域を一覧表示し、 切り抜き候補を選びます(🚦 切り抜きの選択は人間が確認します)。その後、crop を 300~450 DPI で実行します。
  3. 最終手段:ユーザーが page,x0,y0,x1,y1 のバウンディングボックスを明示的に指定します。

続いて、すべての素材に preprocess_figures.py --autocrop を実行します。論文由来の画像はすべて FIGURE_MANIFEST.json にエントリーを作成し(ソースハッシュ、ページ、バウンディングボックス、DPI、sha256、natural_px)、 <img data-source="paper" data-asset-id="..."> として埋め込みます。

厳格なルール:論文由来のビジュアルが 2 点以上なければ、素材ゲートは不合格です。理論のみの論文では、 人間のチェックポイントで 総面積 のルールを免除できます(--waive-total-area)。ただし、黙って免除してはいけません。 代わりに独自の装飾的な SVG「図」を作成することは絶対に避けてください。

図の面積の範囲(素材ゲート、本文に占める割合):合計目標は 14~22 % (12 % 未満/24 % 超で警告、10 % 未満/28 % 超で不合格)。通常の図 1 点あたりの目標は 4~8 %(10 % 超で警告、 13 % 超で不合格)。figure--duo の合計は 8~12 % です。ヒーローテンプレートでは --hero を指定できます (中央のメインビジュアルが 30~40 % を占めてもかまいません)。失敗のパターンは両極端で、図が小さすぎると装飾に見え、 大きすぎるとコンテンツを圧迫します。軸を共有する図や前後の変化を示す兄弟図は、別々のカード 2 枚ではなく、 1 つの figure--duo カードにまとめます。

フェーズ 3 — 骨組みとトークン

cp templates/<chosen>.html poster_html/poster.html を実行します。開催会場のキャンバスに合わせて @page と .poster の寸法を変更し(同じ値を使った 2 か所の編集)、選択したトークンパックを :root の DESIGN TOKENS ブロックに適用します。計画に従ってコンテンツを入力し、マニフェストの図を埋め込みます。 レイアウトの調整を始める前に、preflight と style_check を実行し、両方が PASS になることを確認します。 新しい骨組みが measure で失敗するのは想定内です。このゲートは、コンテンツを埋めたポスターを評価します。

Phase 4 — レイアウトのハードループ

レイアウトを変更するたびに:

python3 "$SKILL_SCRIPTS/run_gates.py" poster_html/poster.html \
    --tokens <pack.json> --manifest poster_html/FIGURE_MANIFEST.json \
    --report poster_html/GATE_REPORT.json

標準の順序:プリフライト → スタイル → アセット → 計測 → 仕上げ。目標:カラム下端の ばらつき < 5 px(目標 < 3)、フッターの間隔 ∈ [30, 50] px、カード間の間隔 ∈ [12, 50] px、 キャンバス充填率 ∈ [95, 101] %、ポスターのバウンディングボックスをページに対して ±2 px 以内で整列。各失敗モードの修正方法は、ゲートの出力と templates/COMPONENTS.md に記載されています。ハードゲートに不合格のものがある間は先に進まないでください。計測していないポスターをレビュアーに見せないでください。 余白、space-between、カードの引き伸ばしではなく、論文の内容(Gate C)を使って、埋まりきっていないカラムのバランスを整えてください。

Phase 5 — Claude によるビジュアルレビュー(美的評価のゲート)

自分でレンダリングし、結果を確認してください:

python3 "$SKILL_SCRIPTS/render_preview.py" poster_html/poster.html
pdftoppm -r 100 poster_html/poster_preview.pdf poster_html/review_full -png -f 1 -l 1
# plus 2-4 region crops at higher res (header / one column / equations) via PIL

まずキャリブレーションを行ってください(../shared-references/taste-calibration.md):このスキルのディレクトリに人間がキュレーションした references/good/ と references/bad/ がある場合(またはプロジェクトが独自の2セットを提供する場合)、以下の評価軸に沿って、対象を評価する前にそれぞれの参照ポスター3件以上を採点し、尺度の基準にしてください。基準となるポスターを自分で選んだり、探したり、生成したりしてはいけません。参照セットがない場合はキャリブレーションなしで進め、CALIBRATION: none と記録してください。基準スコアを捏造してはいけません。 評価軸(重みの合計は 1.0):デザイン 0.35 · 仕上がり 0.30 · 機能性 0.20 · 独創性 0.15。換算式:SCORE = min(round(1 + 9 × COMPOSITE), lowest triggered cap) — 上限は換算後に適用されます。以下のループにある Score ≥ 9 のしきい値では、未加工の合成スコアではなく、最終的に上限が適用された SCORE を常に参照してください。

厳密に 1~10 で採点してください。重大な上限(下限として機能します。キャリブレーション済みの合成スコアでも上書きできません):実際の論文図が 2 点未満 → ≤ 3、キャンバスの破損/コンテンツの切れ/数式が読めない → ≤ 4、目に見える色相の系統が 4 つ以上、またはヘッダーにグラデーションを多用 → ≤ 4、大きな空白のカードやカラム → ≤ 5、視覚的な主張の捏造 → ≤ 3。確認項目:ポスターとしての全体的な印象(プロがデザインしたポスターの隣に掲示しても、パッチワークのダッシュボードのように見えないか?)、アクセントカラーの一貫性、実際の図が読みやすく中心的であること、印刷物としての階層(タイトル → 主要な統計情報 → 図 → 詳細)、カラムの充填、数式の視認性(大きすぎるボックスに小さな数式を入れない)、本文はセリフ体/見出しはサンセリフ体の組み合わせ、安っぽいグラデーションを使わない、コンポーネントの一貫性、60秒で伝わるストーリー。出力形式:

SCORE: N/10            (= min(round(1 + 9 × COMPOSITE), lowest cap); drives the loop)
COMPOSITE: 0.xx        (weighted; list the four per-axis scores)
CALIBRATION: anchored | none
GAP: <which reference poster the target falls short of / exceeds, on which axis, and why — one paragraph; omit only when CALIBRATION: none>
CAPS_TRIGGERED: ...
TOP_ISSUES: (max 3)
ALLOWED_FIX_TYPE per issue: token | component | rebalance | asset | template/canvas
PATCH_LOOP_RISK: low | medium | high

ループ:修正(以下の修正語彙を使用) → Phase 4 のゲートを再実行 → 再採点。1ラウンドあたりの問題は最大 3 件、最大 3 ラウンド。 スコア ≥ 9 なら Phase 6 へ。それでも 3 ラウンド後に < 9 なら、パッチ作業を中止し、テンプレート/キャンバス/コンテンツの再選択(Phase 3 に戻る)または人間の判断にエスカレーションしてください。見た目を整えるだけのパッチ作業で、4ラウンド目に入ってはいけません。

修正語彙(限定セット — パッチループを防ぐ中核)

許可される操作:(a) :root トークンの値を編集する、(b) templates/COMPONENTS.md にあるコンポーネントのインスタンス全体を入れ替える/削除する/追加する、(c) コンテンツのバランスを調整する(カードを別のカラムに移動する、論文の内容に基づいてテキストを短くする/長くする、AR の範囲内で図のサイズを変更する)、(d) テンプレート/キャンバスを再選択する、(e) トークンのみを参照する、既存コンポーネントの CSS に対するグローバルな編集、(f) 定義済みのバリアント(.eqn--large、.card--compact、.figure--wide、.nowrap、…)を切り替える、(g) アセットを修正する(再クロップする、同じ論文からより鮮明な図に差し替える、前処理をやり直す)。

禁止事項:新しいインラインスタイル、新しい 16 進数値の追加、独自の装飾用 SVG、要素ごとのフォントサイズの上書き。**ビジュアルループの最中に新しいコンポーネントを追加してはいけません。**作業を止め、人間によるチェックポイントを設け、COMPONENTS.md に追加してから、Phase 3 からやり直してください。

フェーズ 6 — Codex による最終レビュー(新しいスレッド、クロスモデル)

まず、すべてのハードゲートが PASS、仕上げに関する警告がゼロまたは免除済みで、ビジュアル評価が 9 以上であることを確認します。その後、新しい Codex スレッド(xhigh)でコンテンツプランではなく最終成果物をレビューします。対象は poster.html、レンダリング済み PDF/PNG、論文ソース、GATE_REPORT.json、CLAIM_EVIDENCE.md です。パスのみを渡し、実行者についての説明は付けません。次の点を確認します。(1)最終テキストで忠実性と過剰な主張を再チェック(仕上げによって新たな主張が加わる可能性があります)、(2)残留物(\ref{、TODO、数式中の生の <、画像の欠落、リモート URL)、(3)視覚的な訴求力(見出しの数値が目立つこと、バナーが 2 m 離れても読めること)、(4)ゲートログの整合性。レビュアーは推奨を提示しますが、編集はしません。修正が必要な場合は、フェーズ 4/5 のゲートに戻します。レビューのやり直しに直接進んではいけません。

フェーズ 7 — 最終検証とレポート
python3 "$SKILL_SCRIPTS/poster_check.py" verify-final poster_html/poster_preview.pdf \
    --from-html poster_html/poster.html --max-size-mb 20

ページ数は 1、寸法は @page と一致し、サイズは 20 MB 以下で、TODO や残留物、リモートアセットがないこと。レポートには、PDF のパス、最終スプレッドの px、フッターの間隔の範囲、ゲートのサマリーテーブル、未解決の免除事項、Codex の判定を含めます。POSTER_STATE.json を done に更新します。

状態の永続化

poster_html/POSTER_STATE.json:{phase, venue, canvas{w,h,orientation,source_url, retrieved}, template, token_pack, design_decisions{...}, figures_selected[], visual_rounds, codex_threads{audit, final}, status, timestamp} — 各フェーズの完了後に書き込みます。これにより、コンパクトリカバリーによる再開が可能になります。

主なルール

  • 目測ではなく、計測する。 run_gates.py の出力なしにレイアウトについて主張してはいけません。
  • 美観よりゲートを優先する。 Claude/Codex のレビュー対象になるのは、ハードゲートが PASS したポスターだけです。この順序によって、パッチループの悪循環を断ち切ります。
  • 論文の数値や図を捏造しない。 数値は論文ソースから取得し、ビジュアルにはマニフェストの出典情報を付けます。捏造は重大な上限違反となり、スコアは 3 以下になります。
  • 色相は 2 つ、システムは 1 つ。 アクセントカラー+ゴールド+ニュートラルカラーです。スタイルゲートで徹底します。ゲートと交渉してはいけません。
  • ポスターの中心は実際の図です。 論文独自の図がなければ、それはダッシュボードであり、ポスターではありません。
  • 修正方法の語彙は限定されています。 トークン/コンポーネント/バランス調整/アセット/キャンバスで表現できない修正は、適切な修正ではありません。
  • クロスモデルによる判定。 Claude はループを進行させ、ビジュアルを評価します。コンテンツの忠実性に関する受け入れ判断は、新しい Codex スレッドが行います(ループは進行できても、無罪判定はできません)。
  • ユーザーの決定を尊重する。 何かを「改善」する前に、design_decisions を読み直してください。
  • ベンダー境界。 poster_check.py、render_preview.py、_posterly/ は posterly からベンダー提供されたものです。変更差分は最小限に抑え、ARIS 側のロジックはベンダー提供ファイルではなく、新しいスクリプトに記述してください。

レビューのトレース

shared-references/review-tracing.md に従い、すべての Codex レビュアー呼び出しのトレースを .aris/traces/paper-poster-html/<date>_run<NN>/ に保存します(監査スレッドと最終スレッド、生の応答)。

出力仕様

poster_html/
├── poster.html              # single-file source of truth
├── poster_preview.pdf       # print-emulated, verify-final-checked
├── poster_preview.png       # thumbnail
├── POSTER_STATE.json        # resume state
├── GATE_REPORT.json         # canonical gate ledger (schema v1)
├── POSTER_CONTENT_PLAN.md   # what-goes-where + word budgets
├── CLAIM_EVIDENCE.md        # codex claim→evidence audit
├── FIGURE_MANIFEST.json     # figure provenance (sha256, page, bbox, dpi)
└── assets/{paper_figures,logos,qr,mathjax}/

使用しない場合

  • ポスターではなくスライドの場合 → /paper-talk / /slides-polish。
  • 論文の主要な主張がまだ定まっていない場合 — まず論文を修正してください。ポスターは与えられたストーリーを増幅します。

コメント