「真机预览」现在同步动作轨道与官方表情轨道:从「官方 → 表情」加入设备已有表情,按时间轴片段开始播放、结束停止。使用 SDK 注入的 animation 通道,不播放表情关联的官方动作或音效。设备未声明的资源会在动作开始前明确报错;请检查 SD 资源和固件,或移除该表情仅预览动作。机器人仍可能因 SD 文件缺失/损坏拒绝播放,程序会报告失败并停止预览。
「我的」中新导入的 GIF 仍只在电脑播放,即使文件名相同,也不会自动绑定设备资源。如果 SD 已有对应官方表情,请从官方库加入对应素材;本次不包含向 SD 上传新 GIF 或自定义作品资源绑定。动画按设备原始速度播放,片段拉伸不代表真机 GIF 变速。网络指令不是硬件级同步。停止/页面失联同时请求停止动作和本次启动的动画,失败保留重试入口。
音频轨道也加入真机预览:在「我的 → 音频」导入 MP3/WAV/OGG(单文件最多4 MiB),点击素材加入音频轨道并对齐起点。电脑预览从电脑出声;真机预览将音频转为24kHz单声道PCM,通过SDK临时播放,不写SD卡,也不在电脑重复出声。要求设备声明 audio.stream 能力;单段PCM最多4 MiB、总计8 MiB,约87秒/174秒。损坏、超限、重叠音频明确拒绝,停止与页面失联清理音频。网络及设备缓冲会产生延迟,本功能不承诺帧级同步;音频不会提交给AI模型。
更新后先保存作品,再重启 Application 并刷新页面;仅刷新页面不会加载新的 Python 服务。
独立 SDK Application:导入 GIF 和可选音效,通过本机 Codex CLI 观察完整帧序列、生成动作,在真实 Watcher 模型上同步预览,导出客户端可导入、可编辑的 action-draft v1 JSON。也提供 Skill 下载、素材导出和外部 AI 提示词。
需要 Node.js 22.12+、Python 3.11+、已安装的 watcherobot SDK 0.1.4,以及支持图像输入并已登录的 Codex CLI。当前清单只声明 Windows 支持;其他系统尚未完成运行验收。
在本项目目录执行(PowerShell 和 Shell 命令相同):
npm ci
npm run build
watcherobot app check .
watcherobot app run .
如果 watcherobot 不在 PATH,请使用安装环境内的可执行文件。app run 会由 SDK 管理运行并打开本机浏览器;日志显示回环地址。端口首次分配后保存在用户目录 .watcher-choreography/web-port,重启复用同一地址,让浏览器里的作品和素材继续可见。地址被占用时明确报错。退出运行命令会关闭应用。不要直接运行 app.py:它要求 Daemon 注入的 Application 环境。
本应用不创建 Daemon、不建立设备连接、不转发 Desktop 业务帧,通过注入的 SDK Device channel 驱动头部。仅在本地回环地址提供网页。GIF 分帧会发送给 Codex 当前配置的模型;没有独立 API 密钥配置;音频用于电脑或真机预览,不发送给模型。
素材与动作库保存在当前浏览器,作品需要点击「保存作品」。清除浏览器数据或换浏览器会影响本地内容,请用作品导出保留备份。支持真机动作预览,不自动上传新 GIF/音效到机器人 SD 卡。不同动作片段间的空白保持前一姿态,下一片段先用短过渡到达自身起始姿态,再执行后续关键帧;若片段太短、没有足够过渡时间,会提示对齐前后姿态或延长动作;电脑时间轴预览与真机预览共用同一合成轨道。
坐标 X 中位90、Y中位115;Y减小低头、增大抬头。生成范围 pan ±25、tilt ±15,Y=115-tilt;2–60点,至少120ms间隔。速度约束为保守软件上限,不等同已验收的电机能力。长素材仍按原始帧时序处理,不静默截断。
npm test
npm run typecheck
python -m unittest discover -s tests
npm run skill:package
node scripts/package-watcher-skill.mjs --check
Python 测试需安装 app.json 所列依赖及 httpx。Skill 的独立发行源为 skill/;打包分发器选择同语义的 PowerShell/Shell 入口,生成 ZIP 与校验清单,修改后应重打包。工作区原 Skill 为历史安装副本,新项目不会自动改写同事的个人安装。
浏览器测试:安装 Playwright Chromium,启动本地测试服务 python -m uvicorn service:create_web_app --factory --host 127.0.0.1 --port 5198,设置 TEST_GIF 指向真实 GIF,运行 node tests/browser.mjs。可通过 WORKBENCH_URL、CHROMIUM_PATH 覆盖测试地址和浏览器。测试不调用收费模型、不操作设备。实际视觉模型输出质量须另行验收。
模型、轨道采样和动作格式解析从团队 WatcheRobot_client 的 2df4fd9b 工作树及未提交创作者改动抽离。保留原模型资源,约50MB的 GLB 是主要体积来源;首次加载和弱 GPU 体验仍需优化。没有更改资源授权,发布前沿用团队对原资源的授权要求。
源码仓库不提交 node_modules、web 构建目录或本机配置。交付可安装 Application 时必须先构建,并将 web/ 连同 app.py、app.json、service.py、playback.py、prompt.txt、schema.json、skill/ 一起放入应用制品;仅源码下载不能直接运行。项目目前没有远端仓库、提交或 PR。参见 开发记录。
npm start(首次先 npm ci、npm run build)。设置 WATCHER_PYTHON 可指定已安装 SDK 的 Python。PowerShell 与 Shell 入口由 Node 分发器选择,参数和退出码一致;目前实际验收环境仅 Windows。这是网络实时预览,浏览器计时以服务端时间校正,不是硬件级精确同步。实际方向、响应与同步精度须真机验收。离开前保存作品,需要跨电脑时导出作品备份。
发送采用绝对时间轴和两轴关键帧边界,由设备完成段内线性移动,不再每100ms补指令;静止时不重复发送相同目标。回复滞后时跳过过期段,较差网络下细节可能减少。AI生成轨道移除静止内部重复帧,保留停顿起止和总时长。运行中单次指令确认超过1秒会停止并提示,设备断连与页面失联仍停止。更新程序后先导出动作,再重新启动 Application;刷新网页不会重新加载 Python 后端。
构建后运行 npm run package:app,得到 dist/watcher-choreography.zip。包含已构建页面、模型、Skill 与 Python 服务;解压后执行 watcherobot app check <解压目录> 和 watcherobot app run <解压目录>,无需运行 npm。SDK 安装依赖和托管生命周期;不要直接执行 app.py。源码开发入口为 scripts/application.ps1 / application.sh,均委托 application.py;运行 ZIP 不包含这些开发脚本。
更新这一版后,先保存并导出当前作品,再停止原 Application 并重新启动,最后刷新原网页地址。前后端停止协议一同更新,仅刷新页面不足以加载 Python 修复。停止未得到确认时,页面保留「停止」重试入口;服务会拒绝新的动作播放直到停止确认成功。
源码提交与草稿 PR 流程见 SUBMITTING.md,PR 正文草案见 PR-DRAFT.md。