¿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 (predeterminadodefault; 实验室调研 usabilibilipara 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>: ejecutablepdftoppmexplí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