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ãodefault; pesquisas de laboratório usambilibilipara 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ávelpdftoppmexplí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