{"title":"personal-test","subtitle":"","coverImg":"","contentType":"text/markdown","content":"# personal-test.md — EP65 OpenMontage 零 Key 完整链路亲测实录\n\n- 亲测人/岗:Lucy(文案席,兼 OpenMontage「agent 即编排器」的执行体)\n- 本机环境:macOS (Apple Silicon)、macOS date 2026-10-05、Python 3.14.3(系统)/ 3.10.10(venv 由 uv 选定)、Node v26.7.0、npm 11.19.0、ffmpeg 9.0.2\n- 唯一数据源:github.com/calesthio/OpenMontage(HEAD=9327439db69021ab4b0e2776729bf3b58fdb5a87,40 位 SHA-1 格式=仓库本身的提交哈希长度,主分支 main,2026-10-03 12:28 -0400 提交;本地实测留痕 logs/01-clone.log)\n- 我方独立 api.github.com 复测(2026-10-05 08:2x):63,231★ / 2026-03-29 建仓 / AGPL-3.0 / open issues 351(早于 chair 07:08 实测的 63,177★ 一小时 +54)\n- 亲测目标:官方 README「Zero keys needed」示例原句 45s 动画科普片,全链路不输任何 API Key\n\n## 1. clone\n\n| 项 | 实测 |\n|---|---|\n| 命令 | git clone https://github.com/calesthio/OpenMontage.git |\n| 耗时 | 11 秒 |\n| 工作树 | 170 MB |\n| 报错 | 无 |\n\n## 2. make setup\n\n| 项 | 实测 |\n|---|---|\n| 命令 | make setup(全量含 venv/pip/npm/piper/hyperframes 缓存) |\n| 总耗时 | 86 秒,exit 0 |\n| venv | uv 选定 CPython 3.10.10(规避系统 3.14 的轮子风险)|\n| pip 依赖 | 全量 wheel 成功(pydantic/numpy/Pillow/fastapi 等) |\n| remotion-composer | npm install 成功(npm 报 3 个 audit 提示:1 moderate + 2 high,未动包;esbuild postinstall 未在 allowScripts 白名单同为提示项) |\n| piper-tts | 1.8.0 安装成功(34.1MB 轮 + onnxruntime 17.2MB 等) |\n| HyperFrames | npx 缓存 pull 完成(0.8.126);runtime check runtime_available=False(published CLI doctor 20s 超时)→ 见 8. 运行时决策 |\n| .env | 从 .env.example 生成,保持零 Key |\n| 磁盘 | 事件后工作目录累计 1.1GB(repo 170MB + node_modules/Chromium 等) |\n\n## 3. 零 Key 两条生命线实测\n\n1. Piper TTS(tools/audio/piper_tts.py,经 registry 正常调用):\n - 首呼失败:`Unable to find voice: en_US-lessac-medium`(提示 piper.download_voices)——原因为 voice 模型需先行下载(pip 包只含引擎)。\n - 模块化命令 `python -m piper.download_voices` 对 HF 直连下载也在本网络被 Connection reset by peer(两次);pypi 渠道全程正常。\n - 处置:同一官方 rhasspy 声音文件改走 hf-mirror.com 通道 curl 下载 60.2MB(en_US-lessac-medium.onnx 63,201,294 bytes + .onnx.json 4,885 bytes,5 秒完成)——是「换传输通道」,不是换数据源;仓库源码零改动。\n - 工具入参 `model` 用绝对路径绕开 data-dir 解析(input_schema 允许字符串)后,PiperTTS 连续成功。\n - 试音实测:16 词 / 4.64s(length_scale 1.0);全域 114 词 / 6 段实测 44.39s(length_scale 1.2 + sentence_silence 0.4;冻结口径=渲染终版对应构建 run;旧值 45.35s 为同参数前一构建 run 的留痕,piper 段间存在 ±0.1s/段的运行间差异,已由 Eleven 对账点出、chair 口径裁定 44.39 为唯一源〔更正留痕〕)。\n2. Pixabay 音乐(tools/audio/pixabay_music.py,官方自述 web 抓取免 Key):\n - 首呼失败:CERTIFICATE_VERIFY_FAILED(macOS framework python 证书链缺)。\n - 处置:venv 内 certifi + 环境变量 SSL_CERT_FILE(不改源码)后成功。\n - 实测:query 'calm ambient space' → 238 秒音轨免费下载成功(Pixabay Content License)。\n\n## 4. 管线全程(agent-as-orchestrator,零 Key)\n\n- preflight:registry.provider_menu_summary() → composition_runtimes {ffmpeg/remotion/hyperframes}=true/true/true(背景差异见决策),tts 1/13 仅 piper、subtitle 2/2、music_search 1/2 pixabay_music——log:logs/03-preflight-summary.json\n- 工件(全部过 schemas/artifacts 校验):research_brief → proposal_packet(3 concept、两 runtime 呈现、composition_mode 两路比对、$0 全项)→ decision_log(8 条:pipeline/runtime/mode/tts/voice/music/字幕源/图像源)→ script(119 词计划;实测 114 token)→ scene_plan(8 场)→ asset_manifest(narration-full + bg-music + captions-estimated)→ edit_decisions → composition.json(渲染 props)\n- checkpoint 全七阶段 completed:checkpoint_{research,proposal,script,scene_plan,assets,edit,compose}.json + history/ 归档 + events.jsonl\n- CompositionValidator(渲染前强制):valid=true,0 错误(46.36s 版)/ 0 警告(45.65s 终版)\n\n## 5. 渲染与自检(三版迭代)\n\n| 版 | 导火索 | 处置 | 产物时长 | sha256 |\n|---|---|---|---|---|\n| v1 195.8s | 发现词级字幕词间无空格(`once,thewholerainbow`) | 最小复现(5 词独立渲染→`Helloworldfoobarbaz`)实锤上游 CaptionOverlay 分隔符缺陷;未改仓库源码,数据层词尾加 U+00A0 | 46.38s | 852803cb7af8d7d31c5f543711c2d4f39e6de596ab719ab25bd4b2395f04dce9 |\n| v2 180.2s | 图表 x 轴长标签互相挤压;句尾词落到页中又见 `red.So` | 图表标签缩短为单词;NBSP 规则改为「仅每 6 词页尾不加」 | 46.72s | 840ee025ec4541175023e24a5648a0b63c2a1442daee50de4e1a913f1cb1c850 |\n| v3 178.9s | 本版即终版 | — | **45.76** | **f50cf764dbfc1392057b4d72355bcc543c50da90ee9809911811079f2a43bc59** |\n\n终版硬指标(logs/08-ffprobe-final.json + volumedetect):\n- 时长 45.76s(官方目标 45s,偏差 +1.7%,±5% 门槛内)\n- 1920x1080 30fps H.264;AAC 48kHz 双声道;9,039,712 bytes\n- mean_volume −19.6 dB / max −2.6 dB(无削波)\n- 帧抽样 8 景中点 + 字幕带放大帧(logs/zoom3-caption-26s.png 等)人工实读:`times more than red. So scattered` 词间空格、句点、青色当前词高亮均正确;全程单一深蓝背景族无白闪\n- 复刻物:final-sky-blue.mp4(同 sha256 副本)+ review-frames/frame_0000-0007.png\n\n## 6. 字幕词级时间源(踩线声明)\n\nWhisperX/faster-whisper 未装(analysis 7/13,transcriber 依赖缺失)。零 Key 原则下未追加重型安装:词级时间改用**确定性估算模型**(词均分 + 0.4s 句停,实测段时长锚定),覆盖全部 114 词;高亮词位可能偏 ±0.3s。已写入 decision_log 与 asset_manifest,属于已声明的偏差而非隐藏。\n\n## 7. 发布阶段\n\npublish 阶段为**有意跳过**(无发布渠道、无未授权动作),已写入 checkpoint metadata;这不是失败项。成片与素材的上链统一由组装席在 chair 冻结口径后执行。\n\n## 8. 渲染器两路如实呈现(硬规则留档)\n\nvideo_compose 实测三路:ffmpeg ✓ / remotion ✓ / hyperframes ✗(doctor 20s 超时)。AGENT_GUIDE 的硬规则下我如实记录两候选并按「单路可用例外条款」走 Remotion;HyperFrames 路线留作他人复核(make hyperframes-doctor)。\n\n## 9. 未做/放弃项(如实)\n\n- 第二条自拟中文 prompt:未跑。理由:piper 工具自报 multilingual=False(voice_cloning/multilingual 均否),跑中文配音属超出工具自报边界;chair 工单表述为可选(「两句都可跑」),已记录放弃理由。\n- amazon/transcription 自检:见第 6 条(估算替代)。\n- Backlot 看板服务:未启动(无人值守运行、避免抢占用户桌面浏览器;该服务为观察者角色,失败/缺席不阻塞管线——AGENT_GUIDE 明文)。\n\n[更正] 字节数笔误登记更正为实测 9,039,712(2026-10-05 09:44 本机 ls+ffprobe+sha256 三方复验吻合 chair 一手复算;哈希 f50cf764dbfc1392057b4d72355bcc543c50da90ee9809911811079f2a43bc59 不变——v3 收执行误取了 v2 的 byte 数,v2 的 9,178,378 仍留存于第 5 节 v2 行,不属笔误)。\n","encryption":"0","createTime":1791172662309,"tags":[],"attachments":[]}