AI에게 시킨 문구는 "여름 특가 세일"이었습니다. 나온 건 "어멉 특가 세일"이었어요.
글자가 뭉개진 게 아닙니다. 자간도 고르고 획도 인쇄물처럼 깔끔해요. 그래서 축소해서 보면 멀쩡한 배너로 보입니다. 이게 이 글을 쓰게 된 이유입니다.
배너는 계속 갈아끼워야 하는 물건이죠. 시즌마다, 프로모션마다, 신상품이 들어올 때마다. 그때마다 외주를 넣거나 스톡 이미지를 삽니다. 시안 한 번 왕복하는 데 며칠씩 걸리고, 급한 기획전에는 그 며칠이 없어요.
그래서 사무실에 굴러다니던 게임용 PC에 이미지 생성 모델을 직접 올려봤습니다. 클라우드에 접속하는 게 아니라 그래픽카드에 모델 파일을 얹어서 그 자리에서 돌리는 방식이에요. 장당 요금도 없고, 아직 공개 안 한 신상품 컷을 남의 서버에 올릴 일도 없습니다.
궁금했던 건 하나였어요. 어디까지 쓸 수 있나?
글자가 없으면 100초, 있으면 못 씁니다
경계선이 생각보다 뚜렷했습니다. 글자가 없는 컷은 100초쯤에 뽑아서 거의 그대로 씁니다. 글자가 들어가는 순간 못 씁니다.
장비는 새로 산 게 아니라 사무실에 있던 PC예요. 그래픽카드 메모리가 24GB인데 모델 파일을 다 합치면 30.4GB입니다. 한 번에 다 안 올라가요. 올렸다 내렸다 하면서 돌아가니까 첫 장이 유난히 느리고 두 번째부터 빨라집니다.
장비를 새로 맞출 생각이라면 이 대목을 먼저 보세요. 연산 속도보다 메모리 용량이 먼저입니다. 빠른 카드라도 모델이 안 올라가면 파일을 왕복시키느라 그 속도를 못 씁니다.
다섯 번 돌려서 다섯 번 다 틀렸습니다
한 번은 우연일 수 있으니 같은 문구를 조건만 바꿔 여러 번 돌려봤어요.
| 회차 | 요청한 문구 | 나온 문구 | 틀린 글자 |
|---|---|---|---|
| 1회 | 여름 특가 세일 | 여멉 특가 세일 | 1자 |
| 2회 | 여름 특가 세일 | 어넙 톡가 세일 | 3자 |
| 3회 | 여름 특가 세일 | 여덥 특가 세일 | 1자 |
| 4회 | 여름 특가 세일 | 어엽 톡가 세일 | 3자 |
| 5회 (품질 2배) | 여름 특가 세일 | 어멉 특가 세일 | 2자 |
여기 눈에 띄는 규칙이 하나 있어요. "름"은 한 번도 맞은 적이 없고, "세일"은 한 번도 틀린 적이 없습니다.
받침이 없거나 단순한 글자는 살아남고, 획이 많은 글자에서 무너집니다. 모델이 한글을 글자 단위로 외운 게 아니라 획 모양을 흉내 내고 있다는 뜻으로 읽혀요. 그러니 품질 설정을 두 배로 올려도 소용없습니다. 5회가 그 결과예요.
같은 조건에서 영문으로 시키면 "SUMMER SALE"이 그대로 나옵니다. 문구만 바꿨는데요.

"여름 특가 세일"을 요청한 결과입니다. 획은 깔끔한데 글자가 틀렸어요.
진짜 위험은 여기 있습니다
깨진 글자였다면 올리기 전에 걸렀을 겁니다. 그런데 이건 검수를 통과해요.
작은 글씨는 더 심합니다. 큰 헤드라인은 한 글자만 틀렸는데, 그 위 소제목과 아래 세 줄은 아예 단어가 아니었어요. 배너에서 작은 글씨가 들어가는 자리가 보통 가격 조건이나 배송 안내처럼 틀리면 안 되는 내용인데, 하필 거기가 제일 심합니다.
그래서 저희는 반대로 갑니다. 모델한테 글자를 시키지 않아요. 배경과 분위기만 뽑고 문구는 그 위에 얹습니다. 오타가 날 수 없고, 나중에 "특가"를 "할인"으로 바꿀 때 이미지를 다시 뽑지 않아도 됩니다.
글자를 빼달라고 했는데 라벨이 생겼습니다
더 곤란한 건 이쪽이었어요. 프롬프트에 글자를 넣지 말라고 적었는데도 제품에 글자가 생깁니다.

