論文轉Bilibili
這是唯一完整管線編排身份。它組合了以下推廣套件以及保留的受管小紅書工作流程:
paper-to-beamer:論文與MinerU內容轉換為編譯好的16:10 SUSTech Beamer投影片。paper-video-cover:可選的參考海報生成;正常的影片封面仍為生成的封面成品。paper-slides-to-video:實體頁面渲染、旁白提取、TTS、橫向影片組裝、封面與Bilibili後設資料。rednote-video-uploader(受管):必需的直向影片生成。paper-bilibili-uploader:關閉後失敗驗證、乾執行、上傳與持久收據。
輸出使用 $PP_ROOT/論文分享/<會議 年份 - 簡稱>/,包含 md_output/、slides-beamer/ 與 video/。
模式與階段
slides:論文至編譯投影片
當條目具有非空的 arxiv_id(或使用者提供了arXiv連結)且磁碟上無原始碼(無根PDF、無含 .tex 的 paper_src/)時,先下載TeX原始碼:
python \
"<SKILLS_DIR>/paper-download-arxiv-paper-source/scripts/download_source.py" \
"<arxiv_id>" --output "<paper_dir>"
下載器會建立 <paper_dir>/arXiv-<id>.tar.gz + <paper_dir>/paper_src/;然後從 skill://paper-to-beamer 第一階段開始(因論文目錄已存在,跳過第一階段的移動步驟)。對於 PDF_ONLY 輸出,將PDF複製到論文目錄根目錄(pdf_downloaded 閘門要求根目錄存在PDF)。
遵循 skill://paper-to-beamer 進行內容創作。繼續前需要的閘門:
slides-beamer/main.tex包含論文專屬敘述,從論文資訊與動機、方法、實驗、限制、重點、參考文獻、問答,以及3–8張有用的附錄投影片。- 文件使用SUSTech 16:10範本(
aspectratio=1610)。 slides-beamer/main.pdf非空,無未定義控制項或嚴重溢出。
批次CLI僅掃描並持久儲存此代理創作階段的磁碟證據;它不會偽造投影片。
旁白創作閘門
將編譯好的TeX複製到 video/main_with_narration.tex,並為每個實體PDF頁面添加恰好一個非空的 % NARRATION: 條目。旁白為精煉的簡體中文,內嵌英文技術術語。它擴展技術論證而非朗讀條列要點,避免視覺導向的用語如「本頁」或「如圖所示」,並涵蓋附錄頁面。
從 slides_done 到 narrations_done 的轉換僅在編譯投影片與非空註解TeX同時存在時發生。
video:有旁白的橫向與直向成品
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py video "<PAPERS_JSON>"
對於每個 narrations_done 的論文,編排器呼叫同級 paper-slides-to-video 的 full 命令。子任務成功後,它重新掃描並原子化地持久儲存 video_done。接著呼叫受管的 rednote-video-uploader/scripts/portrait_video.py,重新掃描,驗證封面與Bilibili後設資料,並原子化地持久儲存 upload_ready。子任務失敗時會傳播錯誤且永不推進狀態。
品質閘門為:每一實體頁面的精確幀/文字/MP3基數、非空旁白與音訊、非空橫向MP4、非空直向MP4、非空封面,以及符合架構的Bilibili後設資料。
bilibili:驗證或上傳
總是先檢視乾執行:
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py bilibili "<PAPERS_JSON>" --dry-run
乾執行委託給推廣的上傳器,且必須保持 upload_ready 不變。僅在檢視後移除 --dry-run。沒有預設上傳超時;操作者可以選擇使用 --upload-timeout SECONDS。
正常上傳要求先P1橫向影片,再P2直向影片。後設資料使用單數 tag、正數 tid、有效的版權/來源欄位、結構化描述以及非空封面。僅當 video/upload_result.json 有效且包含匹配的BV網址加上ISO-8601時間戳時,論文才算 uploaded。
狀態合約
batch.py 按以下確切優先順序重新掃描磁碟:
- 有效的
upload_result.json→uploaded - 非空橫向 + 非空直向 + 封面 + 符合架構的
video_meta.json→upload_ready - 非空橫向 →
video_done - 編譯投影片 + 非空註解TeX →
narrations_done - 編譯投影片 →
slides_done - MinerU Markdown →
mineru_done - 來源PDF或提取的TeX原始碼(paper_src/ 包含 .tex) →
pdf_downloaded - 否則 →
pending
每個成功的子任務命令之後都會進行重新掃描並原子化地替換輸入JSON。狀態變更會列印為 STATE <paper>: <old> -> <new>。乾執行會驗證並委託,但絕不發明新狀態。失敗的子任務會保留最後的穩固狀態,並傳播其結束代碼。
批次輸入
papers.json 是一個物件陣列,每個物件具有非空的絕對 dir_path;可以附加 dir_name、arxiv_id、pdf_path 與描述性欄位。編排器會在每個物件中記錄 _status。
前置條件
- Python 3.10+(若
python不在PATH中,請使用py -3)。 - 依賴項在
pyproject.toml中宣告(目前執行時無任何依賴);新增依賴時請使用uv sync --project <SKILLS_DIR>/paper-to-bilibili安裝專案。 <SKILLS_DIR>是包含已安裝技能資料夾的目錄(例如~/.claude/skills、~/.codex/skills、.omp/skills);同級技能(paper-slides-to-video、paper-bilibili-uploader、paper-download-arxiv-paper-source)必須安裝在此技能旁邊,以使同級解析保持專案本地且確定性。PAPER_PYTHON(可選):用於啟動同級CLI的直譯器;預設為執行batch.py的直譯器。
相關技能
- skill://paper-bilibili-uploader
- skill://paper-download-arxiv-paper-source
- skill://paper-slides-to-video
- skill://paper-to-beamer
- skill://paper-video-cover
- skill://rednote-video-uploader