AI 아웃페인팅 API 한계 분석: 이미지 늘리기를 세 번 실패하고 알게 된 것
gpt-image 마스크는 픽셀을 보존하지 않는다. AI 아웃페인팅으로 이미지를 확장하려다 세 번 실패한 기록 — 마스크 미보존, 경계 색 어긋남, 콘텐츠 불일치의 원인과 대안.
목차
썸네일 자동 생성기를 만들고 있었다. "인물 얼굴 크기 몇 %, 위치 왼쪽 3분의 1" 같은 구도 규칙을 지켜야 하는데, 원본보다 넓은 이미지가 필요한 경우가 있었다.
인물은 그대로 두고 배경만 옆으로 자연스럽게 늘리는 것(아웃페인팅)을 AI로 자동화하려고 했다.
세 번 연속 실패했고, 매번 다른 층에서 막혔다.
1. 마스크가 픽셀을 지켜주지 않는다
"이 영역은 건드리지 마"라고 마스크를 줘도, 모델이 이미지 전체를 다시 그린다.
마스크는 픽셀 경계가 아니라 부드러운 힌트다. 이건 API 제공사가 공식적으로 인정한 한계다.
그래서 보호했다고 믿은 인물이 미묘하게 뒤틀리고, 미리 계산해둔 좌표와 실제 픽셀이 어긋난다.
2. 경계 색이 안 맞는다
원본을 결과 위에 다시 붙이는 방어를 해도 안 됐다.
모델은 여백을 **"자기가 다시 그린 원본"**에 이어지게 그린다. 그런데 그 다시 그린 결과 자체가 전체적으로 톤과 대비가 변해 있어서, 진짜 원본을 붙이면 이음선이 생긴다.
이 문제만 다룬 논문이 있을 정도로 구조적인 현상이다.
3. 색을 맞춰도 '그림'이 다르다
색은 수학으로 역산해서 고칠 수 있다. 그런데 구름 모양, 나무를 그리는 방식 같은 건 못 고친다. 사후 보정이 불가능하다.
근본 원인 — 다이얼이 없었다
일부 이미지 모델은 **"기존 픽셀을 몇 % 존중할지"**를 조절하는 값이 있다. 그래서 "살짝만 다듬어"가 가능하다.
내가 쓰던 API에는 그게 없었다. 항상 100% 다시 그린다. 프롬프트로 "원본 스타일 유지"를 아무리 강하게 써도 확률만 올라갈 뿐 보장이 없다.
그런데 진짜 문제는 따로 있었다
문제 설정 자체가 틀렸다.
지키려던 구도 규칙은 스튜디오에서 찍은 실사 사진에서 뽑은 거다. 그런데 실패하던 이미지는 작가가 배경까지 완성해둔 일러스트였다.
애초에 썸네일용으로 구도가 잡혀 나온 그림을, 실사 사진 규칙에 맞추려고 옆에 가짜 여백을 만들고 있었던 거다.
확장 기술을 네 번 갈아끼우는 동안 이걸 못 봤다.
어떻게 풀었나 — 이미지를 안 건드리는 게 답이었다
원칙을 이렇게 정리했다.
규칙은 특정 종류의 소스에서 뽑은 것이다. 소스가 그 범위를 벗어나면 규칙을 완화해야지, 소스를 규칙에 맞게 제조하면 안 된다.
그래서 완성형 일러스트는 원본 범위 안에서 잘라 쓰기로 바꿨다.
그리고 하나 더. 인물 위치 규칙이 있던 이유가 "로고가 인물을 안 가리게"였다. 그러면 인물을 못 옮길 때는 로고를 옮기면 된다.
찾아보니 업계 관행도 같았다. 완성된 일러스트는 화면 가득 채우고, 로고는 안전 영역에 겹쳐 올린다.
실패가 단계적으로 드러나는 게 함정이다
프롬프트 개선 → 색 보정 → 콘텐츠 불일치 순서로 문제가 나왔다.
각 단계마다 "거의 다 됐다"는 착각이 든다. 색만 맞추면 될 것 같고, 그다음엔 모양만 맞추면 될 것 같고.
남길 것
- API에 "보존 보장 장치"가 있는지를 처음에 물었어야 했다. 프롬프트로 될 일이 아니었다.
- 규칙이 계속 안 맞으면, 강제할 도구를 고도화하기 전에 "이 입력이 이 규칙의 대상이 맞나"를 먼저 묻는다. 자동화 실패의 답은 "더 강한 도구"보다 "소스 분류"인 경우가 많았다.
- 규칙의 "왜"를 알면 우회로가 보인다. 인물을 못 옮기면 로고를 옮기면 된다.
- 단계적으로 실패하면 매번 "거의 다 됐다"고 느낀다. 실패가 세 번 반복되면 방법이 아니라 문제 설정을 본다.
더 봐야 할 것
- 픽셀 보존을 명시적으로 보장하는 API들의 일러스트 품질이 실제로 어떤지
- 소스가 사진인지 일러스트인지 자동으로 분류하는 게 정확한지