Files
ai-toy-patent-workflow/RULES.md

115 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI玩具专利生成工作流
## 启动
- 推荐本地环境:`cd ~/Projects/code/20260518-ai-toy-patent-workflow && npm run docker:up` — Docker Compose端口 4560
- 浏览器打开 http://localhost:4560
- 备用非 Docker 开发:`npm run dev` — 端口 4560
- 首次依赖装好:`npm install --legacy-peer-deps`next 15 + react 19 有 peer 警告)
## 部署事实
- 平台:个人 VPS `76.13.31.179`Docker Compose接入现有 Coolify Traefik
- 发布状态VPS 生产已发布,仅个人使用
- 最近生产数据同步2026-05-31新增两条补充展示视频并同步到 VPS `data/``有你家族 · 糯糯猪` session `s_mps3u047_48e383` 新增 45 秒 `nuonuo_pig_motion_feedback_showcase`,重点展示主动耳朵、三套以上眼睛反馈、灵巧尾巴和四肢小范围互动动作;`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 新增 30 秒 `meey_face_display_dynamic_30s`,快节奏聚焦完整无遮挡面部显示屏、互动表情、智能对话情绪反馈和演唱会视频播放。
- 最近生产数据同步2026-05-31`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 追加 1 条 45 秒“有你家族 MEEY 屏幕脸展示视频”并同步到 VPS `data/`,任务 `youni_family_meey_screen_showcase` 当前指向 `family-screen45v2` 成片v2 使用 `scripts/seedance-60s-compose.mjs --no-reference` 降低旧参考图 visor 影响,重点要求面部是一整块完整无遮挡显示屏,展示喜怒哀乐/爱心等表情包,以及屏幕播放演唱会舞台画面的智能陪伴场景。
- 最近生产数据同步2026-05-31新增 3 条 45 秒互动展示成片并已同步到 VPS `data/``有你家族 · 生肖幻装系列` session `s_zodiac_fantasy_20260531_main` 新增 `zodiac_fantasy_interaction_showcase`,重点展示亥猪屏幕脸、喜怒哀乐表情包、人机互动和视频播放,且额头猪鼻子可不显示;`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 新增 `hai_pig_meey_interaction_showcase`,重点展示面部显示器表情包、语音互动和视频播放;`有你家族 · 糯糯猪` session `s_mps3u047_48e383` 新增 `nuonuo_pig_interaction_showcase`,重点展示自主行动、语音互动,以及猪鼻子、猪耳朵、猪尾巴、猪眼睛的触摸反馈。本轮使用 `scripts/seedance-60s-compose.mjs``interaction45` 分段拼接流程生成,每条成片 3 段拼接约 45 秒。
- 最近生产数据同步2026-05-31`有你家族 · 生肖幻装系列` session `s_zodiac_fantasy_20260531_main` 已同步到 VPS `data/`,包含 12 张专业投影六视图专利图、18 张系列/单款宣发图、6 份专业文字资产、3 条亥猪 C 位 45 秒 Seedance 分段拼接视频(展示视频、触感细节、群体快闪);产品尺度统一按 50cm+ 具身 AI 智能陪伴机器人处理。本轮使用 `scripts/generate-zodiac-fantasy-series-assets.mjs` 以桌面参考图 `1400a0c9-6501-4a8f-942a-59d5e82edacd.png` 为视觉锚点生成图片,视频使用 `scripts/seedance-60s-compose.mjs``zodiac_fantasy_pig_*` 模板生成。
- 最近生产部署2026-05-31`有你家族 · 亥猪` 模板约束已发布并完成生产:视频任务统一改为 45 秒;图片包模板移除默认动物鼻子、尾巴、耳朵等提示,改为 40cm+ AI 陪伴机器人摆件、正面宽约 28cm、侧面深约 22cm、软壳/短绒触感但不改变基础机甲结构。生产 session `s_mpsn5ef3_edc352` 已完成 64 张基础图片、4 张十二生肖装甲组合图、5 条 45 秒亥猪视频和 2 条 30 秒十二生肖集合视频。
- 上一轮生产部署2026-05-30视频 provider 改为默认 Seedance`VIDEO_PROVIDER=seedance`OpenAI Sora 仅作为可选回退;实测 Ark / Seedance `doubao-seedance-2-0` R2V 不接受 `duration=60`,当前 Seedance 单任务按 15 秒提交。若仍需 60 秒成片,需要分段拼接,或回退 OpenAI Sora 的延展链路。
- 最近生产数据同步2026-05-30`有你家族 · 糯糯猪` session `s_mps3u047_48e383` 已同步到 VPS `data/`,包含专利包、配件包、生产打样包、宣发包共 64 张图片Seedance 生产环境 Key 已换新并作为当前默认视频 provider。
- 服务名 / 容器名:`ai-toy-patent-workflow`
- 服务器路径:`/opt/ai-toy-patent-workflow`
- 主站 / 前端https://ai-toy.kang-kang.com
- 登录页https://ai-toy.kang-kang.com/login
- 本地 Dockerhttp://localhost:4560
- API / 后端:内置 Next.js API Route生产同域名
- 文档 / 解析:无
- 管理后台:无
## 快捷登录
- 已启用应用内登录页
- 登录地址:`https://ai-toy.kang-kang.com/login`
- 用户名 / 密码:见 `.project.json.quick_login`;生产备份在 VPS `/root/ai-toy-patent-workflow-login.txt`
- 会话HttpOnly HMAC Cookie生产变量只放 VPS `deploy/.env.production`
## 元数据回写清单
- 改公网域名或迁移部署时,更新 `.project.json.urls` + 本节
- 数据持久化在 `data/`gitignored不入库上传原图在 `data/uploads/`
- 后端审计库:`data/app.db`SQLiteDocker 镜像内置 `sqlite3`,记录上传、生成、选择、角色锁定、素材包进度、重做、视频提交、图库/记录查看等事件
- 审计兜底:非 Docker 本地如果缺少 `sqlite3`,写入 `data/audit-fallback.jsonl`,不阻断生成流程
- 本地 Docker 使用 `docker-compose.yml`,挂载 `./data:/app/data`,读取 `.env.local`,并强制 `PUBLIC_APP_URL=http://localhost:4560`
- VPS 生产 Docker 使用 `docker-compose.prod.yml`,挂载 `./data:/app/data`,读取 `deploy/.env.production`,并强制 `PUBLIC_APP_URL=https://ai-toy.kang-kang.com`
- VPS 数据持久化在 `/opt/ai-toy-patent-workflow/data`
- VPS 生产环境变量在 `/opt/ai-toy-patent-workflow/deploy/.env.production`,不入库
- 资源索引:运行 `npm run resources:index` 生成 `data/resource-index.json``data/resource-index.md``data/named/` 人类可读软链接;原始资源文件名不能直接改,避免 session JSON / 图片 URL 断链
- 风格示意图:运行 `npm run styles:previews -- --force` 用 GPT 图片模型生成 `public/style-previews/*.png`UI 左侧风格卡片直接引用这些小图
## 环境变量
- `OPENAI_API_KEY` — GPT / OpenAI API Key文本、结构化、图片生成以及默认 OpenAI Sora 视频生成共用
- `GPT_TEXT_MODEL` — 默认 `gpt-5.5`,用于角色设定等结构化输出
- `GPT_IMAGE_MODEL` — 默认 `gpt-image-2`,用于意向图和三类素材包图片生成
- `GPT_API_BASE` — 默认 `https://api.openai.com/v1`
- `VIDEO_PROVIDER` — 默认 `seedance`;需要回退 OpenAI Sora 时可设为 `openai_sora`
- `OPENAI_VIDEO_MODEL` — 默认 `sora-2-pro`,用于 OpenAI 视频生成
- `OPENAI_VIDEO_MIN_SECONDS` — 默认 `60`;仅用于 OpenAI Sora 目标时长Seedance 当前单任务按模型可接受的 15 秒上限提交
- `OPENAI_VIDEO_QUALITY` — 默认生产建议 `high`,对应 OpenAI 允许的视频输出尺寸
- `SEEDANCE_API_KEY` — Seedance 视频生成 Key当前默认视频 provider 使用,未配置则视频接口返回 503
- `SEEDANCE_MODEL` — 默认 `doubao-seedance-2-0-260128`
- `SEEDANCE_API_BASE` — 默认 `https://ark.cn-beijing.volces.com/api/v3`
- `PUBLIC_APP_URL` — 生产填公网入口,用于把 `/api/img/...` 补成 Seedance 可访问的绝对 URL
- `WEB_AUTH_USERNAME` / `WEB_AUTH_PASSWORD` / `WEB_AUTH_SESSION_SECRET` — 网页登录;真实值只放 `.env.local` 和 VPS `deploy/.env.production`
- `WEB_AUTH_COOKIE_NAME` — 默认 `ai_toy_session`
- `WEB_AUTH_COOKIE_SECURE` — 本地 `false`,生产 `true`
- 配置位置:`.env.local`gitignored参考 `.env.local.example`
- 生产配置模板:`deploy/.env.production.example`;真实生产值只放 VPS 的 `/opt/ai-toy-patent-workflow/deploy/.env.production`
- 图片生成未配置 GPT Key 时回退 mockSVG 占位图),视频生成不 mock必须配置 Seedance Key
-`/login``/api/auth/*``/api/img/*` 外,页面与 API 都需要登录;`/api/img/*` 保持公开是为了 Seedance 能从公网读取参考图
## 规则
- 全项目规则真源:`/Users/kangwan/Projects/code/20260317-rules-dashboard/RULES.md`
- 文本/结构化/图片生成统一使用 GPT 最高规格配置
- 视频生成默认使用 SeedanceOpenAI Sora 只作为可选回退 provider当前 Seedance 模型不支持单次 60 秒直出,使用 `npm run videos:seedance -- --session <id> --target-seconds 45` 按 15 秒分段生成并拼接30 秒集合片同理设置 `--target-seconds 30`
- 不允许编造不存在的部署域名、账号、密码
## 图像链路事实
- 输入入口:想法、二创、复刻三段;复刻模式会把上传主体图直接作为 L0 锚图
- L0用户选中的意向图
- L1角色锁定时生成的白底净化锚图写入 `CharacterSpec.cleanReferenceImageUrl`
- L2每个素材包的根图例如 `patent_front``acc_inventory_sheet``prod_front_spec``mkt_white_front`
- L3包内其它图基于对应 L2 根图生成
- pack 图像生成必须走真实图生图:读取 anchor 图片字节后调用 GPT image edit不再把参考图 URL 当纯文本拼进 prompt
- 单张重做接口:`POST /api/assets/[assetId]/regenerate`,必须沿用该图的 anchor
- 单张重做需要 `confirmCost=true`;前端会二次确认,服务端会拒绝未确认请求,并对同一 session/asset 加并发锁防连点烧钱
- 生成图库:`/api/gallery/[sessionId]`,按真实图片宽高比例展示缩略图,鼠标悬停显示大图;同页可跳转操作记录
- 操作记录:`/api/audit/[sessionId]`,读取 `data/app.db` 展示事件流水和图片索引
- 视频参考优先级:宣发白底图 `mkt_white_front` → 专利主图 `patent_front` → L1 白底锚图 → L0 意向图
- 上传 API`POST /api/uploads`multipart 图片存入 `data/uploads/`,返回 `UploadedImage`
- 复刻建项目 API`POST /api/projects/from-upload``mode=replicate` 时跳过批量生图,创建 selected L0Vision 推断 `CharacterSpec`,并用 strict L1 净化 prompt
- 上传图锁定 API`POST /api/character/lock-from-upload`,用于对上传主体图重新推断并 strict 净化
- 多宫格提案板 / 品牌手册 / 包装展示图上传后strict L1 会先抽取最大最清晰的单一主角色,不保留版式、标题、包装平铺和场景小图
- 用户上传图中的原创品牌字样、帽标、服装标识、面罩图案和配件图形必须保留;只对明显第三方已注册 IP 做替换提示
- 素材包生成支持后台模式和增量保存;长耗时任务会逐张写回 session重复触发同一 session/image/kind 会被并发锁挡住
## 注意事项
- `data/` 目录会存原图generated/selected/refs可能体积大已 gitignored
- `refs/` 下放参考资料 PDF/DOCX/图(已 gitignored`refs/README` 之类可放进库)
- mock 模式仅用于跑通流程,生图质量为零(只是 SVG 笑脸占位)
## 工作流
1. 输入模式:
- 想法prompt + 可选参考图(最多 4 张)+ 风格 + 数量4/8/12
- 二创:上传参考图 + 变化方向 + 风格 + 数量,生成变体候选
- 复刻:上传主体图,直接作为 L0 锚图并锁定角色
2. 点 🪄 批量生成 / `⌘/Ctrl+Enter`
3. 九宫格快筛:数字键 `1-9` 选中,`Shift+1-9` 打叉
4. 选中的图自动复制到 `data/selected/`
5. 锁定角色设定 `CharacterSpec`
6. 串行生成图片包:必须从专利包开始,顺序为 `专利包 -> 配件包 -> 生产打样包 -> 宣发包`
7. 前一个图片包完整生成后,下一个图片包才解锁;不提供“一键全包”入口或全包 API
8. 四个图片包完成后才解锁文案模板和视频任务旋转展示、开箱、触感细节、角色故事、工厂预览Seedance 单任务按 15 秒提交30/45/60 秒成片使用 `scripts/seedance-60s-compose.mjs` 分段拼接
9. 侧栏保留历史会话,点击切换
## 后续路线
- 导出专利包PNG高清 + PDF合订
- ZIP/PDF 打包下载
- OpenAI Sora 长视频任务轮询 UI 细化