中文对话
- 本仓库现为数字人生成 Web 项目,前端负责配置、头像上传与播放展示,后端聚焦编排数字人三阶段(形象→语音→唇形)生成。
- 所有数字人生成能力以
doc/数字人.md的 WaveSpeedAI API 规范为准:Seedream 图像、MiniMax 语音、Infinitetalk 唇同步等模型需在py/services/中封装为可复用客户端。 - 继承原故事化视频工程的日志、配置与限流体系,确保新功能沿用既有
py/function/、py/api/的架构与异常处理模式。
- 前端 (
frontend/):基于 Vite + Vue 3 的 SPA(src/App.vue),npm run build输出frontend/dist/,config.js启动时自动推导API_BASE;负责提示词/脚本/角色参数输入与任务轮询、播放器/下载交互。 - 后端 (
ad-back.py+py/):保留 Flask/FastAPI 结构,新增digital_human相关蓝图,暴露任务编排、任务状态查询与素材上传 API。端口固定 18005 (供ren.linapp.funNginx 反代)。 - 配置:
.env存放 WaveSpeed API Key 等敏感信息;config.yaml负责任务超时、并发、静态资源目录;user.yaml仅保留示例参数。 - 文档:除
README.md以外的新增文档只放在doc/,测试说明集中在test/;doc/design.md为唯一权威架构文档,历史doc/plan.md已下线。
- Python 3.10+ 且遵循 PEP 8,组件之间优先通过服务层交互(例如
services/digital_human_service.py)。前端保持 ESLint/Prettier 默认配置,提交前运行npm run build(如适用)。 - 常用命令:
source venv/bin/activate && pip install -r requirements.txtpython3 ad-back.py --port 18005或restart_api_server.sh(自动加载.env并重启 uvicorn)npm install && npm run dev(位于frontend/)
python3 py/test_network.py --digital-human或test/smoke_digital_human.sh(10 秒冒烟,输出到output/smoke/aka-*)- 提交前默认运行
PYTEST_WAVESPEED_MOCK=1 ./run_tests.sh(聚合npm run build+pytest);CI/预提交可直接调用./ci.sh以保持一致。 - 后端涉及付费 API 的联调需使用最短文本、低分辨率头像以控制成本;本地调试优先使用 mock,并记录
trace_id+ 成本至test/test-digital-human.md。 TaskResponse.assets.local_video_url必须指向/output/<job_id>/digital_human.mp4,前端会优先使用该本地域名播放/下载;若返回 CDN URL 需放在video_url备用。
- Nginx 需将
ren.linapp.fun的 HTTPS 流量转发到127.0.0.1:18005,并开启/api/的超时 120s 以容纳视频合成轮询。 - 同步部署
frontend/dist到 Nginx 根目录,client_max_body_size 200m以便上传头像/脚本,并通过location /output/ { alias /home/ren/output/; }公开任务产物;其余未命中路由需回退到index.html。 .env永不提交;若需要演示配置,提供.env.example并写明需要的 Key:WAVESPEED_API_KEY、MINIMAX_KEY等。- 静态文件(例如生成后的数字人片段)统一放到
output/子目录或对象存储挂载点,Git 忽略。
- 提交信息使用祈使句(如 “add digital human service client”),一次提交聚焦单变更。
- PR 说明需覆盖:数字人 API 调用更改、前后端交互协议、测试命令(含 mock/真实调用)、可能成本。
- 引入新第三方库时同步更新
requirements.txt或前端package.json,并在 README 记录用途。
- 关键路径必须有最小化端到端验证:调用接口生成 1 段短语音 + 5-10 秒唇同步视频;通过
test/test-digital-human.md记录命令、job_id、trace_id、cost。 - 继续沿用原项目日志与重试策略,任何调用 WaveSpeed API 的地方默认 3 次指数退避重试并输出 trace id;
output/<job_id>/log.txt必须保持[ISO][LEVEL][trace=xxx] message结构。