
我们做了一个可以直接运行在 GPU 工作区和 ModelScope 创空间里的工具:上传 PDF,或者填入 arXiv/PDF 直链,系统会自动完成论文解析、图表提取、关键证据筛选、分镜生成、中文/英文口播和 720P 视频合成。
想象一下:组会前半小时,你把一篇刚出的论文链接贴进去,先去泡一杯咖啡。回来时,右侧日志已经跑完“正文抽取 → 关键图筛选 → 分镜 → 口播 → 视频封装”,底部是一条可以直接预览的成片。你不必先手工截图,也不必在字幕、配音和时间轴之间来回切换。

上图是最终的创空间界面:左侧输入论文和生成参数,右侧实时显示处理日志,底部直接预览生成的视频。整条链路的关键推理都在本机完成,不依赖 DashScope、OpenAI 或其他远程推理 API。
源码已经公开在 GitHub:
https://github.com/jacksonjack001/aixxb-shot-paper-description
ModelScope-WorkSpace空间:
https://modelscope.cn/studios/jacksonjack/AIPaper
一、它到底能做什么?
这不是把论文全文交给一个模型、再让模型“总结一下”。系统把任务拆成了几个可检查的阶段:
解析 PDF,提取正文、页码、Figure/Table 标题和页面图片。 用本地 Qwen3.5-9B 理解论文问题、方法、贡献、证据、限制和结论。 综合 caption、版面边界和视觉模型结果,裁出真正有信息量的图表。 去除相同 caption 的重复候选,避免一条视频反复展示同一张图。 生成总结卡、贡献卡、方法图、实验结果和结论卡,组成完整叙事。 自动检查镜头编号、重复素材、句子完整性、时长和 TTS 文本。 卸载 Qwen 后再加载本地 MegaTTS3,逐镜生成口播,避免两套模型同时抢显存。 用 ffmpeg 合成 1280×720、24 FPS 的 MP4,并导出完整 SRT 字幕。
语音和字幕使用两份文本:字幕保留论文里的原始术语,TTS 文本可以针对“三维、RoPE、VGGT”等技术词做读音归一化。这样既不牺牲屏幕上的专业表达,也能减少机器口播读错词的问题。

二、从 PDF 到视频的完整流程
一次任务可以概括为下面八步:
PDF/URL ↓下载、校验、页面渲染 ↓正文抽取 + Figure/Table caption 定位 ↓Qwen 论文摘要、图表框选、关键证据筛选 ↓故事线、总结卡、贡献卡、分镜和质量门禁 ↓释放 Qwen 显存 ↓MegaTTS3 逐镜口播 + 时长校正 ↓画面、音频、字幕封装为 MP4 + SRT每个运行目录会保留中间产物,方便定位“内容理解错了”还是“画面/音频合成出了问题”:
runs/YYYYMMDD_HHMMSS_论文名/├── source/ 输入 PDF├── pages/ 渲染后的页面├── figures/metadata.json 图表编号、caption 和裁剪边界├── cards/ 开场、贡献和结论卡├── paper_brief.json 结构化论文摘要├── selected_assets.json 最终视觉素材顺序├── script.json 完整分镜、字幕和口播├── audio/ 分段 WAV├── paper_explainer.srt 字幕└── paper_explainer.mp4 最终视频建议排查时按 paper_brief.json → metadata.json → selected_assets.json → script.json → SRT → MP4 的顺序看,不需要一上来反复重跑整条任务。

最终视频会用结论卡收束:关键证据、适用边界和论文结论分别呈现;图表镜头优先保留坐标轴、图例和原始边界,避免只展示一张“看起来像图表”的缩略图。
一个真实任务会得到什么?
以一篇包含方法图、消融实验和多张结果表的视觉论文为例,系统通常会留下这样的可检查结果:
paper_brief.json里有“研究问题—方法—贡献—证据—局限—结论”的结构化答案;figures/metadata.json记录每张候选图来自哪一页、对应哪个 Figure/Table,以及最终裁剪框;script.json把开场、方法、实验和结论拆成约 8 个镜头,每个镜头都有画面目的和完整口播;MP4 负责观看,SRT 负责复用:可以拿去剪辑、校对或重新配音。
这套中间产物很重要。它让“视频看起来不对”变成可以定位的问题:是论文摘要错了、图选错了、某个镜头太短,还是 TTS 读音需要修正,而不是只能重新点击一次生成。

