Communitygithub.com

Peytontalismanic424/paper-share-skills

从论文目录生成确定性的16:10视频封面海报。提取论文元数据和图表,原子化地生成poster.tex、poster.pdf和poster.png。适用于论文视频封面,而非会议海报。

paper-share-skills 是什么?

该AI Agent技能用于从论文目录自动生成确定性的16:10视频封面海报。它提取论文的关键元数据(如标题、会议信息、项目URL)和图表,并原子化地生成LaTeX源文件(poster.tex)、PDF文件(poster.pdf)和PNG图像文件(poster.png)。其核心优势在于生成过程的原子性:仅在LaTeX编译和PNG转换都成功后才输出最终文件,避免了部分失败导致的损坏输出。该技能支持多种平台(如Gemini/SUSTech),并提供了针对实验室调研(实验室调研)场景的专门脚本(generate_lab_poster.py),用于生成特定格式的海报,例如包含实验室名称、PI姓名、标题行和日期等信息的Bilibili风格封面。它依赖于LuaLaTeX和Poppler的pdftoppm工具,并支持通过CLI标志、环境变量或PATH进行配置。

兼容平台~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Peytontalismanic424/paper-share-skills/tree/HEAD/paper-video-cover

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Paper Video Cover

从论文目录生成 Gemini/SUSTech 16:10 封面。生成器仅在 LaTeX 编译和 PNG 转换都成功后安装输出。

包与设置

已安装的 uv 项目位于:

<SKILLS_DIR>/paper-video-cover

它管理其 Pillow 依赖项,并包含两个必需的主题:

<SKILLS_DIR>/paper-video-cover/templates/beamerthemegemini.sty
<SKILLS_DIR>/paper-video-cover/templates/beamercolorthemesustech.sty

LuaLaTeX 和 Poppler 的 pdftoppm 是外部工具。两者必须在生成之前解析。每个工具按顺序解析:显式 CLI 标志、LUALATEX 或 PDFTOPPM 环境变量,然后是 PATH。无效的高优先级覆盖会导致致命错误,不会绕过。

运行

uv run --project "<SKILLS_DIR>/paper-video-cover" `
  "<SKILLS_DIR>/paper-video-cover/scripts/generate_poster.py" `
  "<paper_dir>"

默认输出为 <paper_dir>/poster。使用以下命令选择其他目录:

uv run --project "<SKILLS_DIR>/paper-video-cover" `
  "<SKILLS_DIR>/paper-video-cover/scripts/generate_poster.py" `
  "<paper_dir>" --output-dir "<output_dir>"

选项:

  • --data <json>:可选的 JSON 覆盖。
  • --scheme <default|lab|bilibili>:SUSTech 颜色方案(默认为 default;实验室调研使用 bilibili 以匹配实验室调研 deck)。
  • --title-font <points>:覆盖自动标题大小。
  • --output-dir <directory>:最终输出目录。
  • --lualatex <path-or-command>:显式的 LuaLaTeX 可执行文件。
  • --pdftoppm <path-or-command>:显式的 pdftoppm 可执行文件。

PNG 生成是强制性的;成功的输出包含非空的 poster.tex、poster.pdf 和 poster.png,以及复制的主题和转换后的图表。构建发生在同级临时目录中,因此失败的构建不会替换现有的最终输出。

实验室调研海报生成器 (实验室调研, generate_lab_poster.py)

对于 实验室调研 调查,请使用 scripts/generate_lab_poster.py 代替通用路径——它会用 DECK 的 可视化分析 章节分隔符格式填充仓库海报模板(<TEMPLATE_DIR>/main_template_lab_poster.tex,真相来源;templates/ 中的后备副本):全出血 slides-beamer/figures/background.png(必需——如果缺失则致命;如果 deck 缺少此文件,请使用 paper-group-to-beamer/scripts/gen_viz_background.py –survey-dir "<LAB_DIR>" 构建)+ 四个白色圆角阴影框(行):实验室调研+日期对 / 机构块(品牌色眉毛 + 英文行) / 教授姓名 / 带强调规则的 title_2+title_3。无度量行、无简介、无实验室名称行。

注意(2026-08-07 默认更改):海报是实验室目录的必需工件(上传器在缺少海报/poster.png 时关闭失败),但 Bilibili 上传封面默认为 deck 的第一张幻灯片 (video/cover.png) —— 不要将海报复制到 video/cover.png;保持管道的 slide-001 渲染。请参阅 lab-survey-to-bilibili-runbook。

uv run --project "<SKILLS_DIR>/paper-video-cover" \
  "<SKILLS_DIR>/paper-video-cover/scripts/generate_lab_poster.py" \
  "<LAB_DIR>" --data "<LAB_DIR>/poster_data.json"

