paper-poster-html について
paper-poster-htmlは、論文からHTMLのポスターを作成し、PlaywrightでPDFに出力するスキルです。測定に基づくレイアウトゲート、図の出典検証、制約付きの修正手順により、研究者の印刷用ポスター制作を支援します。
主な機能
- 01会場仕様に合わせた印刷キャンバス設定
- 02論文内容の計画と主張の監査
- 03論文図の出典と面積の検証
- 04レイアウト・スタイル・素材のゲート実行
- 05定められた制約内でのレビューと修正
活用シーン
- 01論文から学会ポスターを作成
- 02ポスター寸法と印刷レイアウトを確認
- 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.mdIMPLEMENTATION_CONVENTIONS.mdNOTICE.mdLICENSES/posterly-MIT.txtscripts/asset_check.pyextract_pdf_figures.pyposter_check.pypreprocess_figures.pyrender_preview.pyrun_gates.pystyle_check.pyscripts/_posterly/__init__.pycanvas.pymeasure.pypolish.pypreflight.pyrender.pytextutil.pyverify_final.pytemplates/COMPONENTS.mdlandscape_4col.htmllandscape_hero.htmlportrait_2col.htmlREADME.mdtemplates/tokens/acl.jsoncvpr.jsongeneric.jsoniclr.jsonicml.jsonneurips.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 パッチが追加されたのです。解決策は注意喚起ではなく、構造的な対策です:
- 美的評価の前にハードゲートを実行する(配置、スタイル、アセットが先に PASS しなければなりません。未測定のポスターをレビュアーに見せることはありません)。
- 修正用語体系を限定する — ビジュアルレビューによる修正で変更できるのは、デザイントークン、カタログ登録済みのコンポーネント全体、コンテンツの再配分、アセット、またはキャンバスの選択のみです。新しいインラインスタイル/新しい hex 値/専用の装飾は、構造上禁止されています。
- 2 色相の規律を、スタイルの提案ではなく機械的なチェックとして適用する。
- 出典情報マニフェスト付きの実際の論文図版を必須とし、満たさない場合はゲートで失敗させる。
メンタルモデル
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 — 再開、依存関係、会場仕様
- 再開:
poster_html/POSTER_STATE.jsonがstatus: in_progress(24 時間以内)の状態で存在する場合は、保存されたフェーズから再開します。 - 依存関係(順にたどる代替手段):
- 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 が未レンダリングの場合はどちらの場合も必ず失敗します。
- Playwright + 同梱の Chromium → 見つからない場合は
- 会場仕様の確認(最新情報):会場の公式ポスター作成要項ページを参照します(検索 + 取得)。寸法、向き、最小フォントサイズ、ロゴの使用規定、匿名性に関する規則、ファイル形式を抽出します。
{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 — 論文の取り込み、コンテンツ計画、主張の監査
- 論文のソース(
.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) 数値が多いポスター向けの主張/証拠ピル表。 アルゴリズムを捏造しないでください。論文に目的関数しかない場合、コンポーネント名には 「目的関数フロー」または「損失関数の構成」を使い、「アルゴリズム」とは呼びません。 - モデル横断のコンテンツ監査(新しい 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に保存します。 - OK でない行をすべて修正するか、ユーザーが了承したトレードオフとして記録します。
🚦 チェックポイント:コンテンツ計画と監査の概要。ここで待ちます。
フェーズ 2 — 論文の実際の図(出典の確認が条件)
ソースの優先順位:
- 論文ソースの
figures/(ベクター形式の SVG/PDF → 利用可能ならinkscape/pdf2svgで SVG に変換し、そうでなければレンダリング時のピクセル数の 2 倍以上でラスタライズします)。 - PDF のみの場合:
extract_pdf_figures.py contact-sheetとautoを使って候補領域を一覧表示し、 切り抜き候補を選びます(🚦 切り抜きの選択は人間が確認します)。その後、cropを 300~450 DPI で実行します。 - 最終手段:ユーザーが
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。 - 論文の主要な主張がまだ定まっていない場合 — まず論文を修正してください。ポスターは与えられたストーリーを増幅します。