论文到Bilibili
这是唯一完整的全流水线编排身份。它组合了以下推广包以及保留的管理型Rednote工作流:
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/论文分享/<VENUE YEAR - SHORT>/ ,包含 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 阶段1及后续步骤(阶段1的移动步骤被跳过,因为论文目录已存在)。对于 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: 条目。旁白是精炼的简体中文,技术术语保留英文。它扩展技术论证,而非朗读要点,避免“本页”或“如图所示”等纯视觉引用,并覆盖附录页面。
只有当编译的幻灯片和非空的带注释TeX都存在时,状态才从 slides_done 转换到 narrations_done 。
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 URL和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