模板导出增强 + 模特性别分组 + 三合一提示词精简

1) 模板导出:识别「基码表-胸围」填 sku.bust(多个胸围列都填);申报价格模糊匹配多列统一按加价后价格填写;详情图文不再拼接 img_url_2;SPU 款式来源统一填「现货款」;商品产地国家简称映射(沙特→沙特阿拉伯)
2) 模特性别分组:model_features 按男女分组,按模板类目含男/女固定取对应性别模特(含 Pinterest 模式 pipeline)
3) 三合一提示词:去掉 DESIGN CONTENT 四要素描述(设计已由设计稿提供)
4) 生图尺寸:全部改为读 config 不再硬编码(设计图 compose.design_size / 合成图 compose.size / 种草图 seed_shot.size)
This commit is contained in:
2026-08-26 18:05:11 +08:00
parent e317547b8b
commit b7f429db89
93 changed files with 2708 additions and 583 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ class ImageBackend(ABC):
def print(self, prompt: str, base_image: str, out_path: str, negative: str = "",
extra_images: Optional[Sequence[str]] = None, size: str = "") -> str:
"""返回生成的成品图路径。实现内部应处理调用失败/超时并抛异常由调用方兜底。
size: 显式尺寸覆盖(如 "1504x2000");留空则用后端配置的 size。"""
size: 显式尺寸覆盖(如 "1536x2048");留空则用后端配置的 size。"""
raise NotImplementedError
def generate(self, prompt: str, out_path: str, negative: str = "", size: str = "") -> str:
+3 -2
View File
@@ -20,7 +20,7 @@ class MockImageBackend(ImageBackend):
self._cfg = cfg or {}
def print(self, prompt: str, base_image: str, out_path: str, negative: str = "",
extra_images=None, size: str = "") -> str:
extra_images=None, size: str = "", seed: int = None) -> str:
size_px = (1024, 1024)
try:
with Image.open(base_image) as im:
@@ -45,7 +45,8 @@ class MockImageBackend(ImageBackend):
img.save(out_path)
return out_path
def generate(self, prompt: str, out_path: str, negative: str = "", size: str = "") -> str:
def generate(self, prompt: str, out_path: str, negative: str = "", size: str = "",
seed: int = None) -> str:
"""纯文生图(mock):白底 + 文字标注,模拟纯印花设计稿。"""
size_px = (1024, 1024)
if size:
+10 -3
View File
@@ -137,13 +137,14 @@ class OpenAIImageBackend(ImageBackend):
return str(self._cfg.get("base_url") or "https://api.openai.com/v1").rstrip("/")
def print(self, prompt: str, base_image: str, out_path: str, negative: str = "",
extra_images=None, size: str = "") -> str:
extra_images=None, size: str = "", seed: Optional[int] = None) -> str:
"""img2img 编辑:参考图 base_image+ 可选 extra_images 多参考图)按 prompt 生成新图。
- 平铺服装图:base_image=平铺衣服底图(图3)extra_images=[印花设计稿(图2)]
- 三图模特合成:base_image=模特图(图1)extra_images=[印花设计稿(图2), 平铺底图(图3)]
提交顺序即图1→图2→图3,与提示词中的图片角色一一对应。
size: 显式尺寸覆盖(如 "1504x2000");留空用配置 size(默认 1024x1024)。
size: 显式尺寸覆盖(如 "1536x2048");留空用配置 size(默认 1024x1024)。
seed: 随机种子(None=不传,网关随机;固定值=可复现,网关支持才生效)。
"""
cfg = self._cfg
api_key = cfg.get("api_key", "")
@@ -172,6 +173,8 @@ class OpenAIImageBackend(ImageBackend):
"model": model,
"execution_mode": "sync", # 强制同步(ai-media 等网关默认重负载转异步任务,不稳定)
}
if seed is not None:
data["seed"] = seed
# 提交重试:异步路径不稳定 → 失败重试同步提交(最多 3 次);
# 内容政策拦截(content_policy_violation)多为网关误判 → 等待后重试
last_err: Optional[str] = None
@@ -195,9 +198,11 @@ class OpenAIImageBackend(ImageBackend):
print(f"[img] 第 {attempt + 1} 次提交异步失败,重试同步提交: {e}")
raise RuntimeError(f"图像合成多次提交均失败: {last_err}")
def generate(self, prompt: str, out_path: str, negative: str = "", size: str = "") -> str:
def generate(self, prompt: str, out_path: str, negative: str = "", size: str = "",
seed: Optional[int] = None) -> str:
"""纯文生图:生成白底纯印花设计稿(standalone pure print design)。
size: 显式尺寸覆盖(印花设计统一 1024x1024);留空用配置 size。
seed: 随机种子(None=不传,网关随机;固定值=可复现,网关支持才生效)。
background: 配置 compose.background="transparent" 时传 background 参数 → 透明背景 PNG
gpt-image-1/2 等模型支持;网关不支持该参数时会被忽略或由网关兜底)。"""
cfg = self._cfg
@@ -217,6 +222,8 @@ class OpenAIImageBackend(ImageBackend):
"response_format": "b64_json",
"execution_mode": "sync", # 强制同步(ai-media 等网关默认重负载转异步任务,不稳定)
}
if seed is not None:
data["seed"] = seed
bg = str(cfg.get("background") or "").strip()
if bg:
data["background"] = bg # 如 "transparent"(透明背景 PNG