이직용 이력서, 여권 갱신, 운전면허증, 마이넘버 카드—.
수년에 한 번, 혹은 갑작스러운 절차로 '증명사진'이 필요할 때마다 동네 증명사진기(부스)나 사진관을 찾아다닌 경험은 없으신가요?
'스마트폰 카메라도 깨끗하고 집에서 셀카 찍어서 저렴하게 해결하자'고 생각해도, 막상 직접 찍어보면 벽 그림자가 지거나, 방 조명 때문에 피부가 어둡거나, 시선이나 머리가 미묘하게 기울어지거나, 애초에 정장을 입지 않은 경우가 많습니다. 게다가 각 신청서마다 요구하는 '정수리 여백 3mm', '얼굴 길이 34mm' 같은 엄격한 밀리미터 단위의 트리밍 작업과 L판 사진 용지에 배치(4분할 구성)하는 작업을 수작업으로 시도하다가 Photoshop이나 Word와 씨름하며 반나절을 허비한 분들도 많으실 겁니다.
그래서 평소 사용하던 AI 에이전트에게 '이 사진으로 여권용과 이력서용 증명사진을 만들어 줘'라고 요청하는 것만으로, 일상 스냅 사진에서 정장으로 자연스럽게 합성・자세 수평 보정・공적 밀리 규격 트리밍・편의점 300DPI 인쇄 용지 제작까지 원스톱으로 진행하는 스킬 (Agent Skill)을 오픈 소스로 공개했습니다.
[!NOTE]
📁GitHub 리포지토리※프롬프트 모음, 밀리 단위 트리밍 & 배치 스크립트, 샘플 이미지 일체를 완벽하게 수록하고 있습니다.
이 글에서는 본 스킬의 설계 사상, 야외 스냅 사진을 사용한 실제 변환 단계와 프롬프트, 에이전트에서의 사용법, 그리고 '왜 이미지 생성 AI 단독 방식이 아닌 하이브리드 처리를 했는지'에 대한 기술적인 노하우와 주의점까지 자세히 설명합니다.
| 항목 | 내용 |
|---|
| 스킬명 | id-photo-studio (ID Photo Studio / 증명사진 스튜디오) |
| 소스 코드 | github.com/lumichy/skills/tree/main/skills/id-photo-studio |
| 라이선스 | MIT License |
| 대응 규격 | 이력서(40×30mm), 마이넘버・여권(45×35mm), 운전면허증(30×24mm), 미국 비자(51×51mm), TOEIC(40×30mm), 커스텀 사이즈 |
| 출력 포맷 | 디지털 제출용 단일 JPEG + 편의점 인쇄용 배치 시트 (L판 89×127mm / 2L판 127×178mm, 300 DPI, 톤보・실물 크기 확인용 50mm 자 스케일 포함) |
| 코어 기술 | AI 이미지 생성・편집 + Python 정밀 이미지 처리 (기울기 수평 보정・주파수 분리 얼굴 락 합성・규격 트리밍) |
| 필요 라이브러리 | pillow , numpy , scipy |
'백문이 불여일견(百聞は一見に如かず)'이라는 말처럼, 리포지토리에 수록된 샘플을 기반으로 입력 사진에서 증명사진이 완성되기까지의 과정을 실제 프롬프트와 함께 살펴보겠습니다.
원 이미지는 날씨가 좋은 야외에서 캐주얼한 복장으로 나란히 촬영된, 머리가 좌우로 기울어진 2인 스냅 사진입니다.
元写真:屋外スナップ写真
원 사진: 머리 기울기, 캐주얼 사복, 야외 자연광・나무 배경, 2명이 나란히 찍은 스냅사진
여기서 에이전트가 기하 보정・AI 편집・주파수 분리 합성・밀리 규격 트리밍의 단계를 자율적으로 진행합니다.
먼저, 에이전트가 스크립트를 실행하여 양쪽 눈 동공 좌표를 읽어 들인 후, 기울기 각도 $ heta = ext{atan2}( ext{Δ} y, ext{Δ} x)$을 계산해 회전 보정합니다.
- 형님: 오른쪽 어깨가 올라간 부분에서 +17.93도 기울어진 머리를 수평으로 회전 보정 -
- 여동생: 왼쪽 어깨가 내려간 부분에서 -25.02도 기울어진 머리를 수평으로 회전 보정
이를 통해 양 눈을 잇는 직선이 완벽한 수평이 된 표준 3:4 포트레이트가 잘려 나옵니다.
수평화된 포트레이트 이미지를 입력으로 받아, 이미지 생성・편집 AI에게 스튜디오 증명사진화를 지시합니다.
본 스킬에서는 용도에 맞춰 3가지 프롬프트 패턴을 준비했습니다.
공적 기관의 여권이나 마이넘버, 취업 활동 이력서 등 '이를 보이지 않는 진지한 표정'이 필수인 용도를 위한 것입니다.
<INPUT_IMAGE_PATH>에 있는 참조 사진을 편집하여 전문적인 일본 공적 신분증 사진(証明写真)을 만들고 <OUTPUT_PATH>에 저장하세요.
엄격한 요구 사항:
- 신원 보존: 입력 사진 속 인물의 얼굴 특징, 눈 모양, 코, 입, 피부 톤, 안면 구조 및 나이를 정확하게 유지하세요. 그들의 정체성을 변경하거나 다른 사람처럼 보이게 만들지 마세요.
학생증이나 좋아하는 사복/교복을 그대로 활용하고 싶을 때의 프롬프트입니다.
Edit the reference photo at <INPUT_IMAGE_PATH> to create an official ID photo (証明写真) and save it to <OUTPUT_PATH>.
Strict Requirements:
1. Identity & Clothing Preservation: Keep the exact same person's facial features, expression, and current clothing. Tidy up minor wrinkles if needed.
...
사원증이나 프로필 사진 등, 원래의 자연스러운 미소나 치열을 1mm도 흐트러짐 없이 정장으로 입히고 싶을 때의 프롬프트입니다.
Edit the reference photo at <INPUT_IMAGE_PATH> to create an ID photo (証明写真) and save it to <OUTPUT_PATH>.
Strict Requirements:
1. Strict Face & Expression Lock (DO NOT MODIFY THE FACE): Keep the person's head, facial features, eyes, gaze, mouth, and exact facial expression 100% untouched and identical to the input photo. Do NOT alter, retouch, or regenerate their expression or facial structure in any way.
...
AI 단독으로 출력할 경우, 눈코입이나 치열이 미묘하게 재현(redraw)되는 경향이 있습니다.
따라서 스크립트(composite_original_head.py)를 사용하여, 원 사진에서 얼굴 내부(눈썹/눈/코/입/점)의 고주파 성분 잠금(High-Frequency Component Lock)과 가우시안 저역 통과 색감 보정(Gaussian Low-Pass Color Correction)을 통해 추출하고, AI가 생성한 정장 및 목 부분 이미지에 매끄럽게 블렌딩합니다.
패턴 C의 경우: 얼굴 전체(눈/코/입/미소/치열)를 원 사진에서 완전히 잠금
패턴 A의 경우: 입 부분은 AI가 생성한 닫힌 표정을 채택하는 동시에, 눈 주변부터 눈썹 영역까지는 원 사진의 픽셀을 완전히 잠급니다.
마지막으로 스크립트(process_id_photo.py)가 공적 규격에 맞춰 밀리미터 단위의 픽셀 계산을 수행하여, 단독 사진과 편의점 인쇄용 면 분할 시트를 출력합니다.
스마트폰으로의 열람을 고려하여, 완성된 각 샘플의 상세 내용을 순서대로 세로 스크롤로 소개합니다.
눈 주변은 본인의 픽셀을 100% 유지한 채, 입 부분을 자연스러운 폐구(closed mouth) 상태로 보정하고 정장을 착용한 공적 증명사진입니다.
お兄ちゃん パターンA
여권/마이넘버 규격(45×35mm) / 기울기 수평 보정(+17.93°) + 눈 주변 100% 본인 잠금 + 폐구 보정
원 사진의 미소, 시선, 치열을 1픽셀도 변경하지 않으면서, 정장으로 교체하고 파란 배경의 스튜디오 라이팅화가 구현된 포트레이트입니다.
お兄ちゃん パターンC
여권/마이넘버 규격(45×35mm) / 기울기 수평 보정(+17.93°) + 얼굴/미소/치열 100% 유지
세븐일레븐이나 로슨 등의 멀티 복사기에서 바로 인쇄할 수 있는, 4면 분할 L판 시트입니다.
お兄ちゃん L判シート
L판(89×127mm) 300 DPI / 커터용 도련(재단선) 및 실물 크기 확인용 50mm 자 스케일 포함
-25.02° 기울어진 머리를 수평으로 보정하고, 눈 주변의 본인성을 유지하면서 차분한 포멀 증명사진으로 만듭니다.
妹さん パターンA
여권/마이넘버 규격 (45×35mm) / 기울기 수평 보정 (-25.02°) + 눈 주변 100% 본인 잠금 + 입 다물기 보정
사촌의 원래 귀여운 미소 표정을 완전히 유지한 채, 포멀 의상과 증명사진 배경으로 변환합니다.
妹さん パターンC
여권/마이넘버 규격 (45×35mm) / 기울기 수평 보정 (-25.02°) + 얼굴・미소・치열 100% 유지
사촌의 증명사진 4면 세트입니다. 하단에 50mm 자 스케일이 부착되어 있어, 인쇄 후 실물 크기 확인이 가능합니다.
妹さん L判シート
L판 (89×127mm) 300 DPI / 커터용 동봉선(재단선)・실물 크기 확인용 50mm 자 스케일 포함
사실 이 스킬을 만들기 전, 저는 두 가지 접근 방식으로 실패했습니다.
처음에는 '이미지 생성 AI의 프롬프트로 “이 사람 얼굴 그대로 정장을 입혀 증명사진으로 만들어줘”라고 요청하면 한 번에 될 것'이라고 생각했습니다. 하지만 최신 이미지 생성 모델이라 하더라도, AI의 이미지 인코더(encoder)와 디코더(decoder)를 거치는 과정에서 눈 크기, 쌍꺼풀 폭, 치열, 콧대 모양, 점 위치가 미묘하게 변해서 다른 사람처럼 되어버리는 치명적인 문제에 부딪혔습니다. 공적 증명사진에서 '본인과 얼굴이 다르다'는 것은 즉시 반려(심사 탈락) 대상입니다.
다음으로 '그럼 원 사진의 얼굴을 Python의 OpenCV나 Pillow로 타원형으로 잘라내어, 정장 무료 소스에 합성하면 되지 않을까?'라고 시도했습니다. 그런데 사람 얼굴의 윤곽이나 턱 아래, 목 부분에는 복잡한 그림자가 드리워져 있습니다. 오려 붙이는 합성은 목과 옷깃의 경계선이 도드라지게 되어 마치 콜라주 이미지 같은 강렬한 부자연스러움이 남았습니다.
그래서 채택한 것이 AI 이미지 생성과 Python 정밀 이미지 처리의 장점을 분담시키는 하이브리드 설계입니다.
[ 입력 사진 (기울기・캐주얼 의상・배경 잡다함) ]
│
▼
...
패턴 A(정장 갈아입히기 + 입 다문 증명사진 표정):
여권, 마이넘버, 취업 활동 등 공적 규격에서 '미소 불가・정장 착용'이 정해져 있는 상황에 최적입니다. -
패턴 B(의상 그대로 + 배경・조명・자세 보정):
학생증, 자격증, 좋아하는 사복이나 오피스 캐주얼을 그대로 살리고 싶은 상황에 최적입니다. -
패턴 C(원래 미소・표정 100% 유지 + 정장 갈아입히기):
사원증, 비즈니스 SNS 아이콘, 강연용 프로필 등 본인의 자연스러운 미소와 정장 차림을 모두 살리고 싶은 상황에 최적입니다.
본 스킬은 AI 에이전트의 스킬 디렉터리에 배치하는 것만으로 이용 가능합니다.
본 스킬을 구동할 에이전트 환경으로는, 텍스트 추론과 고급 이미지 생성・멀티모달 처리를 모두 잘하는 Codex나 Google Antigravity 사용을 강력히 추천합니다.
이러한 환경에서는 에이전트 자체가 고성능의 이미지 생성/시각 도구를 표준으로 갖추고 있기 때문에, 추가 설정 없이 가장 자연스러운 정장 갈아입히기나 목 부분 조화가 완료됩니다.
반면, CLI형 코딩 에이전트로서 인기가 높은 Claude Code에서 본 스킬을 이용할 경우, 기본적으로 이미지 생성 도구가 내장되어 있지 않습니다.
따라서 Claude Code를 사용하시는 분들은 이미지 생성이 가능한 외부 도구나 스킬을 사전에 준비해 두셔야 합니다.
만약 손에 이미지 생성 유료 API나 환경이 없다면, 로컬 환경에서 완전 무료로 구동되는 멀티모달 AI 도구인 'AGNES'의 활용을 추천합니다. 아래 스킬을 Claude Code에 결합함으로써, 무료이면서 고정도의 이미지 편집・생성 파이프라인을 즉시 구축할 수 있습니다.
- AGNES 스킬 (GitHub): skills/agnes-local-generation on GitHub
- 상세 해설 기사: AGNES-2: 완전 무료・로컬에서 구동되는 멀티모달 AI 이미지 생성 가이드
에이전트의 채팅창에서 원 사진의 경로와 '누구의 증명사진을 만들지'를 지정하여 자연어로 말을 겁니다. 여러 사람이 찍힌 사진이라도, 대상 인물을 지정하면 개별적으로 잘라내어 처리해 줍니다.
이 두 장의 사진(./samples/original_two_shot.jpg)에서, 왼쪽 오빠의 여권용 증명사진을 만들어 주세요.
L판 사진 용지에 인쇄하고 싶으니, 프린트 시트도 부탁드립니다.
복장은 다크 수트로, 배경은 라이트 블루, 표정은 입을 다문 패턴 A로 부탁드립니다.
만약 오른쪽 여동생의 증명사진을 만들고 싶다면, 아래와 같이 대상을 변경하여 지시합니다.
이 사진에서, 오른쪽 여동생의 증명사진을 만들어 주세요.
용도는 마이넘버용(45×35mm), L판 프린트 시트 포함으로, 포멀웨어 착용 패턴 A, 배경은 라이트 블루로 부탁드립니다.
지시를 받은 에이전트는 다음 흐름을 자율적으로 진행합니다.
요구사항 확인 및 대상 인물 특정: 대상 인물(오빠/여동생 등), 용도(여권/이력서 등), 인쇄 용지(L판/2L판/단독 데이터만), 배경색, 보정 패턴(A / B / C)을 확인합니다.
- 기울기 수평 보정:
--draw-grid
으로 대상 인물의 양쪽 눈 좌표를 측정하고, --level-and-crop
으로 머리의 기울기를 수평 회전 보정하여 단독 포트레이트를 잘라냅니다.
- AI 스튜디오화: 환경 내 이미지 생성 도구를 호출하여 스튜디오 라이팅과 수트의 베이스 이미지를 생성합니다.
- 본인성 블렌딩:
composite_original_head.py
으로 원 사진의 눈가 및 얼굴 파츠를 복원 합성합니다.
- 밀리 규격 트리밍 & 시트 생성:
process_id_photo.py
으로 여권 규격(45×35mm)에 정확하게 잘라내고, 톤보와 50mm 실측 스케일을 배치한 L판 시트를 출력합니다.
생성된 *_sheet_L.jpg
을 스마트폰에 저장하여 세븐일레븐이나 로슨, 패밀리마트 등의 멀티 카피기(사진 인쇄)에서 인쇄합니다.
여기서 한 가지 주의할 점이 있습니다. 인쇄 시에는 반드시 “테두리 있는 인쇄(용지 전체에 맞추어 인쇄)”를 선택해야 합니다.
“테두리 없는 인쇄(전면 인쇄)”를 선택하면, 기계 측에서 자동으로 몇 % 확대되어 버려, 힘들게 밀리 단위로 계산한 얼굴 비율이 틀어지게 됩니다. 시트 하단에 인쇄된 “50mm 실측 확인 스케일”에 자를 대어 정확히 50mm가 나왔다면 규격대로 사이즈가 완성되었다는 증거입니다.
매우 편리한 스킬이지만, 실제로 운영할 때 파악해 두어야 할 중요한 주의점이 두 가지 있습니다.
본 스킬은 하이브리드 구성이므로, Python 환경뿐만 아니라 “이미지를 불러와 편집/생성할 수 있는 도구나 스킬”이 에이전트 환경에 갖춰져 있어야 합니다.
- Codex나 Antigravity처럼 표준으로 이미지 생성 기능을 가진 환경을 사용하거나, Claude Code 등에서는 앞서 언급된
AGNES 스킬 등을 연계해야 합니다. - 만약 이미지 편집 도구가 전혀 사용 불가능한 환경이라면, AI를 이용한 수트 갈아입기나 목 부분 보정은 할 수 없습니다. 이 경우 “원 사진의 사복 그대로, Python 스크립트를 통한 배경색 치환(--replace-bg)
과 규격 트리밍 및 면 배치만”을 수행하는 모드로 동작하게 됩니다.
가장 주의해야 하는 것은 에이전트의 추론 능력이나 사용되는 이미지 생성 모델의 품질입니다.
특히 “패턴 C(원 사진의 얼굴/표정을 100% 유지하는 모드)”에서는 Stage 1에서 원 두부의 목 부분이나 윤곽, 수트 칼라, 배경 라이팅을 AI가 이질감 없이 자연스럽게 녹여내야 합니다.
추론 능력이 낮은 소형 LLM이나, 지시 추종성이 약한 이미지 생성 모델을 사용할 경우, 다음과 같은 파탄이 일어나기 쉽습니다:
- 목과 수트 칼라의 각도가 맞지 않아 목이 비정상적으로 길어 보이는 현상
- 원 사진 얼굴 윤곽을 AI가 임의로 다시 그려버려 경계선에 이중턱 같은 부자연스러운 단차가 생기는 현상
- 배경색과 수트 윤곽 사이에 경계 노이즈가 남는 현상
만약 생성 결과에 위화감이 있다면, 더 똑똑한 모델(Frontier Model)로 전환하거나, 원 사진 두부 추출 범위를 넓게 조정하여 에이전트에게 재지시를 내려주세요.
AI 에이전트의 강점은, “프롬프트로 이미지를 출력하는 것”이나 “스크립트를 실행하는 것” 같은 단일 도구로는 손댈 수 없는 복잡한 작업을, 적재적소에서 조합하여 자동으로 완수할 수 있다는 점에 있습니다.
AI의 역할: 의상 교체, 목 부분이나 배경의 자연스러운 조화, 스튜디오 라이팅 재현 -
Python의 역할: 각도 계산에 의한 양안 수평 보정, 주파수 분리를 통한 본인 파츠 100% 고정(Lock), 밀리미터 단위의 규격 트리밍 및 300 DPI 인쇄용 배치
갑자기 증명사진이 필요할 때, 수천 원을 들여 촬영하러 가거나 Photoshop으로 애쓰는 대신, 직접 가지고 있는 AI 에이전트에 본 스킬을 결합하여 사용해 보세요.
[!TIP]
📁관련 링크 모음
여러분은 평소 증명사진이 필요할 때 어떻게 하시나요? 또한, “이런 규격 사이즈나 기능도 있으면 좋겠다”라는 아이디어가 있다면 댓글란에 알려주세요!