--data JSON:title_1_pi 是必需的(≤30 个字符)。命名约定:中文名 PI → xxx教授(如 李飞飞教授、刘华平教授); 非教授角色不加 Prof./教授(如 Sergey Levine 等联合创始人); 英文名教授 → Prof. First Last(如 Prof. Yann LeCun)。 title_1_uni 可选(宽度预算 40 个单位,CJK 字形 = 2 个单位,其他 = 1,例如 纽约大学 = 8,Physical Intelligence = 21;空则删除该行),title_1_uni_color 可选(#RRGGBB — 机构的 LOGO 品牌色,例如 NYU 57068B,Stanford 8C1515,CMU C41230,Berkeley 003262,Tsinghua 660874,SUSTech 2C5F7C,HKUST 003366;没有品牌色的机构默认为黑色 000000),title_1_uni_en 可选(≤40 个字符,例如 NEW YORK UNIVERSITY)—— 标题块将大学渲染为 机构品牌色眉毛(25pt 半粗体,使用 title_1_uni_color,生成器自动插入 0.25em CJK 字间距,侧边破折号 80×3px 占品牌色的 50%)、英文小行(13pt #8A8F98),然后是教授姓名(55pt 粉色粗体,单行)。title_2/title_3 可选(每个宽度预算 30 个单位,例如 从卷积网络到世界模型 = 18,IEEE Fellow 2026 = 15;空部分删除其行)。date(可选,默认为今天)填充日期块。来自 papers.json 的语料库统计信息仅供信息参考——缺失文件会降级并发出警告,绝不会导致运行失败。无实验室名称行、无简介行、无度量行、无 · 分隔符。 示例:title_1_uni="纽约大学",title_1_uni_en="NEW YORK UNIVERSITY",title_1_pi="Prof. Yann LeCun",title_2="从卷积网络到世界模型",title_3="图灵奖得主的40年深度学习谱系"。video_meta.json 中的上传标题独立保留完整的 {机构缩写} {PI姓名}教授:主题 — Hook 格式。 海报布局(带有投阴影的 tikz 圆角框,位于 deck 的 可视化分析 背景之上):一个 0.6971\textwidth 容器中的四行,绝对居中于页面(固定的顶部 0.107\textheight / 底部 0.103\textheight 偏移;堆叠约占据页面的 77%):第 1 行 = 实验室调研 + 〈DATE〉 对(每个 0.3092\textwidth 文本宽度,32pt,高度 0.1250\textheight);第 2 行 = 机构块 — NYU 紫色眉毛(25pt 半粗体,侧边破折号)+ 英文行 13pt(0.6706\textwidth,高度 0.1250\textheight);第 3 行 = 教授姓名块(55pt 粉色粗体单行,0.6706\textwidth,高度 0.1806\textheight);第 4 行 = title_2/title_3 + 37pt 规则(高度 0.2153\textheight)。间隙:水平 0.0258\textwidth / 垂直 0.0417\textheight(在 2324×1440 参考画布中双向均为 60 像素)。--scheme 默认为 bilibili(与 deck 匹配);--template/--theme-dir 覆盖仓库路径(deck 的 sustech-theme 被复制到构建中)。令牌契约(如果代码行上未替换则致命):〈DATE〉〈TITLE1UNI〉〈TITLE1UNIEN〉〈TITLE1PI〉〈TITLE2〉〈TITLE3〉。使用 xelatex 编译(两次传递;deck 主题仅支持 xelatex)并以 300 dpi 渲染 poster.png(32×20 cm 页面 → ~3780×2363 像素);输出 <LAB_DIR>/poster/。

陷阱 — 大标题文本中的空格:在 sustech 主题下,TikZ 节点 + \fontsize{72}{84} 会丢弃单词间空格(甚至 \ );因此生成器会将 title_1/2/3 中的普通空格转换为 \hspace{0.25em} 胶水(通过 pdftotext 验证:NYU Prof. Yann LeCun 保留其空格)。

陷阱 — 行居中和块宽度:(1) \hbox to \containerwidth 不是段落行,\centering 不会使其居中——行必须是 \hbox to \textwidth{\hss … \hss},以便内容在整行内居中。(2) 使用基于 \dimexpr 的宏的 tikz text width 可能会在 32 cm 纸张上引发 Dimension too large——请使用字面宽度(例如 0.44\textwidth)。(3) tikz 节点的外部宽度 = text width + 2×inner sep——从宽度宏中减去内边距,以使框边缘恰好落在容器边界上。

陷阱 — 全出血背景:海报几何设置必须是 \geometry{papersize={32cm,20cm},margin=0cm}。任何正边距都会将 beamer 的背景画布原点偏移到文本区域顶部,从而在顶部产生白色条带(margin=1.1cm 时约为 1.1 cm)并裁剪背景图像的顶部边缘。每次海报构建后验证:poster.png 的顶部/底部 3% 行必须具有约 0 个白色像素(PIL 扫描)。

实验室调研海报 (实验室调研)

支持中文标题(生成的序言加载了 ctex;beamer 标题回退不再剥离 CJK)。海报标题遵循上传标题格式 {机构缩写} {PI姓名}教授:主题 — Hook(例如 NYU 杨立昆教授:从卷积网络到世界模型 — 图灵奖得主的40年深度学习谱系 / 清华刘华平教授:机器人具身智能 — 从视触觉到操作学习)。使用 --scheme bilibili 和 --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"
}

