# 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
- 本地 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 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 时回退 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
- 不允许编造不存在的部署域名、账号、密码

## 图像链路事实
- 输入入口：想法、二创、复刻三段；复刻模式会把上传主体图直接作为 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. Seedance 生成视频任务：旋转展示、开箱、触感细节、角色故事
8. 侧栏保留历史会话，点击切换

## 后续路线
- 导出专利包：PNG高清 + PDF合订
- ZIP/PDF 打包下载
- Seedance 任务轮询 UI
