Files
ozon-seller-kit/docs/v2.1/image-suite.md
T
2026-08-26 17:38:44 +08:00

7.2 KiB
Raw Blame History

V2.1 图片生成方案(套图 + 单张 AI 生图)

状态:Phase A 前端开发中;Phase B 服务端平移 参照:image-suite-studio(下称 ISSserver/services/{planner,generator,prompts,watermark}.py + 面板 03/04 区块交互 原则:生成能力与 ISS 功能一致,交互移到 studio 试算页并新增「单张 AI 生图」。


1. 能力总览

能力 说明 状态
采集图片展示与勾选 按 main/sku/detail/generated 分组;勾选作为参考底图;默认全选主图+SKU 图 Phase A 前端
手动上传补充参考图 POST /api/materials/bytes,独立 upload 分组 Phase A 前端 (接口已有)
套图方案(默认) 7 种基础类型各 1 张,数量 0-5 可调 Phase A 前端
AI 智能规划 DeepSeek 按商品信息/图组统计/SKU 规格生成方案(POST /api/suite/plan 前端 / 服务端 Phase B
一键生成 方案展开为逐张任务,串行队列多模型生成(POST /api/suite/generate + 轮询) 前端 / 服务端 Phase B
生成图水印 服务端 Pillow 合成(图片徽章/文字 + 不透明度,右下角) 前端选项 / 服务端 Phase B
生成结果与导出 结果网格、失败格错误、导出 ZIPGET /api/suites/{id}/zip 前端 / 服务端 Phase B
下载采集图片 勾选图打包 ZIPPOST /api/export/images,防盗链代理下载) 前端 / 服务端 Phase B
单张 AI 生图(V2.1 新增) 每张采集图/生成图上「AI 生图」按钮 → 弹窗:要求文本域 + 模型选择 → 单张生成 前端 / 服务端 Phase B
生成图回写商品 生成完成的图追加为 product_assets(generated) Phase B/D

2. 目标平台与规格

试算页固定目标平台 Ozon:俄文图内文案、3:41536×2048)。 ISS 的 wb/cn 选项不做;platform 字段仍随请求下发,服务端按平台决定文案语言与比例,保留扩展性。)

