스레드에서 반응 좋은 이미지를 읽어 프롬프트를 만드는 i2t 파이프라인을 만들고,
원작자가 실제로 쓴 프롬프트와 대조해 시스템 프롬프트를 뽑아냈습니다.
결론부터: 기준선 70%는 넘지 못했습니다. 최종 52.2%입니다.
다만 그 숫자보다 중요한 것을 얻었습니다 — 아래 3번을 봐주세요.
정답지 34쌍(원작자 프롬프트가 온전히 확보된 쌍) 위에서 측정했습니다.
| 지시문 | 충실도 | 지어냄/쌍 | 놓침/쌍 | 70점 이상 |
|---|---|---|---|---|
| V3 (광학 우선·모르면 생략) | 52.2 | 3.7 | 8.3 | 4/33 |
| V5 (장르 체크리스트 주입) | 51.7 | 5.0 | 7.6 | 6/33 |
쌍별 우세는 V3 15 · V5 14 · 동점 4로 사실상 동률입니다.
V5가 놓침은 적지만 지어내는 양이 35% 많아 상쇄됩니다.
| 판 | 접근 | 결과 |
|---|---|---|
| V1 | 기본 지시 | 낮음 |
| V2 | 항목 8개를 필수화 | 지어냄 폭증 |
| V3 | 보이는 것만 + 광학 우선 | 최고 |
| V4 | V3 + 오독 금지 규칙 | 후퇴 |
| V5 | 장르 체크리스트 주입 | V3와 동률 |
| — | 사고 예산 4,000토큰 | 하락 |
| — | 비전 모델 Sonnet 5 상향 | 하락 |
| — | 장르 판별 후 해당 체크리스트만 주입 | 하락 |
일관된 패턴: 지시문에 뭘 더 넣을수록 지어내는 양이 늘고 점수는 안 오릅니다.
가장 짧고 원칙만 담긴 V3가 계속 이겼습니다.
| 원작 길이 | 평균 점수 |
|---|---|
| 0~800자 | 55.3 |
| 800~1,500자 | 55.1 |
| 1,500~3,000자 | 52.7 |
| 3,000자~ | 46.9 |
짧은 프롬프트만 골라 봐도 55.2점입니다. 가장 유리한 조건에서도 70에 닿지 않습니다.
원작이 3,000자면 그 안에 우리가 이미지만 보고는 알 수 없는 지정이 수십 개 들어 있습니다.
최저점 사례들이 "이미지 묘사"가 아니라 변환 레시피였습니다.
@aicoffeechat — "여행 사진을 업로드하면 고무도장 스타일로 압축해 빈티지 메모지에 찍는 템플릿"@og_chryzleen — "2000년대 토이 디지털 카메라의 저화질·플래시 혼합·Dutch tilt·초점 실패를 의도적으로 지정"결과물 이미지 한 장을 보고 그 레시피를 복원하는 건 불가능합니다.
게다가 우리는 결과를 보고 "잘 찍은 사진"으로 정규화하는 편향이 있습니다.
"프롬프트 글자를 맞히는 것"이 아니라 "이런 걸 만들 땐 뭘 챙겨야 하는가"를 캐는 것이
이 작업의 목적이었습니다. 그건 확보했습니다.
원작자 프롬프트 34개를 해부해 장르 8개 체크리스트를 만들었습니다.
(.radar/CRAFT.md)
| 칸 | 실제 표현 |
|---|---|
| 카메라·렌즈 스펙 | 85mm lens, f/2.8, shallow depth of field |
| 조명의 그림자 처리 | diffused ambient light that produces almost no shadows · bright catchlights in pupils |
| 색 팔레트 명시 | dominant colors are blush pinks, creamy whites, and muted browns |
| 금지 리스트 | Avoid: direct eye contact, sharp HD face |
| 소품·손 위치 | 제품 잡는 손가락 각도까지 |
"조명 좋게"가 아니라 "그림자가 거의 없는 확산광, 동공에 캐치라이트"라고 씁니다.
중요: 이 체크리스트를 시스템 프롬프트에 그대로 박으면 오히려 나빠집니다(V5가 그 실험이었습니다).
모델이 해당 없는 칸까지 채우려 들기 때문입니다.
사람이 읽고 쓰는 교본으로 쓰는 게 맞습니다.
운영에 쓸 판본입니다. scripts/lib/i2t-system.mjs의 I2T_SYSTEM_V3.
너는 사진·영상을 읽는 사람이다.
주어진 이미지를 보고, **그 이미지를 다시 만들 수 있는 영어 t2i 프롬프트**를 쓴다.
## 가장 중요한 규칙
**보이는 것만 쓴다. 판단이 안 서면 그 항목을 통째로 생략한다.**
빈칸을 채우려고 그럴듯한 말을 지어내지 마라. 없는 조명·없는 렌더엔진·없는 비율을
써 넣으면 결과물이 원본과 완전히 달라진다. 생략은 감점이 아니다. 날조가 감점이다.
## 순서 — 광학을 먼저 읽어라
피사체가 무엇인지보다 **어떻게 찍혔는지**가 먼저다. 이걸 놓치면 나머지가 맞아도 다른 사진이 된다.
1. **렌즈와 왜곡** 직선이 휘는가? 중심이 부풀고 주변이 눌리는가? → 어안·초광각.
원근이 거의 없고 평행선이 유지되는가? → 망원 압축 또는 등각/축측 투영.
2. **촬영거리** 렌즈가 피사체에 밀착했는가, 떨어져 있는가.
밀착 광각은 가까운 부위를 과장하고 먼 부위를 급격히 줄인다.
3. **시점 높이** 눈높이 / 위에서 / 아래에서. 위에서 내려다본 것과
광각으로 밀착한 것을 혼동하지 마라 — **자주 틀리는 지점이다.**
4. **초점** 어디가 선명하고 어디가 풀리는가. 심도의 깊이.
### ★ 효과를 물건으로 착각하지 마라
화면에 보이는 것이 **광학 현상**인지 **실제 물체**인지 구분한다. 자주 틀리는 것:
- 네 귀퉁이가 둥글게 어두운 것 → 렌즈 비네팅·어안 원형상. **그릇·냄비·창틀이 아니다.**
- 배경이 휘어 보이는 것 → 광각 왜곡. 굽은 벽이 아니다.
- 흐릿한 동그라미들 → 보케. 실제 조명 장식이 아니다.
- 화면을 가로지르는 빛줄기 → 플레어. 실제 막대가 아니다.
확신이 없으면 **물체로 단정하지 말고** 광학 표현으로 쓰거나 생략한다.
## 그다음 읽을 것 — 보이는 만큼만
- **매체** 사진인가, 3D 렌더인가, 그림인가. 렌더처럼 보이면 렌더라고 쓴다.
다만 **특정 소프트웨어 이름을 근거 없이 붙이지 마라.**
- **구도** 피사체 위치, 화면비, 여백의 양. 눈에 띄는 구조가 있을 때만 쓴다.
- **조명** 광원 방향과 성질이 **보일 때만** 쓴다. 안 보이면 생략한다.
- **색·질감** 실제로 보이는 색만. 이미지에 없는 색 이름을 만들지 마라.
- **피사체** 형태가 추상적이면 추상적으로 쓴다.
잘 모르는 형태를 익숙한 사물로 단정하지 마라 —
둥근 노란 형체를 "sunflower", 파란 융기를 "hill" 이라고 부르는 식의 오독이 가장 흔하다.
## 마무리
- 마지막에 `Avoid:` 로 이 이미지에서 **벗어나면 안 되는 것**을 3~5개 적는다.
(실제 프롬프트 작성자들이 쓰는 방식이다. 예: 원본이 평면적이면 "Avoid: realistic perspective")
- 워터마크·계정명·UI 는 넣지 않는다. 끝에 "no watermark, no logo" 를 붙인다.
- hasText 는 **결과물 자체에 글자가 들어가야 하는지**로 판단한다.
간판·라벨·포스터가 핵심이면 true. 배경에 흐릿한 글자만 있으면 false.
- 한국어 필드는 해요체. 과장·광고 문구 금지.
형이 @anelo_tech/post/DRb5znTkijp 하나를 짚어주신 데서 연쇄로 나왔습니다.
그 전까지의 모든 숫자는 잘못된 자로 잰 값이라 폐기했습니다.
| 버그 | 증상 | |
|---|---|---|
| 1 | 프롬프트가 댓글로 쪼개진 걸 이어붙이지 못함 | 뒤 절반만 정답으로 채점 |
| 2 | 한국어로 시작하는 프롬프트를 영문 비율 미달로 탈락 | 앞 절반 통째로 유실 |
| 3 | 고치니 과잉 결합 | 최대 48,406자 — 여러 프롬프트 + 작성자 잡담 |
| 4 | 재추출 결과가 풀에 반영 안 됨 | 124건 통째로 버려짐 |
정답지 변화: 통과 25쌍/중앙값 1,016자 → 34쌍/1,230자
수집 파이프라인에서도 두 개를 더 잡았습니다.
70%를 지표 그대로 쫓는다면 남은 수단은 이렇습니다.
| 수단 | 기대 | 비용 |
|---|---|---|
| 정답지를 짧은 프롬프트만으로 재구성 | 55점대까지 | 표본 축소 |
| 변환 레시피형 쌍을 심사에서 제외 | 소폭 상승 | 표본 축소 |
| 더 큰 비전 모델 / 다중 관찰 후 합의 | 미지수 | 호출 3배 |
다만 권하고 싶은 것은 목표를 바꾸는 쪽입니다.
복제 정확도는 남의 이미지를 얼마나 똑같이 되살리느냐이고, 우리가 파는 것이 아닙니다.
갤러리에 걸 이미지가 좋으냐는 완전히 다른 질문이고, 그건 눈으로 보고 판단할 일입니다.
체크리스트는 이미 손에 들어왔습니다. 그걸로 프롬프트를 쓰면 결과가 좋아지는지를
직접 보시는 게 다음 단계로 맞다고 봅니다.
| 스크립트 | 하는 일 |
|---|---|
radar-threads.mjs |
스레드 검색 관측 (참여수로 거름) |
radar-groundtruth.mjs |
이미지 + 원작자 실제 프롬프트 쌍 수집 (검색·계정·재추출 3모드) |
screen-groundtruth.mjs |
오염된 쌍 4개 관문으로 거름 (통과율 27%) |
calibrate-i2t.mjs |
눈 가리고 i2t → 별도 호출로 채점 (생산자≠평가자) |
extract-craft.mjs |
원작 프롬프트 해부 → 장르별 체크리스트 |
build-lessons.mjs |
채점 결과 → 오답노트 |
make-v5.mjs |
체크리스트 + 오답노트 → 새 지시문 자동 생성 |
산출물은 .radar/에 있습니다 — CRAFT.md · LESSONS.md · groundtruth-clean.json · grades-*.json