Communitygithub.com

zhaimengrica-bit/ai-design-skills-ink-wash-restyle

水墨游记 Ink-Wash Restyle —— 사진을 손으로 그린 수묵 여행 스케치로 변환하는 스킬

ai-design-skills-ink-wash-restyle란 무엇인가요?

이 스킬은 사용자가 업로드한 임의의 사진을 '수묵 여행 스케치' 스타일로 재구성해주는 AI 이미지 변환 도구입니다. 핵심은 흑백 수묵을 기본으로 하되, 시각적 중심점에 전통 국화색(주사, 치자, 화청 등)을 약 20%만 제한적으로 사용하여 수묵감을 해치지 않으면서 포인트를 주는 데 있습니다. 또한 그림 위에 '장면 설명·장소' 텍스트와 고정된 주사 도장(서체)을 오버레이하여 여행 수첩 느낌을 완성합니다. Claude Code, Cursor, Codex 등 이미지 생성 기능을 지원하는 AI 에이전트 플랫폼에서 SKILL.md에 정의된 6가지 핵심 스타일 규칙(수묵감 우선, 먹색 5층+여백, 인물 정체성 고정, 사의삼요소, 컬러 20% 자동 배분, 여행 태그)과 엄격한 오류 처리 절차를 따라 일관된 결과물을 보장합니다. 최종 출력은 원본 사진 위에 태그가 적용된 완성본을 상하로 나란히 배치한 비교 이미지이며, 모든 결과는 지정된 출력 디렉토리에 저장됩니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add zhaimengrica-bit/ai-design-skills-ink-wash-restyle

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

ink-wash-restyle — 수묵 여행 스케치 (v16 고정판)

임의의 사진을 손으로 그린 수묵 느낌의 여행 스케치로 재구성합니다.

  • 흑백 수묵을 바탕으로: 먹색 5단계 + 넉넉한 여백 (수묵감 우선)
  • 절제된 컬러 터치 (약 20%): 시각적 중심에만 전통 국화색을 점染하여 수묵의 느낌을 방해하지 않음
  • 여행 태그: 화면에 "장면 설명 · 장소" 텍스트 + 고정된 주사 도장을 오버레이하여 여행 수첩처럼 연출

보존: 주체의 종류, 공간 관계, 인물의 정체성 (성별 / 나이 / 주요 외형). 대체: 사실적 질감 → 먹색 터치, 사진의 빛과 그림자 → 먹의 운치와 여백, 사실적 색상 → 국부적 전통 국화색.

언제 트리거되는가

사용자가 사진을 업로드하거나 참조하면서 "수묵 / 국화 / 사의 / 수묵화 / 여행 스케치 / 수묵화풍" 등의 의도를 표현할 때 발동됩니다. 이 스킬은 오직 수묵 스타일만 처리하며, 다른 스타일은 하지 않습니다.

입력 조건

  • 필수: 사진 1장 (로컬 경로, URL 또는 업로드된 이미지)
  • 선택: 장소 (예: "청두 거리") — 여행 태그용; 생략 시 장소는 쓰지 않고 장면 설명만 쓰거나 "여행자의 기록"으로 표시

핵심 스타일 규칙 (6대 철칙)

🎨 1. 수묵감 우선 철칙

흑백 수묵이 주인공이고, 컬러는 포인트입니다. 컬러 비율이 너무 높거나 색상이 너무 튀면 수묵감을 망칩니다(demo-016의 교훈). 그러므로:

  1. 컬러 비율 20%: 시각적 중심에만 점染하여 화면의 약 20%로 제한
  2. 흑백 + 직접적인 컬러: 흑백 톤 + 하나의 직접적인 컬러 포인트 (여러 색 혼합 금지, 그라데이션 금지, 넓은 영역 번짐 금지)
  3. 절제: 컬러가 적더라도 너무 많아서는 안 됨; 컬러는 적당히, 전통 문인화의 "색을 아껴 쓰듯이"
  4. 수묵감 우선: 먹색 5단계, 여백, 터치가 컬러의 존재감보다 강해야 함