3. 出图方案(Plan

  • 类型白名单(10 种)white_bg 白底主图 / key_features 核心卖点图 / selling_pt 卖点图 / material 材质图 / lifestyle 场景展示图 / multi_scene 多场景拼图 / ecommerce_detail 电商详情图 / size_chart 尺寸标注图 / sku_collection SKU合集 / custom 创意图。
  • 默认方案:前 7 种各 1 张;行点击切换 0↔1,± 调 0-5,「全部方案」批量开关。
  • AI 规划:请求 {product_id, texts, sku_variants, image_stats, platform, requirements}DeepSeek 输出单行 JSON {summary, items:[{kind,title,detail,prompt_hint,count,variant_name}]};服务端清洗(kind 白名单、count 钳 0-3、幻觉 SKU 丢弃绑定、截断修复)。规则:每个带图 SKU 1 张 white_bg 且绑定 variant_name;总数 8-15。
  • 规划并生成:勾选后规划完成直接进入生成。
  • SKU 规格来源:product_assetsgroup_key='sku'variant_name 去重。

4. 生成(Generate

POST /api/suite/generate
{ product_id, texts, images:[{url, group_key, variant_name}],   // 勾选的参考底图
  style_set, style_prompt, requirements, plan, platform:'ozon', model, watermark }
   → { suite_id }
  • texts 组装(前端已实现,source = product.raw + 包装字段覆盖): title(title_zh||title) / price / brand / sales / shop / params(含尺寸、重量覆盖回参数表) / selling_point / desc
  • 参考图解析(服务端,ISS 逻辑):variant_name 精确匹配 SKU 图 → 回退 main 组第 1 张;material 偏好第 2 张;最多 2 张;本地 storage 直读,远程 URL 带站点 Referer 下载,转 data-URI 进请求。
  • 提示词:按模型家族分册(alibaba 主体参考语义 / gpt edits 保真语义 / google 主体保持),共用 10 种图类型 builder + 商品上下文(参数表提炼卖点)+ 5 套风格 + requirements 置顶强制约束 + 图内文案按语言规范(俄文 ≤4 词)。
  • 任务模型:进程内内存任务表 + asyncio.Lock 全局串行队列(防中转限流);逐张生成 → Pillow 水印 → 按 PNG 魔数定扩展名落 storage重启丢任务、图片不丢(与 ISS 一致,接受)。
  • 前端轮询GET /api/suites/{id} 每 3sdone/partial/failed 终态;连续 3 次失败停止跟踪;超预算(5min/张+10min)提示。

5. 模型路由(与 ISS 一致,服务端 MODEL_PROVIDERS 表)

Provider 模型 调用
doubao(火山方舟) doubao-seedream-4-5-251128 images/generations 同步,image 传 data-URI
tongyiDashScope qwen-image-3.0-pro / wan2.7-image-pro / wan2.6-image / wan2.6-t2i qwen 同步;wan 异步 task 轮询;t2i 纯文生图
rightapi(中转) gpt-image-2 / gpt-image-2-vip / nano-banana(-2/-2-lite/-pro) POST /v1/images/generations async + 任务轮询 + 退避重试

前端下拉 10 个模型带中文特点说明,默认 gpt-image-2-vip。密钥:ARK_API_KEY / DASHSCOPE_API_KEY / RIGHTAPI_API_KEY / DEEPSEEK_API_KEY.envPhase B 接入本仓 settings)。

6. 风格与要求

  • 5 套风格(北欧极简/清新明亮/高级感深色/暖调生活/纯净棚拍)+ 每套默认提示词;风格提示词可改写(按风格 id 记忆,切风格不丢,可恢复默认)。
  • 「生图要求」文本域:最高优先级强制约束,服务端置于 prompt 最前并声明覆盖一切冲突指令。
  • 水印选项(Popover):开关 + 类型(图片徽章/文字)+ 水印文字 + 不透明度(默认关、xiongmaoyx、30%);随生成请求下发,关闭时不带字段;位置右下角;重新生成后生效。

7. 单张 AI 生图(V2.1 新增)

交互(前端已实现,AiImageGenModal.tsx):

采集图/生成图单元格 → 「AI生图」按钮
   → 弹窗:左侧原图预览;右侧要求文本域(必填)+ 模型下拉(同上 10 个)+ 生成按钮
   → POST /api/suite/image-edit { product_id, image_url, prompt, model, append: true }
   → 返回 { url },弹窗内展示结果,可下载/打开原图
   → 服务端把结果追加为 product_assets(group_key='generated', variant_name=null)
  • 与「智能修图」页(/ai-imagewanx 注解编辑)并存:本入口是轻量单张再生成(选模型 + 一句话要求),不做标注/遮罩。
  • 服务端实现 = 统一模型路由的单张调用(复用 §5 provider 层 + 参考图即传入的单图 + prompt = 用户要求 + Ozon 平台规格),生成后落 storage 并回写素材;append=false 时不回写。

8. 展示与防盗链

  • 素材展示优先 stored_url(服务端已转存,本地 /media/... 或七牛),缺失时回退 source_url 源站防盗链导致破图时走 GET /api/proxy-image?url=Phase B 提供,ISS 同款)。
  • 预览用 antd Image.PreviewGroup 画廊( ← → / Esc 与 ISS 行为一致)。

9. 导出

  • 导出 ZIP(生成结果):GET /api/suites/{id}/zip,文件名 cleanFilename(标题).zip
  • 下载采集图片POST /api/export/images {title, images:[{url, groupName, variantName, key}]},按分组建文件夹打包;
  • 前端经 blob + <a download> 落盘(非扩展环境没有 chrome.downloads)。