三、ModelScope 创空间是什么?
ModelScope 创空间(Studio) 是用于运行、展示和分享 AI 应用的托管空间。开发者把应用代码、依赖和入口放进空间,平台负责构建运行环境,并提供一个可以直接访问的应用页面。
对于这个项目,创空间的价值主要有三点:
把 GPU 应用变成可访问的产品页面。 用户不需要登录服务器、安装 Python 或配置 ffmpeg,打开创空间即可上传论文。 代码、依赖和演示集中管理。 app.py是入口,requirements.txt声明 Python 依赖,packages.txt声明系统依赖,README 负责解释使用方式。适合展示本地模型工作流。 论文理解、选图、口播和视频封装可以在同一个 GPU 实例里分阶段完成,并把实时日志和最终视频展示给用户。
本项目使用 Gradio SDK,入口是根目录下唯一的 app.py。应用支持平台提供的 PORT 环境变量,也支持本地用 AIX_SERVER_PORT 修改端口;队列固定为单任务并发,避免多 worker 重复加载模型。
四、创空间完整部署流程
1. 准备代码
代码仓库:
https://github.com/jacksonjack001/aixxb-shot-paper-description
仓库根目录需要直接看到:
app.pyrequirements.txtpackages.txtconfig.inivendor/MegaTTS3/不要把代码再套一层目录,否则平台启动时找不到 app.py。当前版本已经把 UI 合并到一个入口,旧的 app_gradio.py 不再需要维护。
2. 创建创空间并选择资源
登录 ModelScope,进入创空间页面,选择“创建创空间”:
填写空间名称、可见性和介绍。 SDK/框架选择 Gradio。 选择带 NVIDIA GPU 的实例。 通过 Git 同步本仓库,或者上传整个发布目录。
建议单卡至少 16 GiB 显存、32 GiB 内存和 35 GiB 可用磁盘。16 GiB 显存保持默认 NF4 配置;24 GiB 或更高显存会更宽裕。两套模型合计约 22–23 GiB,首次下载还会产生缓存和运行产物。
3. 安装依赖
平台构建时会读取:
requirements.txt:Gradio、PyMuPDF、Transformers、bitsandbytes、ModelScope、音视频和 MegaTTS3 依赖。packages.txt:ffmpeg 等系统包。
如果是在普通 GPU Workspace 中部署,可执行:
chmod +x *.sh./install.sh如果 Workspace 已经预装了 CUDA/PyTorch,默认会复用系统包;需要完全隔离时:
AIX_VENV_SYSTEM_SITE_PACKAGES=0 ./install.sh4. 下载本地模型
创空间首次启动前,在终端执行:
python scripts/check_environment.pypython scripts/download_models.py --model all --workers 8模型默认保存到:
models/Qwen3.5-9Bmodels/MegaTTS3如果空间重启会清理临时盘,应把模型放在持久盘,并设置:
export AIX_VLM_MODEL_DIR=/mnt/models/Qwen3.5-9Bexport AIX_MEGATTS_CHECKPOINT_DIR=/mnt/models/MegaTTS3公开模型不需要 token。若使用私有镜像,把 MODELSCOPE_API_TOKEN 配置为平台安全环境变量,不要写进代码或 Markdown。
5. 设置启动命令并运行
创空间启动命令设置为:
python app.py应用默认监听 7860;平台提供 PORT 时会自动跟随。普通 Workspace 可以使用:
./start.sh./healthcheck.sh./status.sh不要使用 Gunicorn/Uvicorn 多 worker,也不要同时运行多个真实生成任务。Qwen 和 MegaTTS3 会严格分阶段加载和释放。
6. 上线验收
先跑静态检查:
python scripts/check_package.pypython scripts/security_check.pypython -m pytest -q再用一个小型 PDF 做真实验收:
上传 PDF 或填入 arXiv/PDF 直链。 选择中文或 English。 先选择 30 秒,确认能看到日志和视频。 再选择 180 秒,检查图表边界、字幕、口播和结论卡。
真实模型冒烟测试:
./run_real_smoke_tests.sh五、普通 Workspace 一键部署
如果不使用托管创空间,而是在 GPU Workspace 中直接运行:
git clone git@github.com:jacksonjack001/aixxb-shot-paper-description.gitcd aixxb-shot-paper-description./setup_all.sh./start.sh./healthcheck.shsetup_all.sh 会依次完成环境检查、虚拟环境、依赖安装、模型下载和验证。调试时也可以直接执行:
python app.py命令行批处理单个 PDF:
python demo.py \ --pdf /mnt/workspace/data/paper.pdf \ --duration 180 \ --language 中文注意使用真实绝对路径,例如 /mnt/workspace/...,不要把它写成 ~/mnt/workspace/...。
六、代码库为什么这样整理?
这次整理的核心不是把文件全部揉成一个大脚本,而是让每个入口只有一个职责:
app.py Gradio UI、端口读取和任务回调demo.py 命令行入口app/pipeline.py 全流程编排、阶段交接和显存释放app/paper_explainer.py 摘要、选图、故事线和质量门禁app/figure_extract.py 论文图表候选、caption 和裁剪app/tts.py MegaTTS3、读音规则和时长校正app/video.py 720P 画面、字幕和 ffmpeg 封装scripts/ 下载、环境、安全和冒烟检查common.sh 所有 Shell 脚本共享路径、Python 和 PID 逻辑vendor/MegaTTS3/ 第三方 TTS 推理源码和音色资源已完成的简化包括:
合并 app_gradio.py和app.py,避免两个地方定义 Gradio 界面和启动端口。删除重复的根目录 Workspace 发布清单,把创空间和普通 Workspace 流程集中到一份部署文档。 保留安装、下载、启动、停止、健康检查和发布归档脚本,因为这些脚本分别对应不同运维动作。 让 app.py同时兼容本地AIX_SERVER_PORT和创空间PORT,减少平台特判。在发布检查中显式检查 README、部署文档和最终效果图,避免上传一个“能启动但不会用”的半成品。
七、隐私和成本边界
模型下载完成后,上传本地 PDF 的解析、选图、分镜、语音和视频生成可以断网运行;使用 URL 输入时,仅下载论文需要网络。PDF、页面图片、WAV、MP4 和中间 JSON 都写入本地 runs/,不会自动上传到第三方推理服务。
GPU 创空间通常按运行时长或实例规格计费,建议平时停止空闲实例,长任务期间不要设置过短的前端超时。首次加载模型、复杂论文的图表检测和 CPU 视频编码都需要时间,日志几分钟没有新行并不一定代表进程卡死。
八、项目地址
在线体验:ModelScope 创空间 源码:GitHub 官方文档:ModelScope 创空间介绍
如果你也经常需要读论文、做组会汇报或制作技术短视频,欢迎基于这个工作流继续扩展:增加更多语言、可选叙事风格、实验表格高亮,以及对生成视频的人工审核和二次编辑。
夜雨聆风