"브랜드 없는 용기, 글자 없음"으로 요청한 컷의 라벨을 3배 확대한 것입니다.
없는 브랜드명이 하나 만들어졌고, 아래 줄들은 영문처럼 생겼지만 단어가 아니에요. 게다가 같은 사진 안의 용기 세 개가 서로 다른 이름을 달고 있었습니다.
그런데 여기서 예상이 한 번 빗나갔어요. "사람 손이 나오는 컷은 더 심하겠지" 싶어 아예 후보에서 빼뒀는데, 확인해보니 손은 멀쩡했습니다. 손가락 개수도 마디도 맞았어요. AI가 손을 못 그린다는 얘기는 저희 기준으로는 옛말이었습니다.
그 컷의 용기에는 가짜 라벨도 안 생겼습니다. 앞의 플랫레이와 다른 점은 하나였어요. 요청할 때 "라벨 없는 단순한 용기"라고 표면 상태를 못 박았다는 것.
각각 한 장씩만 확인한 결과라 법칙이라고 하기엔 이릅니다. 다만 방향은 분명해요. 경계선은 "사람이 나오느냐"가 아니라 "글자가 들어갈 표면이 있느냐"였습니다.
어디에 쓰고 어디에 안 쓰나
| 용도 | 판단 | 이유 |
|---|---|---|
| 배너 배경, 분위기 컷 | 바로 씀 | 글자도 제품도 주인공이 아닙니다. 문구는 위에 얹습니다 |
| 시안, 내부 검토용 | 바로 씀 | 방향만 보면 되는 단계라 100초면 여러 안을 놓고 고릅니다 |
| 제품 배경, 소품 | 조건부 | 제품은 촬영본을 쓰고 배경만 합성합니다 |
| 글자가 들어가는 이미지 | 안 씀 | 한글이 틀리고, 틀린 티가 안 납니다 |
| 라벨 붙은 제품 컷 | 안 씀 | 없는 브랜드명이 찍히고, 확대하면 드러납니다 |
한 줄로 줄이면 정확해야 하는 것은 AI에 맡기지 않습니다. 글자, 브랜드명, 제품 형태처럼 틀리면 안 되는 요소는 사람이 넣고, 분위기와 배경처럼 틀려도 상관없는 것만 맡깁니다.
남는 것
온디바이스 이미지 생성을 두고 흔히 "화질이 되냐"를 먼저 묻는데, 저희가 부딪힌 벽은 화질이 아니었어요. 배경 컷의 품질은 이미 충분했습니다. 막힌 건 정확성이 필요한 자리였습니다.
그리고 그 자리는 대부분 우회가 됩니다. 글자는 위에 얹으면 되고 제품은 찍어서 합성하면 되니까요. 우회하고 나면 남는 영역이 꽤 넓습니다. 한 장에 100초면 한 시간에 서른 장이 넘어요. 배경을 열 장쯤 늘어놓고 고르는 방식이 그때부터 가능해집니다.
덧붙이면 뽑은 이미지는 반드시 확대해서 한 번 봅니다. 축소된 썸네일에서는 가짜 글자가 안 보이거든요. 이 습관 하나가 오늘 이 글의 절반입니다.
참고 자료
- Black Forest Labs, FLUX.2 [dev] 모델 문서 — 라이선스 및 생성 결과물 사용 범위. 모델 자체는 비상업 라이선스이며, 결과물 사용 조건은 원문 확인이 필요합니다
- ComfyUI — 이 글에서 모델을 돌린 실행 환경