跳转至

主图/详情入模逻辑(当前实现)

本文说明 Canvas 主图 / 详情「一键」与「复刻」批量生图时,送给大模型的图片顺序与 Prompt 拼装约定。与桌面参考项目「主图一键生成_IT」对齐。

相关代码:

总览

flowchart TB
  ui["Canvas 上传: 产品槽 / 参考槽"]
  resolve["resolve_batch_form_reference_urls"]
  prompt["Word + 自定义槽 + 可选复刻说明 + 参考图URL块"]
  step1["镜头数大于1: 仅镜头0入队"]
  step2["Step1成功后: 其余镜头只用Step1结果图"]
  single["仅1个镜头: 直接入队"]
  worker["backend-worker 上游生图"]
  ui --> resolve --> prompt
  prompt --> step1 --> step2 --> worker
  prompt --> single --> worker

1. UI 上传 vs 入模顺序(勿混淆)

层面 含义
UI / input_images 槽位名:productreference;界面可先产品后参考
入模 image_urls 送给大模型的数组顺序;有双图时固定参考在前、产品在后

实现:resolve_batch_form_reference_urls + Step1 的 resolve_step1_model_image_urls

  • 同时有 reference + product[参考…, 产品…]
  • 一键仅产品 → Step1 自动补 Word reference_image_key(或模板样图)作为图片1,产品为图片2(对齐桌面「参考.png + 产品」)
  • 若仍只有产品 → 注入「产品仅作外观参考、构图跟 Word」说明,避免按产品原图构图

2. 图片角色约定(对齐桌面)

序号 角色 来源
图片1 版式/构图参考 input_images.reference
图片2 用户产品 input_images.product

Prompt 标签:图片1(版式参考) / 图片2(产品)COPY_MODE_ROLE_LABELS

Word 可直接写「复刻图片1、产品换成图片2」,不对图片序号做运行时对调

3. Prompt 拼装顺序

入口:enqueue_batch_item

  1. 取 Word prompt_text(或模板 prompt_snippet
  2. apply_custom_prompt_slots:替换/补全「产品是…」「材质是…」,追加 custom_other
  3. mode=copy 且双图且非 Step2:前置 COPY_MODE_INSTRUCTION(复刻图片1 / 产品用图片2)
  4. 末尾追加 【参考图URL】 + 图片N(角色): url

4. 一键 vs 复刻执行(两步链)

镜头数 > 1 时,一键与复刻均走两步(should_use_copy_two_step 仅看 image_count):

一键 auto 复刻 copy
参考图 一般不传 必传
Step1(镜头0)入图 通常仅产品 [参考, 产品]
Step2(其余镜头)入图 [Step1 结果图] [Step1 结果图]

流程:

  1. 启动时只发布镜头0;其余镜头种子写入独立 Redis key(batch:job:{id}:step2_seeds
  2. Worker 成功镜头0后 enqueue_copy_step2_after_step1(入模仅主视觉结果图 + 各镜头 Word)
  3. Step2 注入「场景延续」:锁产品/陈设/色调,但机位与景别以下文 Word 为准,允许明显换视角
  4. 镜头0 失败则 fail_pending_copy_step2

单镜头任务仍直接入队,无 Step2。

5. 不做(当前范围)

  • 不把 Admin Word 的 reference_image_key / 模板样图自动并入一键的图片1(一键仍主要靠文字构图 + 用户产品图)
  • 不改 Canvas「先上传产品」的交互顺序