# 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,`有你家族 · 生肖幻装系列` 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 - 本地 Docker:http://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`(SQLite);Docker 镜像内置 `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 时回退 mock(SVG 占位图),视频生成不 mock,必须配置 Seedance Key - 除 `/login`、`/api/auth/*` 和 `/api/img/*` 外,页面与 API 都需要登录;`/api/img/*` 保持公开是为了 Seedance 能从公网读取参考图 ## 规则 - 全项目规则真源:`/Users/kangwan/Projects/code/20260317-rules-dashboard/RULES.md` - 文本/结构化/图片生成统一使用 GPT 最高规格配置 - 视频生成默认使用 Seedance;OpenAI Sora 只作为可选回退 provider;当前 Seedance 模型不支持单次 60 秒直出,使用 `npm run videos:seedance -- --session --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 L0,Vision 推断 `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 细化