Communitygithub.com

Portada de Video de Artículo Académico

Genera un póster de portada de video determinista en relación 16:10 a partir de un directorio de artículo académico. Extrae metadatos y figuras del artículo y produce atómicamente poster.tex, poster.pdf y poster.png. Útil para portadas de videos de artículos, no para pósteres de conferencias.

¿Qué es Portada de Video de Artículo Académico?

Esta habilidad está diseñada para generar automáticamente un póster de portada de video en formato 16:10 (estilo Gemini/SUSTech) a partir del directorio de un artículo académico. Es especialmente útil para crear portadas llamativas para videos de divulgación de papers en plataformas como Bilibili, garantizando un resultado determinista y de alta calidad. La habilidad extrae automáticamente metadatos (título, venue, figuras) del archivo Markdown generado por MinerU, soporta múltiples formatos de imagen (PNG, JPEG, PDF) y permite sobrescribir datos mediante un archivo JSON. El proceso de generación es atómico: solo se publica el póster final si tanto la compilación LaTeX como la conversión a PNG tienen éxito; de lo contrario, se elimina la compilación fallida y se conserva la salida anterior. Soporta tanto pósteres genéricos para artículos como pósteres especializados para encuestas de laboratorio (实验室调研), con un diseño de recuadros redondeados con sombra y esquema de colores configurable. Requiere herramientas externas como LuaLaTeX y Poppler pdftoppm, que se resuelven mediante CLI, variables de entorno o PATH. La habilidad está implementada como un proyecto uv que gestiona sus dependencias (Pillow) e incluye temas LaTeX beamerthemegemini y beamercolorthemesustech.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Portada de Video de Artículo Académico?

Genera una portada 16:10 (estilo Gemini/SUSTech) a partir de un directorio de artículo. El generador instala la salida solo después de que tanto la compilación LaTeX como la conversión a PNG hayan tenido éxito.

Paquete y configuración

El proyecto uv instalado es:

<SKILLS_DIR>/paper-video-cover

Gestiona su dependencia Pillow e incluye ambos temas requeridos:

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

LuaLaTeX y Poppler pdftoppm son herramientas externas. Ambas deben resolverse antes de la generación. Cada herramienta se resuelve en orden: flag CLI explícito, variable de entorno LUALATEX o PDFTOPPM, luego PATH. Una anulación de mayor prioridad no válida es fatal y no se omite.

Ejecución

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

La salida predeterminada es <paper_dir>/poster. Seleccione otro directorio con:

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

Opciones:

  • --data <json>: anulaciones JSON opcionales.
  • --scheme <default|lab|bilibili>: esquema de color SUSTech (predeterminado default; 实验室调研 usa bilibili para coincidir con la presentación de encuesta de laboratorio).
  • --title-font <points>: anula el tamaño de título automático.
  • --output-dir <directory>: directorio de salida final.
  • --lualatex <path-or-command>: ejecutable LuaLaTeX explícito.
  • --pdftoppm <path-or-command>: ejecutable pdftoppm explícito.

La generación de PNG es obligatoria; una salida exitosa contiene poster.tex, poster.pdf y poster.png no vacíos, más los temas copiados y figuras convertidas. La compilación ocurre en un directorio temporal hermano, por lo que una compilación fallida no reemplaza una salida final existente.

Generador de póster de encuesta de laboratorio (实验室调研, generate_lab_poster.py)

Para encuestas 实验室调研 use scripts/generate_lab_poster.py en lugar de la ruta genérica: llena la plantilla de póster del repositorio (<TEMPLATE_DIR>/main_template_lab_poster.tex, fuente de verdad; copia de respaldo en templates/) con el formato de divisor de sección de 可视化分析 de la PRESENTACIÓN: slides-beamer/figures/background.png a sangre completa (REQUERIDO — fatal si falta; si la presentación carece de uno, constrúyalo con paper-group-to-beamer/scripts/gen_viz_background.py --survey-dir "<LAB_DIR>") + CUATRO recuadros de sombra redondeados blancos (filas): par 实验室调研 + fecha / bloque de instituto (ceja de color de marca + línea en inglés) / nombre del Prof. / title_2 + title_3 con regla enfatizada. SIN fila de métricas, SIN frase resumen, SIN línea de nombre de laboratorio.

