생성형 AI로 사진 편집하기 — 바꿀 건 AI에게, 지킬 건 코드에게
아기 얼굴은 원본 그대로 두고 낙하산만 그려 넣고 싶었다. 생성형 AI로 사진을 편집하며 배운 것 — 인물은 AI에 맡기면 안 된다. 누끼와 대화형 편집을 만들기까지의 기록.

아기 비행사 사진 한 장에서 시작됐다. 여기에 낙하산을 그려 넣고 싶었는데, 조건이 하나 있었다 — 아기 얼굴은 원본 그대로. AI가 다시 그리면 안 됐다. 이 사소해 보이는 조건이, 생성형 AI로 사진을 편집할 때 마주치는 가장 근본적인 벽으로 우리를 데려갔다. 이 글은 리엘 이미지 스튜디오에 인물 보존 편집과 대화형 편집을 만들기까지의 시행착오 기록이다.
한 줄로 요약하면 이렇다. 바꿀 건 AI에게, 지킬 건 코드에게.
1막 — AI 낙하산의 배신
Nano Banana(Gemini 이미지 모델)로 낙하산 라인을 다듬으려 했다. 결과는 매번 어긋났다. 완전 돔형으로 재해석하거나, 라인이 하나여야 하는데 이중선을 그리거나, 낙하산과 무관한 아기 팔 위치까지 움직였다.
"차라리 시안에서 조금 변형한 게 나은 것 같은데."
교훈 ① — 생성형 이미지 모델은 마스크 인페인팅이 아니라, 입력과 프롬프트를 조건으로 이미지 전체를 매번 다시 그린다. "이 부분은 유지해"는 픽셀 잠금이 아니라 경향일 뿐이다. 편집 대상이 인물과 겹치는 순간, 모델 등급과 무관하게 얼굴과 팔이 흔들린다.
2막 — 라인은 AI가 아니라 코드로 뽑는다
낙하산 라인을 AI로 만드는 걸 포기했다. 대신 참조 이미지의 검은 윤곽선을 코드로 직접 추출했다. 연결 성분 분석으로 윤곽선만 분리해 흰 라인 아트로 바꿨고, 크롭이 잘라낸 줄 조각(튀어나온 선)은 트림과 성분 청소로 지웠다.
교훈 ② — 정밀한 라인·글자·도형은 생성형이 제일 못 하는 유형이다. 시키면 환각(가짜 라인)이 나온다. 이런 건 원본에서 추출하거나 코드로 그리는 게 정답이다.
3막 — 근본 원리: 인물 보존 파이프라인
여기서 원칙이 섰다. 인물을 오려낸 이미지(누끼)는 절대 AI에 다시 넣지 않는다. 최종 합성 때 진짜 픽셀을 그대로 다시 얹는다. 순서는 이렇다.
누끼는 자동 매팅 API로 사람만 투명 PNG로 분리하고, 합성은 코드로 층층이 쌓는다. 얼굴이 절대 안 변하는 이유는 "AI가 잘 유지해서"가 아니라, 애초에 사람을 AI에 안 보내기 때문이다. 유지가 경향이 아니라 구조적 보장이 된다.
4막 — 실제 사용자가 문제를 증명하다
한 사용자가 스튜디오에서 아기 사진을 편집했다. AI가 예쁜 낙하산과 구름을 그려줬지만, 다듬을수록 아기 얼굴이 노이즈로 뭉개졌다. 그 사용자는 "아기 얼굴 원본으로"를 두 번 외쳤다.
진단해 보니, '다듬기'가 직전 결과물을 다시 AI에 입력하는 구조였다. 원본 → 결과1 → 결과2 → 결과3… 매 단계가 "이미 한 번 AI가 그린 그림"을 또 그리는 재생성 사슬이라, 미세 오차가 복사의 복사처럼 쌓였다. 게다가 원본이 1단계 후 사라져서, "원본으로"라는 요청이 원천적으로 불가능했다 — 모델 손엔 이미 망가진 그림밖에 없었으니까.
교훈 ④ — "갈수록 얼굴이 변한다"는 대부분 결과물 재입력(사슬) 때문이다. 대화를 기억 못 해서가 아니라, 이미지를 세대마다 다시 굽기 때문이다.
5막 — 기능으로 만들다
시행착오를 제품으로 굳혔다. 사진을 올리면 자동으로 사람만 오려내고(누끼), 배경은 단색 팔레트나 대화로 바꾸고, 드로잉을 얹은 뒤, 마지막에 진짜 사람 픽셀을 다시 합성한다. 결과는 "원본 ↔ 편집본"을 나란히 보여줘 신뢰를 준다.
한 가지 재밌는 기법도 나왔다. 사용자가 AI로 만든 예쁜 낙하산·구름의 흰 라인만 추출해서 진짜 누끼 위에 얹으니, AI의 디테일 + 진짜 얼굴을 둘 다 가질 수 있었다.
6막 — 앵커의 함정, 그리고 대화형 편집
'다듬을수록 얼굴이 뭉개지는' 문제를 코드로 고쳤다. 다듬기를 "최초 원본을 기준으로 매번 새로 그리기" 로 바꿨다. 얼굴은 크리스프해졌다. 그런데 이번엔 반대 문제가 터졌다.
"색상 그대로 해줘." (세 번 반복)
원본에서 매번 새로 그리니, 지시하지 않은 부분(배경색 등)도 매번 새로 굴려져서 바뀌었다. 잘 나온 부분이 자꾸 사라졌다. 한 함정을 피하니 다른 함정이 나온 것이다.
이게 생성형 편집의 본질적 트레이드오프다.
그래서 대화형 편집으로 갔다. 세 가지를 한 번에 보낸다. 직전 결과물(현재 상태)에 이번 요청만 적용해 잘된 부분을 남기고, 지금까지의 편집 히스토리를 함께 보내 기억하게 하고, 원본을 얼굴 참조로 붙여 여러 턴에도 얼굴이 흔들리지 않게 한다.
교훈 ⑥ — 반복 편집엔 정답이 하나가 아니다. '원본에서 재생성'은 얼굴을 지키지만 잘된 부분을 재롤하고, '직전 결과 편집'은 잘된 부분을 지키지만 얼굴이 서서히 흔들린다. 둘의 장점을 합치려면 현재 상태를 편집 대상으로 두되, 원본을 얼굴 참조로 함께 넣어야 한다.
7막 — "만들기"와 "고치기"는 다른 일
사진 편집은 '강아지로 변환' 같은 프리셋과 의도가 다르다. 그래서 화면도 입력이 의도를 결정하게 했다. 사진을 올리면 편집 모드로 자동 전환되고(변환 프리셋은 접힘), 컨셉·참조 사진을 함께 올리면 스타일·배경·구도의 기준으로 쓴다. 여러 이미지는 "몇 장"이 아니라 역할로 다뤄야 한다 — 주 사진, 얼굴 참조, 스타일 참조 각각을 프롬프트로 명시해야 뒤섞이지 않는다.
결론 — 생성형 AI 사진 편집의 3원칙
- 바꿀 건 AI, 지킬 건 코드. 인물·얼굴은 오려서 진짜 픽셀로 잠그고, 배경·스타일만 AI에 맡긴다.
- 정밀 라인·글자는 AI가 못 한다. 추출이나 코드가 정답이다. 시키면 환각이 나온다.
- 드리프트의 진짜 원인은 모델 등급이 아니다. "인물이 편집 구역에 들어갔나", "결과물을 반복 재입력했나"가 원인이다. 더 비싼 모델로 못 푼다. 구조로 푼다.
정직하게 남는 한계도 있다. 대화형 편집도 결국 생성형이라, 아주 여러 번 다듬으면 얼굴이 미세하게 변할 수 있다. 얼굴을 100% 고정해야 하면 그건 누끼(합성)뿐이다. 그래서 두 방식을 다 남겨뒀다 — AI는 예쁜 걸, 코드는 정확한 보존을. 각자 잘하는 걸 시키고, 서로 못하는 걸 안 시키는 것. 그게 이 작업의 결론이었다.
태그