用途:构建或改造轻量实时语音对话应用,让固定角色头像的嘴型跟随实际远端音频变化。默认产品为单头像、单对话,不添加背景、服装、角色模式或多角色,除非用户明确要求。
主要能力:接受照片或角色描述两种输入。照片作为身份参考,保留脸型、肤色、头发、眼镜、胡须等特征;描述则规范为具体视觉规格。生成一张正面、均匀光照、闭嘴的规范头像,再基于它生成 soft、round、open 三张保持身份的嘴型编辑图,并裁剪出相同矩形区域。默认保存为 public/avatar/avatar-base.jpg、mouth-soft.png、mouth-round.png、mouth-open.png,并用 scripts/validate_avatar_assets.py --dir <project>/public/avatar 校验。
使用方式:图像生成统一走 imagegen,并先读其完整说明;用 openai-docs 及适用的 openai-platform-api-key 核实当前 Realtime WebRTC 端点、会话结构、模型、音色与凭据流程,不把本技能中的模型示例当作当前事实。新项目优先 Next.js 或 vinext,可用 python3 <skill-dir>/scripts/scaffold_app.py --target <project-dir> --character-name "Mira" --app-name "Mira Live" --persona "..." --model "<verified-realtime-model>" --transcription-model "<verified-transcription-model>" --voice "<verified-realtime-voice>" 搭建核心;缺少时安装 framer-motion 与 @phosphor-icons/react。已有产品应复制或改造 assets/starter/ 中的文件,而非覆盖其架构。
口型同步:分析远端输出 MediaStream,而非麦克风输入或 Realtime 事件节奏;每动画帧采样音频但不更新 React state;嘴型更新不快于约 96 毫秒;平滑起落、按滚动峰值归一化、短静音后闭合;在相邻姿态间过渡;用 DOM data-mouth 属性配合 CSS 只显示一个嘴型贴片,头像像素保持静止。不要使用预设无限嘴型动画。
安全边界:用户在应用内输入 OpenAI API 密钥,仅保存在组件内存,不写入本地存储、会话存储、IndexedDB、分析、日志或源码;通过 HTTPS 一次性发送到同源会话路由,协商后清除客户端状态并返回 Cache-Control: no-store;不把长期密钥直接暴露给 Realtime WebRTC 对等连接。
验证与限制:运行生产构建、lint 与可用回归测试;确认存在 AnalyserNode、requestAnimationFrame、90–110 毫秒姿态间隔、相邻姿态步进,且无 CSS @keyframes mouth-* 循环;确认嘴型贴片尺寸一致并在桌面与移动端对齐。若用户要求浏览器视觉 QA,才测试实时语音轮次并据观察调时序,否则不得声称已视觉验证。部署后返回在线 URL。交付物包括可运行应用、头像素材路径、生成提示集、输入模式、本次核实的 Realtime 模型/音色、验证结果与部署 URL。