paper-poster-html skill
DEFAULT poster pipeline — build an academic conference poster (ICML/NeurIPS/ICLR/CVPR/...) as a single HTML/CSS file with measurement-driven hard gates, real paper figures, a two-hue design-token system, and print-ready PDF via headless Chromium. Use when the user says \"做海报\", \"poster\", \"conference poster\", \"paper poster\", or asks to design/redo a research poster.
Is the paper-poster-html skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-09-28.
No findings.
Install the paper-poster-html skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep.git /tmp/Auto-claude-code-research-in-sleep mkdir -p ~/.claude/skills cp -r /tmp/Auto-claude-code-research-in-sleep/skills/skills-codex/paper-poster-html ~/.claude/skills/paper-poster-html
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Paper Poster (HTML): measurement-gated poster generation
One HTML file styled for an exact print canvas (@page { size: W H }), rendered to PDF via Playwright print emulation. Iterate by measuring, not eyeballing — the screen preview lies; only print emulation at the correct viewport tells the truth. Core gate machinery is adapted from posterly (MIT, © 2026 Ruishuo Chen — see NOTICE.md and LICENSES/posterly-MIT.txt in the mainline skill directory); ARIS adds style discipline gates, figure-provenance gates, the fresh-agent review loop (same-family provisional in the base mirror), and the anti-patch-loop fix vocabulary.
Why this skill exists (the failure it prevents)
A predecessor pipeline produced a poster with 30+ colors, zero real paper figures, a screen-pixel canvas, and tiny formulas floating in oversized boxes, then spent 12+ review rounds making it worse — each round added a new badge color or bespoke SVG patch. The cure is structural, not exhortative:
first — a reviewer never sees an unmeasured poster).
- Hard gates run before any aesthetic opinion (alignment, style, assets must PASS
whole catalogued components, content rebalance, assets, or canvas choice. New inline styles / new hex values / bespoke decorations are structurally forbidden.
- A closed fix vocabulary — visual-review fixes can only touch design tokens,
- Two-hue discipline as a machine check, not a style suggestion.
- Real paper figures with provenance manifest, or the gate fails.
Mental model
paper (.tex / PDF) ──► content plan + claim→evidence audit (fresh reviewer agent)
│
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
▼
executor visual review (≤3 issues × ≤3 rounds, fix-vocabulary only)
│ score ≥ 9
▼
final fresh-agent review (same-family provisional, full HTML+PDF)
│ pass
▼
verify-final → poster.pdf + GATE_REPORT.jsonConstants
mainline skill (Arch C) at skills/paper-poster-html/scripts/ and skills/paper-poster-html/templates/. Resolve them in this order:
- SKILLSCRIPTS** — helpers and templates are single-owner and ship inside the
SKILL_HOME=""
[ -d ".agents/skills/paper-poster-html/scripts" ] && SKILL_HOME=".agents/skills/paper-poster-html"
if [ -z "$SKILL_HOME" ] && [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills-codex.txt ]; then
ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills-codex.txt 2>/dev/null) || true
fi
[ -z "$SKILL_HOME" ] && [ -d "skills/paper-poster-html/scripts" ] && SKILL_HOME="skills/paper-poster-html"
[ -z "$SKILL_HOME" ] && [ -n "${ARIS_REPO:-}" ] && [ -d "$ARIS_REPO/skills/paper-poster-html/scripts" ] && SKILL_HOME="$ARIS_REPO/skills/paper-poster-html"
[ -z "$SKILL_HOME" ] && [ -d "$HOME/.codex/skills/paper-poster-html/scripts" ] && SKILL_HOME="$HOME/.codex/skills/paper-poster-html"
if [ -z "$SKILL_HOME" ]; then
echo "ERROR: paper-poster-html scripts not resolved. Re-run the ARIS Codex install." >&2
fi
SKILL_SCRIPTS="$SKILL_HOME/scripts"If unresolved, the install is broken: abort and tell the user to re-install (Policy A — the gates ARE the skill; never improvise replacements).
review call (a new spawnagent: every time; never reuse a reviewer agent across review boundaries).
- REVIEWERMODEL = gpt-6-astra, reasoning effort xhigh, fresh reviewer agent per
(Known anchor: ICLR 2026 main = 185×90 cm landscape per its official printing service; ICML/NeurIPS commonly 60×36 in landscape; workshop posters often 61×91 cm portrait. Specs change yearly — verify.)
- CANVAS — from the venue's official spec, looked up live in Phase 0. Never assume.
— venue-colors: true. Purple-dominant accents (hue 250–285) are banned unless the user passes — allow-purple: true.
- PALETTE — default = templates/tokens/generic.json (slate-blue #2D5F8B accent
- gold #C9A24A highlight + neutrals) for all venues. Venue packs are opt-in via
- AUTOPROCEED = false** — wait for explicit confirmation at every 🚦 checkpoint.
- OUTPUTDIR = posterhtml/ in the working directory.
Workflow
Phase 0 — Resume, dependencies, venue spec
(< 24 h), resume from the saved phase.
- Resume: if posterhtml/POSTERSTATE.json exists with status: in_progress
- Dependencies (degradation chain, in order):
chromium → if install fails but system Chrome exists, scripts fall back to channel="chrome" → if all fail: you may produce the content plan and scaffold only, label everything "not print verified", and must NOT emit a final PDF. If print rendering, PNG review, or PDF verification is impossible in the current environment, stop and tell the user what to configure. Do not silently degrade this skill into an unmeasured text-only poster draft.
- Playwright + bundled Chromium → if missing, python3 -m playwright install
pdftoppm / PyMuPDF must exist for PNG review renders.
- pdfinfo missing → PyMuPDF reads PDF dimensions. At least one of
reference it locally in the HTML. CDN is acceptable only for drafts; the measure gate hard-fails on unrendered MathJax either way.
- MathJax: download tex-svg.js once into poster_html/assets/mathjax/ and
(search + fetch). Extract dimensions, orientation, font floor, logo policy, anonymity rules, file format. Record {spec, sourceurl, retrieved} into POSTERSTATE.json — specs change yearly; never reuse a cached spec silently.
- Venue spec lookup (live): consult the venue's official poster-instructions page
🚦 Checkpoint: echo the venue spec table (canvas, orientation, source URL) and the chosen template. Wait.
Phase 0.5 — Design discovery (one question batch)
Ask the user once, ≤4 questions: layout template (from templates/README.md), palette (default generic pack / venue pack / custom within constraints), logos + venue mark (paths or "none" — never fabricate; check the venue's logo policy), QR target (paper / code / project page / none — generate offline with qrencode or python-qrcode; never a remote QR-service URL). Persist answers in POSTERSTATE.json as designdecisions — re-read before any later "improvement" so deliberate choices are never reverted.
Phase 1 — Paper ingest, content plan, claim audit
the 3–5 headline numbers, core method (equations verbatim), main results (tables/figures and what they show), takeaways. Build posterhtml/POSTERCONTENTPLAN.md — what goes in which column, word budget per card. Target density (excluding table cells, captions, author line, footer): standard poster 550–850 words; dense theory+empirical poster 750–1050 words, allowed only when ≥2 compact components are used (eqn-anatomy, flow-strip, derived-col, claim-pills, keybox--4). Warn yourself below 500 words on a 4-column landscape (it will read as sparse next to professionally dense posters) unless the template is hero/visual-first; warn above 1100 unless the user asked for dense mode. Bullets ≤ 8 words when possible — density comes from structure, not long prose. Prefer compact structure over prose: if the paper contains an explicit objective, algorithm, theorem mechanism, or baseline comparison, extract at least two of: (1) empirical objective / loss stack; (2) term-by-term equation anatomy; (3) a method-flow strip grounded in paper variables; (4) a derived-Δ column for method-vs-baseline rows; (5) a 4-up implementation/theory keybox; (6) a claim/evidence pill table for numeric-heavy posters. Do not invent an algorithm.** If the paper has only an objective, label the component "objective flow" or "loss anatomy", never "algorithm".
- Read the paper source (.tex ideal; PDF otherwise). Extract: title/authors/affils,
- Fresh-agent content audit (same-family provisional): give it the content plan path
table. Save to posterhtml/CLAIMEVIDENCE.md.
- paper source path(s) — paths only, no summaries — and ask for a claim→evidence
spawn_agent:
model: gpt-6-astra
reasoning_effort: xhigh
message: |
Audit a conference-poster content plan against its source paper.
Read these files yourself (no other context is provided):
- poster_html/POSTER_CONTENT_PLAN.md
- [paper source path(s)]
For EVERY claim, number, equation, and attribution in the plan, output one row:
| claim on poster | paper file:line | paper says (verbatim) | match? |
with match ∈ {OK, NUMERIC-MISMATCH, OVERCLAIM, MISSING-PRECONDITION,
NOT-IN-PAPER, SCOPE-NARROWED}. End with a count per category.- Fix every non-OK row or record it as a user-acknowledged tradeoff.
🚦 Checkpoint: content plan + audit summary. Wait.
Phase 2 — Real paper figures (provenance-gated)
Source preference chain:
inkscape/pdf2svg if available, else rasterize ≥ 2× rendered px).
- Paper source figures/ (vector SVG/PDF → convert to SVG via
regions → pick crops (🚦 human confirms crop choices) → crop at 300–450 DPI.
- PDF-only: extractpdffigures.py contact-sheet + auto to list candidate
- Last resort: user supplies explicit page,x0,y0,x1,y1 bboxes.
Then preprocessfigures.py --autocrop every asset. Every paper-derived image gets a FIGUREMANIFEST.json entry (source hash, page, bbox, dpi, sha256, natural_px) and is embedded as .
Hard rule: ≥ 2 paper-derived visuals or the asset gate fails. Theory-only papers may waive the total-area rule (--waive-total-area) at a human checkpoint — never silently. Never draw bespoke decorative SVG "figures" as substitutes.
Figure-area bands (asset gate, fractions of body): total target 14–22 % (warn < 12 % / > 24 %, hard < 10 % / > 28 %); per ordinary figure target 4–8 % (warn
10 %, hard > 13 %); figure--duo combined 8–12 %. Hero templates pass --hero
(centerpiece may take 30–40 %). The failure mode is symmetric: too small reads as decoration, too big crowds out content. Sibling figures that share axes or tell a before→after story belong in one figure--duo card, not two cards.
More skills from wanshuiyin/Auto-claude-code-research-in-sleep
- Aablation-plannerUse when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.
- Aablation-plannerUse when main results pass result-to-claim (`claim_supported = yes` or `partial`) and ablation studies are needed for paper submission. A secondary Codex agent designs ablations from a reviewer's perspective; the local executor reviews feasibility and implements.
- AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
- AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
- Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says "analyze results", "compare", or needs to interpret experimental data.
- Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says \"analyze results\", \"compare\", or needs to interpret experimental data.
- AarxivSearch, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
- AarxivSearch, download, and summarize academic papers from arXiv. Use when user says \"search arxiv\", \"download paper\", \"fetch arxiv\", \"arxiv search\", \"get paper pdf\", or wants to find and save papers from arXiv to the local paper library.
- Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
- Aauto-paper-improvement-loopAutonomously improve a generated paper via Claude review through claude-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
- Aauto-paper-improvement-loopAutonomously improve a generated paper via Gemini review through gemini-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
- Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.