一杯饮料,一座小店
上传一张真实的咖啡/奶茶照片 → 得到一张精致可爱的品牌主题等轴测门店插画,外加一张「原图 vs 插画」高清对比图。
核心心法(只有一句):保留原始饮品的识别特征,重新设计它的建筑功能。 不是「画一个差不多的杯子」,而是「让照片里那杯饮料,长出窗户、楼梯和小店员」。
成品长什么样
以 GridCoffee 绿杯为例:绿色杯身变成两层店铺主体,米白色杯盖变成屋顶平台,白色方框 logo 原样留在墙上;杯身开拱形窗和 striped 遮阳篷,右侧有木楼梯与绿植,门前有吉祥物、小桌椅和 A 字牌,整座建筑落在斜向石砖地台上;顶部是 Grid Coffee / Americano / Yunnan · Giupo Estate 圆润粗体标题,薄荷绿纯色背景配白云。
风格是 Adobe Illustrator 做的 2D 矢量插画,不是 Blender 渲染的 3D 场景。
工作流(自动跑完,不逐步征求确认)
用户默认会上传一张饮品照片,常附带品牌名、饮品名、咖啡豆产地、联名等补充说明。按下面六步一次做完。
Step 0 · 收图与预处理
PY="$HOME/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
[ -x "$PY" ] || PY="$(command -v python || command -v python3)"
SK="$HOME/.workbuddy/skills/cup-shop-illustration/scripts/imgtool.py"
OUT="<当前工作区>/out/cup-shop-illustration"
mkdir -p "$OUT"
"$PY" "$SK" prepare "<用户上传的照片绝对路径>" --out "$OUT/photo_clean.jpg"
prepare统一 EXIF 方向、转 sRGB、去 alpha、长边 ≤2048,并打印信息卡(宽高、方向、亮度、主色)。信息卡里的方向决定后续画布比例与拼接方向。- 它只改文件格式与尺寸,不改画面内容。喂给 ImageGen 用
photo_clean.jpg;拼接时仍用用户上传的原始照片。 - 若用户上传的是 HEIC / webp 等 Pillow 读不了的格式,先用系统工具转成 PNG 再走本步,并如实告知。
Step 1 · 观察照片,填「识别卡」
用视觉能力直接看原始照片(不要用代码提取边缘、不要预先生成线稿),按 references/diagnose.md 的识别卡逐项读取:
| 字段 | 内容 |
|---|---|
| 品牌名 | 杯身 logo / 文字,尽量给出英文名或拼音 |
| 饮品名 | 从杯身标签、小票或用户说明读取 |
| 杯型 | 外带纸杯 / 透明塑料杯 / 易拉罐 / 玻璃瓶,及宽高比例 |
| 顶部结构 | 平盖、饮用口、吸管、奶盖、奶油、封膜 |
| 主色 / 辅助色 | 用 Step 0 的主色信息卡交叉验证 |
| logo 与文字 | 形状、位置、颜色(示例:白色空心方框 + 杯身下方 GridCoffee) |
| 配料 / 装饰 | 咖啡豆、珍珠、水果、饼干碎、分层、冰块 |
| 产地 / 联名 | 云南庄园、联名 IP 等,可化作环境元素 |
规则:用户明确给出的信息优先;照片里读不出的一律不编造,改用「杯身原有的文字/图形」这类描述;不要擅自换品牌、改配色、改杯型。
Step 2 · 组装提示词
读 references/prompt-master.md,用其中的主模板填写 6 个槽位(品牌 / 饮品 / 补充说明 / 原图方向决定的画布比例 / 背景色 / 特色元素),得到一条完整提示词。
- 模板里的风格条款、负面词、构图约束原样保留,不要精简。
- 生成的最终提示词作为核心资产,在交付时原文附上(用户常要复用)。
- 需要中文字牌时,主标题仍用英文,中文只作小幅装饰;AI 中文易乱码,见
diagnose.md的处理办法。
Step 3 · 出图(ImageGen 图生图)
⚠️ 调用前必须在回复中明确告知:单次 ImageGen 约消耗 5–10 积分。 先声明、后调用。
| 参数 | 取值 |
|---|---|
prompt | Step 2 的完整提示词 |
image1 | Step 0 的 photo_clean.jpg 绝对路径(真实照片,禁止纯文生图) |
size | 原图竖版 1024x1365(3:4,2026-11-08 实测可用,实际返回 1024x1360;被拒则降级 1024x1280);横版 1536x1024;方形 1024x1024 |
quality | high |
input_fidelity | medium(默认,见下方调参) |
output_dir | $OUT |
footnote | ""(工具侧水印可去掉;平台仍会强制叠「AI生成 WORKBUDDY」,用 Step 5 的 cleanwm 清除) |
style | 不填,风格由提示词锁定 |
input_fidelity 调参:medium 既保住杯型/logo/配色,又允许重新构图。跑偏成「别的杯子」→ 升到 high;画面像照片临摹、视角没变成 45° → 降到 low。
生成的是一张独立完整的插画,绝不能让 AI 直接画左右对比图,也不能从对比图里裁出插画。
Step 4 · 自检
按 references/diagnose.md 的九条自检逐项比对。三条必查:
- 一眼能认出是照片里那杯饮料吗?(杯型、主色、logo 位置)
- 是纯 2D 粗黑描边 + 纯色平涂吗?(出现塑料质感 / 渐变 / 软阴影 = 失败)
- 建筑、楼梯、人物、地台、标题都完整在画面内吗?(截断 = 失败)
不合格 → 只改对应那一段提示词,最多重试一次;仍不合格就如实交付并说明可调方向,不要伪装成功。
Step 5 · 去水印 + 代码拼接
平台会在插画右下角强制叠「AI生成 WORKBUDDY」白字,footnote: "" 去不掉。先无痕清除,再拼接:
"$PY" "$SK" cleanwm "$OUT/<插画文件名>.png" --out "$OUT/<原名>_illustration.png"
"$PY" "$SK" compose \
--photo "<用户上传的原始照片绝对路径>" \
--art "$OUT/<原名>_illustration.png" \
--out "$OUT/<原名>_compare.png"
cleanwm默认的selective模式只把偏白的水印像素拉向背景色,不裁地台、不误抹绿叶,实测无残留、无接缝。默认--threshold 160;若右下角有白云/米白石砖等浅色装饰,调高到190–210避免误伤。水印位置特殊时可调--box "x0,y0,x1,y1",或改用--mode fill(会抹掉框内装饰,慎用)。compose按原图方向自动选:竖版/方形 → 原图在左、插画在右;横版 → 原图在上、插画在下。也可--layout side|stack强制。- 以插画原始像素为基准,插画不缩放,原图等比缩放对齐;白色间隔 24px、外边距 24px,比例差异用留白吸收。
- 不裁切、不拉伸、不修改原照片内容,输出高清 PNG。
cleanwm失效时备用trim <插画> --bottom 0.06 --mode pad;但它会裁掉画面底部,可能切到地台,只在万不得已时用。
Step 6 · 交付
用 present_files 先展示拼接图,再展示独立插画(两张都要给)。回复里给三行结论:识别出的品牌/饮品、画布比例与 input_fidelity、两个文件的路径;再附完整提示词原文。
硬规则(违反即失败)
- 必须以真实照片作
image1做图生图,不能只凭文字重画一个杯子。 - 拼接必须用用户上传的原始照片,不能用 AI 重绘的「照片」冒充。
- 保留原杯型、主色、logo 与包装特征;重新设计的是建筑功能,不是包装。
- 不机械复制原照片的拍摄角度,要做合理的三维空间推演(45° 斜上方等轴测)。
- 先生成独立完整插画,再拼接;禁止从对比图裁切。
- 只做 2D 矢量插画,严禁 3D 渲染 / 写实 / 水彩 / 渐变 / 复杂光影。
- 不用代码提取边缘或生成线稿,让图像模型直接理解原图。
- 出图前必须告知积分消耗;不逐步征求确认,一次跑完。
可调项
| 想改什么 | 改哪里 |
|---|---|
| 背景色 | 提示词「明亮柔和的薄荷绿」→ 换成品牌协调色 |
| 标题文字 | 主/副标题槽位;不确定就只写品牌名 |
| 产地 / 联名元素 | 「特色元素」槽位,如咖啡树枝、庄园 A 字牌、联名小人 |
| 吉祥物数量 / 楼梯滑梯 | 提示词「建筑设计」段的设施列表 |
| 画布比例 | Step 3 的 size,同时改提示词里的画布条款 |
| 保真度 | input_fidelity low / medium / high |
| 拼接间隔与底色 | compose --gap --pad --bg |
资源
| 文件 | 用途 |
|---|---|
references/prompt-master.md | 主用:完整可复用提示词模板、槽位表、三套填好的示例、负面词表 |
references/diagnose.md | 照片识别卡、九条自检、失败修法表、中文文字处理 |
scripts/imgtool.py | prepare / cleanwm / compose / trim / sheet 五个本地子命令 |
README.md | 中文安装与使用说明 |