Install
$ agentstack add skill-yhbcode000-paper-share-skills-paper-video-cover ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Paper Video Cover
Generate a Gemini/SUSTech 16:10 cover from a paper directory. The generator installs output only after LaTeX compilation and PNG conversion both succeed.
Package and setup
The installed uv project is:
/paper-video-cover
It manages its Pillow dependency and includes both required themes:
/paper-video-cover/templates/beamerthemegemini.sty
/paper-video-cover/templates/beamercolorthemesustech.sty
LuaLaTeX and Poppler pdftoppm are external tools. Both must resolve before generation. Each tool is resolved in order: explicit CLI flag, LUALATEX or PDFTOPPM environment variable, then PATH. An invalid higher-priority override is fatal and is not bypassed.
Run
uv run --project "/paper-video-cover" `
"/paper-video-cover/scripts/generate_poster.py" `
""
Default output is /poster. Select another directory with:
uv run --project "/paper-video-cover" `
"/paper-video-cover/scripts/generate_poster.py" `
"" --output-dir ""
Options:
--data: optional JSON overrides.--scheme: SUSTech colour scheme (defaultdefault; 实验室调研 usesbilibilito match the lab-survey deck).--title-font: override the automatic title size.--output-dir: final output directory.--lualatex: explicit LuaLaTeX executable.--pdftoppm: explicitpdftoppmexecutable.
PNG generation is mandatory; a successful output contains non-empty poster.tex, poster.pdf, and poster.png, plus copied themes and converted figures. The build occurs in a sibling temporary directory, so a failed build does not replace an existing final output.
Lab survey poster generator (实验室调研, generatelabposter.py)
For 实验室调研 surveys use scripts/generate_lab_poster.py instead of the generic path — it fills the repo poster template (/main_template_lab_poster.tex, source of truth; fallback copy in templates/) with the DECK's 可视化分析 section-divider format: full-bleed slides-beamer/figures/background.png (REQUIRED — fatal if missing; if the deck lacks one, build it with paper-group-to-beamer/scripts/gen_viz_background.py --survey-dir "")
- FOUR white rounded shadow boxes (rows): 实验室调研+date pair / institute
block (brand-colour eyebrow + English line) / Prof. name / title2+title3 with emph rule. NO metric row, NO blurb, NO lab-name line.
NOTE (2026-08-07 default change): the poster is the REQUIRED ARTIFACT for lab dirs (the uploader fails closed without poster/poster.png), but the Bilibili UPLOAD COVER defaults to the deck's FIRST SLIDE (video/cover.png) — do NOT copy the poster over video/cover.png; keep the pipeline's slide-001 render. See lab-survey-to-bilibili-runbook.
uv run --project "/paper-video-cover" \
"/paper-video-cover/scripts/generate_lab_poster.py" \
"" --data "/poster_data.json"
--data JSON: title_1_pi is REQUIRED (≤30 chars). Naming convention: 中文名 PI → xxx教授(如 李飞飞教授、刘华平教授); 非教授角色不加 Prof./教授(如 Sergey Levine 等联合创始人); 英文名教授 → Prof. First Last(如 Prof. Yann LeCun). title_1_uni optional (width budget 40 units, CJK glyph = 2 units, other = 1, e.g. 纽约大学 = 8, Physical Intelligence = 21; empty → line dropped), title_1_uni_color optional (#RRGGBB — the institute's LOGO brand colour, e.g. NYU 57068B, Stanford 8C1515, CMU C41230, Berkeley 003262, Tsinghua 660874, SUSTech 2C5F7C, HKUST 003366; institutes without a brand colour default to black 000000), title_1_uni_en optional (≤40 chars, e.g. NEW YORK UNIVERSITY) — the title block renders the university as an institute-brand-colour eyebrow (25pt semibold in title_1_uni_color, 0.25em CJK tracking auto-inserted by the generator, side dashes 80×3px at 50% of the brand colour), the English small line (13pt #8A8F98), then the Prof. name (55pt pink bold, single line). title_2/title_3 optional (width budget 30 units each, e.g. 从卷积网络到世界模型 = 18, IEEE Fellow 2026 = 15; empty parts drop their line). date (optional, default today) fills the date block. Corpus stats from papers.json are informational only — a missing file degrades with a warning, never fails the run. NO lab-name line, NO blurb line, NO metric row, and NO · separators. Example: title_1_uni="纽约大学", title_1_uni_en="NEW YORK UNIVERSITY", title_1_pi="Prof. Yann LeCun", title_2="从卷积网络到世界模型", title_3="图灵奖得主的40年深度学习谱系". The upload title in video_meta.json keeps the full {机构缩写} {PI姓名}教授:主题 — Hook format independently. Poster layout (tikz rounded boxes with drop shadows over the deck's 可视化分析 background): FOUR rows in a 0.6971\textwidth container, absolutely centered on the page (fixed top 0.107\textheight / bottom 0.103\textheight offsets; stack ≈ 77% of the page): row 1 = 实验室调研 + 〈DATE〉 pair (0.3092\textwidth text width each, 32pt, height 0.1250\textheight); row 2 = institute block — NYU Purple eyebrow (25pt semibold, side dashes) + English line 13pt (0.6706\textwidth, height 0.1250\textheight); row 3 = Prof. name block (55pt pink bold single line, 0.6706\textwidth, height 0.1806\textheight); row 4 = title2/title3 + rule at 37pt (height 0.2153\textheight). Gaps: horizontal 0.0258\textwidth / vertical 0.0417\textheight (60 px both ways in the 2324×1440 reference canvas). --scheme default bilibili (deck-matching); --template/--theme-dir override the repo paths (deck sustech-theme is copied into the build). Token contract (fatal if unreplaced on code lines): 〈DATE〉〈TITLE1UNI〉〈TITLE1UNIEN〉〈TITLE1PI〉〈TITLE2〉〈TITLE3〉. Compiles with xelatex (two passes; the deck theme is xelatex-only) and renders poster.png at 300 dpi (32×20 cm page → ~3780×2363 px); output /poster/.
Gotcha — spaces in large title text: TikZ nodes + \fontsize{72}{84} under the sustech theme drop interword spaces (even \ ); the generator therefore converts plain spaces in title_1/2/3 to \hspace{0.25em} glue (verified via pdftotext: NYU Prof. Yann LeCun keeps its spaces).
Gotcha — row centering and block widths: (1) an \hbox to \containerwidth is NOT a paragraph line and \centering will not center it — rows must be \hbox to \textwidth{\hss … \hss} so the content centers inside the full line. (2) tikz text width with a \dimexpr-based macro can raise Dimension too large on the 32 cm paper — use literal widths (e.g. 0.44\textwidth). (3) a tikz node's outer width = text width + 2×inner sep — subtract the sep padding from the width macros so box edges land exactly on the container.
Gotcha — full-bleed background: the poster geometry MUST be \geometry{papersize={32cm,20cm},margin=0cm}. Any positive margin offsets beamer's background-canvas origin to the text-area top, producing a white strip across the top (~1.1 cm for margin=1.1cm) and clipping the background image's top edge. Verify after every poster build: top/bottom 3% rows of poster.png must have ~0 white pixels (PIL scan).
Lab survey posters (实验室调研)
Chinese titles are supported (the generated preamble loads ctex; the beamer title fallback no longer strips CJK). The poster title follows the upload-title format {机构缩写} {PI姓名}教授:主题 — Hook (e.g. NYU 杨立昆教授:从卷积网络到世界模型 — 图灵奖得主的40年深度学习谱系 / 清华刘华平教授:机器人具身智能 — 从视触觉到操作学习). Run with --scheme bilibili and a --data JSON:
{
"title_1_uni": "纽约大学",
"title_1_uni_en": "NEW YORK UNIVERSITY",
"title_1_uni_color": "57068B",
"title_1_pi": "Prof. Yann LeCun",
"title_2": "从卷积网络到世界模型",
"title_3": "图灵奖得主的40年深度学习谱系",
"date": "2026-08-06"
}
The palette source of truth is /sustech-theme/beamercolorthemesustech.sty (default blue / lab red / bilibili pink); the deck theme is copied into the build and the frame compiles under xelatex (the deck's engine). The background slides-beamer/figures/background.png must exist (the deck's 可视化分析 divider background) — the generator fails closed without it.
Example with explicit tools:
uv run --project "/paper-video-cover" `
"/paper-video-cover/scripts/generate_poster.py" `
"" `
--lualatex "C:/path/to/lualatex.exe" `
--pdftoppm "C:/path/to/pdftoppm.exe"
Example with environment configuration:
$env:LUALATEX = "C:/path/to/lualatex.exe"
$env:PDFTOPPM = "C:/path/to/pdftoppm.exe"
uv run --project "/paper-video-cover" `
"/paper-video-cover/scripts/generate_poster.py" `
""
Inputs
The generator extracts title, venue, project URL, figures, and metrics from the first MinerU markdown file under md_output/*/auto/. If caption-based extraction finds no figures, it searches slides-beamer/figures/, paper-source/image/, source/image/, Figures/, then md_output/*/auto/images/.
PNG, JPEG, and PDF sources are supported. PDFs use the resolved pdftoppm. Missing, unsupported, empty, or unconvertible referenced figures are fatal.
All JSON fields are optional. figure_map paths are absolute or relative to the paper directory:
{
"title": "Override Title",
"venue": "CVPR 2025",
"title_font": 220,
"cards_col1": [],
"cards_col2": [],
"figures": {"col1": ["fig1"], "col2": ["fig2"]},
"figure_map": {
"fig1": "md_output/1234.5678/auto/images/figure-1.png"
}
}
Batch
Use a UTF-8 file with one paper directory per line; start and count are optional positional arguments:
uv run --project "/paper-video-cover" `
"/paper-video-cover/scripts/batch_generate.py" `
"" 0 20
The batch uses the uv-selected interpreter, requires all three artifacts for each paper, and returns nonzero if any item fails.
Failure behavior
The generator returns nonzero if a required executable or packaged theme is missing, a child command returns nonzero, or a required artifact is missing or empty. Treat any nonzero result as no publication; the failed temporary build is removed and the previous final output remains unchanged.
Related skills
- skill://lab-survey-to-bilibili-runbook
- skill://paper-group-to-beamer
- skill://lab-poster-deck-format
- skill://paper-bilibili-uploader
- skill://paper-lab-survey-to-bilibili
- skill://paper-to-bilibili
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: yhbcode000
- Source: yhbcode000/paper-share-skills
- License: Apache-2.0
- Homepage: https://blog.yhbcode000.tech/paper-share-skills/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.