NOTA (cambio predeterminado 2026-08-07): el póster es el ARTEFACTO REQUERIDO para directorios de laboratorio (el cargador falla cerrado sin poster/poster.png), pero la PORTADA DE SUBIDA de Bilibili predetermina a la PRIMERA DIAPOSITIVA de la presentación (video/cover.png) — NO copie el póster sobre video/cover.png; mantenga la renderización slide-001 del pipeline. Consulte 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 es REQUERIDO (≤30 caracteres). Convención de nomenclatura: 中文名 PI → xxx教授 (ej. 李飞飞教授, 刘华平教授); 非教授角色 no añada Prof./教授 (ej. Sergey Levine 等联合创始人); 英文名教授 → Prof. First Last (ej. Prof. Yann LeCun). title_1_uni opcional (presupuesto de ancho 40 unidades, glifo CJK = 2 unidades, otro = 1, ej. 纽约大学 = 8, Physical Intelligence = 21; vacío → línea eliminada), title_1_uni_color opcional (#RRGGBB — color de marca del LOGO del instituto, ej. NYU 57068B, Stanford 8C1515, CMU C41230, Berkeley 003262, Tsinghua 660874, SUSTech 2C5F7C, HKUST 003366; institutos sin color de marca predeterminado a negro 000000), title_1_uni_en opcional (≤40 caracteres, ej. NEW YORK UNIVERSITY) — el bloque de título renderiza la universidad como una ceja de color de marca del instituto (25pt seminegrita en title_1_uni_color, interletraje CJK de 0.25em insertado automáticamente por el generador, guiones laterales 80×3px al 50% del color de marca), la línea pequeña en inglés (13pt #8A8F98), luego el nombre del Prof. (55pt negrita rosa, una sola línea). title_2/title_3 opcional (presupuesto de ancho 30 unidades cada uno, ej. 从卷积网络到世界模型 = 18, IEEE Fellow 2026 = 15; partes vacías eliminan su línea). date (opcional, predeterminado hoy) llena el bloque de fecha. Las estadísticas del corpus de papers.json son solo informativas — un archivo faltante degrada con una advertencia, nunca falla la ejecución. SIN línea de nombre de laboratorio, SIN frase resumen, SIN fila de métricas y SIN separadores ·. Ejemplo: title_1_uni="纽约大学", title_1_uni_en="NEW YORK UNIVERSITY", title_1_pi="Prof. Yann LeCun", title_2="从卷积网络到世界模型", title_3="图灵奖得主的40年深度学习谱系". El título de subida en video_meta.json mantiene el formato completo {Abreviatura del instituto} {Nombre del PI}教授:Tema — Hook de forma independiente. Diseño del póster (recuadros tikz redondeados con sombras sobre el fondo 可视化分析 de la presentación): CUATRO filas en un contenedor 0.6971\textwidth, absolutamente centrado en la página (desplazamientos fijos superior 0.107\textheight / inferior 0.103\textheight; pila ≈ 77% de la página): fila 1 = par 实验室调研 + 〈DATE〉 (ancho de texto 0.3092\textwidth cada uno, 32pt, altura 0.1250\textheight); fila 2 = bloque de instituto — ceja NYU Púrpura (25pt seminegrita, guiones laterales) + línea en inglés 13pt (0.6706\textwidth, altura 0.1250\textheight); fila 3 = bloque de nombre del Prof. (55pt negrita rosa una sola línea, 0.6706\textwidth, altura 0.1806\textheight); fila 4 = title_2/title_3 + regla a 37pt (altura 0.2153\textheight). Espaciados: horizontal 0.0258\textwidth / vertical 0.0417\textheight (60 píxeles en ambas direcciones en el lienzo de referencia 2324×1440). --scheme predeterminado bilibili (coincidente con la presentación); --template/--theme-dir anulan las rutas del repositorio (el tema sustech-theme de la presentación se copia en la compilación). Contrato de tokens (fatal si no se reemplazan en líneas de código): 〈DATE〉〈TITLE1UNI〉〈TITLE1UNIEN〉〈TITLE1PI〉〈TITLE2〉〈TITLE3〉. Compila con xelatex (dos pasadas; el tema de la presentación es solo xelatex) y renderiza poster.png a 300 dpi (página 32×20 cm → ~3780×2363 px); salida <LAB_DIR>/poster/.

Problema: espacios en texto de título grande: los nodos TikZ + \fontsize{72}{84} bajo el tema sustech eliminan los espacios entre palabras (incluso \ ); por lo tanto, el generador convierte espacios simples en title_1/2/3 a pegamento \hspace{0.25em} (verificado mediante pdftotext: NYU Prof. Yann LeCun conserva sus espacios).

Problema: centrado de filas y anchos de bloque: (1) un \hbox to \containerwidth NO es una línea de párrafo y \centering no lo centrará — las filas deben ser \hbox to \textwidth{\hss … \hss} para que el contenido se centre dentro de la línea completa. (2) tikz text width con una macro basada en \dimexpr puede generar Dimension too large en el papel de 32 cm — use anchos literales (ej. 0.44\textwidth). (3) el ancho exterior de un nodo tikz = text width + 2×inner sep — reste el relleno sep de las macros de ancho para que los bordes de la caja caigan exactamente en el contenedor.

Problema: fondo a sangre completa: la geometría del póster DEBE ser \geometry{papersize={32cm,20cm},margin=0cm}. Cualquier margen positivo desplaza el origen del lienzo de fondo de beamer a la parte superior del área de texto, produciendo una franja blanca en la parte superior (~1.1 cm para margin=1.1cm) y recortando el borde superior de la imagen de fondo. Verifique después de cada compilación de póster: las filas superior/inferior al 3% de poster.png deben tener ~0 píxeles blancos (escaneo PIL).

Pósteres de encuesta de laboratorio (实验室调研)

Los títulos en chino son compatibles (el preámbulo generado carga ctex; la alternativa de título de beamer ya no elimina CJK). El título del póster sigue el formato de título de subida {Abreviatura del instituto} {Nombre del PI}教授:Tema — Hook (ej. NYU 杨立昆教授:从卷积网络到世界模型 — 图灵奖得主的40年深度学习谱系 / 清华刘华平教授:机器人具身智能 — 从视触觉到操作学习). Ejecute con --scheme bilibili y un 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"
}