调色板的真相来源是 <TEMPLATE_DIR>/sustech-theme/beamercolorthemesustech.sty(默认蓝色 / 实验室红色 / bilibili 粉色);deck 主题被复制到构建中,帧在 xelatex 下编译(deck 的引擎)。背景 slides-beamer/figures/background.png 必须存在(deck 的 可视化分析 分隔符背景)——生成器在没有它的情况下关闭失败。

使用显式工具的示例:

uv run --project "<SKILLS_DIR>/paper-video-cover" `
  "<SKILLS_DIR>/paper-video-cover/scripts/generate_poster.py" `
  "<paper_dir>" `
  --lualatex "C:/path/to/lualatex.exe" `
  --pdftoppm "C:/path/to/pdftoppm.exe"

使用环境配置的示例:

$env:LUALATEX = "C:/path/to/lualatex.exe"
$env:PDFTOPPM = "C:/path/to/pdftoppm.exe"
uv run --project "<SKILLS_DIR>/paper-video-cover" `
  "<SKILLS_DIR>/paper-video-cover/scripts/generate_poster.py" `
  "<paper_dir>"

输入

生成器从 md_output/*/auto/ 下的第一个 MinerU markdown 文件提取标题、会议、项目 URL、图表和度量。如果基于标题的提取未找到任何图表,则搜索 slides-beamer/figures/、paper-source/image/、source/image/、Figures/,然后是 md_output/*/auto/images/。

支持 PNG、JPEG 和 PDF 源。PDF 使用已解析的 pdftoppm。缺少、不支持、为空或无法转换的引用图表是致命错误。

所有 JSON 字段都是可选的。figure_map 路径是绝对路径或相对于论文目录的路径:

{
  "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"
  }
}

批量处理

使用 UTF-8 文件,每行一个论文目录;start 和 count 是可选的 positional arguments:

uv run --project "<SKILLS_DIR>/paper-video-cover" `
  "<SKILLS_DIR>/paper-video-cover/scripts/batch_generate.py" `
  "<papers_file>" 0 20

批处理使用 uv 选择的解释器,对每篇论文要求所有三个工件,如果任何项目失败则返回非零。

失败行为

如果缺少必需的可执行文件或打包的主题、子命令返回非零、或者必需的工件缺失或为空,则生成器返回非零。将任何非零结果视为无发布;失败的临时构建将被移除,之前的最终输出保持不变。

相关技能

  • 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

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

Peytontalismanic424/paper-share-skills

Validate and upload narrated paper videos to Bilibili with biliup. Handles required landscape-first/portrait-second submissions, series uploads, CST scheduling, diagnostics, dry-run validation, and durable upload receipts. Trigger on: "upload to bilibili", "bilibili upload", "发布到B站", "上传到B站".

Peytontalismanic424/paper-share-skills

Download the TeX source (e-print tar.gz) of an arXiv paper from an arXiv URL or bare ID, and unpack it into paper_src/. Use FIRST whenever a pipeline input is an arXiv link and the TeX source is preferred over the PDF (paper-to-beamer, paper-to-bilibili, paper-venue-discovery). Invoke with an arXiv URL (abs/pdf/e-print, arxiv.org or export.arxiv.org) or a bare ID like 2509.07996v4.

Peytontalismanic424/paper-share-skills

Convert Beamer PDF slides into a fail-closed narrated MP4 with page-aligned narration, TTS audio, cover, and upload metadata. Trigger on narrated slides, slide video, or paper video requests.

Peytontalismanic424/paper-share-skills

Automated pipeline: paper (PDF or TeX source) → SUSTech Beamer slides (11-section 论文分享 structure) → compiled PDF. When TeX source is available, skip MinerU and extract content directly from LaTeX. Use when the user asks to create Beamer slides from an academic paper, or says "论文分享", "paper to slides", "make beamer from paper". Invoke with an absolute or relative path to a PDF, .tar.gz TeX archive, .tex file, or an arXiv URL/ID (source TeX is downloaded first via skill://paper-download-arxiv-paper-source).

Peytontalismanic424/paper-share-skills

Orchestrate a paper PDF through MinerU, SUSTech Beamer slides, complete Chinese narration, landscape and portrait video, metadata gates, and Bilibili upload. Supports single-paper and batch slides, video, or bilibili phases. Trigger on full paper-to-Bilibili requests, PDF-to-video publication, and batch paper publishing.

Peytontalismanic424/paper-share-skills

Convert a PDF (especially academic papers) to clean Markdown using MinerU — preserves reading order, LaTeX equations, tables, and figures, and runs on the GPU. Use when the user asks to convert/extract a PDF to markdown/text. Invoke directly — no need for the user to type the skill name.

Peytontalismanic424/paper-share-skills

Fix for undefined \setsource/\setdomains/\setpresenter/\setvenue commands when compiling SUSTech Beamer slides from the standard template. Copy the extended beamerthemesustech.sty from the sustech-slides-template repository.

相关技能