🎨 2. 먹색 5단계 + 여백 철칙

  1. 먹색 5단계가 명확해야 함: 焦(그을린) / 濃(진함) / 重(무거움) / 淡(옅음) / 清(맑음), 균일한 회색 금지
  2. 여백 ≥ 50%: 화면 전체의 빈 공간이 50% 이상
  3. 🚨 주체 크기 철칙 (가장 중요): 인물 / 주체는 반드시 정상적인 비율 크기를 유지 (원본 사진에서의 인물 비율에 가깝게), 여백을 위해 주체를 줄이는 것 금지. 여백은 "배경과 모서리의 빔"이지 "주체의 작음"이 아닙니다. 인물은 크고, 완전하며, 자신 있게 화면의 주요 위치를 차지해야 함
  4. 먹을 아껴 쓰듯이: 전체 그림에 진한 먹 집중 영역 1개 (주체 위에), 밀집 영역은 작아야 함
  5. 소밀 대비: 주체는 충분히, 배경은 공허하게, 빈 것으로 실을 돋보이게 함 — 빈 것은 배경에 있지 주체에 있지 않음

🚨 3. 인물 정체성 고정 (성별 오류 교훈)

  • 절대 금지 단어: a person / a figure / someone / a lone traveler / a small figure
  • 반드시 명시적으로 작성: 성별 + 연령대 + 머리색 헤어스타일 + 의복 + 액세서리 + 자세 및 방향
  • 사의 방향: 옷 주름은 유려한 선, 얼굴은 여백 또는 몇 번의 스케치로 암시
  • drip/melt/flow 계열 동사 금지 (인물을 흘러내리는 액체로 만들어 버림)

✍️ 4. 사의(寫意) 삼요소

  1. 의도는 닿았으나 붓은 닿지 않음: 사물을 칠부만 그리고, 형태는 완성되기 전에 희미해짐
  2. 서법적 필치: 들어올림과 누름, 굴절, 흰 날림, 마른 붓
  3. 묵의 우연성: 젖은 먹 번짐, 파묵,泼墨
  4. 번잡함을 덜고 간결하게: 삭제하는 것은 배경 잡동사니 (선반, 차량, 간판, 바구니, 여분의 사람) — 주체 자체는 완전하고 충분하며 정상 크기를 유지 — 환경만 지우고, 주체는 지우지 않음

🎨 5. 컬러 터치 자동 배분 (20%)

  1. 시각적 중심은 무엇인가: 구도상 가장 크거나 / 가장 밝거나 / 가장 앞에 있거나 / 가장 독특한 주체
  2. 어떤 색을 쓸까: 주체의 자연스러운 색상 → 전통 국화색 (주사 / 치자 / 화청 / 석록 / 등황 / 자석)
  3. 비율 20%: 시각적 중심에만 점染, 화면의 약 20%
  4. 나머지 100% 흑백 먹

📝 6. 여행 태그 철칙 (v16 최종 형태)

