Papermorph 是做什么的?
Papermorph 在一个引擎上制作三层书籍:
- 课程,来自教材 PDF:每个章节都是一部简短的动画课程影片,画面承载讲解,旁白配合讲述,并在画面内完成快速检查和练习。
- 绘本,来自故事、笑话或童话:纸偶在场景前的短片,可用代码绘制或由图像模型绘制,配有声音、效果和音乐。
- 影片,来自一本书、一个想法或用户的论点:有旁白的纪录片,使用找到的公共领域图片、文字和地图,与语音同步移动;以及为手机信息流制作的竖版短片,在三分钟以内传达一个观点。
所有作品均基于一个 SVG 舞台(1600×900,或竖版短片的 900×1600)和一个播放器;节拍将旁白片段与定时动作配对。优秀的作品意味着生动(事物带有重量和时机地行动和变化)、构图(每个时刻都像一个画面,文字紧邻其所指)、真实(运动、标签和数字在每个时刻都一致)以及流畅(播放无卡顿,包括 Firefox)。
画面应该是什么样子取决于书籍和用户,因此工作从一次对话开始,最终生成 style.json:用户的描述、他们选择的外观、声音、哪个模型执行哪个步骤,以及后来被批准的章节。每个章节都是根据它制作的;你对每个节拍的布局和编排的判断应基于它以及已批准的章节。用户请求覆盖默认设置。重新创建解释、示例和图纸;将源 PDF、页面图像和提取的文本保留在静态输出文件夹之外,并脱离版本控制(.gitignore:*.pdf,books/*/pages/)。技能制作的章节是一个初稿:在发布之前,需要经过审查轮次和用户的观看。
哪个层级
阅读层级的第一份文件,然后仅阅读当前步骤所需的内容。下面的每个文件都从此处链接;无需查找另一个文件。
| 用户带来 | 层级 | 从以下开始 | 然后,按步骤需要 |
|---|---|---|---|
| 一本教材 PDF(也包括课程教材) | 课程 | lessons.md | intake.md · authoring.md · diagrams.md(第 1 层) · scenes.md(第 2 层) · assets.md · maths.md(math.js,数学部分,LaTeX) · questions.md · figures.md(读者可以移动的图形) · checks.md · cover.md · courses.md(引用、题库、SCORM:仅在书籍需要时) |
| 一个故事、笑话、童话,或一本故事书的 PDF(包含其自己扫描的图片:stories.md) | 绘本 | stories.md | puppets.md · painting.md(绘画风格) · listen-and-find.md(适合幼儿的寻找游戏) |
| 一本书、一个想法或一段历史,需要作为一部带旁白的影片来解释 | 影片:纪录片 | films.md | documentary.md |
| 在不到三分钟内传达一个观点,竖版,用于手机信息流(YouTube Shorts、TikTok、Reels),或重新剪辑一部长片 | 影片:短片 | films.md | shorts.md |
| 一部影片的素材,或一个主要是地图和数字的想法,让读者在自己的节奏下阅读,页面上的图片随滚动而变化(滚动故事) | 影片:滚动页面 | films.md | scroll.md |
| 一段需要在逐年变化的地图上探索的历史:变化的边界、移动的人物(一个页面,自己的播放器,非引擎) | 可探索页面 | explore.md |
每个层级共享核心:
| 文件 | 内容 |
|---|---|
| core/style.md | 如何询问用户、模型步骤、付费步骤(密钥、价格、账本、余额)、style.json |
| core/publish.md | new_book.py、语言、分钟数、预览和交付、视频导出 |
| core/sound.md | 旁白文件、声音、音量、效果、音乐、字幕 |
| core/review.md | 查看自己的作品在动态中的效果、帧、流畅度、导演轮次 |
| core/team.md | 使用子代理制作章节、协调器、并行工作 |
| core/engine.md | 播放器和绘图 API、计时、镜头、性能、陷阱 |
每当 books/<book>/style.json 尚不存在时,从层级的初始文件开始;重用已经给出的答案和批准。
参考书籍
参考书籍是标杆:需要达到的水平,而非要复制的格式。每本书都是 Papermorph 仓库(https://github.com/DozenTwelve/Papermorph)的 site/<slug>/ 文件夹,通过 https://papermorph.diamonddoge.org/<slug>/ 提供服务,因此其源代码可以在检出中读取,或者在技能独立安装时从任一地址获取。层级文件会指出在某个步骤值得打开的书籍文件。
| 层级 | 书籍(slug) |
|---|---|
| 课程 | 第 1 层:Elementary Algebra(elementary-algebra)、Math Notebook(math-notebook);第 2 层:Science(science);使用深色墨水的浅色板:physics-notebook |
| 绘本 | The Little Horse Crosses the River(little-horse)和 Little Red Riding Hood(little-red-riding-hood):全部由代码生成,由 ElevenLabs 配音的演员,一个 listen-and-find 环节,最新且为标杆;Joke Collection(joke-collection):绘制的场景、代码生成的纸偶、一系列剧集;Millions of Cats(millions-of-cats,Wanda Gág,1928年):从扫描书籍中提取的图片转化为场景和纸偶(不在书架上) |
| 纪录片 | Madness and Civilization(madness,基于福柯,十分钟)、The Pandemic(pandemic)、Shooting an Elephant(shooting-an-elephant,读者参与其中) |
| 短片 | Madness and Civilization 短片(madness-shorts;第一集 The Ship 是工作示例)、The Pandemic 短片(pandemic-shorts) |
Tulip Mania(tulip-mania)是一部完全由技能独立制作的测试影片,除这些文件外无其他帮助;这些文件引用了它所遇到的问题。
项目布局
books/<book>/ 私有:源代码、style.json、分镜图、艺术、review/(层级文件列出其自己的)
content/<book>/chNN/ narration.<lang>.json 和语音缓存
tools/<book>/ 测试、音频脚本、证据
site/<book>/ 静态书籍(仅此部分交付)
index.html 封面和目录,或系列页面
lib/ 引擎(由 engine.py 同步)、lib/book.css(此书籍的设置)、层级的工具包、书籍自己的片段
img/ 书籍的图片
chNN/index.html, audio/<lang>/ 一个章节或剧集,其节拍的 MP3 文件和 timings.js(影片和绘本:audio/sfx/、audio/bgm/)
SKILL 表示此技能的绝对文件夹;<book> 是书籍 slug,<lang> 是其主语言代码。new_book.py 启动任何层级的书籍(core/publish.md)。
需要:uv、ffmpeg/ffprobe、Edge TTS 网络访问(或本地 Kokoro)、github.com 用于 engine.py(当仓库的 engine/ 文件夹不可用时)、仅用于用户选择的付费步骤(paint.py、eleven.py、video.py;paint_openai.py 需要 OpenAI 密钥)的 OpenRouter 密钥,以及 Playwright 浏览器(uv run --with playwright playwright install chromium firefox;当 Playwright 的 Chromium 无法运行时,设置 CHROME 为已安装的 Chrome、Chromium、Brave 或 Edge)。预览:python3 SKILL/scripts/serve.py 8765 site(无浏览器缓存)。
脚本
全部位于 SKILL/scripts/ 中;每个脚本使用 uv run --with … 运行,其后跟其文档字符串首行列出的包(即使 --help 在没有包的情况下也会因导入而失败),并使用 --help 打印其用法。
| 用途 | 脚本 |
|---|---|
| 所有书籍 | new_book.py 启动书籍文件夹 · serve.py 无缓存预览 · engine.py 将引擎同步到书籍中 · tts.py 旁白和单词时间 · eleven.py 来自 ElevenLabs 的相同功能(付费) · level.py 均衡音量 · lint.py 静态检查 · check.py 在 Chromium 和 Firefox 中检查页面错误、控制台警告和节拍长度 · shot.py 节拍截图 · strip.py 分镜图条和运动条 · still.py 无运动的片段 · playlog.py 将声音和字幕与画面对照 · perf.py Firefox 帧时间 · export.py MP4 和 .srt 导出 · sfx.py 合成效果 |
| 课程 | outline.py 和 split_pages.py 页面映射和章节文本 · check_blank.py 空开头 · overlap.py 穿过文本的箭头 · sprites.py 图像处理步骤 · refs.py 已验证的引用 · items.py 题库 · scorm.py LMS 包 |
| 绘本 | mouths.py 嘴型 · join.py 每个场景一个片段 · bake_sets.py 场景图层 · bake_puppets.py 纸偶位图 · paint.py / paint_openai.py 图像模型图片 · painted.py 将它们放入书中 · lift.py 从扫描书籍的图片中裁剪出图形、场景和文字 · cutout.py 将基于关键色的图像模型图片裁剪成纸偶部件和道具 |
| 可探索页面 | topo.py 来自 Natural Earth 的地图 TopoJSON · explore.py 对可探索地图进行检查、截图、Firefox 计时和旁白文件 |
| 影片 | commons.py 公共领域图片和录音及其许可证 · prep.py 打印、线条和全出血处理 · trace.py 自我绘制的画作 · video.py 从静态图片生成剪辑 · frames.py 从处理的帧生成剪辑 · geo.py 来自 Natural Earth 的地图工具包数据 · music.py 根据影片裁剪的曲目、语音间隙中的背景音,以及音乐、背景音和效果与每行旁白的对齐 · safe.py 检测竖版影片安全区域外的文字 |
silence.py、ledger.py(单一成本账本:日期、章节、文件、模型、内容、成本)和 browsers.py 是其他脚本导入的辅助工具。
上下文
- 从主对话中与用户交谈:初始输入,以及试点的每个表格和选择。当子代理可用时,章节作为一个团队制作,每个步骤使用用户选择的模型,主对话作为试点的协调者(core/team.md 说明了这允许什么);如果没有子代理,则在当前代理中运行相同的步骤,使用基于文件的状态。
- 在需要时使用引擎 API 并检查单个函数;复制工具包文件,而不是将其完整源代码作为指令读取。
- 保持
style.json最新且简短;章节状态、勘误和历史反馈保留在chapters.md和chapters/chNN.md中。