Communitygithub.com

Paper/Share/Skills - Capa de Vídeo de Artigo

Gera um pôster de capa de vídeo determinístico 16:10 a partir de um diretório de artigo acadêmico. Extrai metadados e figuras do artigo e produz atomicamente poster.tex, poster.pdf e poster.png. Use para capas de vídeos de artigos, não para pôsteres de conferência.

O que é Share/Skills - Capa de Vídeo de Artigo?

Esta skill automatiza a criação de uma capa de vídeo no formato 16:10 (estilo Gemini/SUSTech) para artigos acadêmicos. Ela extrai automaticamente o título, veículo de publicação, figuras e métricas do diretório do artigo (usando arquivos Markdown do MinerU) e gera três artefatos: poster.tex (código-fonte LaTeX), poster.pdf (PDF compilado) e poster.png (imagem PNG). A instalação é atômica: o diretório de saída só é atualizado se tanto a compilação LaTeX quanto a conversão para PNG forem bem-sucedidas. A skill suporta múltiplos esquemas de cores (default, lab, bilibili), substituição de figuras via JSON e ferramentas externas configuráveis (LuaLaTeX e Poppler). Também inclui um gerador especializado para pôsteres de laboratório (实验室调研) com layout de quatro linhas, logotipo da instituição com cor personalizada e nomes de pesquisadores. A execução em lote é suportada, processando múltiplos artigos a partir de uma lista. O comportamento de falha é seguro: um erro não substitui a saída anterior. As dependências externas obrigatórias são LuaLaTeX e pdftoppm, resolvidas via CLI, variável de ambiente ou PATH.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Capa de Vídeo de Artigo

Gera uma capa 16:10 no estilo Gemini/SUSTech a partir de um diretório de artigo. O gerador só instala a saída após a compilação LaTeX e a conversão para PNG serem bem-sucedidas.

Pacote e configuração

O projeto uv instalado é:

<SKILLS_DIR>/paper-video-cover

Ele gerencia sua dependência Pillow e inclui ambos os temas necessários:

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

LuaLaTeX e Poppler pdftoppm são ferramentas externas. Ambas devem estar disponíveis antes da geração. Cada ferramenta é resolvida nesta ordem: flag explícita via CLI, variável de ambiente LUALATEX ou PDFTOPPM, e então PATH. Uma substituição inválida de prioridade mais alta é fatal e não é ignorada.

Execução

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

A saída padrão é <paper_dir>/poster. Selecione outro diretório com:

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

Opções:

  • --data <json>: substituições JSON opcionais.
  • --scheme <default|lab|bilibili>: esquema de cores SUSTech (padrão default; pesquisas de laboratório usam bilibili para combinar com o deck do laboratório).
  • --title-font <pontos>: substitui o tamanho automático do título.
  • --output-dir <diretório>: diretório de saída final.
  • --lualatex <caminho-ou-comando>: executável LuaLaTeX explícito.
  • --pdftoppm <caminho-ou-comando>: executável pdftoppm explícito.

A geração de PNG é obrigatória; uma saída bem-sucedida contém poster.tex, poster.pdf e poster.png não vazios, além de temas copiados e figuras convertidas. A construção ocorre em um diretório temporário adjacente, portanto uma construção com falha não substitui uma saída final existente.

Gerador de pôster de pesquisa laboratorial (实验室调研, generate_lab_poster.py)

Para pesquisas 实验室调研, use scripts/generate_lab_poster.py em vez do caminho genérico — ele preenche o modelo de pôster do repositório (<TEMPLATE_DIR>/main_template_lab_poster.tex, fonte da verdade; cópia de fallback em templates/) com o formato da seção 可视化分析 do DECK: slides-beamer/figures/background.png sem margens (OBRIGATÓRIO — fatal se ausente; se o deck não tiver um, construa-o com paper-group-to-beamer/scripts/gen_viz_background.py --survey-dir "<LAB_DIR>") + QUATRO caixas de sombra arredondadas brancas (linhas): 实验室调研+par data / bloco do instituto (eyebrow da cor da marca + linha em inglês) / nome do Professor / title_2+title_3 com regra enfatizada. NENHUMA linha de métrica, NENHUM blurb, NENHUMA linha de nome de laboratório.