완성된 모든 이미지에 여행 태그를 반드시 오버레이합니다. 형태 = 전통 국화 "제관(題款)" 방식: 먹색 글자 + 주사 도장을 화면에 직접 덮음, "카드 / 바닥판 / 테두리" 없음 (카드화는 수묵 미감을 해친다는 사용자 판단).

  1. 태그 내용: 장면 설명 + 장소 (예: "한여름의 수박 가판대 · 청두 거리"; 장소 생략 시 장면 설명만)
  2. 오버레이 방식: 그림 생성 모델이 직접 글자를 생성하도록 하면 안 됨 (반드시 깨짐); 반드시 scripts/tag.py (v6素材版)를 사용하여 생성 후 오버레이
  3. 템플릿화된 스타일 (이미지에 따라 변하지 않는 통일된 외관):
    • 위치: 오른쪽 위 세로 배열 (v17 개정) — 전통 국화 낙관의 클래식한 위치
    • 본문 제자(題字): 송체(Songti, 가로는 가늘고 세로는 굵음), 진한 먹색(#1E1E1E) 불투명, 각 글자가 한 열로 위에서 아래로
    • 베이지색 윤곽선(halo): 각 글자에 4px 베이지(#F5F0E6) 반투명 윤곽선(alpha 175), 어두운 먹 배경에서도 글자가 잘 보이도록
    • 주사 도장 = AI 생성된 진짜 도장素材: 주사색 전각 도장, 흰 글자 세로 배열, 칼자국, 인주 얼룩, 가장자리 불규칙. AI 그림 생성 모델로 한 번 생성 + scripts/seal-bake.py로 배경 제거하여 투명 바탕으로 만들고, 고정素材로 assets/seal-la.png에 저장, 모든 이미지에 동일한 이素材를 붙임 (PIL 폰트로는 실제 도장 질감을 구현할 수 없으므로 반드시 AI 생성素材 사용). 모든 이미지에 통일된 도장素材 사용, 변경 불가. 도장은 글자열 끝 바로 아래에 (수평 중앙 정렬) 배치
    • 전체 형태: 먹색 글자 + 주사 도장이 화면에 자연스럽게 녹아들어, 먹과 선을 해치지 않음
  4. 태그 순서: 그림 생성 모델 출력 → 태그 추가 (tag.py v7) → 상하 비교 이미지 생성 (태그 포함 완성품 사용, 아래쪽)

작업 흐름

Step 1 — 입력 파싱

이미지에 접근 가능한지 확인; 장소 질문 / 기록 (사용자가 말하지 않으면 쓰지 않음).

Step 2 — 이미지 이해 (컬러 계획 + 태그 결정 포함)

이미지를 읽고 다음을 추출 (필수):

  • 인물 정체성: 성별 + 연령대 + 머리색 헤어스타일 + 의복 + 액세서리 + 자세 및 방향 (prompt에 명시, 모호한 단어 금지)
  • 주체: 주요 사물 / 장면
  • 🎨 시각적 중심 판단 {focus}: 누가 가장 눈에 띄는가?
  • 🎨 컬러 계획 {color_scheme}: 시각적 중심의 자연스러운 색상 → 전통 국화색
  • 📝 태그文案 {tag_text}: 장면 설명 (3–8자) + 장소 (선택), 예: "포도 넝쿨 아래의 미소 · 옛 시장"
  • 구도 / 광원 / 분위기

Step 3 — prompt 구성

styles/ink-wash.md 템플릿을 읽고 변수 채우기.

Step 4 — 호스트 플랫폼의 그림 생성 기능 호출

mode        : image-to-image (호스트 플랫폼 그림 생성, 원본 이미지 따름)
input_image : 원본 이미지
prompt      : 전체 prompt (LOCKED APPEARANCE + 절제된 COLOR ACCENT 20% + 먹색 5단계 + 여백 ≥50% + 주체 크기 철칙 + XIEYI 포함)
fidelity    : medium
aspect      : 원본 이미지 따름

⚠️ 반드시 output_dir을 <workspace>/outputs/photo-restyle/<YYYYMMDD-HHMM>/로 명시적으로 전달해야 하며, 기본 디렉토리에 의존해서는 안 됩니다.

Step 5 — 전달 (먼저 태그 추가 후, 비교 이미지 생성)

  1. scripts/tag.py로 수묵 완성품에 여행 태그 오버레이 → <원본이미지명>-inkwash-tagged.png
  2. scripts/compare.py로 상하 비교 이미지 생성: 위쪽 원본 이미지 / 아래쪽 태그 포함 완성품 (기본 width 1600, 태그가 선명하도록 보장) → compare-<원본이미지명>-inkwash.png
  3. 주 출력 = 상하 비교 이미지 (태그 포함 완성품이 아래); tagged 단일 이미지와 순수 수묵 단일 이미지는 부록으로만 제공
  4. "수묵 여행 스케치" 스타일명 명시

하드 제약 (우회 불가)

  1. ❌ 순수 흑백 출력 금지 — 컬러 반드시 포함 (약 20%)
  2. ❌ 컬러 > 20% 금지 (컬러가 주인공 행세 = 오류 출력)
  3. ❌ 컬러가 배경 / 모서리에 나타나는 것 금지 (오직 시각적 중심에만)
  4. ❌ 고채도 현대색 / 보라색 / 형광색 / 그라데이션 무지개색 금지 (오직 전통 국화색만, 직접 점染)
  5. ❌ 그림 생성 모델이 태그 텍스트를 생성하도록 하면 안 됨 (반드시 깨짐) — 반드시 scripts/tag.py로 오버레이
  6. ❌ 인물 포함 시 모호한 단어 금지, 반드시 성별 / 나이 / 주요 외형 고정
  7. ❌ 여백을 위해 주체를 축소하는 것 금지 — 주체는 정상 크기 유지
  8. ✅ 출력 시 "수묵 여행 스케치" 스타일명 명시
  9. ✅ 주 출력은 반드시 상하 비교 이미지 (위쪽 원본 이미지 / 아래쪽 태그 포함 완성품); tagged 단일 이미지와 순수 수묵 단일 이미지는 부록으로만 제공
  10. ✅ 결과물은 보이는 디렉토리(예: <workspace>/outputs/photo-restyle/)에 출력하고, 플랫폼 숨김 디렉토리에 두지 않음

오류 처리

상황대응
이미지를 가져오지 못함사용자에게 먼저 사진을 업로드하도록 안내
순수 흑백 / 컬러 너무 옅음COLOR ACCENT 블록을 확인하고, "{focus}에 color REQUIRED, 약 20%" 강조
컬러 넘침 / 비율 너무 높음"color only on {focus}, about 20% of the frame, keep it restrained" 강조, 또는 {color_scheme} 설명 축소
컬러 너무 선명 / 현대적전통 국화색 이름만 쓰고, 반투명 직접 점染 강조
인물 성별 / 나이 변환LOCKED APPEARANCE를 보완하여 재실행
주체가 축소됨 / 여백이 주체를 잡아먹음SUBJECT SCALE 강조: figure big, emptiness in background only
태그 깨짐 / 누락scripts/tag.py로 재오버레이, 그림 생성 모델 재실행 금지
비교 이미지拼接 실패 / 태그가 비교 이미지에서 안 보임scripts/compare.py 확인 (기본 width 1600), 또는 두 장의 이미지를 개별 전달

출력 위치

<workspace>/outputs/photo-restyle/<YYYYMMDD-HHMM>/
├── <원본이미지명>-inkwash.png           # 부록: 수묵 이미지 (태그 없음)
├── <원본이미지명>-inkwash-tagged.png    # 부록: 여행 태그 추가 완성품
└── compare-<원본이미지명>-inkwash.png   # 주 출력: 상하 비교 이미지 (위 원본 / 아래 태그 포함 완성품)

Skill 디렉토리 구조

<플랫폼 skills 디렉토리>/ink-wash-restyle/ (WorkBuddy 예시: ~/.workbuddy/skills/ink-wash-restyle/)
├── SKILL.md                  # 본 파일 (규칙 진입점)
├── styles/ink-wash.md        # 수묵 prompt 템플릿 (LOCKED APPEARANCE / COLOR ACCENT / SUBJECT SCALE / XIEYI / 부정어 포함)
├── scripts/
│   ├── tag.py                # 태그 오버레이 (v6: 송체 먹글자 + halo + 도장素材 붙이기)
│   ├── compare.py            # 상하 비교 이미지 생성 (기본 width 1600)
│   ├── seal-bake.py          # 도장 배경 제거 도구 (AI 생성素材 → 투명 바탕)
│   └── prototype_seal.py     # 도장 스타일 비교 디버깅 도구 (히스토리)
├── assets/
│   └── seal-la.png           # 고정 주사 도장素材 (투명 바탕, AI 생성)
└── examples/README.md        # 예시 설명

버전 기록

  • v1–v5: 순수 흑백 수묵 노선
  • v6 (롤백됨): 고정 얼굴 치자
  • v7: 기본 상하 비교 이미지
  • v8: 흑백 바탕 + 컬러 터치 (시각적 중심, 자동 배분 15–35%)
  • v9: 컬러 ≤15%로 압축 + 여행 태그 철칙
  • v9.1: 주 출력 반드시 상하 비교 이미지
  • v10: 태그 "미색 카드 바닥판"화 (후에 기각)
  • v11: 컬러 20%; 도장 고정; 태그 "선지 시트"화 (후에 기각)
  • v12: 태그 카드화 제거 (순수 제관 방식) + 여백 55%
  • v13: 주체 크기 철칙 추가 (여백 ≠ 주체 축소), 여백 50%로 회귀
  • v14: 도장 세로 배열 + 송체 (폰트 방식, 후에 기각)
  • v15: compare 기본 width 1600 (태그가 축소되어도 선명)
  • v16 (현재 고정판): 도장을 AI 생성 진짜 전각素材 (assets/seal-la.png)로 변경, tag.py v6素材 붙이기 방식; 모든 규칙을 본 파일에 명시된 상태로 수렴
  • v17: 사용자 요청 "다른 것은 그대로 두고, 태그와 낙관을 오른쪽 위 세로 배열로 변경" → tag.py v7: 위치를 왼쪽 아래에서 오른쪽 위로 변경, 본문 제자 세로 배열 (위→아래), 도장을 글자열 정중앙 아래 (수평 중앙 정렬)에 배치
  • v17 터치 수정 (styles/ink-wash.md 업데이트): "붉은 기와 마을 / 가을 게 연회" 스타일의 수묵 사의 터치 복원 — ① v19 CLEANLINESS 블록 추가 (깔끔하고, 터치가 분명하며, 지저분하지 않음) ② XIEYI 삼요소 장면화: 배경 (먼 산/하늘/큰 색면)은 젖은 먹 번짐 (wet-on-wet ink wash, 먹이 선지에 스며듦), 전경 (식물 잎/지붕 기와/세부)은 날리는 마른 붓 (feibai dry brush) 사용. 검증: demo-058 란사로테, demo-059 백촌 자석탑 모두 안정적으로 붉은 기와 마을 스타일 발현 확인

관련 스킬