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

104 lines
7.5 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 生产已发布,仅个人使用
- 服务名 / 容器名:`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 API Key文本/结构化/图片生成统一走 GPT 最高规格配置
- `GPT_TEXT_MODEL` — 默认 `gpt-5.5`,用于角色设定等结构化输出
- `GPT_IMAGE_MODEL` — 默认 `gpt-image-2`,用于意向图和三类素材包图片生成
- `GPT_API_BASE` — 默认 `https://api.openai.com/v1`
- `SEEDANCE_API_KEY` — Seedance 视频生成 Key未配置时视频接口返回 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 最高规格配置
- 视频生成固定使用 Seedance
- 不允许编造不存在的部署域名、账号、密码
## 图像链路事实
- 输入入口:想法、二创、复刻三段;复刻模式会把上传主体图直接作为 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 视频任务:旋转展示、开箱、触感细节、角色故事
9. 侧栏保留历史会话,点击切换
## 后续路线
- 导出专利包PNG高清 + PDF合订
- ZIP/PDF 打包下载
- Seedance 任务轮询 UI