3줄 요약

  1. yanliudesign/mono-color-skill은 주제, 문장, 사물, 사진 한 장을 편집 인쇄물 이미지로 바꾸는 Claude Code 에이전트 스킬이다. 2026-08-19에 공개되어 8월 31일 기준 별 607개, 포크 29개를 받았다.
  2. 규칙은 셋으로 압축된다. 인쇄 잉크는 두 판을 넘지 않고, 빈 종이가 화면의 25\~55%를 차지하며, 참조 이미지에서 최소 네 개의 구조 변수를 바꾼다.
  3. 프롬프트를 쓰기 전에 23개 필드짜리 레시피 매니페스트를 확정하고, 기계 판독 카탈로그 7종이 값의 정본을 쥐며, 16개 평가 케이스가 GitHub Actions에서 매 푸시마다 검증된다.

스킬이 하는 일

입력은 주제 한 줄이거나 사용자가 건넨 사진 한 장이다. 출력은 생성된 래스터 이미지, 그 이미지를 만든 프롬프트 전문, 그리고 인쇄 방식과 잉크와 구도를 적은 짧은 레시피 세 가지다. 이미지 생성 도구가 없으면 프롬프트만 돌려주고 그 한계를 밝힌다.

계통방향
입력주제, 문구, 사물, 기사 아이디어, 또는 제공된 사진
팔레트흰색·차가운 회색·연한 베이지 기판에 기본은 통제된 두 색, 명시적 단색 요청은 단색 유지
모드순수 단색, 유채색 + 검정, 보색 듀오톤, 오버프린트 듀오톤
이미지하프톤, 리소그래프 그레인, 청사진 노출, 복사기 붕괴
공간비대칭 편집 그리드 위에 눈에 보이는 빈 종이 25\~55%
타이포문학 세리프, 문화 그로테스크, 압축 시빅, 프로그램형, 회전형, 손글씨, 글자-사물 중 내용에 반응하는 하나
출력생성 이미지, 생산용 프롬프트 전문, 짧은 레시피

용도로는 행사·전시 포스터, 샤오홍수 커버와 팟캐스트 커버, 초대장과 티켓과 패키지 스티커, 여행 일지와 사진첩 표지, 책 표지와 진(zine) 내지, 문학 인용과 시를 들었다. 저자가 밝힌 공통점은 비용이다. 한 가지 잉크만 써도 시각적 정체성을 잃지 않으므로 인쇄 단가를 낮출 수 있다.

설치는 저장소를 Claude Code 스킬 디렉토리에 복제하는 것으로 끝난다.

git clone https://github.com/yanliudesign/mono-color-skill.git \
	~/.claude/skills/mono-color

다른 에이전트 환경에서는 SKILL.md를 진입점으로 읽으면 된다고 적었다.

잉크 시스템

기판 3종, 단색 8종, 두 색 조합 9종이 정해져 있다. 저장소가 공개한 hex 값을 직접 렌더링해 보면 이렇다.

기판 3종과 단색 8종, 두 색 조합 9종의 hex 값을 색 견본으로 렌더링한 표. 두 색 조합의 색 띠 폭이 지배 판과 강조 판의 비율을 나타낸다.

두 색 작업에서 지배 판은 인쇄 면적의 70\~85%를, 강조 판은 15\~30%를 맡는다. 강조 판에는 날짜, 주석, 선택된 사물, 오버프린트 교차 지점처럼 구체적인 임무가 있어야 한다. 두 번째 색을 장식으로 흩뿌리는 것은 금지다.

세 번째 색으로 오해받기 쉬운 두 가지를 미리 잘라 둔다. 종이 기판은 잉크로 세지 않고, 두 판이 겹친 자리에 생기는 더 어두운 색도 세 번째 잉크가 아니다. 잉크 농도가 짙어 거의 검게 보이거나 하프톤이 옅어 창백하게 보이는 것 역시 농도 변화일 뿐이다.

