一杯飲料,一座小店
上傳一張真實的咖啡/奶茶照片 → 得到一張精緻可愛的品牌主題等軸測門店插畫,外加一張「原圖 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 | 中文安裝與使用說明 |