$npx -y skills add Chenruishuo/posterly --skill posterlyBuild an academic conference poster (ICML/NeurIPS/ICLR/CVPR/etc.) as a single HTML/CSS file and render it to print-ready PDF via headless Chromium. Use when user says \"做海报\", \"poster\", \"ICML/NeurIPS/ICLR poster\", or asks to design/edit a research poster.
| 1 | # posterly — HTML/CSS Academic Poster Workflow |
| 2 | |
| 3 | A poster is **one HTML file** styled for an exact print canvas, rendered to PDF via Playwright + Chromium. Iterate by **measuring**, not eyeballing — the screen preview lies; only `emulate_media("print")` at the correct viewport tells the truth. |
| 4 | |
| 5 | ## Mental model |
| 6 | |
| 7 | ``` |
| 8 | HTML (with @page { size: W H }) |
| 9 | │ |
| 10 | ▼ print-emulate Chromium at W×96 × H×96 px viewport |
| 11 | │ |
| 12 | ▼ data-measure-role tags identify columns/hero/footer-strip |
| 13 | │ |
| 14 | ├──→ tools/poster_check.py measure (HARD GATE — spread < 5 px, |
| 15 | │ gap-to-strip ∈ [30,50] px, |
| 16 | │ intercard gap ∈ [12,50] px, |
| 17 | │ poster bbox aligns to page |
| 18 | │ within ±2 px) |
| 19 | ├──→ tools/poster_check.py preflight (LaTeX residue, math `<`, missing imgs) |
| 20 | ├──→ tools/render_preview.py (PDF + thumbnail) |
| 21 | └──→ tools/poster_check.py verify-final (PDF page count / dims / size) |
| 22 | ``` |
| 23 | |
| 24 | The skill is venue- and lab-neutral by default. Compose a design direction from `templates/DESIGN-AXES.md` (Step 2.5), scaffold from the nearest template in `templates/README.md`, edit `:root` design tokens to match the locked direction, fill TODO placeholders with your paper's content. |
| 25 | |
| 26 | ## Canvas constants |
| 27 | |
| 28 | | Constant | Value | Notes | |
| 29 | |---|---|---| |
| 30 | | `--u` (CSS unit) | print = `1mm`, screen = `1.6px` | Use `calc(N * var(--u))` for ALL sizing. | |
| 31 | | Print viewport (px) | `W_in × 96` × `H_in × 96` | Computed by `poster_check`/`render_preview`. | |
| 32 | | Body cols | 2 / 3 / 4, or 1 hero + 1 column | Per template. | |
| 33 | | Strict alignment | **spread < 5 px** (aim < 3) | Hard, non-negotiable gate. | |
| 34 | |
| 35 | ## Workflow |
| 36 | |
| 37 | ### Step 0 — Pull the venue's official poster guidelines |
| 38 | |
| 39 | Conference specs change year-to-year and vary wildly between venues: |
| 40 | |
| 41 | - ICML often goes 60×36 in landscape; **ICLR has been 24×36 in portrait** in recent years; **NeurIPS** historically allowed multiple sizes; **CVPR** has used A0 portrait. Don't assume. |
| 42 | - Font minimums (≥24pt body for some venues), bleed margins, allowed orientations, on-poster logos, anonymity rules, QR-code policies — all vary. |
| 43 | |
| 44 | Procedure: |
| 45 | 1. `WebSearch` for `"<venue> <year> poster instructions"` or `"<venue> <year> poster size"`. |
| 46 | 2. `WebFetch` the venue's official page; extract **dimensions, orientation, font-size floor, logo policy, anonymity rules, file-format requirement, template link if any**. |
| 47 | 3. If paywalled or down, check OpenReview's call-for-papers or ask the user for the relevant section. |
| 48 | 4. Echo the extracted spec back to the user in one short table **BEFORE** drafting. Confirm before proceeding — a wrong canvas size invalidates every alignment decision downstream. |
| 49 | |
| 50 | ### Step 0.5 — Design discovery (one round of AskUserQuestion) |
| 51 | |
| 52 | Don't pick colors, logos, a QR target, the text density, or the block count silently. Ask the user in one round. (The template and the overall look are deliberately NOT asked here as a text question — they are decided in **Step 2.5**, where composed candidate directions are shown as rendered thumbnails; this round gathers that step's inputs.) AskUserQuestion takes at most 4 questions per call, so if more than four of the topics below need input for this poster, send the four most decision-relevant first and ask the rest (usually QR and block count) in a brief second call: |
| 53 | |
| 54 | - **Style leanings**: "Any look-and-feel must-haves or vetoes? E.g. 'keep it light', 'a dark editorial look is welcome', 'no mascots' — or 'no preference'." Do NOT ask the user to pick a template or a style from a text list here: the layout skeleton and the whole visual direction are composed in **Step 2.5** and chosen there by eye from rendered thumbnails. This bullet only collects constraints for that composition. |
| 55 | - **Palette**: "Lab/venue colors? E.g. `#XXX` accent + `#YYY` highlight — or say 'you pick'." When the user gives colors, use them as the palette seed. When they don't, do **not** silently fall back to the one house style: derive a poster-specific palette from the materials at hand (**§Palette derivation** below). Either way the palette is then *shown, not just named* — it lands in the Step 2.5 thumbnail candidates, where the user can veto it cheaply. The shipped neutral (steel-blue accent + warm-gold register) is the *last-resort* fallback, not the default. |
| 56 | - **Logos & venue mark**: "Any logos to place? Affiliation / lab logo, and the conference / journal logo — give paths or URLs, or say 'none'." Don't assume a venue logo is wa |