기판 선택에는 별도의 원칙이 붙어 있다. 하프톤과 판 분리는 재현 방식을 뜻하고 시대를 뜻하지 않으므로, 제한된 잉크를 썼다는 이유만으로 누런 종이나 세피아를 끌어오지 않는다. 기본은 중성 흰색 #FAFAF7이고, 빈티지 처리는 사용자가 요청할 때만 켜진다. 변경 이력을 보면 이 부분은 최근에 뒤집혔다. 고정 웜 아이보리 기본값을 버리고 세 기판 중 이미지와 잉크 대비에 따라 고르는 방식으로 바꿨다.

일반 색 이름을 어떻게 해소할지도 고정되어 있다. 파랑은 코발트, 초록은 보태니컬 그린, 주황은 테라코타, 빨강은 시그널 레드, 보라는 오베르진, 검정은 차콜이다. 초록과 검정을 함께 부르면 민트 그린 + 차콜, 파랑과 주황을 함께 부르면 코발트 + 테라코타로 간다.

프롬프트 전에 확정하는 레시피

치비 서소영이 빈 체크리스트 카드를 한 칸씩 펜으로 채우면서, 다른 손으로는 인쇄기 손잡이를 붙잡아 당기지 않고 멈춰 세우고 있다.

프롬프트를 쓰기 전에 입력을 23개 필드짜리 매니페스트로 해소한다. 필드를 건너뛸 수 없고, 사용자가 과정을 묻지 않으면 노출하지도 않는다.

subject: <하나의 식별 가능한 주제>
representation: <faithful reproduction 또는 abstract symbol extraction>
ratio: <명시된 비율 또는 3:4>
substrate: <colors.json의 기판 ID와 정확한 hex>
mode: <pure one-ink / chromatic + black / complementary duotone / overprint duotone>
palette: <colors.json의 팔레트 ID>
plate_roles: <잉크 판마다 명시적 역할 하나>
layout: <compositions.json의 구도 ID>
empty_paper: <명시적 백분율>
visual_tension: <rhythm.json의 relaxed / balanced / assertive>
focal_event: <rhythm.json의 강한 시각 사건 하나>
release_zone: <초점 사건에게 자리를 내주는 조용한 영역 하나>
imperfection_seed: <해소된 레시피에서 파생한 안정 해시>

사용자가 고르지 않은 항목의 기본값은 이렇게 정해져 있다. 비율 3:4, 재현은 충실한 복제, 창작 문구는 영어, 기판은 중성 흰색, 모드는 통제된 두 색, 주제가 불명확하면 코발트 + 테라코타, 빈 종이 35%, 시각적 긴장은 성찰·여행·여름·여유·생활 주제에서 relaxed, 통상적 행사와 편집 정보에서는 balanced다.

이 절의 마지막 문장이 스킬의 성격을 가장 잘 드러낸다.

동일한 입력에 대해서는 동일한 매니페스트로 해소한다. 새로움을 위해서만 팔레트, 구도, 백분율, 공정을 흔들지 않는다.

버전 1.2.0의 변경 이력에도 같은 방향이 적혀 있다. 연속 출력이 novelty만을 위해 구도를 바꾸는 일을 없앴고, 요청되지 않은 디스플레이 문구를 기본으로 창작하지 않게 했다.

기계가 읽는 디자인 시스템

치비 서소영이 작은 라벨 서랍이 빽빽한 캐비닛에서 서랍 하나만 열어 납작한 견본 칩 한 장을 꺼내 들고, 나머지 서랍은 닫아 둔다.

design-system/ 아래 JSON 카탈로그 7종이 시각 문법을 기계가 읽을 수 있는 값으로 분리해 둔다.

카탈로그정의하는 것항목 수
colors.json기판, 잉크, 팔레트 조합과 지배·강조 비율기판 3, 잉크 19, 팔레트 10
typography.json타이포 역할과 역할별 크기 대비 비역할 7
compositions.json구도별 지배 주제 면적과 빈 종이 범위구도 9
carriers.json매체별 허용 비율, 필수 단서, 금지 단서매체 7
imperfections.json인쇄 결함 효과와 강도 범위, 시드 전략효과 5
rhythm.json긴장 프로필, 초점 사건, 해방 장치, 실패 신호프로필 3
reference-analysis.json참조 이미지 12장의 타이포·색·구도·양식 증거참조 12

