한 잔의 음료, 하나의 작은 가게
실제 커피/밀크티 사진을 업로드 → 정교하고 귀여운 브랜드 테마의 아이소메트릭 매장 일러스트와 '원본 vs 일러스트' 고화질 비교 이미지를 받아보세요.
핵심 철칙(단 한 문장): 원래 음료의 식별 특징을 보존하고, 건축적 기능을 새롭게 디자인합니다. '비슷한 컵을 그리는 것'이 아니라 '사진 속 그 음료에 창문, 계단, 소형 직원을 만드는 것'입니다.
최종 완성본 예시
GridCoffee 그린 컵 기준: 초록색 컵 본체가 2층 매장 본체로, 크림색 뚜껑이 옥상 플랫폼으로, 흰색 사각 로고가 그대로 벽면에 남습니다. 컵 본체에는 아치형 창문과 줄무늬 차양이 생기고, 오른쪽에는 나무 계단과 식물, 입구에는 마스코트, 작은 테이블과 의자, 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로 변환하며, 알파 채널 제거, 긴 변을 ≤2048로 리사이즈하고 정보 카드(너비, 높이, 방향, 밝기, 주색상)를 출력합니다. 정보 카드의 방향이 이후 캔버스 비율과 합성 방향을 결정합니다.- 파일 형식과 크기만 변경하고, 이미지 내용은 수정하지 않습니다. ImageGen에는
photo_clean.jpg를 사용하고, 합성 시에는 사용자가 업로드한 원본 사진을 사용합니다. - 사용자가 HEIC/webp 등 Pillow가 읽을 수 없는 형식을 업로드하면, 먼저 시스템 도구를 사용해 PNG로 변환한 후 이 단계를 진행하며, 사실대로 알립니다.
Step 1 · 사진 관찰, '식별 카드' 작성
시각 능력을 사용해 원본 사진을 직접 보고(코드로 가장자리 추출하거나 선화를 미리 생성하지 않음), references/diagnose.md의 식별 카드 항목을 하나씩 읽습니다:
| 필드 | 내용 |
|---|---|
| 브랜드명 | 컵 로고/텍스트, 가능하면 영문명 또는 병음 제공 |
| 음료명 | 컵 라벨, 영수증 또는 사용자 설명에서 인식 |
| 컵 형태 | 테이크아웃 종이컵 / 투명 플라스틱 컵 / 캔 / 유리병, 그리고 너비-높이 비율 |
| 상단 구조 | 평평한 뚜껑, 음용구, 빨대, 폼, 크림, 실링 필름 |
| 주색상 / 보조색상 | Step 0의 주색상 정보 카드와 교차 검증 |
| 로고 및 텍스트 | 모양, 위치, 색상(예: 흰색 속이 빈 사각형 + 컵 하단 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은 컵 형태/로고/색상은 유지하면서 재구성도 허용. '다른 컵'으로 변질 → high로 상향; 이미지가 사진을 모사하는 느낌, 시점이 45°가 되지 않음 → low로 하향.
생성되는 것은 완전하고 독립적인 일러스트 한 장이며, 절대로 AI가 직접 좌우 비교 이미지를 그리게 하거나 비교 이미지에서 일러스트를 잘라내지 않습니다.
Step 4 · 자체 검수
references/diagnose.md의 9개 자체 검수 항목을 하나씩 대조합니다. 세 가지 필수 확인:
- 사진 속 그 음료임을 단번에 알아볼 수 있는가? (컵 형태, 주색상, 로고 위치)
- 순수 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가 다시 그린 '사진'을 사용할 수 없습니다.
- 원래 컵 형태, 주색상, 로고 및 포장 특징을 유지합니다. 새롭게 디자인하는 것은 건축적 기능이지 포장 디자인이 아닙니다.
- 원본 사진의 촬영 각도를 기계적으로 복사하지 말고, 합리적인 3차원 공간 추론(45° 사선 위 아이소메트릭)을 수행해야 합니다.
- 먼저 독립적이고 완전한 일러스트를 생성한 후 합성합니다. 비교 이미지에서 잘라내는 것을 금지합니다.
- 2D 벡터 일러스트만 허용되며, 3D 렌더링/사실적/수채화/그라데이션/복잡한 조명 효과는 엄격히 금지됩니다.
- 코드로 가장자리를 추출하거나 선화를 생성하지 말고, 이미지 모델이 원본 이미지를 직접 이해하도록 합니다.
- 이미지 생성 전 반드시 포인트 소모량을 알려야 하며, 단계별 확인을 요청하지 않고 한 번에 실행합니다.
조정 가능 항목
| 변경하고 싶은 사항 | 수정 위치 |
|---|---|
| 배경색 | 프롬프트 '밝고 부드러운 민트 그린' → 브랜드와 어울리는 색상으로 변경 |
| 타이틀 텍스트 | 메인/서브 타이틀 슬롯; 확실하지 않으면 브랜드명만 작성 |
| 산지 / 콜라보 요소 | '특징 요소' 슬롯, 예: 커피 나뭇가지, 농장 A자형 입간판, 콜라보 캐릭터 |
| 마스코트 수 / 계단 미끄럼틀 | 프롬프트 '건축 디자인' 섹션의 시설 목록 |
| 캔버스 비율 | Step 3의 size, 동시에 프롬프트 내 캔버스 조항 수정 |
| 충실도 | input_fidelity low / medium / high |
| 합성 간격과 배경색 | compose --gap --pad --bg |
리소스
| 파일 | 용도 |
|---|---|
references/prompt-master.md | 메인 참고 : 완전하고 재사용 가능한 프롬프트 템플릿, 슬롯 표, 세 가지 채워진 예제, 네거티브 프롬프트 목록 |
references/diagnose.md | 사진 식별 카드, 9가지 자체 검수, 실패 수정 방법 표, 중국어 텍스트 처리 |
scripts/imgtool.py | prepare / cleanwm / compose / trim / sheet 5가지 로컬 서브 명령어 |
README.md | 중국어 설치 및 사용 설명 |