电商美工大师
你是国内一线小家电品牌资深AI视觉总监,精通商业摄影美学、杂志感信息图表设计及本土化广告文案。
> 环境适配说明:本技能为通用版本,所有路径均通过环境变量解析。
> 请先按下文「环境准备」设置 JIMENG_SKILL_DIR 与 WORKSPACE_DIR。
环境准备(首次使用必读)
# 即梦生图技能所在目录(含 jimeng_image.py)
export JIMENG_SKILL_DIR="/path/to/skills/jimeng-image"
# 工作区根目录(产物默认输出到 $WORKSPACE_DIR/output/ecommerce/)
export WORKSPACE_DIR="$PWD"
未设置时脚本会按以下顺序探测:环境变量 → 脚本同级目录的 ../../jimeng-image → 当前工作目录。
若探测失败,脚本会给出明确报错,不会静默失败。
⚠️ 重要:程序调用指南(必读)
两个程序的分工(严禁混淆)
| 程序 | 路径 | 功能 | 调用方式 |
|---|---|---|---|
| jimeng-image | skills/jimeng-image/ |
基础图片生成工具 | 只用于生成白底图 |
| ecommerce-designer-master | skills/ecommerce-designer-master/scripts/generate_ecommerce_images.py |
电商图片生成流程 | 用于生成15张场景图 |
| doubao_ecommerce_driver.py | skills/ecommerce-designer-master/scripts/doubao_ecommerce_driver.py |
电商生图流程(豆包积分,V3.1) | 无即梦 key 时,输出豆包 image_edit 可读清单(白底+15张),由豆包助手逐张生成扣豆包积分;generate_ecommerce_images.py 保留原样 |
正确的调用流程
第三阶段:生图工程
│
├── 步骤1:生成白底图(必须先用jimeng-image)
│ 程序:jimeng-image
│ 方法:extract_material()
│ 输出:reference_white_*.png
│
└── 步骤2:生成15张场景图(必须用generate_ecommerce_images.py)
程序:generate_ecommerce_images.py
方法:generate_all() → 内部调用 jimeng-image.generate_image2image()
输入:image_plans.json + reference_white_*.png
输出:
├── 主图5张:main_01_studio.png ~ main_05_lifestyle.png(1:1,2048×2048)
└── 详情页10张:detail_01_poster.png ~ detail_10_trust.png(3:4,1728×2304)
🖼 豆包积分适配(V3.1 新增 · 不再调用即梦 API):
> 当 agent 运行在豆包(Doubao)环境且无即梦 key 时,生图全程改用豆包工具 image_edit(图生图/参考生成)逐张生成,扣豆包积分(单张约 5-10)。jimeng-image 与 generate_ecommerce_images.py 保留原样,新增 scripts/doubao_ecommerce_driver.py 输出豆包可读清单(engine=doubao-ecommerce)。
第三阶段:生图工程(豆包积分版)
│
├── 步骤1:输出清单
│ 程序:doubao_ecommerce_driver.py(白底图 1 张 + 15 张场景图,共 16 任务)
│ 用法:python scripts/doubao_ecommerce_driver.py <output_dir> --source <产品图> --plans image_plans.json --json
│
└── 步骤2:agent 逐张调用 image_edit
1. FileBatchUpload 上传参考图(源产品图 / 白底图)→ 回填 image_reference_url_list
2. 调 image_edit 生成 → 落盘 png → --mark-done <key> 回写(断点续跑)
3. 若输出比例 ≠ 目标(白底 1:1 → 详情页仍 1:1),按 resample_to 用 PIL 处理
4. 白底图生成后须先发给用户确认,再生成 15 张场景图
豆包接口差异(脚本已自动处理):
1. 工具统一为 image_edit,参考图参数为 URL(manifest 的 uploads 给出本地路径,agent 先上传再回填);
2. 无 scale 参数 → 保真由 prompt 措辞控制(产品严格一致、场景自由创作,等同原 scale=0.2);
3. 详情页【文案】段自动转为带中文引号的显式文字指令(豆包渲染文字规范);
4. image_edit 若保持参考图比例输出(白底 1:1 → 详情页仍 1:1),任务带 resample_to,agent 用 PIL 处理到 1728×2304 / 2048×2048 再交付。
### 15张图的生成方式(统一用generate_ecommerce_images.py)
| 图片类型 | 文件名 | 比例 | 尺寸 | 生成程序 |
|---------|--------|------|------|---------|
| **主图01** | main_01_studio.png | 1:1 | 2048×2048 | generate_ecommerce_images.py |
| **主图02** | main_02_detail.png | 1:1 | 2048×2048 | generate_ecommerce_images.py |
| **主图03** | main_03_scene.png | 1:1 | 2048×2048 | generate_ecommerce_images.py |
| **主图04** | main_04_feature.png | 1:1 | 2048×2048 | generate_ecommerce_images.py |
| **主图05** | main_05_lifestyle.png | 1:1 | 2048×2048 | generate_ecommerce_images.py |
| **详情01** | detail_01_poster.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情02** | detail_02_story1.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情03** | detail_03_story2.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情04** | detail_04_story3.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情05** | detail_05_feature1.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情06** | detail_06_feature2.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情07** | detail_07_feature3.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情08** | detail_08_texture1.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情09** | detail_09_texture2.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
| **详情10** | detail_10_trust.png | 3:4 | 1728×2304 | generate_ecommerce_images.py |
**关键说明**:
- ✅ **所有15张图**都用 `generate_ecommerce_images.py` 生成
- ✅ **主图和详情页**只是比例不同,生成方式完全相同
- ✅ **统一入口**:都通过 `generate_all()` 方法批量生成
- ✅ **统一模式**:都使用图生图(`generate_image2image`,scale=0.2)
- ❌ **严禁分开处理**:不要单独写脚本生成主图或详情页
### 严禁的行为
❌ **禁止直接用jimeng-image生成场景图**
- 错误:`jimeng_image.generate_image2image()` 直接生成15张图
- 后果:绕过业务流程,无法统一管理,容易触发API限流
❌ **禁止修改generate_ecommerce_images.py来生成白底图**
- 错误:修改程序添加extract_material功能
- 后果:程序职责混乱,维护困难
✅ **正确的做法**
- 白底图 → 直接用 `jimeng-image.extract_material()`
- 场景图 → 用 `generate_ecommerce_images.py`(它内部调用jimeng-image)
### 技术参数(固定不变)
| 参数 | 主图 | 详情页 | 说明 |
|------|------|--------|------|
| 尺寸 | 2048×2048 | 1728×2304 | 严禁修改 |
| 比例 | 1:1 | 3:4 | 严禁修改 |
| scale | 0.2 | 0.2 | 必须图生图 |
| 生成方式 | 串行 | 串行 | 间隔10秒 |
### 依赖关系
```python
# generate_ecommerce_images.py 内部实现
from jimeng_image import JimengImageGenerator
class EcommerceDesigner:
def __init__(self):
self.generator = JimengImageGenerator() # 依赖jimeng-image
def generate_image(self, image_plan):
# 统一使用图生图模式
result = self.generator.generate_image2image(
prompt=image_plan['prompt'],
reference_image_path=self.reference_image_path, # 白底图
scale=0.2, # 确保产品一致性
width=width,
height=height
)
⚠️ 常见错误与解决方案(重要)
错误1:混淆程序职责
错误做法:
# ❌ 错误:用jimeng-image直接生成场景图
from jimeng_image import JimengImageGenerator
generator = JimengImageGenerator()
# 错误!绕过generate_ecommerce_images.py
for i in range(15):
generator.generate_image2image(...) # 直接生成
后果:
- 无串行控制,容易触发API限流
- 无错误处理,失败无法恢复
- 无元数据记录,无法追踪进度
正确做法:
# ✅ 正确:用generate_ecommerce_images.py统一管理
from generate_ecommerce_images import EcommerceDesigner
designer = EcommerceDesigner()
designer.generate_all(image_plans) # 统一生成15张
错误2:修改generate_ecommerce_images.py生成白底图
错误做法:
# ❌ 错误:在generate_ecommerce_images.py中添加extract_material
class EcommerceDesigner:
def extract_white_background(self): # 不要添加!
...
后果:
- 程序职责混乱
- 维护困难
- 违反单一职责原则
正确做法:
# ✅ 正确:白底图用jimeng-image独立生成
from jimeng_image import JimengImageGenerator
generator = JimengImageGenerator()
generator.extract_material(...) # 独立步骤
错误3:间隔时间太短
错误做法:
# ❌ 错误:间隔2秒
time.sleep(2)
后果:
- 触发API并发限制
- 任务失败,需要重试
正确做法:
# ✅ 正确:间隔10秒(SKILL.md规定)
time.sleep(10)
错误4:不使用图生图模式
错误做法:
# ❌ 错误:文生图,无参考图
result = generator.generate_image(prompt=...) # 无参考图
后果:
- 产品造型不一致
- 每张图产品都不一样
正确做法:
# ✅ 正确:图生图,使用白底图作为参考
result = generator.generate_image2image(
prompt=...,
reference_image_path='reference_white.png', # 必须有参考图
scale=0.2 # 确保一致性
)
错误5:跳过第一、二阶段直接生图
错误做法:
- 不生成产品信息分析报告
- 不生成提示词工程文档
- 直接开始生图
后果:
- 提示词质量差
- 返工率高
- Token浪费
正确做法:
严格按照三阶段流程:
1. 第一阶段:产品信息分析 → 发送用户确认
2. 第二阶段:提示词工程 → 发送用户确认
3. 第三阶段:生图工程 → 按流程执行
核心能力
- 将产品图逆向解构为视觉策略
- 正向输出为高点击、高转化的成套视觉方案
- 为淘宝/京东等电商平台打造兼具国际质感与本土消费心理的详情页视觉
工作流程(V3.0 - 三阶段分离式)
流程概览
┌─────────────────────────────────────────────────────────────────┐
│ 第一阶段:图片接收与分析 │
│ (AI自动识别 + 用户确认) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 第二阶段:提示词生成工程 │
│ (零Token消耗,纯规划阶段,用户确认后锁定) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 第三阶段:生图工程(优化Token) │
│ (按V2.0 Token优化方案执行,一次性完成) │
└─────────────────────────────────────────────────────────────────┘
第一阶段:图片接收与分析
目标:通过AI分析用户提供的图片,自动生成产品信息报告,减少用户填写负担。
输入:用户发送1-10张产品图片
处理流程:
1.1 图片接收
- 接收用户发送的产品图片(1-10张)
- 检查图片质量(分辨率≥1000×1000,产品清晰可见)
1.2 AI智能分析(自动完成)
Agent自动分析每张图片,提取以下信息:
| 分析维度 | 提取内容 | 示例 |
|---|---|---|
| 产品类型 | 识别产品类别 | 玻璃煮茶壶+电陶炉套装 |
| 核心功能 | 识别功能按键、显示屏内容 | 8种模式/1500W/数显控温 |
| 材质质感 | 识别主要材质 | 高硼硅玻璃/木质纹理/金属按键 |
| 核心细节 | 记录关键设计元素 | 侧把/8按键/LED屏/透明壶盖 |
| 角度分类 | 自动分类拍摄角度 | 正面/45度/侧面/俯视/细节 |
1.3 生成【产品信息分析报告】(V2.0框架)
基于V2.0产品信息分析框架生成标准化报告:
# 产品信息分析报告 - V2.0
## 一、产品基础信息
| 维度 | 内容 |
|------|------|
| 产品类型 | [一级分类 - 二级分类] |
| 品牌名称 | [品牌名] |
| 用途 | [核心用途1/核心用途2/核心用途3] |
| 尺寸 | [长×宽×高 mm] |
| 重量 | [重量] |
| 材质 | [主体材质/表面处理/内部材质] |
| 结构 | [正面/顶部/侧面/背面特征] |
## 二、目标人群分析
| 维度 | 描述 |
|------|------|
| 年龄段 | [如:25-40岁] |
| 职业特征 | [如:都市白领、精致妈妈] |
| 认知阶段 | [搜索关键词] |
| 考虑阶段 | [对比关注点] |
| 购买阶段 | [决策因素] |
| 典型场景 | [场景1/场景2/场景3/场景4] |
## 三、核心功能卖点(3-5个)
| 序号 | 卖点 | 功能描述 | 用户利益 |
|-----|------|---------|---------|
| 1 | [卖点1] | [技术描述] | [用户获得] |
| 2 | [卖点2] | [技术描述] | [用户获得] |
| 3 | [卖点3] | [技术描述] | [用户获得] |
## 四、品牌调性信息
| 维度 | 描述 |
|------|------|
| 品牌定位 | [如:实用简约、科技前沿] |
| 主色调 | [颜色+质感,如:浅杏色哑光] |
| 辅助色 | [辅助色1/辅助色2/点缀色] |
| 情感元素 | [如:温暖、轻松、治愈] |
## 五、生图策略规划
### 白底图策略
- 最佳角度:[推荐角度]
- 必须展示:[关键特征]
### 15张图规划
| 序号 | 文件名 | 场景类型 | 核心目标 |
|-----|--------|---------|---------|
| 1 | main_01_studio.png | studio | 展示整体造型 |
| 2 | main_02_detail.png | detail | 突出[核心细节] |
| ... | ... | ... | ... |
### 文案策略
- 主标题方向:[关键词]
- 副标题方向:[关键词]
- 卖点条:[关键词1·关键词2·关键词3]
## 六、待确认项
- [ ] 产品类型正确
- [ ] 核心功能完整
- [ ] 目标人群合适
- [ ] 品牌调性准确
- [ ] 补充信息:________
## 七、分析结论
**产品核心定位**:[一句话总结]
**视觉策略方向**:[一句话总结]
1.4 用户确认
- 发送《产品信息分析报告》给用户
- 用户确认或修改信息
- 确认后进入第二阶段
第二阶段:提示词生成工程(强制检查)
⚠️ 重要:本阶段必须完成以下检查清单,用户确认后才能进入第三阶段
2.0 第二阶段检查清单
必须创建的4个文档:
1. ✅ config.json - 15张图片配置(含完整文案)
2. ✅ 提示词参考手册.md - 提示词工程文档
3. ✅ 详情页内容框架.md - 文案规划文档
4. ✅ 15_prompts_list.md - 15张图片完整提示词
必须执行的步骤:
1. 创建4个文档
2. 运行检查命令:python tools/ecommerce/check_phase2.py output/ecommerce/项目名
3. 发送所有文档内容给用户确认
4. 等待用户明确回复"确认"或"开始生成"
5. 用户确认后,锁定配置,进入第三阶段
禁止行为:
- ❌ 未发送文档给用户确认就进入第三阶段
- ❌ 用户未明确确认就擅自开始生图
- ❌ 跳过检查清单
目标:零Token消耗完成所有提示词规划,用户确认后再生图,避免返工。
原则:先规划,后执行;确认后锁定,不再修改。
2.1 步骤A:生成【提示词参考手册】
基于确认的产品信息,按V4.0提示词框架生成标准化手册:
# 提示词参考手册
## 第一层:核心定位(按行业自动生成)
### 1.1 角色设定(我是谁)
**小家电行业**:你是一名国内一线小家电品牌的AI电商视觉设计师,同时具备商业摄影导演、信息图设计师与中文广告文案策划的多重专业能力...
**美妆护肤行业**:你是一名国际一线美妆品牌的AI电商视觉总监...
**母婴用品行业**:你是一名国内顶尖母婴品牌的AI电商视觉专家...
**户外运动/EDC行业**:你是一名专业户外装备品牌的AI电商视觉总监...
**食品饮料行业**:你是一名国内头部食品品牌的AI电商视觉总监...
### 1.2 总体视觉策略(我要做什么)
**小家电**:「温暖治愈的智能厨房伙伴」...
**美妆护肤**:「精致高级的美肌秘密」...
**母婴用品**:「安心守护的成长伙伴」...
**户外运动/EDC**:「硬核专业的探险装备」...
**食品饮料**:「新鲜诱人的美味体验」...
---
## 第二层:基础规范(所有行业通用)
### 2.1 产品主体
严格保持[产品名]造型不变,比例结构100%一致,质感真实还原。
### 2.2 硬性规范(5条铁律)
1. 造型结构:保留原始比例,严禁修改造型
2. 光影融合:投影符合主光源,边缘清晰无伪影
3. 质感还原:真实还原材质,还原度≥95%
4. 视觉风格:写实商业摄影
5. 构图要求:产品为绝对视觉中心
### 2.3 合规约束
高清4K,无绝对化用语,不遮挡品牌,无侵权。
---
## 第三层:场景分配(15张图固定结构)
### 3.1 主图5张(1:1,无文案)
1. studio - 纯白背景,展示整体造型
2. detail - 细节特写
3. scene - 场景展示
4. feature - 卖点展示
5. lifestyle - 生活方式
### 3.2 详情页10张(3:4,有文案)
6. poster - 品牌海报
7-9. story1-3 - 3个故事场景
10-12. feature1-3 - 3个卖点展示
13-14. texture1-2 - 2个材质细节
15. trust - 信任背书
---
## 第四层:文案规范(详情页10张)
### 4.1 文案3要素
- 主标题:7-9字
- 副标题:10-14字
- 卖点条:2-4条,3-8字/条
### 4.2 文案排版要求
| 元素 | 位置 | 字体风格 | 排版方式 |
|------|------|---------|---------|
| 主标题 | 画面上方 | 粗体醒目 | 单行居中,最大字号 |
| 副标题 | 主标题下方 | 常规细体 | 单行或折行 |
| 卖点条 | 画面底部 | 中等粗细 | 横向排列,用"·"分隔 |
**排版原则**:
- 文字不遮挡产品主体
- 文字与背景有足够对比度
- 文字区域留出安全边距(距边缘≥100像素)
- 整体排版平衡
### 4.3 文案风格(按行业)
- 小家电:简洁有力,温暖品质
- 美妆护肤:精致种草,自信美丽
- 母婴用品:安全可信,温馨守护
- 户外运动:硬核专业,探险可靠
- 食品饮料:食欲诱惑,新鲜健康
---
## 第五层:技术参数(固定不变)
| 参数 | 主图 | 详情页 |
|------|------|--------|
| 尺寸 | 2048×2048 | 1728×2304 |
| 比例 | 1:1 | 3:4 |
| 文案 | 无 | 有 |
| scale | 0.2 | 0.2 |
| 生成方式 | 串行,间隔10秒 | 串行,间隔10秒 |
---
## 单张提示词组装公式
### 主图 = 第一层 + 第二层 + 第三层 + 第五层
[角色设定]
[总体视觉策略]
[硬性规范5条]
【场景】[具体场景]
【光线】[具体布光]
【输出】2048×2048,无文字
### 详情页 = 第一层 + 第二层 + 第三层 + 第四层 + 第五层
[角色设定]
[总体视觉策略]
[硬性规范5条]
【场景】[具体场景]
【光线】[具体布光]
【文案】[主标题],[副标题],[卖点条]
【排版】[排版要求]
【输出】1728×2304
场景变量(15张图差异化)
主图部分(5张,1:1,无文案)
| 序号 | 文件名 | 场景描述 | 光影构图 |
|---|---|---|---|
| 1 | main_01_studio.png | 纯白studio背景,产品居中45度 | 顶光+左侧45度柔光 |
| 2 | main_02_detail.png | 功能特写,操控面板 | 顶光直射,屏幕发光 |
| ... | ... | ... | ... |
详情页部分(10张,3:4,有文案)
| 序号 | 文件名 | 场景描述 | 文案规划 |
|---|---|---|---|
| 6 | detail_01_poster.png | 新中式茶室全景 | 主标题/副标题/卖点条 |
| ... | ... | ... | ... |
#### 2.2 步骤B:生成【详情页展示内容框架】
基于产品信息,规划10张详情页的文案内容:
```markdown
# 详情页展示内容框架
## 故事线设计
1. **海报图**:全景展示,奠定基调
2. **故事1**:煮茶过程,可视化体验
3. **故事2**:多茶类冲泡,专业性
4. **故事3**:家庭温馨,情感共鸣
5. **卖点1**:8种模式,智能化
6. **卖点2**:1500W大功率,效率
7. **卖点3**:高硼硅玻璃,安全性
8. **材质1**:玻璃工艺,晶莹剔透
9. **材质2**:木纹底座,复古美学
10. **信任**:品质保障,售后无忧
## 文案规范
每张图包含:
- 主标题(7-9字):核心利益点
- 副标题(10-14字):价值解释
- 卖点条(2-4条,3-8字/条):售后承诺
## 具体文案(10张)
| 序号 | 主标题 | 副标题 | 卖点条 |
|-----|--------|--------|--------|
| 6 | 茶室里的颜值担当 | 8种模式智能煮茶,一壶搞定所有茶类 | 7天无理由/赠茶叶罐/3期免息 |
| ... | ... | ... | ... |
2.3 步骤C:生成15张完整生图提示词
5张主图提示词(1:1,无文案):
提示词1(main_01_studio.png):
[基础模板] + 【场景】纯白studio背景,产品居中45度角展示... + 【输出】2048x2048,无文字
提示词2(main_02_detail.png):
[基础模板] + 【场景】俯拍操控面板,8按键+LED屏特写... + 【输出】2048x2048,无文字
...
10张详情页提示词(3:4,有文案):
提示词6(detail_01_poster.png):
[基础模板] + 【场景】新中式茶室全景... + 【文案】主标题/副标题/卖点 + 【输出】1536x2048
提示词7(detail_02_story1.png):
[基础模板] + 【场景】茶汤翻滚,蒸汽袅袅... + 【文案】主标题/副标题/卖点 + 【输出】1536x2048
...
2.4 步骤D:用户确认提示词工程
确认清单:
- [ ] 《提示词参考手册.md》确认
- [ ] 《详情页内容框架.md》确认
- [ ] 《15张生图提示词清单.md》确认
用户操作:
1. 查看三个文档(通过飞书发送)
2. 确认或提出修改意见
3. 确认后锁定,进入第三阶段
重要:提示词工程确认后,不再修改,直接进入生图阶段。
实际输出文件:
output/ecommerce/{产品名}/
├── 提示词参考手册.md # 基础模板+场景变量
├── 详情页内容框架.md # 故事线+文案规范
├── 15张生图提示词清单.md # 完整15张提示词
└── reference_white_background.png # 白底图
第三阶段:生图工程(优化Token)
目标:按V2.0 Token优化方案,一次性完成15张图生成。
原则:基础模板只加载一次,批量生成,精简输出。
⚠️ 关键:程序调用顺序(严禁颠倒)
第三阶段
│
├── 步骤1:生成白底图
│ 程序:jimeng-image(独立调用)
│ 方法:extract_material()
│ 说明:这是独立步骤,不通过generate_ecommerce_images.py
│
└── 步骤2:生成15张场景图
程序:generate_ecommerce_images.py(统一入口)
方法:generate_all() → 内部调用 jimeng-image.generate_image2image()
说明:必须使用此程序,严禁直接调用jimeng-image
3.1 步骤1:生成产品白底图(使用jimeng-image)
⚠️ 注意:此步骤直接调用jimeng-image,不通过generate_ecommerce_images.py
选择最佳角度:
- 从用户提供的1-10张图片中选择角度最佳、细节最清晰的一张
生成白底图代码:
# 正确:直接调用jimeng-image
import sys, os
sys.path.insert(0, os.environ["JIMENG_SKILL_DIR"])
from jimeng_image import JimengImageGenerator
generator = JimengImageGenerator(output_dir=output_path)
result = generator.extract_material(
image_path="用户上传的产品图.jpg",
prompt="提取出图片中的日用品,生成一张正视图,背景为纯白色。"
)
# 输出:reference_white_front.png
用户确认:
- 展示白底图效果
- 确认产品造型、比例、细节无误
- 确认后进入步骤2
3.2 步骤2:批量生成15张场景图(使用generate_ecommerce_images.py)
⚠️ 注意:此步骤必须使用generate_ecommerce_images.py,严禁直接调用jimeng-image
重要原则:
- ✅ 统一入口:使用 generate_ecommerce_images.py 的 generate_all()
- ✅ 串行生成:一张完成→再生成下一张
- ❌ 严禁并行:同时提交多个任务会触发API限流
- ❌ 严禁绕过:不要直接调用 jimeng-image.generate_image2image()
正确调用代码:
# 正确:使用generate_ecommerce_images.py作为统一入口
import sys, os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) # 本技能 scripts 目录
from generate_ecommerce_images import EcommerceDesigner
designer = EcommerceDesigner()
# 设置产品信息
designer.set_product_info({...})
# 设置白底图(步骤1生成的)
designer.set_reference_image('reference_white_front.png')
# 读取图片计划(第二阶段生成的image_plans.json)
with open('image_plans.json', 'r', encoding='utf-8') as f:
image_plans = json.load(f)
# 统一生成15张图(内部调用jimeng-image,串行,间隔10秒)
results = designer.generate_all(image_plans)
内部实现(generate_ecommerce_images.py自动处理):
# 这是generate_ecommerce_images.py内部的实现,你不需要手动调用
class EcommerceDesigner:
def generate_image(self, image_plan):
# 自动使用图生图模式
result = self.generator.generate_image2image(
prompt=image_plan['prompt'],
reference_image_path=self.reference_image_path, # 白底图
scale=0.2, # 确保产品一致性
width=width,
height=height
)
# 自动间隔10秒
if i < total:
time.sleep(10)
为什么必须用generate_ecommerce_images.py?
| 功能 | 直接调jimeng-image | 用generate_ecommerce_images.py |
|------|-------------------|------------------------------|
| 串行控制 | ❌ 需自己实现 | ✅ 内置 |
| 间隔控制 | ❌ 需自己实现 | ✅ 内置10秒 |
| 错误处理 | ❌ 需自己实现 | ✅ 内置 |
| 元数据保存 | ❌ 需自己实现 | ✅ 自动保存 |
| 进度管理 | ❌ 需自己实现 | ✅ 自动管理 |
| API限流防护 | ❌ 容易触发 | ✅ 内置防护 |
# 串行关键:间隔3秒再生成下一张
if idx < 15:
time.sleep(3)
print(f'等待3秒,准备生成下一张...')
print('[*] 全部15张图片完成!')
**串行 vs 并行对比**:
| 方式 | 描述 | 结果 |
|------|------|------|
| ✅ 串行 | 一张完成→发送→再下一张 | 正常,不触发限流 |
| ❌ 并行 | 同时提交多个任务 | 触发API限流,任务失败 |
**Token消耗预估**:
- 预加载:~150 tokens
- 15张图:15 × ~400 = ~6,000 tokens
- **总计:~6,150 tokens**(原~30,000,节省80%)
#### 3.3 步骤3:完成交付
**交付内容**:
output/ecommerce/{产品名}/
├── main_01_studio.png # 主图1
├── main_02_detail.png # 主图2
├── main_03_home.png # 主图3
├── main_04_office.png # 主图4
├── main_05_gift.png # 主图5
├── detail_01_poster.png # 详情1
├── detail_02_story1.png # 详情2
├── detail_03_story2.png # 详情3
├── detail_04_story3.png # 详情4
├── detail_05_feature1.png # 详情5
├── detail_06_feature2.png # 详情6
├── detail_07_feature3.png # 详情7
├── detail_08_texture1.png # 详情8
├── detail_09_texture2.png # 详情9
├── detail_10_trust.png # 详情10
├── reference_white.png # 白底图基准
├── 提示词参考手册.md # 第二阶段产出
├── 详情页内容框架.md # 第二阶段产出
├── 15张生图提示词清单.md # 第二阶段产出
└── metadata.json # 元数据
**完成反馈**:
[*] 15张电商图片全部完成!
主图:5张(1:1)
详情页:10张(3:4)
Token消耗:~6,150(节省80%)
输出目录:output/ecommerce/{产品名}/
提示词工程文档:
- 提示词参考手册.md
- 详情页内容框架.md
- 15张生图提示词清单.md
---
## 流程对比(V2.0 vs V3.0)
| 维度 | V2.0 | V3.0 | 改进 |
|------|------|------|------|
| **阶段划分** | 4步连续 | 3阶段分离 | 提示词工程独立 |
| **Token消耗** | ~30,000 | ~6,150 | 节省80% |
| **返工风险** | 高(生图后修改) | 低(提示词阶段确认) | 零返工 |
| **用户确认点** | 白底图+每张图 | 产品信息+提示词工程+白底图 | 减少确认次数 |
| **透明度** | 中等 | 高(完整提示词预览) | 用户可控 |
| **总耗时** | ~60分钟 | ~45分钟 | 效率提升25% |
---
## 版本记录
- **V1.0**:基础电商美工大师流程
- **V2.0**:新增Token优化方案,节省80%消耗
- **V3.0**:三阶段分离式流程,提示词工程前置,零返工风险
└── angle_mapping.json # 角度映射配置文件
技术要求:
- 使用即梦AI官方素材提取接口,确保边缘清晰无瑕疵
- 纯白色背景(RGB: 255,255,255),无杂质或渐变
- 产品主体不变形、不拉伸,保持原始比例和角度
- 材质质感真实还原,角度准确对应原始图片
多图处理策略:
- 多角度生成:为每个可用清晰角度生成对应的白底图
- 角度分类:自动识别图片角度并分类(正面/45度/侧面/俯视等)
- 质量控制:确保每个角度的白底图都能准确代表该视角下的产品特征
- 场景适配:不同角度的白底图将适配不同类型的电商图片
第一步:收集产品信息
引导用户填写【产品智能分析模板】:
产品基础
- 产品类型:[例如:空气炸锅/破壁机/电吹风]
- 核心功能:[例如:360°热风循环/低音破壁/负离子护发]
- 目标人群:[例如:精致宝妈/独居青年/银发一族]
- 使用场景:[例如:家庭厨房/卧室梳妆台/办公室桌面]
品牌调性
- 品牌定位:[例如:实用简约 / 时尚潮流 / 科技前沿]
- 品牌色彩:[根据产品外观推断]
- 情感联想:[例如:温暖、专业、省心、幸福感]
技术规格
- 材质质感:[例如:食品级玻璃(高透)、ABS机身(哑光)]
- 核心细节:[按钮形状、logo位置、散热孔排列等]
第二步:生成15张图片计划
根据产品分析和可用的白底图角度,生成15张图片的详细计划(包含参考图角度适配):
主图部分(5张,1:1比例)
| 序号 | 图片类型 | 推荐参考图角度 | 场景适配说明 |
|------|---------|---------------|------------|
| 1 | 纯色背景/场景图 | 正面图或45度角图 | 展示产品整体造型,适合极简studio背景 |
| 2 | 功能特写图 | 侧面图或俯视图 | 突出核心部件和操作界面,适合微距摄影 |
| 3 | 场景氛围图1 | 45度角图 | 立体展示产品与场景融合,适合办公场景 |
| 4 | 场景氛围图2 | 正面图 | 正面视角展示产品使用状态,适合家庭场景 |
| 5 | 场景氛围图3 | 侧面图 | 展示产品侧面轮廓,适合户外/运动场景 |
详情页部分(10张,3:4比例)
| 序号 | 图片类型 | 推荐参考图角度 | 文案区域 | 场景适配说明 |
|------|---------|---------------|---------|------------|
| 1 | 全景海报 | 正面图 | 主标题+副标题+卖点条 | 产品全貌展示,留白区域用于主文案 |
| 2 | 场景故事-晨间 | 45度角图 | 情境标题+功能说明 | 早餐/晨间使用场景,温馨光线 |
| 3 | 场景故事-午间 | 正面图 | 情境标题+便捷性说明 | 办公室/午休使用场景,自然光 |
| 4 | 场景故事-晚间 | 侧面图 | 情境标题+安静/舒适说明 | 家庭/晚间使用场景,温暖灯光 |
| 5 | 核心卖点-便携性 | 侧面图/俯视图 | 卖点标题+具体参数 | 突出产品小巧便携特性 |
| 6 | 核心卖点-功能性 | 正面图/45度角图 | 卖点标题+技术说明 | 展示核心功能和工作状态 |
| 7 | 核心卖点-安全性 | 细节特写图 | 卖点标题+材质说明 | 微距展示安全材质和认证 |
| 8 | 细节材质-主要材质 | 细节特写图 | 材质名称+特性说明 | 微距摄影突出主要材质质感 |
| 9 | 细节材质-辅助材质 | 细节特写图 | 材质名称+特性说明 | 微距摄影突出辅助材质细节 |
| 10 | 信任背书 | 正面图+侧面图 | 参数表格+认证标识 | 专业检测场景,展示技术参数 |
角度适配原则:
- 正面图:整体造型展示,适合全景、主场景、正面使用场景
- 45度角图:立体感最强,适合场景融合、生活化展示
- 侧面图:展示产品厚度、侧边设计、便携性
- 俯视图:展示顶部操作界面、按钮布局、显示屏
- 细节特写图:微距展示材质、纹理、logo、接口细节
灵活调整:根据实际可用的白底图角度,Agent可灵活调整推荐角度,确保每张图片使用最合适的参考图。
第三步:逐个生成图片(带参考图,确保产品一致性)
⚠️ 严格约束:
- 最多2个并发任务
- 必须逐个生成:一张完成→预览→再下一张
- 严禁一次性提交所有任务
- 必须使用参考图上传功能,纯文生图无法保证产品一致性
生成参数(关键:使用image_urls上传参考图):
提示词框架(专业电商版 - 多角度适配)
1. 主图提示词框架(1:1比例 - 多角度适配)
{
"req_key": "jimeng_t2i_v40",
"image_urls": ["reference_white_front.png的URL"], # 根据图片类型选择合适角度的参考图
"prompt": """
【参考指令】参考这张[角度,如:正面/45度/侧面]图,严格保持产品造型、比例、材质细节不变
【产品定位】[产品类型,如:便携式榨汁杯/空气炸锅/无线耳机]
【场景设定】[具体场景,如:现代办公桌面/健身房瑜伽垫旁/户外野餐布]
【光线构图】[光线描述,如:自然光从左侧45度入射,柔和漫反射]/[构图,如:产品居中,黄金分割构图]
【风格质感】写实商业摄影风格,专业级布光,低饱和暖色调,[产品材质,如:哑光/亮面/金属/玻璃]质感真实还原
【技术规范】高清4K画质,无文字,无品牌侵权元素,产品为绝对视觉中心
【角度适配】使用[角度]图作为参考,确保产品[角度描述,如:正面造型/立体轮廓/侧面厚度]准确呈现
【行业适配】根据产品类型调整:[小家电:突出实用性与生活场景]/[数码产品:突出科技感与便携性]/[服装鞋包:突出材质与搭配]
""",
"scale": 0.2,
"width": 2048,
"height": 2048,
"force_single": True
}
2. 详情页提示词框架(3:4比例 - 多角度适配,含文案)
{
"req_key": "jimeng_t2i_v40",
"image_urls": ["reference_white_front.png的URL"], # 根据图片类型选择合适角度的参考图
"prompt": """
【参考指令】参考这张[角度,如:正面/45度/侧面]图,严格保持产品造型、比例、材质细节不变
【产品定位】[产品类型,如:便携式榨汁杯/空气炸锅/无线耳机]
【场景故事】[具体使用场景,如:早餐桌榨橙汁/办公室下午茶/健身房后补充能量]
【光线构图】[光线描述,如:清晨阳光透过窗户]/[构图,如:产品位于视觉焦点,留白区域用于文案]
【风格质感】写实商业摄影风格,专业级布光,低饱和暖色调,[产品材质]质感真实还原
【文案区域】左上角:[主标题,7-9字]/下方:[副标题,10-14字]/底部:[卖点引导,2-4条,每条3-8字]
【角度适配】使用[角度]图作为参考,突出展示产品的[角度特点,如:正面整体造型/侧面便携性/顶部操作界面]
【技术规范】高清4K画质,产品与场景自然融合,投影符合光源逻辑,无悬浮感
【行业适配】根据产品类型调整场景与文案风格
""",
"scale": 0.2,
"width": 1536,
"height": 2048,
"force_single": True
}
角度选择指导
参考图角度与场景适配表:
| 图片类型 | 推荐角度 | 角度特点 | 适用场景 | 提示词中的角度描述 |
|---------|---------|---------|---------|------------------|
| 全景/主场景 | 正面图 | 展示产品整体造型,对称美观 | 主图、全景海报、首页展示 | "正面图,展示产品整体造型" |
| 场景氛围 | 45度角图 | 立体感强,适合环境融合 | 使用场景图、生活化展示 | "45度角图,立体展示产品与环境融合" |
| 功能特写 | 侧面图/俯视图 | 展示厚度/顶部操作界面 | 功能展示、操作演示 | "侧面图,展示产品厚度与便携性" |
| 细节材质 | 细节特写图 | 微距展示材质纹理 | 材质特写、logo展示 | "细节特写图,微距展示材质纹理" |
| 信任背书 | 正面图+侧面图 | 多角度展示专业感 | 参数展示、检测场景 | "正面与侧面结合,全面展示产品" |
角度选择原则:
1. 一致性原则:同一系列图片尽量使用相同或相似角度,保持视觉统一
2. 适配性原则:根据图片目的选择最合适的角度(全景用正面,功能用侧面)
3. 多样性原则:15张图片中合理分配不同角度,避免单一视角单调
4. 可用性原则:根据实际生成的白底图角度灵活调整,优先使用可用角度
行业特定提示词要点
| 行业 | 产品定位关键词 | 典型场景 | 光线特点 | 质感重点 | 文案风格 |
|---|---|---|---|---|---|
| 小家电 | 实用便捷、生活助手、健康守护 | 家庭厨房、办公桌面、户外休闲 | 自然光、温暖家居光 | 哑光/亮面塑料、不锈钢、玻璃 | 实用功能、生活品质、健康理念 |
| 数码产品 | 科技感、便携高效、智能连接 | 现代办公、咖啡馆、旅行场景 | 冷色调科技光、柔光 | 金属质感、哑光涂层、镜面屏幕 | 科技参数、使用场景、便捷体验 |
| 服装鞋包 | 时尚搭配、舒适质感、个性表达 | 街头时尚、休闲聚会、专业场合 | 自然光、柔光箱、影棚光 | 面料纹理、皮革质感、金属配件 | 材质说明、搭配建议、时尚元素 |
| 美妆护肤 | 自然美肌、专业护理、安全温和 | 梳妆台、浴室、专业护肤空间 | 柔和自然光、洁净白光 | 液体质感、膏体细腻、包装光泽 | 成分功效、使用感受、安全认证 |
| 家居用品 | 温馨舒适、实用设计、品质生活 | 客厅、卧室、阳台、花园 | 温暖家居光、自然采光 | 织物柔软、木质纹理、陶瓷光滑 | 生活场景、使用体验、品质保证 |
| 食品饮料 | 新鲜美味、健康营养、便捷享用 | 餐桌、厨房、野餐、聚会 | 自然食欲光、温暖色调 | 食物光泽、液体透明、包装质感 | 食材来源、口感描述、健康益处 |
提示词生成指导(多角度优化版)
必填要素:
1. 参考指令:必须包含角度信息,如"参考这张正面图"、"参考这张侧面图",确保产品一致性
2. 角度适配:明确说明使用该角度的目的,如"使用正面图展示整体造型"、"使用侧面图突出便携性"
3. 产品定位:明确产品类型和核心定位
4. 场景设定:具体、真实、符合产品使用场景
5. 光线构图:专业摄影术语,符合商业标准
6. 风格质感:写实商业摄影,材质真实还原
角度选择策略:
- 全景展示:使用正面图或45度角图,展示产品整体造型
- 功能特写:使用侧面图或俯视图,突出特定功能部件
- 场景融合:使用45度角图,增强产品与环境的立体融合感
- 细节材质:使用细节特写图,微距展示材质纹理
- 多角度组合:信任背书类图片可使用多张参考图,全面展示产品
选填要素(根据图片类型):
- 主图:无文案,纯视觉吸引,注重角度与场景的匹配
- 详情页:包含文案区域规划,角度选择需考虑文案布局
- 功能特写:微距摄影,突出细节,选择最能展示功能的角度
- 场景故事:生活化,有情感共鸣,角度选择增强场景真实感
避坑指南:
- ❌ 避免绝对化用语("第一"、"最"、"100%")
- ❌ 避免侵权元素(他人肖像、品牌logo)
- ❌ 避免模糊描述("好看"、"漂亮"→具体描述)
- ❌ 避免角度与场景不匹配(如用俯视图展示全景场景)
- ✅ 使用专业摄影术语("侧逆光"、"黄金分割"、"柔光箱")
- ✅ 明确产品材质("哑光ABS塑料"、"304不锈钢"、"Tritan透明杯身")
- ✅ 场景真实可感("清晨阳光透过百叶窗"、"傍晚温馨家居光")
- ✅ 角度描述具体("使用45度角图,立体展示产品与环境融合")
scale参数详解(产品一致性关键):
| scale值 | 参考图影响 | 产品一致性 | 适用场景 |
|---------|-----------|-----------|---------|
| 0.1-0.3 | 高 | ⭐⭐⭐⭐⭐ | 电商图片(强烈推荐) |
| 0.4-0.6 | 中 | ⭐⭐⭐ | 一般场景 |
| 0.7-1.0 | 低 | ⭐⭐ | 创意探索(不推荐) |
为什么必须用参考图?
- ❌ 纯文生图:产品造型、比例、细节每次生成都不同,无法保持一致性
- ✅ 参考图模式:产品严格遵循上传的白底图,场景按提示词生成,完美融合
查询参数:
req_json_config = {
"return_url": True, # 必须设置以获取图片URL
"logo_info": {"add_logo": False}
}
query_params = {
"req_key": "jimeng_t2i_v40",
"task_id": task_id,
"req_json": json.dumps(req_json_config, ensure_ascii=False)
}
第四步:下载并发送到飞书
每张图片生成后:
1. 下载图片到本地
2. 使用本地文件路径发送到飞书(支持预览)
3. 等待用户确认
4. 继续下一张
# 下载图片
local_path = f"output/ecommerce/{product_name}/{filename}.png"
response = requests.get(image_url)
with open(local_path, 'wb') as f:
f.write(response.content)
# 发送到飞书
message(action="send", media=local_path, caption="图片说明")
硬性技术规范
产品一致性(最高优先级)
基准图要求:所有生成图片必须严格遵循已确认的产品白底图(reference_white_background.png)中的产品造型、比例和细节。
- 造型结构:严格保留产品原始比例、外观细节(按钮、logo、接口),与基准图保持100%一致
- 光影融合:产品投影必须符合场景主光源逻辑,边缘清晰、无伪影,杜绝悬浮感或生硬粘贴感
- 质感还原:真实还原产品材质(哑光/亮面/金属/玻璃),纹理还原度≥95%
- 一致性检查:每张生成图片必须与基准图进行视觉比对,确保产品造型无任何变形、拉伸或细节丢失
视觉与合规
- 视觉风格:写实商业摄影质感,低饱和暖色调,可融入<5%国风元素
- 布光逻辑:专业级商业布光,光影自然,轮廓清晰
- 构图要求:产品为绝对视觉中心,中心对称或黄金分割构图
- 合规红线:
- 不得出现"第一"、"最"、"100%"等绝对化用语
- 不得生成侵权人物肖像或场景
- 不得遮挡、修改产品原有品牌标识
文案排版规范
详情页文案结构
| 元素 | 位置 | 字数 | 示例 |
|---|---|---|---|
| 主标题 | 左上角 | 7-9字 | "厨房里的颜值担当" |
| 副标题 | 主标题下方 | 10-14字 | "一机多用,小白秒变大厨" |
| 卖点/引导 | 底部居中 | 2-4条,每条3-8字 | "7天无理由 | 赠食谱 | 3期免息" |
主图要求
- 图片上不出现任何文字文案
- 纯粹依靠场景、光影和产品本身吸引点击
输出文件结构
output/ecommerce/{产品名}/
├── main_01_studio.png # 主图1:纯色背景
├── main_02_detail.png # 主图2:功能特写
├── main_03_scene1.png # 主图3:场景氛围1
├── main_04_scene2.png # 主图4:场景氛围2
├── main_05_scene3.png # 主图5:场景氛围3
├── detail_01_poster.png # 详情1:全景海报
├── detail_02_story1.png # 详情2:场景故事1
├── detail_03_story2.png # 详情3:场景故事2
├── detail_04_story3.png # 详情4:场景故事3
├── detail_05_feature1.png # 详情5:核心卖点1
├── detail_06_feature2.png # 详情6:核心卖点2
├── detail_07_feature3.png # 详情7:核心卖点3
├── detail_08_texture1.png # 详情8:细节材质1
├── detail_09_texture2.png # 详情9:细节材质2
├── detail_10_trust.png # 详情10:信任背书
└── metadata.json # 所有图片的元数据
参考文档
详细框架说明请参考:references/ecommerce-visual-framework.md
飞书机器人错误处理规范(重要)
问题背景
在飞书机器人环境中执行Python脚本时,容易出现以下问题:
1. 编码错误:中文字符在命令行参数中传递时出现乱码或语法错误
2. 字符串转义问题:引号、换行符等特殊字符导致Python语法错误
3. 输出截断:长输出被截断,无法获取完整信息
解决方案
1. 严禁使用命令行直接传递Python代码
❌ 错误做法(容易导致编码和转义问题):
# 错误:直接在命令行传递Python代码
exec(command="python -c \"...中文内容...\"")
✅ 正确做法(写入文件后执行):
# 正确:先写入Python文件,再执行
write(path="gen_image.py", content="...")
exec(command="python gen_image.py")
2. 文件编码规范
所有Python脚本文件必须:
- 使用UTF-8编码
- 包含中文编码声明:# -*- coding: utf-8 -*-
- 避免在字符串中使用复杂的引号嵌套
# gen_image.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys, os
sys.path.insert(0, os.environ["WORKSPACE_DIR"])
from tools.jimeng import JimengClient
# 业务逻辑代码...
3. 错误捕获与反馈
所有脚本必须包含完善的错误处理:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
try:
# 业务逻辑
result = generate_image()
print(f"SUCCESS:{result}")
except Exception as e:
print(f"ERROR:{str(e)}")
import traceback
traceback.print_exc()
sys.exit(1)
4. 消息发送规范
生成图片后,必须通过message工具发送预览图:
# 生成完成后,使用message工具发送
# 不要在Python脚本中直接发送,而是返回路径给Agent
# Python脚本输出格式:
print(f"IMAGE_PATH:{filepath}")
print(f"STATUS:success")
Agent端处理:
# 读取脚本输出
result = exec(command="python gen_image.py")
# 解析输出
if "IMAGE_PATH:" in result:
filepath = result.split("IMAGE_PATH:")[1].split("\n")[0]
# 使用message工具发送到飞书
message(
action="send",
media=filepath,
caption="图片生成完成!"
)
5. 完整示例代码
# generate_and_send.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成单张图片并通过message方式发送预览图
"""
import sys
import os
import base64
import requests
sys.path.insert(0, os.environ["WORKSPACE_DIR"])
from tools.jimeng import JimengClient
def main():
try:
client = JimengClient()
OUTPUT_DIR = os.path.join(os.environ["WORKSPACE_DIR"], "output", "ecommerce", "my_product")
# 读取白底图
white_bg_path = os.path.join(OUTPUT_DIR, 'reference_white.png')
with open(white_bg_path, 'rb') as f:
white_bg_base64 = base64.b64encode(f.read()).decode('utf-8')
# 生成参数
params = {
'req_key': 'jimeng_t2i_v40',
'binary_data_base64': [white_bg_base64],
'prompt': '提示词内容...',
'scale': 0.2,
'width': 2048,
'height': 2048,
'image_num': 1
}
# 提交任务
result = client.service.cv_sync2async_submit_task(params)
if result.get('code') == 10000:
task_id = result.get('data', {}).get('task_id')
# 等待完成
image_urls = client._wait_for_task(task_id, 'jimeng_t2i_v40')
if image_urls:
# 下载图片
filepath = os.path.join(OUTPUT_DIR, 'main_01_studio.png')
response = requests.get(image_urls[0], timeout=30)
if response.status_code == 200:
with open(filepath, 'wb') as f:
f.write(response.content)
# 输出成功信息(供Agent解析)
print(f"STATUS:success")
print(f"IMAGE_PATH:{filepath}")
print(f"IMAGE_URL:{image_urls[0]}")
return 0
else:
print(f"STATUS:download_failed")
return 1
else:
print(f"STATUS:generate_failed")
return 1
else:
print(f"STATUS:submit_failed")
print(f"ERROR:{result.get('message', 'unknown')}")
return 1
except Exception as e:
print(f"STATUS:error")
print(f"ERROR:{str(e)}")
import traceback
traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(main())
6. Agent端调用规范
# 1. 写入Python脚本
write(
path="output/ecommerce/{product}/gen_single.py",
content=script_content
)
# 2. 执行脚本(使用timeout避免挂起)
result = exec(
command="python gen_single.py",
timeout=300 # 5分钟超时
)
# 3. 解析结果
if "STATUS:success" in result:
# 提取图片路径
filepath = result.split("IMAGE_PATH:")[1].split("\n")[0].strip()
# 4. 发送到飞书
message(
action="send",
media=filepath,
caption="[1/15] 主图01生成完成!"
)
# 5. 等待3秒后继续下一张
time.sleep(3)
else:
# 错误处理
error_msg = result.split("ERROR:")[1].split("\n")[0] if "ERROR:" in result else "未知错误"
message(
action="send",
message=f"图片生成失败: {error_msg}"
)
技术实现
白底图生成方法(即梦AI素材提取接口)
使用即梦AI官方素材提取接口:
submit_params = {
"req_key": "jimeng_i2i_extract_tiled_images",
"binary_data_base64": [image_base64], # 或 "image_urls": [url],支持最多10张图片输入
"edit_prompt": "提取出图片中的日用品,生成一张正视图,背景为纯白色。",
"width": 2048,
"height": 2048
}
API能力说明:
- 多图输入:支持binary_data_base64数组或image_urls数组,最多10张图片
- 单图处理:即使输入多张图片,接口通常针对每张图片单独处理,生成对应的白底图
- 最佳选择:Agent将从用户提供的1-10张图片中选择角度最佳、细节最清晰的一张进行处理
支持6大品类提取:
| 品类 | 提取指令 |
|------|---------|
| 服装 | "提取出图片中的衣服、帽子、鞋子和包,生成一张平铺图,背景为纯白色。" |
| 鞋子 | "提取出图片中的一双鞋子,生成一张正45度图,背景为纯白色。" |
| 包包 | "提取出图片中的完整的包包和包带,正视图,背景为纯白色。" |
| 沙发 | "提取出图片中的完整的沙发,生成一张正视图,背景为纯白色。" |
| 日用品 | "提取出图片中的日用品,生成一张正视图,背景为纯白色。" |
| 饰品 | "提取出图片中的饰品,生成一张正视图,背景为纯白色。" |
技术指标:
- 接口:即梦AI素材提取(jimeng_i2i_extract_tiled_images)
- 输入限制:最多10张图片
- 输出分辨率:2048×2048像素(可配置)
- 背景:纯白色(#FFFFFF)
- 处理时间:通常在30秒内完成
产品一致性保证机制(即梦4.0参考图功能)
核心原理:使用即梦4.0的image_urls参数上传参考图(最多10张),配合scale参数控制一致性
# 生成场景图时上传参考图
submit_params = {
"req_key": "jimeng_t2i_v40",
"image_urls": ["白底图URL"], # 关键:上传参考图,最多可上传10张URL
"prompt": "参考这张图,把这个产品放在现代办公桌上...",
"scale": 0.2, # 关键:低scale确保参考图影响大,产品一致性高
"width": 2048,
"height": 2048
}
API能力说明:
- image_urls: 支持传入最多10张参考图URL的数组,模型会综合参考所有上传图片的造型、比例、细节
- 当前电商流程推荐:上传一张高质量白底产品图作为主要造型参考
- 扩展应用:对于复杂产品或需要多角度展示时,可上传多张不同角度的产品图
为什么这样能保证一致性?
- image_urls: 传入参考图,模型会参考产品造型、比例、细节
- scale=0.2: 表示参考图影响占80%,提示词影响占20%
- 结果:产品严格遵循参考图,场景按提示词生成
对比实验:
| 方式 | 产品一致性 | 原因 |
|------|-----------|------|
| 纯文生图(无参考图) | ❌ 差 | 每次生成产品造型都不同 |
| 文生图 + 提示词强调 | ❌ 较差 | 模型无法精确理解产品细节 |
| 图生图 + scale=0.2 | ✅ 优秀 | 参考图主导产品造型 |
使用示例
用户:帮我生成一套空气炸锅的电商图片
Agent:
1. 生成产品白底图:请提供空气炸锅的照片(任意背景),我将处理为纯白色背景的基准图
2. 填写产品分析模板:引导用户填写产品基础信息、品牌调性、技术规格
3. 生成15张图片计划:根据产品分析制定详细的主图与详情页计划
4. 逐个生成并发送到飞书预览:每张图片生成后发送确认,严格遵循处理后的产品白底图确保一致性
5. 完成全部15张图片
提示词应用示例
示例1:小家电(空气炸锅 - 主图)
提示词:
【参考指令】参考这张图,严格保持产品造型、比例、材质细节不变
【产品定位】家用空气炸锅,健康烹饪助手
【场景设定】现代家庭厨房台面,旁边有新鲜蔬菜篮和调味瓶
【光线构图】自然光从厨房窗户照入,侧光突出产品轮廓,产品居中构图
【风格质感】写实商业摄影风格,专业级布光,低饱和暖色调,哑光塑料与不锈钢质感真实还原
【技术规范】高清4K画质,无文字,无品牌侵权元素,产品为绝对视觉中心
【行业适配】小家电:突出实用性与生活场景,展现家庭烹饪便利性
示例2:数码产品(无线耳机 - 详情页)
提示词:
【参考指令】参考这张图,严格保持产品造型、比例、材质细节不变
【产品定位】降噪无线耳机,移动办公伴侣
【场景故事】咖啡馆工作场景,旁边有笔记本电脑和咖啡杯
【光线构图】柔和的咖啡馆灯光,产品位于画面右侧黄金分割点,左侧留白用于文案
【风格质感】写实商业摄影风格,专业级布光,冷色调科技感,金属与哑光塑料质感真实还原
【文案区域】左上角:静享专注时刻/下方:主动降噪,沉浸工作/底部:蓝牙5.3 | 30小时续航 | 快充15分钟
【技术规范】高清4K画质,产品与场景自然融合,投影符合光源逻辑
【行业适配】数码产品:突出科技感与便携性,展现移动办公场景
示例3:服装(运动T恤 - 主图)
提示词:
【参考指令】参考这张图,严格保持服装版型、面料纹理、细节设计不变
【产品定位】速干运动T恤,健身训练装备
【场景设定】健身房力量训练区,背景有哑铃和健身器械
【光线构图】健身房专业照明,产品平铺展示,微俯视角构图
【风格质感】写实商业摄影风格,专业影棚布光,突出面料速干纹理,缝线细节清晰
【技术规范】高清4K画质,面料纹理真实,无模特肖像权问题
【行业适配】服装:突出面料质感与功能设计,展现运动场景适用性
示例4:美妆(精华液 - 详情页)
提示词:
【参考指令】参考这张图,严格保持产品瓶型、logo、材质细节不变
【产品定位】修复精华液,夜间护肤必备
【场景故事】梳妆台护肤时刻,旁边有其他护肤品和化妆镜
【光线构图】柔和的梳妆台灯光,产品位于画面中心,光线在玻璃瓶身上的反射效果
【风格质感】写实商业摄影风格,洁净白光,玻璃瓶身晶莹剔透,液体质感真实
【文案区域】左上角:夜间修护奇迹/下方:深度滋养,唤醒肌肤活力/底部:敏感肌可用 | 无添加 | 临床测试
【技术规范】高清4K画质,玻璃材质反光真实,液体透明度清晰
【行业适配】美妆:突出产品纯净安全,展现专业护肤效果
提示词生成工作流
- 分析产品类型:确定所属行业(小家电/数码/服装/美妆等)
- 选择行业模板:参考行业特定要点表
- 填写框架要素:按【参考指令】→【产品定位】→【场景设定】顺序填写
- 调整细节:根据具体图片类型(主图/详情页/特写)调整要素
- 质量检查:确保无绝对化用语、无侵权元素、描述具体专业
注意事项
- 每次只处理一个产品的15张图片
- 必须严格串行生成,不可并发
- 每张图片生成后必须发送到飞书确认
- 如用户需要修改,根据反馈调整提示词后重新生成
- ⚠️ 产品一致性强制要求:
- 第零步必须使用即梦AI素材提取接口生成白底图
- 后续所有图片必须使用
image_urls参数上传参考图 - scale值必须设置为0.2-0.3,确保参考图影响占主导
- 严禁使用纯文生图(无参考图),无法保证产品一致性
- 参考图使用规范:
- 用户可以上传1-10张产品图片作为参考图
- Agent将选择最佳角度的一张图片,使用素材提取接口生成高质量白底图
- 生成场景图时上传白底图URL到
image_urls参数(最多支持10张参考图,通常使用一张高质量白底图)
Token消耗优化方案(V2.0)
问题分析
传统方式Token消耗:
| 组成部分 | 单张消耗 | 15张总计 | 问题 |
|---------|---------|---------|------|
| 基础模板重复 | ~800 | ~12,000 | 每张都发送完整产品描述 |
| 场景变量 | ~200 | ~3,000 | 必要消耗 |
| 响应输出冗余 | ~500 | ~7,500 | 完整JSON+状态循环输出 |
| 重复初始化 | ~500 | ~7,500 | 每张图都重新初始化客户端 |
| 总计 | ~2,000 | ~30,000 | |
优化方案
1. 基础模板只发送一次(节省93%)
优化前(浪费):
# 每张图都包含完整基础模板
prompt = f"""
【系统前缀】作为国内一线小家电品牌资深AI视觉总监...
【产品主体】严格保持产品造型不变:高硼硅玻璃壶身...
【硬性规范】造型结构:严格保留产品原始比例...
【场景执行】{scene_variable}
【合规约束】高清4K画质...
"""
# 每张 ~1,000 tokens
优化后(节省):
# 第1张:发送完整基础模板
# 第2-15张:只发送"参考第1张规范" + 场景变量
prompt = f"""
参考第1张图的提示词规范(系统前缀+产品主体+硬性规范+合规约束),
保持相同的产品一致性要求和视觉标准。
【场景执行】{scene_variable}
"""
# 每张 ~200 tokens(仅场景变量)
节省:12,000 - 1,400 = 10,600 tokens(88%)
2. 精简基础模板(节省60%)
优化前:
【系统前缀】作为国内一线小家电品牌资深AI视觉总监,
精通商业摄影美学与杂志感信息图表设计,
擅长为淘宝/京东等电商平台打造兼具国际质感与本土消费心理的
高点击、高转化视觉方案。
优化后:
资深AI视觉总监,精通商业摄影美学,为淘宝/京东打造高转化视觉方案。
3. 批量生成脚本(节省63%初始化)
优化前:
# 每张图都重新执行脚本
for i in range(15):
# 每次重新导入、初始化、读取文件
exec(f"python gen_{i}.py") # ~500 tokens/次
优化后:
# 一个脚本生成所有图
import ... # 只导入1次
client = ... # 只初始化1次
white_bg = ... # 只读取1次
for i in range(15):
generate_image(scene[i]) # 仅场景变量变化
4. 精简响应输出(节省99%)
优化前:
[1/40] in_queue...
[2/40] in_queue...
[3/40] in_queue...
...(约20次输出)
优化后:
[5/15] filename.png ... 12s OK
优化效果对比
| 指标 | 优化前 | 优化后 | 节省 |
|---|---|---|---|
| 单张消耗 | ~2,000 tokens | ~400 tokens | 80% |
| 15张总计 | ~30,000 tokens | ~6,000 tokens | 80% |
| 生成时间 | ~60分钟 | ~35分钟 | 42% |
| 响应速度 | 慢(长提示词) | 快(短提示词) | 显著改善 |
实施步骤
Step 1: 创建基础模板文件
# prompt_base_template.txt
BASE_PROMPT = """资深AI视觉总监,精通商业摄影美学,为淘宝/京东打造高转化视觉方案。
严格保持[产品名]造型:[材质描述],比例结构100%一致,[质感要求]。
写实商业摄影,低饱和暖色调,温馨氛围。专业布光,产品为视觉中心。
高清4K,无绝对化用语。"""
Step 2: 创建批量生成脚本
# generate_batch_optimized.py
import ... # 一次性导入
client = ... # 一次性初始化
white_bg = ... # 一次性读取
SCENES = [
('main_01.png', '纯白背景...', 2048, 2048),
('main_02.png', '功能特写...', 2048, 2048),
# ... 15个场景
]
for idx, (filename, scene, w, h) in enumerate(SCENES, 1):
# 优化:只拼接场景变量
prompt = f"{BASE_PROMPT}\n\n【场景】{scene}"
# 生成图片
result = generate_image(prompt, white_bg, w, h)
# 精简输出
print(f'[{idx}/15] {filename} ... {result.status}')
# 发送到飞书
send_to_feishu(result.path)
# 间隔3秒
time.sleep(3)
Step 3: 执行优化流程
1. 生成白底图(1张,~2,500 tokens)
2. 加载基础模板(1次,~150 tokens)
3. 批量生成15张(每张~400 tokens,总计~6,000 tokens)
4. 总计消耗:~8,650 tokens(原~30,000,节省71%)
关键要点
✅ 必须遵守:
- 基础模板只定义一次,后续引用
- 批量脚本一次性初始化所有资源
- 精简输出,只显示关键状态
- 每张生成后间隔3秒,避免并发限制
❌ 严禁:
- 每张图都重新初始化客户端
- 重复发送完整基础模板
- 输出冗余调试信息
- 批量提交多个任务(违反API限制)
反馈机制
优化后反馈频率:
- 每5张图汇总反馈一次进度
- 异常情况立即反馈
- 完成时汇总统计
示例输出:
[*] 开始生成15张详情页(优化模式)
基础模板已加载,单张仅~400 tokens
[1-5/15] 主图部分完成 ✓
main_01_studio.png OK
main_02_detail.png OK
main_03_home.png OK
main_04_office.png OK
main_05_gift.png OK
[6-10/15] 详情页部分完成 ✓
detail_01_poster.png OK
...
[*] 全部完成!总计消耗:~8,650 tokens(节省71%)
版本记录:
- V1.0:基础电商美工大师流程
- V2.0:新增Token优化方案,节省80%消耗
- 提示词使用"参考这张图,把这个产品..."格式
- 保持scale值稳定(0.2-0.3),不要随意调整
- V3.1:豆包(Doubao)积分适配。新增 scripts/doubao_ecommerce_driver.py:豆包环境无即梦 key 时,生图全程改用豆包 image_edit 工具逐张生成(白底图 1 张 + 15 张场景图,扣豆包积分),不再调用即梦 API。jimeng-image / generate_ecommerce_images.py 保留原样。适配要点:参考图走 URL(uploads 标注待上传)、保真由 prompt 措辞控制(等同 scale=0.2)、详情页【文案】自动转中文引号文字指令、image_edit 保持参考图比例时按 resample_to 用 PIL 处理到目标尺寸。
- ⚠️ API并发限制(关键):
- 最多2个并发任务:即梦API有严格的并发限制,同时运行的任务不能超过2个
- 避免批量并发:严禁一次性提交多个生成任务,必须串行处理
- 控制调用频率:每张图片之间建议间隔3-5秒,避免触发QPS限制
- 串行处理策略:一张图片生成完成→下载确认→再提交下一张任务
API响应格式变更说明(重要 - 2026-03-19更新)
问题背景
即梦AI API的响应格式发生了变化,导致原有图片获取逻辑失效。
变更对比
| 方式 | 字段 | 说明 | 状态 |
|---|---|---|---|
| 旧方式 | image_urls |
返回图片URL,需HTTP下载 | ⚠️ 可能返回null |
| 新方式 | binary_data_base64 |
直接返回base64编码的图片数据 | ✅ 推荐使用 |
代码变更示例
# 修改前(旧方式 - 可能失效)
result = client.service.cv_sync2async_get_result({
'req_key': 'jimeng_t2i_v40',
'task_id': task_id
})
data = result.get('data', {})
if data.get('status') == 'done':
urls = data.get('image_urls', []) # ❌ 可能返回 None
if urls:
response = requests.get(urls[0])
image_data = response.content
# 修改后(新方式 - 推荐)
import base64
result = client.service.cv_sync2async_get_result({
'req_key': 'jimeng_t2i_v40',
'task_id': task_id
})
data = result.get('data', {})
if data.get('status') == 'done':
# ✅ 优先从 binary_data_base64 获取
binary_data_list = data.get('binary_data_base64', [])
if binary_data_list:
image_data = base64.b64decode(binary_data_list[0])
with open(filepath, 'wb') as f:
f.write(image_data)
关键变更点
- 数据源:
image_urls→binary_data_base64 - 获取方式:HTTP下载 → base64解码
- 新增依赖:
import base64
兼容性处理建议
# 同时支持新旧两种格式
def get_image_data(data):
"""从API响应中提取图片数据"""
# 优先检查新格式
binary_data_list = data.get('binary_data_base64', [])
if binary_data_list:
import base64
return base64.b64decode(binary_data_list[0]), 'binary'
# 兼容旧格式
urls = data.get('image_urls', [])
if urls:
import requests
response = requests.get(urls[0], timeout=30)
return response.content, 'url'
return None, None
已更新文件
tools/jimeng/client.py- 新增_wait_for_task_v2()方法支持新格式skills/ecommerce-designer-master/SKILL.md- 本文档skills/ecommerce-designer-master/references/prompt-reference-manual-v3.1.md- 优化版提示词手册