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를 사용하여 랩 서베이 덱과 일치).--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 (필수 — 없으면 치명적; 덱에 없는 경우 paper-group-to-beamer/scripts/gen_viz_background.py --survey-dir "<LAB_DIR>"로 빌드) + 네 개의 흰색 둥근 그림자 상자 (행): 实验室调研+날짜 쌍 / 기관 블록 (브랜드 색상 눈썹 + 영어 줄) / 교수 이름 / title_2+title_3 (emph 규칙). 메트릭 행 없음, 블러브 없음, 연구실 이름 줄 없음.
참고 (2026-08-07 기본값 변경): 포스터는 연구실 디렉토리의 필수 아티팩트입니다 (업로더는 poster/poster.png 없이 닫힘). 그러나 빌리빌리 UPLOAD COVER는 기본적으로 덱의 첫 번째 슬라이드(video/cover.png)를 사용합니다. — poster를 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 추적을 삽입, 브랜드 색상의 50%에서 측면 대시 80×3px), 영어 작은 줄(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 둥근 상자): 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 참조 캔버스에서 양방향 60px). --scheme 기본값 bilibili (덱과 일치); --template/--theme-dir은 저장소 경로를 재정의합니다 (덱 sustech-theme이 빌드에 복사됨). 토큰 계약 (코드 라인에서 대체되지 않으면 치명적): 〈DATE〉〈TITLE1UNI〉〈TITLE1UNIEN〉〈TITLE1PI〉〈TITLE2〉〈TITLE3〉. xelatex로 컴파일 (두 번 패스; 덱 테마는 xelatex 전용)하고 poster.png를 300 dpi로 렌더링 (32×20 cm 페이지 → 약 3780×2363 px); 출력 <LAB_DIR>/poster/.
주의 — 큰 제목 텍스트의 공백: TikZ 노드 + sustech 테마 아래의 \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는 32cm 용지에서 Dimension too large 오류를 발생시킬 수 있습니다 — 리터럴 너비(예: 0.44\textwidth)를 사용하십시오. (3) tikz 노드의 외부 너비 = text width + 2×inner sep — 너비 매크로에서 sep 패딩을 빼서 상자 가장자리가 정확히 컨테이너에 닿도록 하십시오.
주의 — 전체 너비 배경: 포스터 지오메트리는 반드시 \geometry{papersize={32cm,20cm},margin=0cm}이어야 합니다. 양수 여백은 beamer의 배경 캔버스 원점을 텍스트 영역 상단으로 오프셋하여 상단에 흰색 띠를 생성하고(약 1.1cm for margin=1.1cm) 배경 이미지의 상단 가장자리를 자릅니다. 모든 포스터 빌드 후 확인: 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 분홍). 덱 테마는 빌드에 복사되며 프레임은 xelatex(덱의 엔진)로 컴파일됩니다. 배경 slides-beamer/figures/background.png가 존재해야 합니다 (덱의 可视化分析 구분자 배경) — 생성기는 이것 없이 닫힙니다.
명시적 도구 예시:
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>"
입력
생성기는 첫 번째 MinerU 마크다운 파일(md_output/*/auto/ 아래)에서 제목, 학회명, 프로젝트 URL, 그림, 메트릭을 추출합니다. 캡션 기반 추출에서 그림을 찾지 못하면 slides-beamer/figures/, paper-source/image/, source/image/, Figures/, 그 다음 md_output/*/auto/images/를 검색합니다.
PNG, JPEG, PDF 소스가 지원됩니다. PDF는 확인된 pdftoppm을 사용합니다. 참조된 그림이 없거나, 지원되지 않거나, 비어 있거나, 변환할 수 없으면 치명적입니다.
모든 JSON 필드는 선택 사항입니다. figure_map 경로는 절대 경로이거나 논문 디렉토리를 기준으로 한 상대 경로입니다:
{
"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는 선택적 위치 인수입니다:
uv run --project "<SKILLS_DIR>/paper-video-cover" `
"<SKILLS_DIR>/paper-video-cover/scripts/batch_generate.py" `
"<papers_file>" 0 20
일괄 처리는 uv가 선택한 인터프리터를 사용하며, 각 논문에 대해 세 가지 아티팩트가 모두 필요하고, 항목이 실패하면 0이 아닌 값을 반환합니다.
실패 동작
생성기는 필수 실행 파일이나 패키징된 테마가 없거나, 하위 명령이 0이 아닌 값을 반환하거나, 필수 아티팩트가 없거나 비어 있으면 0이 아닌 값을 반환합니다. 0이 아닌 결과는 게시 실패로 처리하십시오. 실패한 임시 빌드는 제거되고 이전 최종 출력은 변경되지 않습니다.
관련 스킬
- 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