산문과 카탈로그가 어긋날 때의 우선순위를 스킬이 직접 정해 두었다. 산문은 의도를 설명하고, 정확한 값이 다르면 카탈로그가 이긴다. 그리고 지금 결정에 필요한 카탈로그만 읽으라고 덧붙인다.

BOARD-DIRECTION.md는 이 ID 체계가 왜 필요한지를 한 문장으로 밝힌다. 색은 장식이 아닌 증거이므로 모든 잉크를 식별자와 값이 붙은 인쇄 견본으로 보여주며, 일치하는 ID가 있으면 생성 시스템도 사람과 같은 선택을 프로그래밍적으로 할 수 있다는 것이다.

typography.json의 크기 대비는 역할마다 다르게 잡혀 있다. 문학 세리프는 6:1\~12:1, 문화 그로테스크는 8:1\~16:1, 압축 시빅은 8:1\~14:1, 프로그램형은 4:1\~9:1, 회전 디스플레이는 10:1\~20:1, 글자-사물은 12:1\~20:1이다. 손글씨는 지지 타이포 대비 2:1\~6:1이며 날짜와 장소, 핵심 사실, 긴 본문은 절대 맡지 않는다.

carriers.json에는 매체마다 필수 단서와 금지 단서가 쌍으로 붙어 있다. 예컨대 레코드 슬리브는 1:1만 허용하고 포스터의 날짜 위계와 책 제본을 금지 단서로 지목한다.

구도를 고르는 순서

구도는 무작위로 고르지 않고 아래 목록을 위에서 아래로 훑어 첫 번째로 일치하는 규칙을 쓴다.

  1. 행사·방법·일정·사실 공지인가. 그렇다면 ruled information poster.
  2. 식물학적·수집적·분류학적 주제인가. 그렇다면 archival plate.
  3. 평범한 사물 하나를 반복 리듬으로 요청했는가. 그렇다면 object field.
  4. 두 이미지나 색, 타이포 층이 물리적으로 교차해야 하는가. 그렇다면 overprint collage.
  5. 제공된 인물 사진이나 장면 사진이 있는가. 충실한 복제면 image field, 추상 기호 추출이면 기본적으로 editorial cover.
  6. 라벨이나 비교를 위한 사물 1~3개가 있는가. 그렇다면 specimen annotation.
  7. 사용자의 문구 자체가 주된 시각 주제인가. 그렇다면 type-led declaration.
  8. 사진과 읽을 수 있는 본문을 갖춘 성찰적·에세이적 내용인가. 그렇다면 editorial journal.
  9. 그 외에는 editorial cover.

각 구도에는 지배 주제가 차지할 면적과 빈 종이의 범위가 숫자로 붙어 있다. image field60\~80%20\~40%, archival plate45\~60%40\~55%, overprint collage60\~80%20\~40%처럼 구도마다 다르다. 수동 제스처 한계는 아홉 구도 모두 1이다. 손으로 그린 선, 동그라미 친 사실, 등록 마크 중 한 계열만 쓰고, 여러 낙서 양식을 섞으면 페이지가 스크랩북 장식으로 떨어진다고 못 하게 했다.

참조 12장에서 뽑아낸 구성 문법도 네 동작으로 정리해 두었다. 사물 하나가 지배하고(면적 45\~80%, 한 변 이상에서 과감히 잘림), 타이포가 그 사물과 충돌하고, 종이가 이미지를 관통하고(하이라이트 클립, 불규칙 컷아웃, 하프톤 페이드, 판 녹아웃), 수동 제스처 하나가 시스템을 끊는다.

시각적 긴장과 고르지 않은 에너지

치비 서소영이 페이지 가장자리에서 잘린 거대한 검은 원 하나 옆에 서서, 일부러 완전히 비워 둔 나머지 지면 전체를 향해 팔을 펼친다.

rhythm.json이 정의하는 명제가 이 저장소에서 가장 날이 선 부분이다.

이완은 낮은 에너지가 아니라 고르지 않은 에너지다.

relaxed 작업이라도 강한 초점 사건을 정확히 하나 고른다. 오버사이즈 타이포, 극단적 크롭, 거대한 사물이나 디테일 하나, 집중된 오버프린트 충돌, 비정상적 크기 관계 다섯 가지 중 하나다. 그 하나는 단호하게 느껴져야 하고, 나머지 지면은 열린 종이와 창백한 스크리닝, 희박한 지지 타이포로 풀어 준다. 모든 요소를 고르게 작고 얌전하게 만드는 것이 이완이 아니다.

