8.5 KiB
8.5 KiB
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-30,视频 provider 改为默认 OpenAI Sora(
VIDEO_PROVIDER=openai_sora),Seedance 仅作为可选回退;视频模板目标时长统一不少于 60 秒,并通过 OpenAI/videos/extensions链路补足长视频;对应代码提交9c41caf - 最近生产数据同步:2026-05-30,
有你家族 · 糯糯猪sessions_mps3u047_48e383已同步到 VPSdata/,包含专利包、配件包、生产打样包、宣发包共 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/v1VIDEO_PROVIDER— 默认openai_sora;需要回退时可设为seedanceOPENAI_VIDEO_MODEL— 默认sora-2-pro,用于 OpenAI 视频生成OPENAI_VIDEO_MIN_SECONDS— 默认60;视频模板目标时长不得低于 60 秒OPENAI_VIDEO_QUALITY— 默认生产建议high,对应 OpenAI 允许的视频输出尺寸SEEDANCE_API_KEY— Seedance 视频生成 Key;仅VIDEO_PROVIDER=seedance时使用,未配置则视频接口返回 503SEEDANCE_MODEL— 默认doubao-seedance-2-0-260128SEEDANCE_API_BASE— 默认https://ark.cn-beijing.volces.com/api/v3PUBLIC_APP_URL— 生产填公网入口,用于把/api/img/...补成 Seedance 可访问的绝对 URLWEB_AUTH_USERNAME/WEB_AUTH_PASSWORD/WEB_AUTH_SESSION_SECRET— 网页登录;真实值只放.env.local和 VPSdeploy/.env.productionWEB_AUTH_COOKIE_NAME— 默认ai_toy_sessionWEB_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 最高规格配置
- 视频生成默认使用 OpenAI Sora;Seedance 只作为可选回退 provider
- 不允许编造不存在的部署域名、账号、密码
图像链路事实
- 输入入口:想法、二创、复刻三段;复刻模式会把上传主体图直接作为 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),可能体积大,已 gitignoredrefs/下放参考资料 PDF/DOCX/图(已 gitignored,但refs/README之类可放进库)- mock 模式仅用于跑通流程,生图质量为零(只是 SVG 笑脸占位)
工作流
- 输入模式:
- 想法:prompt + 可选参考图(最多 4 张)+ 风格 + 数量(4/8/12)
- 二创:上传参考图 + 变化方向 + 风格 + 数量,生成变体候选
- 复刻:上传主体图,直接作为 L0 锚图并锁定角色
- 点 🪄 批量生成 /
⌘/Ctrl+Enter - 九宫格快筛:数字键
1-9选中,Shift+1-9打叉 - 选中的图自动复制到
data/selected/ - 锁定角色设定
CharacterSpec - 串行生成图片包:必须从专利包开始,顺序为
专利包 -> 配件包 -> 生产打样包 -> 宣发包 - 前一个图片包完整生成后,下一个图片包才解锁;不提供“一键全包”入口或全包 API
- 四个图片包完成后,才解锁文案模板和 OpenAI Sora 视频任务:旋转展示、开箱、触感细节、角色故事、工厂预览;每条视频目标时长不少于 60 秒
- 侧栏保留历史会话,点击切换
后续路线
- 导出专利包:PNG高清 + PDF合订
- ZIP/PDF 打包下载
- OpenAI Sora 长视频任务轮询 UI 细化