
Wardrobe如何可靠运行AI图像任务job状态机、原子写入与崩溃自动恢复开发指南【免费下载链接】wardrobeYour clothes, extracted and organized with gpt-image.项目地址: https://gitcode.com/gh_mirrors/wardro/wardrobeWardrobe 是一个基于 gpt-image 的本地优先 AI 衣柜上传穿搭照片它会自动识别每件衣物、抠出透明底商品图并生成真人上身效果图。为了让这些耗时长、易中断的 AI 图像任务可靠运行Wardrobe 用了三个机制job 状态机、原子写入与崩溃自动恢复——任务状态随时落盘进程崩溃后重启即可自动续跑。 快速上手3 步跑起 Wardrobe AI 衣柜Wardrobe 要求 Node.js 22本地运行只需三步配置说明见 README.mdgit clone https://gitcode.com/gh_mirrors/wardro/wardrobe cd wardrobe npm install cp .env.example .env npm run dev在.env中填入OPENAI_API_KEY并在data/model-reference.png放一张本人 PNG 参考照服务启动后打开localhost:5173即可。所有配置项数据目录、模型、图像质量都通过环境变量控制无需改动代码。 先看看成品AI 衣柜长什么样Wardrobe 把每件衣物以「透明底商品图 可选模特效果图」的形式存入本地画廊支持按上装、裤装、鞋履等分类筛选并可编辑名称、颜色与标签。所有数据——原图、任务记录、生成图、JSON 数据库——都保存在本地data/目录这正是后文状态机与恢复机制的落点。 Job 状态机把 AI 图像任务拆成 3 个可追踪阶段上传一张照片后视觉模型先识别图中所有衣物每件衣物独立创建一个 job。每个 job 内部固定包含 3 个阶段stagecrop裁剪按检测框裁出目标衣物进入人工确认garment商品图调用 gpt-image 在纯色背景下重构完整衣物再本地抠除背景得到透明底商品图modeled模特图把商品图与本人参考照一起交给模型生成横版上身效果图。每个阶段都有统一的状态字段statuspending / queued / processing / review / approved / rejected / failed、decision、attempts、assetUrl、error等初始状态定义见 scripts/import-job-api.mjs。状态如何流转approve / reject / regeneratepending → processing → review阶段生成完成后进入 review等待你在界面上审核review → approved批准 crop 会自动触发 garment 生成批准 garment 会把衣物写入衣橱数据库并触发 modeled 生成批准 modeled 则把整个 job 标记为complete并归档review → rejected整条任务连同图片文件一起删除队列保持干净review → queuedregenerate可附上一句再生成方向提示词重新生成attempts计数 1历史产物文件保留供对照processing → failedAPI 报错或背景清洗失败都会把error写入状态并保留失败源图支持本地背景重清理而不必重新调用模型。关键约束只有处于 review 的阶段才允许 approve/reject其他状态下调用会返回 409防止界面与后端状态错乱流转逻辑见 scripts/import-job-api.mjs。另外同一 job 的同一阶段用内存锁jobId:stage去重——重复点击重试不会并发发起两次图像生成见 scripts/import-job-api.mjs。 原子写入job.json 为什么永远不会被写坏任务状态文件data/jobs/job-id/job.json和衣橱数据库data/library.json的每次更新都走同一个atomicJson函数思路是经典的临时文件 rename先写入一个带随机 UUID 的临时文件目标文件.uuid.tmp再用文件系统原生的rename把临时文件原子地覆盖到目标路径——同一目录内的 rename 要么完整成功、要么不发生不存在写了一半的中间状态若 rename 因文件系统限制失败EBUSY / EXDEV / EPERM回退为copyFile 删除临时文件。实现见 scripts/import-job-api.mjs。配合两个工程习惯可靠性进一步拉满先落盘再干活每次发起 AI 生成前先把阶段状态改为processing并保存 job再开始耗时的图像调用磁盘是唯一事实源每次状态变更都重新读取最新副本再修改避免内存里的过期对象覆盖新状态核心生成流程见 scripts/import-job-api.mjs。即使进程在生成中被强杀job.json也只会停留在processing或pending绝不会出现半截 JSON。️ 崩溃自动恢复重启后任务从断点继续让状态机真正可靠的最后一块拼图是启动时的恢复钩子。插件在configResolved阶段挂载于 vite.config.mjs扫描data/jobs/对每个遗留 job 自动决策逻辑见 scripts/import-job-api.mjs遗留状态自动动作status: complete但尚未归档补写data/library.json与归档图片然后删除 job 目录任一阶段被rejected视为已放弃直接清理目录crop 尚未批准保持等待交回给用户审核garment 停在processing / queued生成中被崩溃打断重置为pending并自动重新发起生成garment 已批准、modeled 停在pending / processing / queued重置为pending并自动续跑模特图生成也就是说AI 任务跑到一半断电、服务重启不需要任何手工干预任务会自动从磁盘上的断点状态继续。这正是状态机 原子写入组合的价值——内存可以丢磁盘上的状态永远可信。️ 前端如何消费任务状态轮询 人工审核前端导入面板src/import-flow.jsx把后端状态机翻译成人类可读的进度状态推导deriveStatus按 modeled → garment → crop 的优先级推导当前文案如Styling modeled imageReady for review见 src/import-flow.jsx自动刷新只要还有阶段处于processing / queued就以 900ms 间隔轮询 job 状态界面实时跟进见 src/import-flow.jsx三个审核动作审核通过 / 拒绝 / 带提示词再生成一一对应状态机上的approve / reject / regenerate失败兜底生成失败时打开背景清理编辑器拖动容忍度滑杆在本地重算抠图效果不再调用图像模型满意后一键接受见 src/import-flow.jsx。 源码地图按路径快速定位想改什么看哪里job 创建、状态流转、生成编排scripts/import-job-api.mjs原子写入实现scripts/import-job-api.mjs崩溃恢复钩子scripts/import-job-api.mjs前端导入面板与审核交互src/import-flow.jsx插件挂载dev / preview 双端生效vite.config.mjs响应式图片服务scripts/responsive-image-api.mjs配置项与快速开始README.md贡献指南CONTRIBUTING.md数据布局全部在本地data/data/jobs/job-id/存原图、裁剪图与各次生成产物及job.jsondata/library.json是衣橱数据库data/imported/存归档图片。✅ 小结可迁移到任何 AI 任务项目的 3 条经验Wardrobe 的可靠性设计可以浓缩为三条把长任务拆成有限阶段每阶段显式状态机——状态先落盘再干活所有持久化文件走临时文件 rename原子写入——杜绝半截文件启动时按状态机规则自动修复 / 续跑——崩溃只是中断不是失败。掌握这套「job 状态机 原子写入 崩溃自动恢复」的组合你构建的任何 AI 图像任务流水线都会更稳、更省心。【免费下载链接】wardrobeYour clothes, extracted and organized with gpt-image.项目地址: https://gitcode.com/gh_mirrors/wardro/wardrobe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考