La fuente de verdad de la paleta es <TEMPLATE_DIR>/sustech-theme/beamercolorthemesustech.sty (azul predeterminado / rojo laboratorio / rosa bilibili); el tema de la presentación se copia en la compilación y el marco se compila bajo xelatex (el motor de la presentación). El fondo slides-beamer/figures/background.png debe existir (el fondo divisor 可视化分析 de la presentación) — el generador falla cerrado sin él.

Ejemplo con herramientas 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"

Ejemplo con configuración de entorno:

$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

El generador extrae título, venue, URL del proyecto, figuras y métricas del primer archivo Markdown de MinerU bajo md_output/*/auto/. Si la extracción basada en subtítulos no encuentra figuras, busca en slides-beamer/figures/, paper-source/image/, source/image/, Figures/, luego md_output/*/auto/images/.

Se admiten fuentes PNG, JPEG y PDF. Los PDF utilizan el pdftoppm resuelto. Las figuras referenciadas faltantes, no admitidas, vacías o no convertibles son fatales.

Todos los campos JSON son opcionales. Las rutas de figure_map son absolutas o relativas al directorio del artículo:

{
  "title": "Título de Anulación",
  "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 un archivo UTF-8 con un directorio de artículo por línea; start y count son argumentos posicionales opcionales:

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

El lote usa el intérprete seleccionado por uv, requiere los tres artefactos para cada artículo y devuelve un código distinto de cero si algún elemento falla.

Comportamiento de fallo

El generador devuelve un código distinto de cero si falta un ejecutable requerido o un tema empaquetado, un comando hijo devuelve un código distinto de cero, o falta o está vacío un artefacto requerido. Trate cualquier resultado distinto de cero como ninguna publicación; la compilación temporal fallida se elimina y la salida final anterior permanece sin cambios.

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

Skills relacionados