세 프로필의 빈 종이 범위는 relaxed 25\~55%, balanced 25\~50%, assertive 20\~45%이며, 초점 사건 수와 해방 영역 수는 세 프로필 모두 각각 1이다.

실패 신호도 명시되어 있다. 헤드라인을 한쪽에, 온전한 사진을 반대쪽에 두는 안전한 분할이 그중 하나다. 판정 기준은 섬네일 크기다. 축소해서 보았을 때 초점 사건이 즉시 식별되고 해방 영역이 눈에 띄게 더 조용해야 한다.

사진을 받지 못한 경우의 지침이 특히 구체적이다. 매끈한 스톡 사진 인물이나 광고 포즈로 도망가지 말고, 핸들을 잡은 손, 굽은 다리 하나, 바퀴의 호, 헐렁한 천, 머리카락 방향처럼 식별 앵커 2\~4개로 인물을 세운다. 인물은 불완전한 채로 남고, 움직임 주제에서는 사물이나 잘린 신체 관계가 초점 사건을 맡는다.

통제된 우연

구도, 문구, 팔레트, 위계는 결정론으로 두고 느슨함은 재현 층에만 넣는다. 동시대 편집 작업은 절제된 효과 0\~2개, 촉각적·빈티지·기록물 노화 작업은 2\~3개를 고른다.

효과강도 범위
불균일한 잉크 농도6\~12%
마른 가장자리 붕괴1\~4%
하프톤 드리프트5\~10%
등록 드리프트1\~3mm
끊어진 수동 제스처간격 4\~12%

시드는 주제, 정확한 문구, 팔레트, 구도의 안정 해시로 만들고 재시도 사이에 보존한다. 같은 입력이면 같은 자리에 같은 흠이 찍힌다. 효과는 큰 타이포와 이미지 판, 단색 도형, 단일 제스처 계열에만 적용하며 마이크로카피와 사실 정보는 왜곡하지 않는다. 단색 작업에서 등록 드리프트는 같은 잉크의 창백한 두 번째 인상으로만 나타날 수 있고, 다른 색을 더하지 않는다.

마지막 금지가 정직하다. 통제된 우연으로 지배 사물을 옮기거나 줄바꿈을 바꾸거나 그리드를 고치거나, 풀리지 않은 구도를 보상하지 못한다.

원본성 방화벽

치비 서소영이 벽에 걸린 참조 포스터 옆에 자기 포스터를 들고, 자기 것이 다른 네 자리를 하늘색 동그라미로 표시해 가리킨다. 두 장은 분명히 별개로 남아 있다.

참조는 시각 문법의 증거이지 베낄 레이아웃이 아니다. 생성 전에 아래 열 가지 중 최소 네 가지를 제공된 참조에서 바꿔야 한다.

주제와 크롭, 구도 계열, 헤드라인 문구, 헤드라인 위치, 이미지 형태나 개수, 그리드 구조, 타이포 조합, 메타데이터 처리, 비율, 교란 장치.

참조의 정확한 사물 배치, 줄바꿈, 라벨, 날짜, 로고, 테두리 체계, 특징적 슬로건은 재현하지 않는다. 가짜 서명이나 발행 표시도 넣지 않는다. 프롬프트를 쓸 때 참조 작가나 스튜디오, 샘플 포스터, in the style of 같은 표현을 언급하지 못하게 하고, 눈에 보이는 결과만 서술하라고 요구한다.

이 원칙은 저장소 자신의 라이선스에도 반영되어 있다. 코드와 스킬 지침과 스크립트는 MIT지만, examples/ 아래 시각 예시와 작품은 저작권자에게 남아 있고 사전 허락 없는 복제·수정·재배포·상업적 사용이 금지된다. 이 다이제스트가 원문 예시 이미지를 옮겨 싣지 않은 이유다.

평가 계약과 CI