NOTA (mudança de padrão em 2026-08-07): o pôster é o ARTEFATO OBRIGATÓRIO para diretórios de laboratório (o uploader falha fechado sem poster/poster.png), mas a CAPA DE UPLOAD do Bilibili usa por padrão o PRIMEIRO SLIDE do deck (video/cover.png) — NÃO copie o pôster sobre video/cover.png; mantenha a renderização slide-001 do pipeline. Consulte o manual 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 é OBRIGATÓRIO (≤30 caracteres). Convenção de nomenclatura: 中文名 PI → xxx教授 (如 李飞飞教授、刘华平教授); 非教授角色 não adicione Prof./教授 (如 Sergey Levine 等联合创始人); nome em inglês de professor → Prof. First Last (如 Prof. Yann LeCun). title_1_uni opcional (orçamento de largura de 40 unidades, glifo CJK = 2 unidades, outros = 1, ex: 纽约大学 = 8, Physical Intelligence = 21; vazio → linha removida), title_1_uni_color opcional (#RRGGBB — a cor da marca LOGO do instituto, ex: NYU 57068B, Stanford 8C1515, CMU C41230, Berkeley 003262, Tsinghua 660874, SUSTech 2C5F7C, HKUST 003366; institutos sem cor de marca definida usam preto 000000), title_1_uni_en opcional (≤40 caracteres, ex: NEW YORK UNIVERSITY) — o bloco de título renderiza a universidade como um eyebrow com cor da marca do instituto (25pt seminegrito em title_1_uni_color, espaçamento CJK de 0.25em inserido automaticamente pelo gerador, traços laterais de 80×3px a 50% da cor da marca), a linha pequena em inglês (13pt #8A8F98), depois o nome do Professor (55pt rosa negrito, linha única). title_2/title_3 opcionais (orçamento de largura de 30 unidades cada, ex: 从卷积网络到世界模型 = 18, IEEE Fellow 2026 = 15; partes vazias removem sua linha). date (opcional, padrão hoje) preenche o bloco de data. As estatísticas do corpus de papers.json são apenas informativas — um arquivo ausente degrada com um aviso, nunca falha a execução. NENHUMA linha de nome de laboratório, NENHUMA linha de blurb, NENHUMA linha de métrica e NENHUM separador ·. Exemplo: title_1_uni="纽约大学", title_1_uni_en="NEW YORK UNIVERSITY", title_1_pi="Prof. Yann LeCun", title_2="从卷积网络到世界模型", title_3="图灵奖得主的40年深度学习谱系". O título de upload em video_meta.json mantém independentemente o formato completo {AbrevInstituição} {NomePI}教授:Tema — Gancho. Layout do pôster (caixas tikz arredondadas com sombra projetada sobre o fundo 可视化分析 do deck): QUATRO linhas em um contêiner 0.6971\textwidth, absolutamente centralizado na página (deslocamentos fixos de topo 0.107\textheight / fundo 0.103\textheight; pilha ≈ 77% da página): linha 1 = par 实验室调研 + 〈DATE〉 (largura de texto 0.3092\textwidth cada, 32pt, altura 0.1250\textheight); linha 2 = bloco do instituto — eyebrow roxo NYU (25pt seminegrito, traços laterais) + linha em inglês 13pt (0.6706\textwidth, altura 0.1250\textheight); linha 3 = bloco de nome do Professor (55pt rosa negrito linha única, 0.6706\textwidth, altura 0.1806\textheight); linha 4 = title_2/title_3 + regra a 37pt (altura 0.2153\textheight). Espaçamentos: horizontal 0.0258\textwidth / vertical 0.0417\textheight (60 px em ambas as direções na tela de referência 2324×1440). --scheme padrão bilibili (correspondente ao deck); --template/--theme-dir substituem os caminhos do repositório (o sustech-theme do deck é copiado para a construção). Contrato de token (fatal se não substituído em linhas de código): 〈DATE〉〈TITLE1UNI〉〈TITLE1UNIEN〉〈TITLE1PI〉〈TITLE2〉〈TITLE3〉. Compila com xelatex (duas passagens; o tema do deck é exclusivo xelatex) e renderiza poster.png a 300 dpi (página 32×20 cm → ~3780×2363 px); saída <LAB_DIR>/poster/.

Pegadinha — espaços em texto grande: Nós TikZ + \fontsize{72}{84} sob o tema sustech removem espaços entre palavras (até mesmo \ ); portanto, o gerador converte espaços simples em title_1/2/3 para cola \hspace{0.25em} (verificado via pdftotext: NYU Prof. Yann LeCun mantém seus espaços).

Pegadinha — centralização de linha e larguras de bloco: (1) um \hbox to \containerwidth NÃO é uma linha de parágrafo e \centering não o centralizará — as linhas devem ser \hbox to \textwidth{\hss … \hss} para que o conteúdo centralize dentro da linha completa. (2) text width do tikz com uma macro baseada em \dimexpr pode gerar Dimension too large no papel de 32 cm — use larguras literais (ex: 0.44\textwidth). (3) a largura externa de um nó tikz = text width + 2×inner sep — subtraia o preenchimento de inner sep das macros de largura para que as bordas da caixa coincidam exatamente com o contêiner.

Pegadinha — fundo sem margens: a geometria do pôster DEVE ser \geometry{papersize={32cm,20cm},margin=0cm}. Qualquer margem positiva desloca a origem da tela de fundo do beamer para o topo da área de texto, produzindo uma faixa branca no topo (~1,1 cm para margin=1.1cm) e cortando a borda superior da imagem de fundo. Verifique após cada construção de pôster: as linhas dos 3% superior/inferior de poster.png devem ter ~0 pixels brancos (varredura PIL).

Pôsteres de pesquisa laboratorial (实验室调研)

Títulos em chinês são suportados (o preâmbulo gerado carrega ctex; o fallback de título do beamer não remove mais CJK). O título do pôster segue o formato de título de upload {AbrevInstituição} {NomePI}教授:Tema — Gancho (ex: NYU 杨立昆教授:从卷积网络到世界模型 — 图灵奖得主的40年深度学习谱系 / 清华刘华平教授:机器人具身智能 — 从视触觉到操作学习). Execute com --scheme bilibili e um JSON --data:

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

A fonte da verdade da paleta é <TEMPLATE_DIR>/sustech-theme/beamercolorthemesustech.sty (azul padrão / vermelho laboratório / rosa bilibili); o tema do deck é copiado para a construção e o quadro compila sob xelatex (o motor do deck). O fundo slides-beamer/figures/background.png deve existir (o fundo do divisor 可视化分析 do deck) — o gerador falha fechado sem ele.

Exemplo com ferramentas explícitas:

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"

Exemplo com configuração de ambiente:

$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>"

Entradas

O gerador extrai título, veículo, URL do projeto, figuras e métricas do primeiro arquivo markdown do MinerU em md_output/*/auto/. Se a extração baseada em legenda não encontrar figuras, ele busca em slides-beamer/figures/, paper-source/image/, source/image/, Figures/ e depois em md_output/*/auto/images/.

Fontes PNG, JPEG e PDF são suportadas. PDFs usam o pdftoppm resolvido. Figuras referenciadas ausentes, não suportadas, vazias ou não conversíveis são fatais.

Todos os campos JSON são opcionais. Os caminhos de figure_map são absolutos ou relativos ao diretório do artigo:

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

Lote

Use um arquivo UTF-8 com um diretório de artigo por linha; start e count são argumentos posicionais opcionais:

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

O lote usa o interpretador selecionado pelo uv, requer todos os três artefatos para cada artigo e retorna um código diferente de zero se algum item falhar.

Comportamento em caso de falha

O gerador retorna um código diferente de zero se um executável necessário ou tema empacotado estiver faltando, um comando filho retornar diferente de zero ou um artefato necessário estiver faltando ou vazio. Trate qualquer resultado diferente de zero como nenhuma publicação; a construção temporária com falha é removida e a saída final anterior permanece inalterada.

Skills relacionadas

  • 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.

Habilidades Relacionadas