evals/evals.json에 대표 프롬프트와 결정론적 단정을 짝지은 케이스 16개가 있다. 스키마는 최소 12개를 요구하고, 케이스마다 비율, 모드, 잉크 hex, 판 역할, 구도, 정확한 문구, 이미지 생성 여부, 금지 항목을 필수 필드로 받는다. 잉크 hex는 최대 2개까지만 허용되고 형식은 ^#[0-9A-F]{6}$로 고정되어 있다.

흥미로운 케이스는 요청을 그대로 들어주지 않는 쪽이다.

케이스요청기대 결과
8빨강·파랑·노랑 세 가지 잉크로 만들어 달라두 색으로 제약하고 판 한계를 설명한다. 금지 항목에 yellow ink, third ink, silent rule violation
10참조 포스터를 똑같이 다시 만들고 제목만 바꿔 달라요청한 문구는 지키되 구조 변수를 최소 네 개 바꾼 원본 작업. 금지 항목에 exact reconstruction, copied line breaks
7프롬프트만 달라다섯 단락 생산용 프롬프트와 레시피. 이미지를 생성했다는 주장 금지
15배경은 베이지 말고, 복고로 낡히지도 말라차콜 + 시그널 레드, 동시대 편집 방향
16조용한 잡지 세리프 말고 당대 문화 감각의 서체로비율 1:1, 문화 그로테스크 계열

GitHub Actions는 pull request와 main 푸시마다 세 가지를 돌린다. validate_evals.py로 평가 계약을, validate_design_system.py로 카탈로그 간 상호 참조를, 그리고 evals/ 두 파일과 design-system/*.json 전부의 JSON 구문을 검사한다.

산출물 검사도 자동화 밖에 별도로 있다. 생성 후 전체 크기와 섬네일 크기로 두 번 보고, 열한 가지 조건 중 하나라도 어긋나면 한 번 재생성한다. 최종 품질 게이트는 열아홉 개 질문으로 되어 있다.

가장 흥미로운 지점

나를 붙든 것은 케이스 8의 금지 항목이었다. 세 가지 잉크를 달라는 요청에 대해 yellow inkthird ink를 막는 것은 당연하다. 그런데 목록의 세 번째가 silent rule violation이다. 규칙을 지키는 것과, 규칙을 지켰다는 사실을 사용자에게 말하는 것을 따로 요구한 셈이다. 두 색으로 조용히 만들어 내놓으면 규칙은 지켜졌지만 이 케이스는 실패한다.

에이전트가 사용자 요청을 거절하는 상황을 평가 케이스로 고정해 둔 것도 눈에 남는다. 케이스 10은 “참조 포스터를 똑같이 다시 만들어 달라"는 요청인데, 기대 결과는 거절이 아닌, 요청한 문구는 지키면서 구조를 네 군데 이상 바꾼 결과물이다. 취향과 윤리를 프롬프트의 훈계로 처리하지 않고, 통과·실패가 갈리는 단정으로 옮겼다.

한 가지 확인하지 못한 것이 있다. 이 저장소는 프롬프트 계약과 카탈로그와 CI를 갖췄지만, 생성 모델이 실제로 그 계약을 얼마나 지키는지를 재는 장치는 없다. validate_evals.py가 검증하는 것은 평가 파일 자체의 형식이고, 만들어진 이미지가 잉크 두 판을 넘었는지 판정하는 일은 여전히 사람의 눈에 맡겨져 있다. 결정론을 지침 층까지 밀어붙인 다음, 그 아래 층은 아직 열려 있다.

출처

Yan Liu (Dreameryanyan) · 2026-08-19 공개, 최신 푸시 2026-08-31 · 버전 1.2.0 (2026-08-22) 이후 미공개 변경 다수 · 코드와 스킬 지침은 MIT 라이선스, examples/ 시각 자산은 별도 라이선스

원문: https://github.com/yanliudesign/mono-color-skill

원문 examples/ 이미지는 재배포가 허락되지 않아 인용하지 않았다. 잉크 견본 이미지는 저장소가 공개한 hex 값을 직접 렌더링한 것이다. 치비 서소영 삽화는 「느낌적인 느낌을 숫자로 옮기는 일」의 치비 서소영 라인아트를 참조하여 gpt-image-2 image-to-image로 생성했다.