{
  "title": "상업 이미지 벤치",
  "date": "2026-10-09",
  "story": "동네 카페가 봄맞이 영업을 준비하는 하루",
  "method": "공개 벤치의 평가 방법을 참고한 자체 소규모 사례 비교. 공식 GenEval/Soft-TIFA 점수가 아니며, 장면당 최초 응답 1장을 보존한다.",
  "models": [
    {
      "id": "sunburst",
      "label": "GPT Image 2.5 Sunburst",
      "provider": "openai",
      "model": "gpt-image-2.5-sunburst-2026-09-08",
      "size": "3840x2160",
      "quality": "max"
    },
    {
      "id": "flare",
      "label": "GPT Image 2.5 Flare",
      "provider": "openai",
      "model": "gpt-image-2.5-flare-2026-09-08",
      "size": "3840x2160",
      "quality": "max"
    },
    {
      "id": "nano21",
      "label": "Nano Banana 2.1",
      "provider": "google",
      "model": "gemini-nano-banana-2.1",
      "size": "4K",
      "aspect_ratio": "16:9"
    }
  ],
  "scenes": [
    {
      "id": "01_light",
      "title": "01 · 아침 햇살",
      "skill": "재질과 빛",
      "question": "사진처럼 보여도 유리와 그림자는 자연스러울까?",
      "prompt": "봄 아침의 동네 카페를 배경으로, 나무 테이블 위에 물이 반쯤 든 투명 유리잔 하나와 접시에 놓인 크루아상 하나를 실제 사진처럼 그려 주세요. 왼쪽 창문에서 들어온 햇빛이 오른쪽으로 그림자를 만들고, 유리 너머의 나뭇결과 크루아상의 얇은 결이 보이게 해 주세요. 가로 화면이며 사람과 글자는 넣지 마세요.",
      "checks": [
        "물 반쯤 든 투명 유리잔 하나",
        "접시 위 크루아상 하나",
        "왼쪽 빛과 오른쪽 그림자",
        "유리의 투과와 빵의 얇은 결",
        "사람과 글자 없음"
      ],
      "crop": {
        "x": 0.5,
        "y": 0.63
      },
      "narration": "첫 번째는 아침 햇살입니다. 해상도 숫자보다 유리와 빵의 디테일을 보세요.",
      "duration_seconds": 6,
      "group": "basic",
      "prompt_path": "prompts/01_light.txt"
    },
    {
      "id": "02_objects",
      "title": "02 · 테이블 준비",
      "skill": "개수·색·위치",
      "question": "컵 세 개, 꽃 다섯 송이. 말한 대로 놓았을까?",
      "prompt": "봄맞이 카페의 나무 테이블에 머그컵을 정확히 세 개 놓아 주세요. 화면 왼쪽은 파란 컵, 가운데는 흰 컵, 오른쪽은 빨간 컵이며, 흰 컵 뒤의 투명 꽃병에는 노란 튤립이 정확히 다섯 송이 있습니다. 가로 화면의 실제 제품 사진처럼 표현하고, 그 외 물건과 글자는 넣지 마세요.",
      "checks": [
        "머그컵 정확히 세 개",
        "왼쪽 파란 컵",
        "가운데 흰 컵",
        "오른쪽 빨간 컵",
        "흰 컵 뒤 투명 꽃병",
        "노란 튤립 정확히 다섯 송이",
        "그 외 물건과 글자 없음"
      ],
      "crop": {
        "x": 0.5,
        "y": 0.38
      },
      "narration": "다음은 테이블 준비. 컵 세 개와 튤립 다섯 송이가 약속한 자리에 있을까요?",
      "duration_seconds": 6,
      "group": "basic",
      "prompt_path": "prompts/02_objects.txt"
    },
    {
      "id": "04_hands",
      "title": "04 · 첫 잔을 따르다",
      "skill": "손과 물리적 연결",
      "question": "손, 주전자, 커피 줄기가 제대로 이어질까?",
      "prompt": "동네 카페에서 바리스타가 첫 커피를 따르는 순간을 손과 도구 중심의 실제 사진처럼 그려 주세요. 왼손은 파란 머그컵의 손잡이를 잡고 오른손은 은색 주전자를 잡으며, 주전자 입구에서 나온 커피 줄기가 컵 안으로 이어지게 해 주세요. 따뜻한 아침 빛의 가로 화면이며 얼굴과 글자는 넣지 마세요.",
      "checks": [
        "왼손이 파란 컵 손잡이를 잡음",
        "오른손이 은색 주전자를 잡음",
        "주전자 입구와 컵 안을 잇는 커피 줄기",
        "손·손가락·도구 접촉이 자연스러움",
        "얼굴과 글자 없음"
      ],
      "crop": {
        "x": 0.52,
        "y": 0.55
      },
      "narration": "마지막은 첫 잔. 손이 도구를 잡는 모습과 커피 줄기의 연결을 살펴봅니다.",
      "duration_seconds": 6,
      "group": "basic",
      "prompt_path": "prompts/04_hands.txt"
    },
    {
      "id": "03_poster",
      "title": "03 · 봄맞이 포스터",
      "skill": "한글과 가격",
      "question": "예쁜 포스터에서 글자도 정확히 읽힐까?",
      "prompt": "동네 카페의 봄맞이 홍보 포스터를 따뜻한 크림색 배경의 가로 디자인으로 만들어 주세요. 제목은 정확히 ‘봄을 담은 하루’, 가격 안내는 정확히 ‘아메리카노 3,500원’, 마지막 줄은 정확히 ‘오늘도 문을 엽니다’이며, 세 줄을 크고 읽기 쉽게 배치해 주세요. 파란 머그컵 하나와 노란 튤립 그림을 곁들이고 그 외 글자와 로고는 넣지 마세요.",
      "checks": [
        "봄을 담은 하루 정확히 표기",
        "아메리카노 3,500원 정확히 표기",
        "오늘도 문을 엽니다 정확히 표기",
        "세 줄이 크고 읽기 쉬움",
        "파란 컵 하나와 노란 튤립 그림",
        "그 외 글자와 로고 없음"
      ],
      "crop": {
        "x": 0.42,
        "y": 0.48
      },
      "narration": "세 번째는 손님에게 보여줄 포스터. 분위기와 별개로 한글과 가격을 한 글자씩 확인합니다.",
      "duration_seconds": 6,
      "group": "basic",
      "prompt_path": "prompts/03_poster.txt"
    },
    {
      "id": "05_menu",
      "title": "05 · 한·영 메뉴판",
      "skill": "긴 문구·가격 대응",
      "use_case": "카페 매장용 가로 메뉴판",
      "question": "손님이 실제로 주문할 메뉴판에서 이름과 가격을 끝까지 맞출 수 있을까?",
      "prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.",
      "checks": [
        "총 메뉴 12개와 3개 분류",
        "한국어 이름 12개 정확",
        "영어 이름 12개와 Caffè 악센트 정확",
        "12개 가격이 해당 메뉴에 올바르게 대응",
        "한국어 설명 12개 누락 없음",
        "영어 설명 12개 누락 없음",
        "오트밀크 +700원·샷 +500원 정확",
        "알레르기 안내 한·영 모두 정확",
        "부가세 안내 한·영 모두 존재",
        "작은 글씨·줄 간격·3단 조판의 실용성"
      ],
      "text_lines": [
        "모닝포스트",
        "MORNING POST",
        "SPRING MENU 2026",
        "COFFEE / 커피",
        "아메리카노",
        "Americano",
        "₩3,500",
        "맑고 깔끔한 에스프레소 커피",
        "Clean espresso with hot water",
        "카페라떼",
        "Caffè Latte",
        "₩4,500",
        "고소한 우유와 에스프레소",
        "Espresso with silky steamed milk",
        "바닐라 빈 라떼",
        "Vanilla Bean Latte",
        "₩5,200",
        "바닐라 빈의 은은한 단맛",
        "A gentle hint of real vanilla",
        "디카페인 콜드브루",
        "Decaf Cold Brew",
        "₩5,000",
        "천천히 우려낸 부드러운 커피",
        "Slow-steeped, smooth and mellow",
        "TEA & SPECIAL / 차와 특별한 음료",
        "제주 쑥 라떼",
        "Jeju Mugwort Latte",
        "₩5,800",
        "쑥의 향과 따뜻한 우유",
        "Earthy mugwort with warm milk",
        "딸기 말차 라떼",
        "Strawberry Matcha Latte",
        "₩6,200",
        "딸기와 말차의 두 가지 색",
        "Strawberry meets vibrant matcha",
        "얼그레이 밀크티",
        "Earl Grey Milk Tea",
        "₩5,500",
        "베르가모트 향의 홍차와 우유",
        "Bergamot tea with creamy milk",
        "레몬 진저 티",
        "Lemon Ginger Tea",
        "₩4,800",
        "레몬과 생강의 산뜻한 조화",
        "Bright lemon and warming ginger",
        "BAKERY / 베이커리",
        "버터 크루아상",
        "Butter Croissant",
        "₩3,800",
        "바삭한 겉과 촉촉한 결",
        "Flaky outside, tender inside",
        "크림치즈 꽈배기",
        "Cream Cheese Twist",
        "₩4,200",
        "쫄깃한 빵 속 부드러운 크림치즈",
        "A soft twist with cream cheese",
        "쑥 인절미 케이크",
        "Mugwort Injeolmi Cake",
        "₩6,500",
        "쑥과 고소한 콩가루",
        "Mugwort cake with roasted soy flour",
        "레몬 파운드케이크",
        "Lemon Pound Cake",
        "₩4,500",
        "레몬 껍질의 향긋한 풍미",
        "A fragrant finish of lemon zest",
        "OAT MILK +₩700 / 오트밀크 변경 +700원",
        "EXTRA SHOT +₩500 / 샷 추가 +500원",
        "ICED AVAILABLE / 아이스로도 주문할 수 있습니다.",
        "알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.",
        "Allergen notice: Some items contain milk, wheat or soy.",
        "모든 가격은 부가세 포함입니다. / All prices include VAT."
      ],
      "instruction_language": "ko",
      "group": "commercial",
      "aspect_ratio": "16:9",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "손님이 실제로 주문할 메뉴판에서 이름과 가격을 끝까지 맞출 수 있을까?",
      "output": {
        "openai": {
          "size": "3840x2160",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "16:9"
        }
      },
      "prompt_path": "commercial/prompts/05_menu.txt",
      "ground_truth_path": "commercial/prompts/05_menu_ground_truth.json"
    },
    {
      "id": "07_package",
      "title": "07 · 제품 패키지",
      "skill": "앞·뒷면·한영 정보",
      "use_case": "드립백 상자의 패키지 제안 보드",
      "question": "패키지의 작은 정보와 입체 모습이 서로 일치할까?",
      "prompt": "[Commercial deliverable]\nCreate a professional 16:9 presentation board for a fictional MORNING POST drip-coffee box. Left 36%: a large flat front artwork. Middle 36%: a large flat back artwork. Right 28%: one assembled box in a clean three-quarter product view, showing the front and right side. Use an ivory board, generous margins and thin dividers. This is a design proposal board, not a pile of products.\n[Visual system]\nCream carton, forest-green type, coral sun emblem, subtle yellow-tulip line art. Front and assembled view must share identical typography, colors and front copy. Small text on the large flat back must be genuinely legible. Keep front, back and 3D views clearly separated. No barcode, invented compliance badge or extra logos.\n[Exact FRONT copy]\n모닝포스트\nMORNING POST\n봄날의 드립백\nSPRING DRIP COFFEE\nETHIOPIA BLEND\n5 BAGS × 10 g\nNET WT. 50 g\nTASTING NOTES: APRICOT · COCOA · FLORAL\n향미: 살구 · 코코아 · 꽃향기\n[Exact BACK copy]\n원재료명: 커피 100%\nIngredients: 100% roasted coffee.\n01 뜯기 / OPEN\n02 걸기 / HANG\n03 붓기 / POUR\n컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.\nHang on a cup and slowly pour 150 mL of water at 90–94°C.\n직사광선을 피하고 서늘한 곳에 보관하세요.\nStore in a cool place away from direct sunlight.\nBEST BEFORE 2027.04.30\nBATCH MP-0410\n[Constraints]\nPreserve Korean glyphs, English spelling, the × multiplication sign, the middle dots, en dash, °C, mL and decimal date. Do not translate, summarize or substitute text. Illustrate the three brewing steps with small, clear cup-and-dripbag diagrams next to the respective bilingual step. Do not invent nutrition data, manufacturing information or additional claims. The three-quarter box is a visual consistency test, so it must not become a different brand or flavor.",
      "checks": [
        "평면 앞면·뒷면·입체 상자 총 3개 뷰",
        "앞면 한·영 브랜드·제품명 정확",
        "5 BAGS × 10 g·NET WT. 50 g 정확",
        "한·영 향미 3개 항목 정확",
        "뜨기·걸기·붓기 대신 정확히 뜯기·걸기·붓기",
        "90–94°C·150 mL 한·영 정확",
        "원재료·보관 안내 한·영 정확",
        "BEST BEFORE 2027.04.30·BATCH MP-0410 정확",
        "평면과 입체에서 브랜드·색·제품명 유지",
        "작은 안내문을 읽을 수 있음"
      ],
      "text_lines": [
        "모닝포스트",
        "MORNING POST",
        "봄날의 드립백",
        "SPRING DRIP COFFEE",
        "ETHIOPIA BLEND",
        "5 BAGS × 10 g",
        "NET WT. 50 g",
        "TASTING NOTES: APRICOT · COCOA · FLORAL",
        "향미: 살구 · 코코아 · 꽃향기",
        "원재료명: 커피 100%",
        "Ingredients: 100% roasted coffee.",
        "01 뜯기 / OPEN",
        "02 걸기 / HANG",
        "03 붓기 / POUR",
        "컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.",
        "Hang on a cup and slowly pour 150 mL of water at 90–94°C.",
        "직사광선을 피하고 서늘한 곳에 보관하세요.",
        "Store in a cool place away from direct sunlight.",
        "BEST BEFORE 2027.04.30",
        "BATCH MP-0410"
      ],
      "instruction_language": "en",
      "group": "commercial",
      "aspect_ratio": "16:9",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "패키지의 작은 정보와 입체 모습이 서로 일치할까?",
      "output": {
        "openai": {
          "size": "3840x2160",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "16:9"
        }
      },
      "prompt_path": "commercial/prompts/07_package.txt",
      "ground_truth_path": "commercial/prompts/07_package_ground_truth.json"
    },
    {
      "id": "06_document",
      "title": "06 · 제안·견적 문서",
      "skill": "긴 본문·표·합계",
      "use_case": "브랜드 제작 제안서와 견적서",
      "question": "긴 본문과 비용 표가 있는 문서도 그대로 고객에게 보여줄 수 있을까?",
      "prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.",
      "checks": [
        "한국어 긴 본문이 원문과 일치",
        "영어 긴 본문이 원문과 일치",
        "문서번호·날짜 정확",
        "표 4개 항목·수량·단가 대응",
        "메뉴판 2×180,000=360,000원",
        "제품 이미지 3×95,000=285,000원",
        "소계 1,375,000원·부가세 137,500원·합계 1,512,500원",
        "일정 4개 날짜와 작업 대응",
        "검수·납품 안내 한·영 정확",
        "본문·표·하단 안내의 읽기 쉬운 조판"
      ],
      "text_lines": [
        "모닝포스트 브랜드 론칭",
        "MORNING POST BRAND LAUNCH",
        "제작 제안 및 견적서",
        "CREATIVE PROPOSAL & QUOTATION",
        "문서번호 MP-2026-014",
        "발행일 2026.10.09",
        "프로젝트 개요 / Project Overview",
        "동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.",
        "We connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.",
        "제작 범위 및 비용 / Deliverables & Fees",
        "항목",
        "수량",
        "단가",
        "금액",
        "한·영 메뉴판",
        "360,000원",
        "제품 이미지",
        "285,000원",
        "6컷 코믹",
        "420,000원",
        "동화 표지",
        "310,000원",
        "180,000원",
        "95,000원",
        "소계 1,375,000원",
        "부가세 137,500원",
        "합계 1,512,500원",
        "진행 일정 / Production Schedule",
        "10.12 기획 및 원문 확정",
        "10.15 1차 디자인 전달",
        "10.20 수정안 확인",
        "10.23 최종 파일 전달",
        "검수 기준 / Approval Checklist",
        "이름·가격·알레르기 문구 확인",
        "Check names, prices and allergen copy.",
        "납품: PNG 원본 + 편집 가능한 조판 파일",
        "Delivery: PNG originals + editable layout files.",
        "담당: 모닝포스트 디자인팀",
        "Prepared by Morning Post Design Team",
        "1 / 1"
      ],
      "instruction_language": "en",
      "group": "commercial",
      "aspect_ratio": "2:3",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "긴 본문과 비용 표가 있는 문서도 그대로 고객에게 보여줄 수 있을까?",
      "output": {
        "openai": {
          "size": "2336x3504",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "2:3"
        }
      },
      "prompt_path": "commercial/prompts/06_document.txt",
      "ground_truth_path": "commercial/prompts/06_document_ground_truth.json"
    },
    {
      "id": "08_character",
      "title": "08 · 캐릭터 시트",
      "skill": "다중 시점·디자인 유지",
      "use_case": "출판·굿즈용 오리지널 캐릭터 시트",
      "question": "캐릭터 하나를 여러 방향에서 그려도 같은 디자인으로 유지할까?",
      "prompt": "[실무 목적]\n독립 출판사가 동화·만화·굿즈에 사용할 오리지널 토끼 캐릭터 ‘모리 / MORI’의 디자인 시트 한 장을 만든다. 기존 작품이나 작가의 스타일을 모방하지 않는다.\n[캐릭터 디자인 원문]\n모리는 크림색 털의 작은 토끼다. 긴 귀 두 개와 검은 타원 눈, 분홍색 작은 삼각 코, 노란 후드 우비, 초록 장화, 몸을 가로지르는 끈의 주황색 메신저 가방을 가진다. 손가락은 둥근 만화 형태다. 성별을 특정하지 않는다. 두 귀는 평소 세우며 우비 후드는 내린다. 옷과 몸의 비율은 모든 그림에서 동일하다.\n[시트 배치]\n16:9 가로형. 밝은 크림색 종이 바탕, 얇고 일정한 진한 갈색 선, 부드러운 파스텔 채색과 약한 종이 질감. 좌상단에는 ‘모리’, ‘MORI’, ‘CHARACTER DESIGN SHEET’ 세 줄의 제목만 넣는다. 제목 아래 3열×2행의 같은 크기 영역에 총 여섯 그림을 배치한다. 몸 전체가 잘리지 않고 장화와 가방이 보이며 일정한 기준선과 충분한 여백을 유지한다.\n위 행 왼쪽 ‘정면 / FRONT’: 카메라를 정면으로 보는 전신.\n위 행 가운데 ‘3/4 / THREE-QUARTER’: 왼쪽으로 45도 돌아선 전신.\n위 행 오른쪽 ‘측면 / SIDE’: 왼쪽을 보는 완전한 옆모습 전신.\n아래 행 왼쪽 ‘뒷면 / BACK’: 얼굴이 보이지 않는 완전한 뒷모습 전신. 가방과 끈도 몸의 회전에 맞게 보인다.\n아래 행 가운데 ‘기쁨 / HAPPY’: 같은 전신 비율로 웃으며 양팔을 작게 벌린 모습.\n아래 행 오른쪽 ‘호기심 / CURIOUS’: 같은 전신 비율로 고개를 기울이고 귀를 세운 모습.\n[제약]\n위에 지정한 한·영 라벨을 각 그림 바로 아래에 정확히 쓴다. 여섯 그림이 같은 토끼, 같은 노란 우비, 같은 초록 장화, 같은 주황 가방이어야 한다. 앞모습을 그대로 복사해 뒷면이라고 쓰지 않는다. 머리·귀·옷·소품 색과 상대 비율이 시점마다 바뀌지 않게 한다. 배경 장면, 대사, 다른 동물, 색상 견본 텍스트, 임의의 디자인 번호나 추가 라벨은 넣지 않는다. 선과 색이 깨끗해 캐릭터 작업의 기준 자료로 쓸 수 있어야 한다.",
      "checks": [
        "정확히 6개 전신 캐릭터",
        "정면·3/4·측면·뒷면 시점이 서로 다름",
        "뒷면에 얼굴이 보이지 않음",
        "여섯 그림에서 같은 토끼 외형·비율",
        "노란 우비·초록 장화·주황 가방 유지",
        "기쁨·호기심 표정과 자세 구분",
        "한·영 제목과 6개 라벨 정확",
        "몸·장화 잘림 없이 제작용 시트 여백"
      ],
      "text_lines": [
        "모리",
        "MORI",
        "CHARACTER DESIGN SHEET",
        "정면 / FRONT",
        "3/4 / THREE-QUARTER",
        "측면 / SIDE",
        "뒷면 / BACK",
        "기쁨 / HAPPY",
        "호기심 / CURIOUS"
      ],
      "instruction_language": "ko",
      "group": "commercial",
      "aspect_ratio": "16:9",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "캐릭터 하나를 여러 방향에서 그려도 같은 디자인으로 유지할까?",
      "output": {
        "openai": {
          "size": "3840x2160",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "16:9"
        }
      },
      "prompt_path": "commercial/prompts/08_character.txt",
      "ground_truth_path": "commercial/prompts/08_character_ground_truth.json"
    },
    {
      "id": "09_comic",
      "title": "09 · 6컷 코믹",
      "skill": "말풍선·읽는 순서·시점",
      "use_case": "한·영 브랜드 코믹과 교육 콘텐츠",
      "question": "여섯 컷을 읽으면 사건이 이어지고 대사가 올바른 캐릭터에게 붙을까?",
      "prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.",
      "checks": [
        "3열×2행 총 6컷과 좌→우 읽는 순서",
        "한국어 대사 6개 정확",
        "영어 자막 6개 정확",
        "대사·말풍선 꼬리의 화자 대응",
        "참조 시트의 모리 디자인 유지",
        "고슴도치 조끼·안경·외형 유지",
        "전경·클로즈업·위·옆·어깨너머 시점 구분",
        "파란 책·빨간 우산 연속성",
        "빗속→도서관→함께 독서의 사건 연결",
        "각 컷에서 글자와 그림이 겹치지 않는 조판"
      ],
      "text_lines": [
        "비 오는 날의 책 한 권",
        "A Book for a Rainy Day",
        "비가 와도 괜찮아.",
        "Rain won't stop us.",
        "책이 젖겠어!",
        "The book will get wet!",
        "내 우산을 같이 쓰자.",
        "Let's share my umbrella.",
        "고마워, 모리!",
        "Thank you, Mori!",
        "이 책은 네가 먼저 읽어.",
        "You can read it first.",
        "함께라서 더 좋아.",
        "It's better together."
      ],
      "instruction_language": "ko",
      "group": "commercial",
      "aspect_ratio": "16:9",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "여섯 컷을 읽으면 사건이 이어지고 대사가 올바른 캐릭터에게 붙을까?",
      "output": {
        "openai": {
          "size": "3840x2160",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "16:9"
        }
      },
      "reference_image": "images/08_character_sunburst.png",
      "prompt_path": "commercial/prompts/09_comic.txt",
      "ground_truth_path": "commercial/prompts/09_comic_ground_truth.json",
      "reference_path": "commercial/images/08_character_sunburst.png"
    },
    {
      "id": "10_storybook",
      "title": "10 · 동화 펼침면",
      "skill": "긴 이중언어 본문·여백",
      "use_case": "판매용 동화책의 두 페이지 펼침면",
      "question": "동화의 두 페이지에서 긴 한·영 문장과 그림을 함께 읽을 수 있을까?",
      "prompt": "[참조 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 디자인 참조다. 캐릭터의 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지하되 시트 자체를 다시 그리지 않는다.\n[출판 목적]\n4~7세 어린이와 부모가 함께 읽는 한·영 동화책의 완성된 두 페이지 펼침면을 그린다. 책을 촬영한 목업이 아니라, 평면 출판 아트워크 한 장이다. 전체 가로 비율은 16:9이며 가운데에 접히는 세로 경계만 아주 약하게 표시한다. 가운데 양쪽 4% 영역과 바깥 가장자리 5%에는 글자·얼굴을 놓지 않는다.\n[그림 스타일과 캐릭터]\n따뜻한 파스텔 수채화 느낌, 일정한 진한 갈색 윤곽선, 섬세한 종이 질감. 모리는 참조 시트의 디자인을 따른다. 친구 우리는 갈색 가시·연한 얼굴·보라색 조끼·둥근 안경을 가진 작은 고슴도치다. 두 페이지에서 두 캐릭터의 체형·옷·가방과 파란 책·빨간 우산이 같아야 한다.\n[왼쪽 페이지 04]\n위쪽에 제목 ‘비 오는 날의 작은 약속’, 바로 아래 영어 제목 ‘A Little Promise in the Rain’을 넣는다. 그림은 넓은 외부 전경으로 모리와 우리가 빨간 우산 아래 도서관을 향해 걸으며, 모리가 파란 책을 안고 있는 모습이다. 인물은 텍스트를 가리지 않는다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 읽기 쉽게 배치한다.\n모리는 작은 책 한 권을 품에 안고 집을 나섰어요.\n길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.\nMori left home with a little book held close.\nAt the corner, Mori invited Uri to share a red umbrella.\n[오른쪽 페이지 05]\n그림은 도서관 창가의 가까운 시점이다. 모리가 우리에게 파란 책을 건네고, 빨간 우산은 문 옆에서 접혀 있다. 창밖 비와 실내의 따뜻한 빛을 대비한다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 넣는다.\n도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.\n창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.\nAt the library, Mori handed the book to Uri first.\nRain tapped the window, but the two friends felt warm inside.\n[정확성·상업 조판]\n왼쪽 바깥 하단 페이지 번호는 ‘04’, 오른쪽은 ‘05’다. 위 제목은 왼쪽에만 한 번씩 표시한다. 한국어 네 문장과 영어 네 문장의 철자·띄어쓰기·문장부호를 그대로 유지하고 요약하거나 번역을 다시 하지 않는다. 본문 크기를 억지로 줄이지 말고 줄바꿈으로 공간을 확보한다. 페이지를 가로질러 문장을 흘리지 않는다. 말풍선·패널 테두리·추가 문장·저자명·로고·워터마크는 넣지 않는다. 두 페이지의 서사 순서와 시점 차이가 분명하면서 전체가 한 권의 책처럼 보이게 한다.",
      "checks": [
        "평면 2페이지·중앙 경계·04/05 페이지 번호",
        "한·영 제목이 왼쪽에만 정확히 한 번",
        "한국어 본문 4문장 원문 일치",
        "영어 본문 4문장 원문 일치",
        "캐릭터·색·의상이 두 페이지에서 유지",
        "참조 시트의 모리 디자인 유지",
        "왼쪽 전경·오른쪽 가까운 시점 차이",
        "빗속 이동→도서관 책 전달의 서사 순서",
        "중앙 접힘·바깥 여백에 얼굴·글자 없음",
        "본문을 실제로 읽을 수 있는 크기와 줄 간격"
      ],
      "text_lines": [
        "비 오는 날의 작은 약속",
        "A Little Promise in the Rain",
        "모리는 작은 책 한 권을 품에 안고 집을 나섰어요.",
        "길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.",
        "Mori left home with a little book held close.",
        "At the corner, Mori invited Uri to share a red umbrella.",
        "도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.",
        "창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.",
        "At the library, Mori handed the book to Uri first.",
        "Rain tapped the window, but the two friends felt warm inside.",
        "04",
        "05"
      ],
      "instruction_language": "ko",
      "group": "commercial",
      "aspect_ratio": "16:9",
      "crop": {
        "x": 0.5,
        "y": 0.5
      },
      "duration_seconds": 8,
      "narration": "동화의 두 페이지에서 긴 한·영 문장과 그림을 함께 읽을 수 있을까?",
      "output": {
        "openai": {
          "size": "3840x2160",
          "quality": "max"
        },
        "google": {
          "size": "4K",
          "aspect_ratio": "16:9"
        }
      },
      "reference_image": "images/08_character_sunburst.png",
      "prompt_path": "commercial/prompts/10_storybook.txt",
      "ground_truth_path": "commercial/prompts/10_storybook_ground_truth.json",
      "reference_path": "commercial/images/08_character_sunburst.png"
    }
  ],
  "sources": [
    {
      "name": "STRICT-Bench",
      "url": "https://github.com/tianyu-z/STRICT-Bench",
      "finding": "문자 길이와 언어를 달리하고 OCR 추출을 원문과 대조하여 이미지 내 텍스트를 검사한다.",
      "adoption": "긴 한·영 원문을 고정하고 로컬 OCR 추출·원문 대조와 눈 검토를 병행한다. OCR에서 못 찾은 문자열은 자동 오탈자 판정하지 않는다."
    },
    {
      "name": "TextAtlas / TextAtlasEval",
      "url": "https://github.com/CSU-JPG/TextAtlas",
      "finding": "밀도 높은 텍스트 이미지와 여러 표현 조건을 평가한다. 주석에 텍스트 영역·글자 크기 정보 등을 제공한다.",
      "adoption": "메뉴·표·패키지의 큰 제목과 작은 본문을 분리해 검사한다. 동일 픽셀 확대와 원문 목록을 함께 제공한다."
    },
    {
      "name": "IOV LABS 한국어 렌더 벤치",
      "url": "https://labs.iovstudio.kr/en/news/korean-text-render-benchmark",
      "finding": "한국어 구절·받침·숫자 혼합을 이미지로 생성한 뒤 전사와 CER로 비교한 공개 실험이다.",
      "adoption": "쑥·꽈배기 같은 받침, Caffè의 악센트, ₩·×·°C·mL를 넣는다. 이 실험의 과거 모델 순위는 현재 모델 결과로 가져오지 않는다."
    },
    {
      "name": "ViStoryBench",
      "url": "https://arxiv.org/abs/2505.24862",
      "finding": "참조 캐릭터와 다중 시점 서사에서 캐릭터·스타일·프롬프트 정합성을 여러 항목으로 평가한다.",
      "adoption": "고정 참조 이미지를 코믹·동화에 동일하게 제공하고 컷마다 시점·대사·사건을 지정한다. 자동 공식 점수는 계산하지 않는다."
    },
    {
      "name": "GenEval",
      "url": "https://github.com/djghosh13/geneval",
      "finding": "물건·개수·색·위치를 따로 검사하며 예제는 프롬프트당 4장을 생성한다.",
      "adoption": "장면 02의 항목별 체크. 이번 초기판은 1장씩이며 반복 안정성은 평가하지 않는다."
    },
    {
      "name": "GenEval 2 / Soft-TIFA",
      "url": "https://github.com/facebookresearch/GenEval2",
      "finding": "프롬프트를 개별 질문과 정답으로 분해하고 각 질문의 충족 여부를 평가한다.",
      "adoption": "모든 장면에 요구사항 체크리스트 제공. 여기서는 작성자의 눈 검토이며 Soft-TIFA 자동 점수는 계산하지 않는다."
    },
    {
      "name": "HEIM",
      "url": "https://arxiv.org/abs/2311.04287",
      "finding": "지시 준수, 미감, 품질, 다국어, 효율 등 여러 측면을 나누어 평가하고 이미지와 사람 평가를 공개한다.",
      "adoption": "요구사항 충족과 선호 투표, 해상도와 소요 시간을 구분해 공개한다."
    },
    {
      "name": "Arena Image Battle",
      "url": "https://help.arena.ai/articles/1626988163-lmarena-how-to-use-image-generation",
      "finding": "같은 프롬프트에 대한 두 모델의 결과를 익명으로 비교하고 사람이 선호를 투표한다.",
      "adoption": "같은 프롬프트의 결과를 비교하고 미감 선호와 요구사항 검토를 구분한다. 현재 화면은 모델명을 공개한 3종 비교이며, 개인 선호를 공식 Arena 순위로 해석하지 않는다."
    },
    {
      "name": "OpenAI 이미지 생성 문서",
      "url": "https://developers.openai.com/api/docs/guides/image-generation",
      "finding": "2.5 모델은 max 품질과 최대 8,294,400 픽셀을 지원한다. 2560×1440 초과 해상도는 실험적이다.",
      "adoption": "최신 2종은 3840×2160/max를 요청하고 실제 반환 크기를 검증한다."
    },
    {
      "name": "Google 이미지 생성 문서",
      "url": "https://ai.google.dev/gemini-api/docs/image-generation",
      "finding": "Nano Banana 2.1은 4K를 지원한다. 16:9 표의 크기는 5504×3072이다.",
      "adoption": "4K/16:9를 요청한다. 원본을 확대하거나 강제로 동일 크기로 바꾸지 않는다."
    }
  ],
  "results": [
    {
      "id": "05_menu_flare",
      "scene_id": "05_menu",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.",
      "prompt_sha256": "3abb2c260ab3a544b3bb207de1c9aac1058a8a7a2c220a71f121c29dffbe413e",
      "timestamp_utc": "2026-10-09T06:02:45.850283+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 44.665,
      "response_model": null,
      "usage": {
        "input_tokens": 994,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 994
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 14336
      },
      "path": "commercial/images/05_menu_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 5868534,
      "sha256": "638285ce6b8dfdca8adb7d6a86dabf17a3858f18c748c991abc0eda30d8fa31a",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/05_menu_flare.json"
    },
    {
      "id": "05_menu_nano21",
      "scene_id": "05_menu",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.",
      "prompt_sha256": "3abb2c260ab3a544b3bb207de1c9aac1058a8a7a2c220a71f121c29dffbe413e",
      "timestamp_utc": "2026-10-09T06:02:45.850602+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 53.588,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 973,
        "candidatesTokenCount": 4965,
        "totalTokenCount": 9422,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 973
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 3484,
        "serviceTier": "standard"
      },
      "response_id": "hoPIaoixFv_IrfcPgfC5gQc",
      "path": "commercial/images/05_menu_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 7904284,
      "sha256": "6c0b4c7c87c83f0b131ce199278eab9c6a8ed6baf18e88463b24fb92485d1ef6",
      "expected_dimensions": [
        5504,
        3072
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/05_menu_nano21.json"
    },
    {
      "id": "05_menu_sunburst",
      "scene_id": "05_menu",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.",
      "prompt_sha256": "3abb2c260ab3a544b3bb207de1c9aac1058a8a7a2c220a71f121c29dffbe413e",
      "timestamp_utc": "2026-10-09T06:02:45.849916+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 81.187,
      "response_model": null,
      "usage": {
        "input_tokens": 994,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 994
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 14336
      },
      "path": "commercial/images/05_menu_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 5746354,
      "sha256": "8b5646de15815f2c249f7e1807b2387ca62979bf0c675f6e28b420dcccc0cde7",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/05_menu_sunburst.json"
    },
    {
      "id": "06_document_flare",
      "scene_id": "06_document",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "2336x3504",
        "quality": "max"
      },
      "prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.",
      "prompt_sha256": "c6193f36dc4f9f06a3947c5904e1d18e58e8ec75a0f7506b679970f98ba21616",
      "timestamp_utc": "2026-10-09T06:03:39.873704+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 48.893,
      "response_model": null,
      "usage": {
        "input_tokens": 747,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 747
        },
        "output_tokens": 15645,
        "output_tokens_details": {
          "image_tokens": 15645,
          "text_tokens": 0
        },
        "total_tokens": 16392
      },
      "path": "commercial/images/06_document_flare.png",
      "width": 2336,
      "height": 3504,
      "bytes": 5270936,
      "sha256": "18aee486b0a04b703778f49203c0f250e239f537d3a0b478b832614fb504c30e",
      "expected_dimensions": [
        2336,
        3504
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/06_document_flare.json"
    },
    {
      "id": "06_document_nano21",
      "scene_id": "06_document",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "2:3"
      },
      "prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.",
      "prompt_sha256": "c6193f36dc4f9f06a3947c5904e1d18e58e8ec75a0f7506b679970f98ba21616",
      "timestamp_utc": "2026-10-09T06:04:07.204895+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 47.964,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 804,
        "candidatesTokenCount": 6001,
        "totalTokenCount": 8539,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 804
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1734,
        "serviceTier": "standard"
      },
      "response_id": "14PIatf3I8Ts2roP-cDw-Qs",
      "path": "commercial/images/06_document_nano21.jpg",
      "width": 3392,
      "height": 5056,
      "bytes": 7120729,
      "sha256": "eb671b209aa1660b0ad5d607e7b5f2207c0d2f8a2879c7ded9a5b10ce4ad3b87",
      "expected_dimensions": [
        3392,
        5056
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/06_document_nano21.json"
    },
    {
      "id": "06_document_sunburst",
      "scene_id": "06_document",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "2336x3504",
        "quality": "max"
      },
      "prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.",
      "prompt_sha256": "c6193f36dc4f9f06a3947c5904e1d18e58e8ec75a0f7506b679970f98ba21616",
      "timestamp_utc": "2026-10-09T06:03:30.691916+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 91.033,
      "response_model": null,
      "usage": {
        "input_tokens": 747,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 747
        },
        "output_tokens": 15645,
        "output_tokens_details": {
          "image_tokens": 15645,
          "text_tokens": 0
        },
        "total_tokens": 16392
      },
      "path": "commercial/images/06_document_sunburst.png",
      "width": 2336,
      "height": 3504,
      "bytes": 5165769,
      "sha256": "cecac483167665aa07c95fd9b4d36c30312e6940d9913f8f99e2b9e07ff0d84b",
      "expected_dimensions": [
        2336,
        3504
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/06_document_sunburst.json"
    },
    {
      "id": "07_package_flare",
      "scene_id": "07_package",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[Commercial deliverable]\nCreate a professional 16:9 presentation board for a fictional MORNING POST drip-coffee box. Left 36%: a large flat front artwork. Middle 36%: a large flat back artwork. Right 28%: one assembled box in a clean three-quarter product view, showing the front and right side. Use an ivory board, generous margins and thin dividers. This is a design proposal board, not a pile of products.\n[Visual system]\nCream carton, forest-green type, coral sun emblem, subtle yellow-tulip line art. Front and assembled view must share identical typography, colors and front copy. Small text on the large flat back must be genuinely legible. Keep front, back and 3D views clearly separated. No barcode, invented compliance badge or extra logos.\n[Exact FRONT copy]\n모닝포스트\nMORNING POST\n봄날의 드립백\nSPRING DRIP COFFEE\nETHIOPIA BLEND\n5 BAGS × 10 g\nNET WT. 50 g\nTASTING NOTES: APRICOT · COCOA · FLORAL\n향미: 살구 · 코코아 · 꽃향기\n[Exact BACK copy]\n원재료명: 커피 100%\nIngredients: 100% roasted coffee.\n01 뜯기 / OPEN\n02 걸기 / HANG\n03 붓기 / POUR\n컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.\nHang on a cup and slowly pour 150 mL of water at 90–94°C.\n직사광선을 피하고 서늘한 곳에 보관하세요.\nStore in a cool place away from direct sunlight.\nBEST BEFORE 2027.04.30\nBATCH MP-0410\n[Constraints]\nPreserve Korean glyphs, English spelling, the × multiplication sign, the middle dots, en dash, °C, mL and decimal date. Do not translate, summarize or substitute text. Illustrate the three brewing steps with small, clear cup-and-dripbag diagrams next to the respective bilingual step. Do not invent nutrition data, manufacturing information or additional claims. The three-quarter box is a visual consistency test, so it must not become a different brand or flavor.",
      "prompt_sha256": "755d3f3a3f664a6cfd72a4bbbb29110e644a736d0b8e71afc872bb920bf046f5",
      "timestamp_utc": "2026-10-09T06:04:55.283280+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 46.295,
      "response_model": null,
      "usage": {
        "input_tokens": 483,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 483
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13825
      },
      "path": "commercial/images/07_package_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 8621690,
      "sha256": "ac82f61870fef4ddb1cb783e25700b64a88da576e07dcd9b73aa684f5dbc415b",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/07_package_flare.json"
    },
    {
      "id": "07_package_nano21",
      "scene_id": "07_package",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "[Commercial deliverable]\nCreate a professional 16:9 presentation board for a fictional MORNING POST drip-coffee box. Left 36%: a large flat front artwork. Middle 36%: a large flat back artwork. Right 28%: one assembled box in a clean three-quarter product view, showing the front and right side. Use an ivory board, generous margins and thin dividers. This is a design proposal board, not a pile of products.\n[Visual system]\nCream carton, forest-green type, coral sun emblem, subtle yellow-tulip line art. Front and assembled view must share identical typography, colors and front copy. Small text on the large flat back must be genuinely legible. Keep front, back and 3D views clearly separated. No barcode, invented compliance badge or extra logos.\n[Exact FRONT copy]\n모닝포스트\nMORNING POST\n봄날의 드립백\nSPRING DRIP COFFEE\nETHIOPIA BLEND\n5 BAGS × 10 g\nNET WT. 50 g\nTASTING NOTES: APRICOT · COCOA · FLORAL\n향미: 살구 · 코코아 · 꽃향기\n[Exact BACK copy]\n원재료명: 커피 100%\nIngredients: 100% roasted coffee.\n01 뜯기 / OPEN\n02 걸기 / HANG\n03 붓기 / POUR\n컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.\nHang on a cup and slowly pour 150 mL of water at 90–94°C.\n직사광선을 피하고 서늘한 곳에 보관하세요.\nStore in a cool place away from direct sunlight.\nBEST BEFORE 2027.04.30\nBATCH MP-0410\n[Constraints]\nPreserve Korean glyphs, English spelling, the × multiplication sign, the middle dots, en dash, °C, mL and decimal date. Do not translate, summarize or substitute text. Illustrate the three brewing steps with small, clear cup-and-dripbag diagrams next to the respective bilingual step. Do not invent nutrition data, manufacturing information or additional claims. The three-quarter box is a visual consistency test, so it must not become a different brand or flavor.",
      "prompt_sha256": "755d3f3a3f664a6cfd72a4bbbb29110e644a736d0b8e71afc872bb920bf046f5",
      "timestamp_utc": "2026-10-09T06:05:01.878103+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 55.961,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 508,
        "candidatesTokenCount": 5212,
        "totalTokenCount": 7337,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 508
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1617,
        "serviceTier": "standard"
      },
      "response_id": "DoTIaqGBDLeq9tMPvaTWkQ0",
      "path": "commercial/images/07_package_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 7610501,
      "sha256": "6342d2c7597f9594bdc3e9adfe1393530b72cc03ffb9a59eac1b2538e53e0892",
      "expected_dimensions": [
        5504,
        3072
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/07_package_nano21.json"
    },
    {
      "id": "07_package_sunburst",
      "scene_id": "07_package",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[Commercial deliverable]\nCreate a professional 16:9 presentation board for a fictional MORNING POST drip-coffee box. Left 36%: a large flat front artwork. Middle 36%: a large flat back artwork. Right 28%: one assembled box in a clean three-quarter product view, showing the front and right side. Use an ivory board, generous margins and thin dividers. This is a design proposal board, not a pile of products.\n[Visual system]\nCream carton, forest-green type, coral sun emblem, subtle yellow-tulip line art. Front and assembled view must share identical typography, colors and front copy. Small text on the large flat back must be genuinely legible. Keep front, back and 3D views clearly separated. No barcode, invented compliance badge or extra logos.\n[Exact FRONT copy]\n모닝포스트\nMORNING POST\n봄날의 드립백\nSPRING DRIP COFFEE\nETHIOPIA BLEND\n5 BAGS × 10 g\nNET WT. 50 g\nTASTING NOTES: APRICOT · COCOA · FLORAL\n향미: 살구 · 코코아 · 꽃향기\n[Exact BACK copy]\n원재료명: 커피 100%\nIngredients: 100% roasted coffee.\n01 뜯기 / OPEN\n02 걸기 / HANG\n03 붓기 / POUR\n컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.\nHang on a cup and slowly pour 150 mL of water at 90–94°C.\n직사광선을 피하고 서늘한 곳에 보관하세요.\nStore in a cool place away from direct sunlight.\nBEST BEFORE 2027.04.30\nBATCH MP-0410\n[Constraints]\nPreserve Korean glyphs, English spelling, the × multiplication sign, the middle dots, en dash, °C, mL and decimal date. Do not translate, summarize or substitute text. Illustrate the three brewing steps with small, clear cup-and-dripbag diagrams next to the respective bilingual step. Do not invent nutrition data, manufacturing information or additional claims. The three-quarter box is a visual consistency test, so it must not become a different brand or flavor.",
      "prompt_sha256": "755d3f3a3f664a6cfd72a4bbbb29110e644a736d0b8e71afc872bb920bf046f5",
      "timestamp_utc": "2026-10-09T06:04:28.919043+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "en",
      "elapsed_seconds": 84.374,
      "response_model": null,
      "usage": {
        "input_tokens": 483,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 483
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13825
      },
      "path": "commercial/images/07_package_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 9455570,
      "sha256": "40e3ffaac4f12476818b56e8a4824eb7e92df239064e043b8bf28cd2954c0986",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/07_package_sunburst.json"
    },
    {
      "id": "08_character_flare",
      "scene_id": "08_character",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[실무 목적]\n독립 출판사가 동화·만화·굿즈에 사용할 오리지널 토끼 캐릭터 ‘모리 / MORI’의 디자인 시트 한 장을 만든다. 기존 작품이나 작가의 스타일을 모방하지 않는다.\n[캐릭터 디자인 원문]\n모리는 크림색 털의 작은 토끼다. 긴 귀 두 개와 검은 타원 눈, 분홍색 작은 삼각 코, 노란 후드 우비, 초록 장화, 몸을 가로지르는 끈의 주황색 메신저 가방을 가진다. 손가락은 둥근 만화 형태다. 성별을 특정하지 않는다. 두 귀는 평소 세우며 우비 후드는 내린다. 옷과 몸의 비율은 모든 그림에서 동일하다.\n[시트 배치]\n16:9 가로형. 밝은 크림색 종이 바탕, 얇고 일정한 진한 갈색 선, 부드러운 파스텔 채색과 약한 종이 질감. 좌상단에는 ‘모리’, ‘MORI’, ‘CHARACTER DESIGN SHEET’ 세 줄의 제목만 넣는다. 제목 아래 3열×2행의 같은 크기 영역에 총 여섯 그림을 배치한다. 몸 전체가 잘리지 않고 장화와 가방이 보이며 일정한 기준선과 충분한 여백을 유지한다.\n위 행 왼쪽 ‘정면 / FRONT’: 카메라를 정면으로 보는 전신.\n위 행 가운데 ‘3/4 / THREE-QUARTER’: 왼쪽으로 45도 돌아선 전신.\n위 행 오른쪽 ‘측면 / SIDE’: 왼쪽을 보는 완전한 옆모습 전신.\n아래 행 왼쪽 ‘뒷면 / BACK’: 얼굴이 보이지 않는 완전한 뒷모습 전신. 가방과 끈도 몸의 회전에 맞게 보인다.\n아래 행 가운데 ‘기쁨 / HAPPY’: 같은 전신 비율로 웃으며 양팔을 작게 벌린 모습.\n아래 행 오른쪽 ‘호기심 / CURIOUS’: 같은 전신 비율로 고개를 기울이고 귀를 세운 모습.\n[제약]\n위에 지정한 한·영 라벨을 각 그림 바로 아래에 정확히 쓴다. 여섯 그림이 같은 토끼, 같은 노란 우비, 같은 초록 장화, 같은 주황 가방이어야 한다. 앞모습을 그대로 복사해 뒷면이라고 쓰지 않는다. 머리·귀·옷·소품 색과 상대 비율이 시점마다 바뀌지 않게 한다. 배경 장면, 대사, 다른 동물, 색상 견본 텍스트, 임의의 디자인 번호나 추가 라벨은 넣지 않는다. 선과 색이 깨끗해 캐릭터 작업의 기준 자료로 쓸 수 있어야 한다.",
      "prompt_sha256": "1919a770487b27448d0d679150e42ca94e1ad7c9d9a8275bc39de7e29e69ae89",
      "timestamp_utc": "2026-10-09T05:59:30.344500+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 47.936,
      "response_model": null,
      "usage": {
        "input_tokens": 648,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 648
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13990
      },
      "path": "commercial/images/08_character_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 10131461,
      "sha256": "d5bb50c76d425840e22c2363035f32a8c4b1397ffe0e3eb8f6003b33c2188b9d",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/08_character_flare.json"
    },
    {
      "id": "08_character_nano21",
      "scene_id": "08_character",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "[실무 목적]\n독립 출판사가 동화·만화·굿즈에 사용할 오리지널 토끼 캐릭터 ‘모리 / MORI’의 디자인 시트 한 장을 만든다. 기존 작품이나 작가의 스타일을 모방하지 않는다.\n[캐릭터 디자인 원문]\n모리는 크림색 털의 작은 토끼다. 긴 귀 두 개와 검은 타원 눈, 분홍색 작은 삼각 코, 노란 후드 우비, 초록 장화, 몸을 가로지르는 끈의 주황색 메신저 가방을 가진다. 손가락은 둥근 만화 형태다. 성별을 특정하지 않는다. 두 귀는 평소 세우며 우비 후드는 내린다. 옷과 몸의 비율은 모든 그림에서 동일하다.\n[시트 배치]\n16:9 가로형. 밝은 크림색 종이 바탕, 얇고 일정한 진한 갈색 선, 부드러운 파스텔 채색과 약한 종이 질감. 좌상단에는 ‘모리’, ‘MORI’, ‘CHARACTER DESIGN SHEET’ 세 줄의 제목만 넣는다. 제목 아래 3열×2행의 같은 크기 영역에 총 여섯 그림을 배치한다. 몸 전체가 잘리지 않고 장화와 가방이 보이며 일정한 기준선과 충분한 여백을 유지한다.\n위 행 왼쪽 ‘정면 / FRONT’: 카메라를 정면으로 보는 전신.\n위 행 가운데 ‘3/4 / THREE-QUARTER’: 왼쪽으로 45도 돌아선 전신.\n위 행 오른쪽 ‘측면 / SIDE’: 왼쪽을 보는 완전한 옆모습 전신.\n아래 행 왼쪽 ‘뒷면 / BACK’: 얼굴이 보이지 않는 완전한 뒷모습 전신. 가방과 끈도 몸의 회전에 맞게 보인다.\n아래 행 가운데 ‘기쁨 / HAPPY’: 같은 전신 비율로 웃으며 양팔을 작게 벌린 모습.\n아래 행 오른쪽 ‘호기심 / CURIOUS’: 같은 전신 비율로 고개를 기울이고 귀를 세운 모습.\n[제약]\n위에 지정한 한·영 라벨을 각 그림 바로 아래에 정확히 쓴다. 여섯 그림이 같은 토끼, 같은 노란 우비, 같은 초록 장화, 같은 주황 가방이어야 한다. 앞모습을 그대로 복사해 뒷면이라고 쓰지 않는다. 머리·귀·옷·소품 색과 상대 비율이 시점마다 바뀌지 않게 한다. 배경 장면, 대사, 다른 동물, 색상 견본 텍스트, 임의의 디자인 번호나 추가 라벨은 넣지 않는다. 선과 색이 깨끗해 캐릭터 작업의 기준 자료로 쓸 수 있어야 한다.",
      "prompt_sha256": "1919a770487b27448d0d679150e42ca94e1ad7c9d9a8275bc39de7e29e69ae89",
      "timestamp_utc": "2026-10-09T05:59:30.344579+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 49.866,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 601,
        "candidatesTokenCount": 6078,
        "totalTokenCount": 8524,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 601
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1845,
        "serviceTier": "standard"
      },
      "response_id": "woLIavWHL6ex2roP17HquQE",
      "path": "commercial/images/08_character_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 6699681,
      "sha256": "c6a025783978f7a5c68afbf729523620508c9d231d5f2cec26110b50f26f9c73",
      "expected_dimensions": [
        5504,
        3072
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/08_character_nano21.json"
    },
    {
      "id": "08_character_sunburst",
      "scene_id": "08_character",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[실무 목적]\n독립 출판사가 동화·만화·굿즈에 사용할 오리지널 토끼 캐릭터 ‘모리 / MORI’의 디자인 시트 한 장을 만든다. 기존 작품이나 작가의 스타일을 모방하지 않는다.\n[캐릭터 디자인 원문]\n모리는 크림색 털의 작은 토끼다. 긴 귀 두 개와 검은 타원 눈, 분홍색 작은 삼각 코, 노란 후드 우비, 초록 장화, 몸을 가로지르는 끈의 주황색 메신저 가방을 가진다. 손가락은 둥근 만화 형태다. 성별을 특정하지 않는다. 두 귀는 평소 세우며 우비 후드는 내린다. 옷과 몸의 비율은 모든 그림에서 동일하다.\n[시트 배치]\n16:9 가로형. 밝은 크림색 종이 바탕, 얇고 일정한 진한 갈색 선, 부드러운 파스텔 채색과 약한 종이 질감. 좌상단에는 ‘모리’, ‘MORI’, ‘CHARACTER DESIGN SHEET’ 세 줄의 제목만 넣는다. 제목 아래 3열×2행의 같은 크기 영역에 총 여섯 그림을 배치한다. 몸 전체가 잘리지 않고 장화와 가방이 보이며 일정한 기준선과 충분한 여백을 유지한다.\n위 행 왼쪽 ‘정면 / FRONT’: 카메라를 정면으로 보는 전신.\n위 행 가운데 ‘3/4 / THREE-QUARTER’: 왼쪽으로 45도 돌아선 전신.\n위 행 오른쪽 ‘측면 / SIDE’: 왼쪽을 보는 완전한 옆모습 전신.\n아래 행 왼쪽 ‘뒷면 / BACK’: 얼굴이 보이지 않는 완전한 뒷모습 전신. 가방과 끈도 몸의 회전에 맞게 보인다.\n아래 행 가운데 ‘기쁨 / HAPPY’: 같은 전신 비율로 웃으며 양팔을 작게 벌린 모습.\n아래 행 오른쪽 ‘호기심 / CURIOUS’: 같은 전신 비율로 고개를 기울이고 귀를 세운 모습.\n[제약]\n위에 지정한 한·영 라벨을 각 그림 바로 아래에 정확히 쓴다. 여섯 그림이 같은 토끼, 같은 노란 우비, 같은 초록 장화, 같은 주황 가방이어야 한다. 앞모습을 그대로 복사해 뒷면이라고 쓰지 않는다. 머리·귀·옷·소품 색과 상대 비율이 시점마다 바뀌지 않게 한다. 배경 장면, 대사, 다른 동물, 색상 견본 텍스트, 임의의 디자인 번호나 추가 라벨은 넣지 않는다. 선과 색이 깨끗해 캐릭터 작업의 기준 자료로 쓸 수 있어야 한다.",
      "prompt_sha256": "1919a770487b27448d0d679150e42ca94e1ad7c9d9a8275bc39de7e29e69ae89",
      "timestamp_utc": "2026-10-09T05:59:30.344128+00:00",
      "status": "success",
      "reference": null,
      "instruction_language": "ko",
      "elapsed_seconds": 79.44,
      "response_model": null,
      "usage": {
        "input_tokens": 648,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 648
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13990
      },
      "path": "commercial/images/08_character_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 9402458,
      "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/08_character_sunburst.json"
    },
    {
      "id": "09_comic_flare",
      "scene_id": "09_comic",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.",
      "prompt_sha256": "a366f7c16203c26f927b183e8304e444e34986741311dcdee47a8c9f254781a3",
      "timestamp_utc": "2026-10-09T06:05:53.607315+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 67.397,
      "response_model": null,
      "usage": {
        "input_tokens": 2464,
        "input_tokens_details": {
          "image_tokens": 1508,
          "text_tokens": 956
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 15806
      },
      "path": "commercial/images/09_comic_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 13735610,
      "sha256": "dc34ce6545799c74b8864b9d4b6fbc07d19caff491f26701261716b39900a917",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/09_comic_flare.json"
    },
    {
      "id": "09_comic_nano21",
      "scene_id": "09_comic",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.",
      "prompt_sha256": "a366f7c16203c26f927b183e8304e444e34986741311dcdee47a8c9f254781a3",
      "timestamp_utc": "2026-10-09T06:05:58.027132+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 41.323,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 2021,
        "candidatesTokenCount": 4581,
        "totalTokenCount": 7742,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 901
          },
          {
            "modality": "IMAGE",
            "tokenCount": 1120
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1140,
        "serviceTier": "standard"
      },
      "response_id": "SITIauuyGfqB2roP9PHqwAY",
      "path": "commercial/images/09_comic_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 7931618,
      "sha256": "0e9d4e3914f372681800de3121403d6e58ab41c3174258f153a2dc11c6c1f377",
      "expected_dimensions": [
        5504,
        3072
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/09_comic_nano21.json"
    },
    {
      "id": "09_comic_sunburst",
      "scene_id": "09_comic",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.",
      "prompt_sha256": "a366f7c16203c26f927b183e8304e444e34986741311dcdee47a8c9f254781a3",
      "timestamp_utc": "2026-10-09T06:05:41.925303+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 105.475,
      "response_model": null,
      "usage": {
        "input_tokens": 2464,
        "input_tokens_details": {
          "image_tokens": 1508,
          "text_tokens": 956
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 15806
      },
      "path": "commercial/images/09_comic_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 12862135,
      "sha256": "bb11c42e368977d7e020384c49f026778b43e97245aabd298d833a01adf18ad0",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/09_comic_sunburst.json"
    },
    {
      "id": "10_storybook_flare",
      "scene_id": "10_storybook",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[참조 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 디자인 참조다. 캐릭터의 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지하되 시트 자체를 다시 그리지 않는다.\n[출판 목적]\n4~7세 어린이와 부모가 함께 읽는 한·영 동화책의 완성된 두 페이지 펼침면을 그린다. 책을 촬영한 목업이 아니라, 평면 출판 아트워크 한 장이다. 전체 가로 비율은 16:9이며 가운데에 접히는 세로 경계만 아주 약하게 표시한다. 가운데 양쪽 4% 영역과 바깥 가장자리 5%에는 글자·얼굴을 놓지 않는다.\n[그림 스타일과 캐릭터]\n따뜻한 파스텔 수채화 느낌, 일정한 진한 갈색 윤곽선, 섬세한 종이 질감. 모리는 참조 시트의 디자인을 따른다. 친구 우리는 갈색 가시·연한 얼굴·보라색 조끼·둥근 안경을 가진 작은 고슴도치다. 두 페이지에서 두 캐릭터의 체형·옷·가방과 파란 책·빨간 우산이 같아야 한다.\n[왼쪽 페이지 04]\n위쪽에 제목 ‘비 오는 날의 작은 약속’, 바로 아래 영어 제목 ‘A Little Promise in the Rain’을 넣는다. 그림은 넓은 외부 전경으로 모리와 우리가 빨간 우산 아래 도서관을 향해 걸으며, 모리가 파란 책을 안고 있는 모습이다. 인물은 텍스트를 가리지 않는다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 읽기 쉽게 배치한다.\n모리는 작은 책 한 권을 품에 안고 집을 나섰어요.\n길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.\nMori left home with a little book held close.\nAt the corner, Mori invited Uri to share a red umbrella.\n[오른쪽 페이지 05]\n그림은 도서관 창가의 가까운 시점이다. 모리가 우리에게 파란 책을 건네고, 빨간 우산은 문 옆에서 접혀 있다. 창밖 비와 실내의 따뜻한 빛을 대비한다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 넣는다.\n도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.\n창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.\nAt the library, Mori handed the book to Uri first.\nRain tapped the window, but the two friends felt warm inside.\n[정확성·상업 조판]\n왼쪽 바깥 하단 페이지 번호는 ‘04’, 오른쪽은 ‘05’다. 위 제목은 왼쪽에만 한 번씩 표시한다. 한국어 네 문장과 영어 네 문장의 철자·띄어쓰기·문장부호를 그대로 유지하고 요약하거나 번역을 다시 하지 않는다. 본문 크기를 억지로 줄이지 말고 줄바꿈으로 공간을 확보한다. 페이지를 가로질러 문장을 흘리지 않는다. 말풍선·패널 테두리·추가 문장·저자명·로고·워터마크는 넣지 않는다. 두 페이지의 서사 순서와 시점 차이가 분명하면서 전체가 한 권의 책처럼 보이게 한다.",
      "prompt_sha256": "9a1aaa1adf6c9d3e0d86b90ba03c9b103f424110776b2e4eb0d281abf418c31f",
      "timestamp_utc": "2026-10-09T06:07:01.241955+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 65.572,
      "response_model": null,
      "usage": {
        "input_tokens": 2323,
        "input_tokens_details": {
          "image_tokens": 1508,
          "text_tokens": 815
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 15665
      },
      "path": "commercial/images/10_storybook_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 12740293,
      "sha256": "de7ff0e9597247c4f4721ecb613d32ecc4fb52d99e167314a3a801b10d9e3170",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/10_storybook_flare.json"
    },
    {
      "id": "10_storybook_nano21",
      "scene_id": "10_storybook",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "[참조 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 디자인 참조다. 캐릭터의 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지하되 시트 자체를 다시 그리지 않는다.\n[출판 목적]\n4~7세 어린이와 부모가 함께 읽는 한·영 동화책의 완성된 두 페이지 펼침면을 그린다. 책을 촬영한 목업이 아니라, 평면 출판 아트워크 한 장이다. 전체 가로 비율은 16:9이며 가운데에 접히는 세로 경계만 아주 약하게 표시한다. 가운데 양쪽 4% 영역과 바깥 가장자리 5%에는 글자·얼굴을 놓지 않는다.\n[그림 스타일과 캐릭터]\n따뜻한 파스텔 수채화 느낌, 일정한 진한 갈색 윤곽선, 섬세한 종이 질감. 모리는 참조 시트의 디자인을 따른다. 친구 우리는 갈색 가시·연한 얼굴·보라색 조끼·둥근 안경을 가진 작은 고슴도치다. 두 페이지에서 두 캐릭터의 체형·옷·가방과 파란 책·빨간 우산이 같아야 한다.\n[왼쪽 페이지 04]\n위쪽에 제목 ‘비 오는 날의 작은 약속’, 바로 아래 영어 제목 ‘A Little Promise in the Rain’을 넣는다. 그림은 넓은 외부 전경으로 모리와 우리가 빨간 우산 아래 도서관을 향해 걸으며, 모리가 파란 책을 안고 있는 모습이다. 인물은 텍스트를 가리지 않는다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 읽기 쉽게 배치한다.\n모리는 작은 책 한 권을 품에 안고 집을 나섰어요.\n길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.\nMori left home with a little book held close.\nAt the corner, Mori invited Uri to share a red umbrella.\n[오른쪽 페이지 05]\n그림은 도서관 창가의 가까운 시점이다. 모리가 우리에게 파란 책을 건네고, 빨간 우산은 문 옆에서 접혀 있다. 창밖 비와 실내의 따뜻한 빛을 대비한다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 넣는다.\n도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.\n창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.\nAt the library, Mori handed the book to Uri first.\nRain tapped the window, but the two friends felt warm inside.\n[정확성·상업 조판]\n왼쪽 바깥 하단 페이지 번호는 ‘04’, 오른쪽은 ‘05’다. 위 제목은 왼쪽에만 한 번씩 표시한다. 한국어 네 문장과 영어 네 문장의 철자·띄어쓰기·문장부호를 그대로 유지하고 요약하거나 번역을 다시 하지 않는다. 본문 크기를 억지로 줄이지 말고 줄바꿈으로 공간을 확보한다. 페이지를 가로질러 문장을 흘리지 않는다. 말풍선·패널 테두리·추가 문장·저자명·로고·워터마크는 넣지 않는다. 두 페이지의 서사 순서와 시점 차이가 분명하면서 전체가 한 권의 책처럼 보이게 한다.",
      "prompt_sha256": "9a1aaa1adf6c9d3e0d86b90ba03c9b103f424110776b2e4eb0d281abf418c31f",
      "timestamp_utc": "2026-10-09T06:07:27.740749+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 61.976,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 1895,
        "candidatesTokenCount": 5610,
        "totalTokenCount": 8968,
        "promptTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 1120
          },
          {
            "modality": "TEXT",
            "tokenCount": 775
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1463,
        "serviceTier": "standard"
      },
      "response_id": "oYTIaubcHaWB0-kPwaG_mQU",
      "path": "commercial/images/10_storybook_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 8347475,
      "sha256": "7fa2daefec12e7cb105c79aca8f9ce61873b1d2838bb135995bc2a1ea67cd0a5",
      "expected_dimensions": [
        5504,
        3072
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/10_storybook_nano21.json"
    },
    {
      "id": "10_storybook_sunburst",
      "scene_id": "10_storybook",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "[참조 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 디자인 참조다. 캐릭터의 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지하되 시트 자체를 다시 그리지 않는다.\n[출판 목적]\n4~7세 어린이와 부모가 함께 읽는 한·영 동화책의 완성된 두 페이지 펼침면을 그린다. 책을 촬영한 목업이 아니라, 평면 출판 아트워크 한 장이다. 전체 가로 비율은 16:9이며 가운데에 접히는 세로 경계만 아주 약하게 표시한다. 가운데 양쪽 4% 영역과 바깥 가장자리 5%에는 글자·얼굴을 놓지 않는다.\n[그림 스타일과 캐릭터]\n따뜻한 파스텔 수채화 느낌, 일정한 진한 갈색 윤곽선, 섬세한 종이 질감. 모리는 참조 시트의 디자인을 따른다. 친구 우리는 갈색 가시·연한 얼굴·보라색 조끼·둥근 안경을 가진 작은 고슴도치다. 두 페이지에서 두 캐릭터의 체형·옷·가방과 파란 책·빨간 우산이 같아야 한다.\n[왼쪽 페이지 04]\n위쪽에 제목 ‘비 오는 날의 작은 약속’, 바로 아래 영어 제목 ‘A Little Promise in the Rain’을 넣는다. 그림은 넓은 외부 전경으로 모리와 우리가 빨간 우산 아래 도서관을 향해 걸으며, 모리가 파란 책을 안고 있는 모습이다. 인물은 텍스트를 가리지 않는다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 읽기 쉽게 배치한다.\n모리는 작은 책 한 권을 품에 안고 집을 나섰어요.\n길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.\nMori left home with a little book held close.\nAt the corner, Mori invited Uri to share a red umbrella.\n[오른쪽 페이지 05]\n그림은 도서관 창가의 가까운 시점이다. 모리가 우리에게 파란 책을 건네고, 빨간 우산은 문 옆에서 접혀 있다. 창밖 비와 실내의 따뜻한 빛을 대비한다. 하단 크림색 여백에 다음 한국어 두 문장, 그 아래 영어 두 문장을 넣는다.\n도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.\n창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.\nAt the library, Mori handed the book to Uri first.\nRain tapped the window, but the two friends felt warm inside.\n[정확성·상업 조판]\n왼쪽 바깥 하단 페이지 번호는 ‘04’, 오른쪽은 ‘05’다. 위 제목은 왼쪽에만 한 번씩 표시한다. 한국어 네 문장과 영어 네 문장의 철자·띄어쓰기·문장부호를 그대로 유지하고 요약하거나 번역을 다시 하지 않는다. 본문 크기를 억지로 줄이지 말고 줄바꿈으로 공간을 확보한다. 페이지를 가로질러 문장을 흘리지 않는다. 말풍선·패널 테두리·추가 문장·저자명·로고·워터마크는 넣지 않는다. 두 페이지의 서사 순서와 시점 차이가 분명하면서 전체가 한 권의 책처럼 보이게 한다.",
      "prompt_sha256": "9a1aaa1adf6c9d3e0d86b90ba03c9b103f424110776b2e4eb0d281abf418c31f",
      "timestamp_utc": "2026-10-09T06:06:39.687072+00:00",
      "status": "success",
      "reference": {
        "path": "images/08_character_sunburst.png",
        "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
        "role": "character identity reference; generate a new composition",
        "origin": "First Sunburst character sheet; same unmodified file supplied to all models"
      },
      "instruction_language": "ko",
      "elapsed_seconds": 111.602,
      "response_model": null,
      "usage": {
        "input_tokens": 2323,
        "input_tokens_details": {
          "image_tokens": 1508,
          "text_tokens": 815
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 15665
      },
      "path": "commercial/images/10_storybook_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 12391535,
      "sha256": "6ae8430d3c24f8b1499a2676300629b6b33346959dccab87fedc8c4c0bb0fb02",
      "expected_dimensions": [
        3840,
        2160
      ],
      "resolution_verified": true,
      "evidence_path": "commercial/evidence/10_storybook_sunburst.json"
    },
    {
      "id": "01_light_flare",
      "scene_id": "01_light",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "봄 아침의 동네 카페를 배경으로, 나무 테이블 위에 물이 반쯤 든 투명 유리잔 하나와 접시에 놓인 크루아상 하나를 실제 사진처럼 그려 주세요. 왼쪽 창문에서 들어온 햇빛이 오른쪽으로 그림자를 만들고, 유리 너머의 나뭇결과 크루아상의 얇은 결이 보이게 해 주세요. 가로 화면이며 사람과 글자는 넣지 마세요.",
      "prompt_sha256": "c9eafb0876dcba7f04a6b3e190025f4d05543136d4c987ea2b5e97030ae8c392",
      "timestamp_utc": "2026-10-09T05:31:26.289229+00:00",
      "status": "success",
      "elapsed_seconds": 52.993,
      "response_model": null,
      "usage": {
        "input_tokens": 117,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 117
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13459
      },
      "path": "images/01_light_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 10541112,
      "sha256": "26301d9354b13b7dd51158108e9254a668337d9fcc16cd77f7406f2d8b55117c",
      "resolution_verified": true,
      "evidence_path": "evidence/01_light_flare.json"
    },
    {
      "id": "01_light_nano21",
      "scene_id": "01_light",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "봄 아침의 동네 카페를 배경으로, 나무 테이블 위에 물이 반쯤 든 투명 유리잔 하나와 접시에 놓인 크루아상 하나를 실제 사진처럼 그려 주세요. 왼쪽 창문에서 들어온 햇빛이 오른쪽으로 그림자를 만들고, 유리 너머의 나뭇결과 크루아상의 얇은 결이 보이게 해 주세요. 가로 화면이며 사람과 글자는 넣지 마세요.",
      "prompt_sha256": "c9eafb0876dcba7f04a6b3e190025f4d05543136d4c987ea2b5e97030ae8c392",
      "timestamp_utc": "2026-10-09T05:31:26.289379+00:00",
      "status": "success",
      "elapsed_seconds": 37.702,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 93,
        "candidatesTokenCount": 4270,
        "totalTokenCount": 5391,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 93
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1028,
        "serviceTier": "standard"
      },
      "response_id": "LnzIav-HKvqB2roP9PHqwAY",
      "path": "images/01_light_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 8653788,
      "sha256": "1a68015e1584864fc835c48b042b8427ff719fce429d0d7f4e28901b1fde66ea",
      "resolution_verified": true,
      "evidence_path": "evidence/01_light_nano21.json"
    },
    {
      "id": "01_light_sunburst",
      "scene_id": "01_light",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "봄 아침의 동네 카페를 배경으로, 나무 테이블 위에 물이 반쯤 든 투명 유리잔 하나와 접시에 놓인 크루아상 하나를 실제 사진처럼 그려 주세요. 왼쪽 창문에서 들어온 햇빛이 오른쪽으로 그림자를 만들고, 유리 너머의 나뭇결과 크루아상의 얇은 결이 보이게 해 주세요. 가로 화면이며 사람과 글자는 넣지 마세요.",
      "prompt_sha256": "c9eafb0876dcba7f04a6b3e190025f4d05543136d4c987ea2b5e97030ae8c392",
      "timestamp_utc": "2026-10-09T05:31:26.288788+00:00",
      "status": "success",
      "elapsed_seconds": 97.706,
      "response_model": null,
      "usage": {
        "input_tokens": 117,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 117
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13459
      },
      "path": "images/01_light_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 11548402,
      "sha256": "5a7337f38882619a2a97c5a04d9f9ea795099f9a3f378f34c2ff7dce986b5b11",
      "resolution_verified": true,
      "evidence_path": "evidence/01_light_sunburst.json"
    },
    {
      "id": "02_objects_flare",
      "scene_id": "02_objects",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "봄맞이 카페의 나무 테이블에 머그컵을 정확히 세 개 놓아 주세요. 화면 왼쪽은 파란 컵, 가운데는 흰 컵, 오른쪽은 빨간 컵이며, 흰 컵 뒤의 투명 꽃병에는 노란 튤립이 정확히 다섯 송이 있습니다. 가로 화면의 실제 제품 사진처럼 표현하고, 그 외 물건과 글자는 넣지 마세요.",
      "prompt_sha256": "81dcb498fcd5936e6ca5a140fb83c543bc2187555d7816be26ef4afb17156279",
      "timestamp_utc": "2026-10-09T05:34:07.943955+00:00",
      "status": "success",
      "elapsed_seconds": 47.874,
      "response_model": null,
      "usage": {
        "input_tokens": 105,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 105
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13447
      },
      "path": "images/02_objects_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 9015921,
      "sha256": "f6a362c539ba9b2eb0cd7e749e143a55b63ea5e02d36048335d694f1234591af",
      "resolution_verified": true,
      "evidence_path": "evidence/02_objects_flare.json"
    },
    {
      "id": "02_objects_nano21",
      "scene_id": "02_objects",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "봄맞이 카페의 나무 테이블에 머그컵을 정확히 세 개 놓아 주세요. 화면 왼쪽은 파란 컵, 가운데는 흰 컵, 오른쪽은 빨간 컵이며, 흰 컵 뒤의 투명 꽃병에는 노란 튤립이 정확히 다섯 송이 있습니다. 가로 화면의 실제 제품 사진처럼 표현하고, 그 외 물건과 글자는 넣지 마세요.",
      "prompt_sha256": "81dcb498fcd5936e6ca5a140fb83c543bc2187555d7816be26ef4afb17156279",
      "timestamp_utc": "2026-10-09T05:34:07.944039+00:00",
      "status": "success",
      "elapsed_seconds": 31.931,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 88,
        "candidatesTokenCount": 4267,
        "totalTokenCount": 5173,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 88
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 818,
        "serviceTier": "standard"
      },
      "response_id": "0HzIatbjGbXMrfcPtKzfqAU",
      "path": "images/02_objects_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 8048774,
      "sha256": "c6b7414a115ca7027089b61e08707eec2953a05809e5fd1707901b73efa20e19",
      "resolution_verified": true,
      "evidence_path": "evidence/02_objects_nano21.json"
    },
    {
      "id": "02_objects_sunburst",
      "scene_id": "02_objects",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "봄맞이 카페의 나무 테이블에 머그컵을 정확히 세 개 놓아 주세요. 화면 왼쪽은 파란 컵, 가운데는 흰 컵, 오른쪽은 빨간 컵이며, 흰 컵 뒤의 투명 꽃병에는 노란 튤립이 정확히 다섯 송이 있습니다. 가로 화면의 실제 제품 사진처럼 표현하고, 그 외 물건과 글자는 넣지 마세요.",
      "prompt_sha256": "81dcb498fcd5936e6ca5a140fb83c543bc2187555d7816be26ef4afb17156279",
      "timestamp_utc": "2026-10-09T05:34:07.943695+00:00",
      "status": "success",
      "elapsed_seconds": 88.424,
      "response_model": null,
      "usage": {
        "input_tokens": 105,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 105
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13447
      },
      "path": "images/02_objects_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 8573500,
      "sha256": "3b4a76b469792b9e06dd1eedfb550c3a2f7c1dd4fcfed8a2be4c69f69c31a2aa",
      "resolution_verified": true,
      "evidence_path": "evidence/02_objects_sunburst.json"
    },
    {
      "id": "03_poster_flare",
      "scene_id": "03_poster",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "동네 카페의 봄맞이 홍보 포스터를 따뜻한 크림색 배경의 가로 디자인으로 만들어 주세요. 제목은 정확히 ‘봄을 담은 하루’, 가격 안내는 정확히 ‘아메리카노 3,500원’, 마지막 줄은 정확히 ‘오늘도 문을 엽니다’이며, 세 줄을 크고 읽기 쉽게 배치해 주세요. 파란 머그컵 하나와 노란 튤립 그림을 곁들이고 그 외 글자와 로고는 넣지 마세요.",
      "prompt_sha256": "634532c980df7b6f0c1b6d78556a0d3d6b9e13163a5b0882c974f76f468a97c7",
      "timestamp_utc": "2026-10-09T05:34:56.024617+00:00",
      "status": "success",
      "elapsed_seconds": 42.085,
      "response_model": null,
      "usage": {
        "input_tokens": 125,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 125
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13467
      },
      "path": "images/03_poster_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 5797977,
      "sha256": "3434455d941529e75e06855346715d70d27ec461bdf072965ecf2a47e25e9af9",
      "resolution_verified": true,
      "evidence_path": "evidence/03_poster_flare.json"
    },
    {
      "id": "03_poster_nano21",
      "scene_id": "03_poster",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "동네 카페의 봄맞이 홍보 포스터를 따뜻한 크림색 배경의 가로 디자인으로 만들어 주세요. 제목은 정확히 ‘봄을 담은 하루’, 가격 안내는 정확히 ‘아메리카노 3,500원’, 마지막 줄은 정확히 ‘오늘도 문을 엽니다’이며, 세 줄을 크고 읽기 쉽게 배치해 주세요. 파란 머그컵 하나와 노란 튤립 그림을 곁들이고 그 외 글자와 로고는 넣지 마세요.",
      "prompt_sha256": "634532c980df7b6f0c1b6d78556a0d3d6b9e13163a5b0882c974f76f468a97c7",
      "timestamp_utc": "2026-10-09T05:35:36.566113+00:00",
      "status": "success",
      "elapsed_seconds": 34.044,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 114,
        "candidatesTokenCount": 4379,
        "totalTokenCount": 5791,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 114
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1298,
        "serviceTier": "standard"
      },
      "response_id": "KH3IaqCENNTKrfcPt77f2As",
      "path": "images/03_poster_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 7029405,
      "sha256": "7ea332ccd9e534d6bebf907f22235a2cce3b0133f6a5774fca3267f44a574e99",
      "resolution_verified": true,
      "evidence_path": "evidence/03_poster_nano21.json"
    },
    {
      "id": "03_poster_sunburst",
      "scene_id": "03_poster",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "동네 카페의 봄맞이 홍보 포스터를 따뜻한 크림색 배경의 가로 디자인으로 만들어 주세요. 제목은 정확히 ‘봄을 담은 하루’, 가격 안내는 정확히 ‘아메리카노 3,500원’, 마지막 줄은 정확히 ‘오늘도 문을 엽니다’이며, 세 줄을 크고 읽기 쉽게 배치해 주세요. 파란 머그컵 하나와 노란 튤립 그림을 곁들이고 그 외 글자와 로고는 넣지 마세요.",
      "prompt_sha256": "634532c980df7b6f0c1b6d78556a0d3d6b9e13163a5b0882c974f76f468a97c7",
      "timestamp_utc": "2026-10-09T05:34:40.024976+00:00",
      "status": "success",
      "elapsed_seconds": 76.235,
      "response_model": null,
      "usage": {
        "input_tokens": 125,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 125
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13467
      },
      "path": "images/03_poster_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 6217812,
      "sha256": "273db50781c03125c2c79da6c779c79190820df4bde2ee1009957c663a101508",
      "resolution_verified": true,
      "evidence_path": "evidence/03_poster_sunburst.json"
    },
    {
      "id": "04_hands_flare",
      "scene_id": "04_hands",
      "model_id": "flare",
      "requested_model": "gpt-image-2.5-flare-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "동네 카페에서 바리스타가 첫 커피를 따르는 순간을 손과 도구 중심의 실제 사진처럼 그려 주세요. 왼손은 파란 머그컵의 손잡이를 잡고 오른손은 은색 주전자를 잡으며, 주전자 입구에서 나온 커피 줄기가 컵 안으로 이어지게 해 주세요. 따뜻한 아침 빛의 가로 화면이며 얼굴과 글자는 넣지 마세요.",
      "prompt_sha256": "a3b0d8551a82b3b371a5b97c82656417d30b02b48a64657bf31e26336e853cad",
      "timestamp_utc": "2026-10-09T05:35:56.425506+00:00",
      "status": "success",
      "elapsed_seconds": 47.583,
      "response_model": null,
      "usage": {
        "input_tokens": 103,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 103
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13445
      },
      "path": "images/04_hands_flare.png",
      "width": 3840,
      "height": 2160,
      "bytes": 8841097,
      "sha256": "aae6433360b2413973875544578281b2d31cc0431c86d9bb5a17a27cf5ea4d1f",
      "resolution_verified": true,
      "evidence_path": "evidence/04_hands_flare.json"
    },
    {
      "id": "04_hands_nano21",
      "scene_id": "04_hands",
      "model_id": "nano21",
      "requested_model": "gemini-nano-banana-2.1",
      "requested_config": {
        "size": "4K",
        "aspect_ratio": "16:9"
      },
      "prompt": "동네 카페에서 바리스타가 첫 커피를 따르는 순간을 손과 도구 중심의 실제 사진처럼 그려 주세요. 왼손은 파란 머그컵의 손잡이를 잡고 오른손은 은색 주전자를 잡으며, 주전자 입구에서 나온 커피 줄기가 컵 안으로 이어지게 해 주세요. 따뜻한 아침 빛의 가로 화면이며 얼굴과 글자는 넣지 마세요.",
      "prompt_sha256": "a3b0d8551a82b3b371a5b97c82656417d30b02b48a64657bf31e26336e853cad",
      "timestamp_utc": "2026-10-09T05:36:10.749154+00:00",
      "status": "success",
      "elapsed_seconds": 50.866,
      "response_model": "gemini-nano-banana-2.1",
      "usage": {
        "promptTokenCount": 91,
        "candidatesTokenCount": 4912,
        "totalTokenCount": 6022,
        "promptTokensDetails": [
          {
            "modality": "TEXT",
            "tokenCount": 91
          }
        ],
        "candidatesTokensDetails": [
          {
            "modality": "IMAGE",
            "tokenCount": 3780
          }
        ],
        "thoughtsTokenCount": 1019,
        "serviceTier": "standard"
      },
      "response_id": "S33IauHuA4av2roPp-2XgAw",
      "path": "images/04_hands_nano21.jpg",
      "width": 5504,
      "height": 3072,
      "bytes": 8351822,
      "sha256": "be3b28107cc68c7ed72c92393afdbe73273b1e2b7ba8124fb727c540b725ab6b",
      "resolution_verified": true,
      "evidence_path": "evidence/04_hands_nano21.json"
    },
    {
      "id": "04_hands_sunburst",
      "scene_id": "04_hands",
      "model_id": "sunburst",
      "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
      "requested_config": {
        "size": "3840x2160",
        "quality": "max"
      },
      "prompt": "동네 카페에서 바리스타가 첫 커피를 따르는 순간을 손과 도구 중심의 실제 사진처럼 그려 주세요. 왼손은 파란 머그컵의 손잡이를 잡고 오른손은 은색 주전자를 잡으며, 주전자 입구에서 나온 커피 줄기가 컵 안으로 이어지게 해 주세요. 따뜻한 아침 빛의 가로 화면이며 얼굴과 글자는 넣지 마세요.",
      "prompt_sha256": "a3b0d8551a82b3b371a5b97c82656417d30b02b48a64657bf31e26336e853cad",
      "timestamp_utc": "2026-10-09T05:35:38.270134+00:00",
      "status": "success",
      "elapsed_seconds": 91.598,
      "response_model": null,
      "usage": {
        "input_tokens": 103,
        "input_tokens_details": {
          "image_tokens": 0,
          "text_tokens": 103
        },
        "output_tokens": 13342,
        "output_tokens_details": {
          "image_tokens": 13342,
          "text_tokens": 0
        },
        "total_tokens": 13445
      },
      "path": "images/04_hands_sunburst.png",
      "width": 3840,
      "height": 2160,
      "bytes": 9681231,
      "sha256": "f0b493f224adbc66e3b6db71289f37136c7fb7fa715b4c974dc65a90454bbd63",
      "resolution_verified": true,
      "evidence_path": "evidence/04_hands_sunburst.json"
    }
  ],
  "reviews": {
    "05_menu_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "3단 12개 메뉴·설명·가격 대응과 옵션·알레르기·부가세 문구를 읽을 수 있습니다. 원문에 없던 GOOD COFFEE / BRIGHTER DAYS, SAME GOOD COFFEE / NEW DAYS, A WARMER SEASON TOGETHER를 제목 주변에 추가했습니다. 체크 10개와 별도로 이 추가 문구는 프롬프트의 추가 금지 조건을 위반합니다.",
      "readiness": "추가 슬로건 삭제·문구 검수 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "06_document_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "긴 한·영 본문, MP-2026-014, 발행일, 표의 수량·단가·금액과 일정 4개를 읽었습니다. 360,000+285,000+420,000+310,000=1,375,000원이며 VAT 137,500원과 합계 1,512,500원도 맞습니다. 본문과 표를 크게 배치했습니다.",
      "readiness": "수치·본문 검수 후 문서 디자인 시안으로 활용",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "08_character_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "6개 전신과 정면·3/4·측면·뒷면을 확인했습니다. 뒷면에는 얼굴이 없고 우비·장화·가방이 유지됩니다. 이 최초 원본을 코믹·동화의 공통 참조로 사용했습니다.",
      "readiness": "캐릭터 시트 시안 · 각도와 세부 외형 확인 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "07_package_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        null,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "평면 앞면·뒷면과 입체 상자가 같은 색·브랜드·제품명으로 이어집니다. 수량·무게·향미·원재료·보관·날짜·물 온도와 양을 읽었습니다. 뜯기·붓기 같은 작은 받침은 확대해도 서체와 획 판독에 주의가 필요해 해당 검사를 보류합니다. 상단 뷰 안내 라벨을 추가했습니다.",
      "readiness": "패키지 콘셉트 시안 · 작은 문구 재교정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/07_package_sunburst_back.png"
      ]
    },
    "05_menu_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "12개 메뉴와 각 가격, 한·영 설명을 3단에 배치했습니다. Caffè 악센트와 쑥·꽈배기 등 이름이 보이며 옵션·알레르기·부가세 안내도 읽힙니다. 한·영의 굵기와 글자 크기를 달리해 위계를 만들었습니다.",
      "readiness": "문구 교정 확인 후 조판 시안으로 활용",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "06_document_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "긴 본문과 비용 표, 일정·검수 영역을 읽을 수 있습니다. 네 항목·수량·단가·금액과 소계·VAT·총액이 대응합니다. 담당자를 검수 영역으로 옮기고 하단에는 MORNING POST DESIGN TEAM을 넣어 지정한 조판 위치를 일부 바꿨습니다.",
      "readiness": "수치·본문 검수 후 문서 디자인 시안으로 활용",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "08_character_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "6개 전신·다른 시점·표정을 만들었습니다. 노란 우비·초록 장화·주황 가방과 라벨을 유지했습니다. 3/4 모습의 회전은 약해 정면과 비슷하게 보이므로 제작 기준 시트로는 각도 보강이 유용합니다.",
      "readiness": "캐릭터 시트 시안 · 각도와 세부 외형 확인 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "07_package_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        null,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "앞면·뒷면·입체 상자의 정보가 대응하고 세 추출 단계 도해가 보입니다. 원재료·보관 문장과 90–94°C·150 mL, 날짜·배치 번호를 읽을 수 있습니다. 작은 뜯기·붓기 받침은 오탈자를 확정하지 않고 재교정 대상으로 남겼습니다.",
      "readiness": "패키지 콘셉트 시안 · 작은 문구 재교정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/07_package_flare_back.png"
      ]
    },
    "05_menu_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "12개 메뉴와 가격 대응, 옵션과 하단 안내를 확인했습니다. 영문 이름은 이탤릭으로 구분했고 한글 설명은 다른 두 결과보다 굵습니다. 하단 안내가 길게 이어져 실제 설치 크기에서 가독성을 다시 확인해야 합니다.",
      "readiness": "문구 교정 확인 후 조판 시안으로 활용",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "06_document_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "세로형 3392×5056 원본입니다. 긴 한·영 본문, 문서번호·날짜와 표 네 행·합계를 읽을 수 있습니다. 상단을 좌우로 나눠 브랜드와 문서 제목을 분리했고 하단에는 일정·검수·담당자·페이지 번호를 담았습니다.",
      "readiness": "수치·본문 검수 후 문서 디자인 시안으로 활용",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "08_character_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "6개 시점·표정과 한·영 라벨이 보입니다. 다른 두 모델보다 평면적이고 굵은 선을 사용합니다. 프롬프트의 분홍 삼각 코 대신 어두운 코·입 모양을 택한 점은 외형 조건의 차이입니다. 시트 내부의 옷과 소품은 유지됩니다.",
      "readiness": "캐릭터 시트 시안 · 각도와 세부 외형 확인 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "07_package_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        null,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "3개 뷰와 브랜드·제품명·추출 정보가 유지됩니다. 앞·뒷면에 테두리를 쓰고 조립 상자에 같은 디자인을 적용했습니다. 작은 단계 라벨의 받침은 교정 확인이 필요합니다. 원문에 없는 뷰 안내와 (36%)/(28%) 배치 수치를 이미지에 인쇄했습니다.",
      "readiness": "패키지 콘셉트 시안 · 작은 문구 재교정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/07_package_nano21_back.png"
      ]
    },
    "09_comic_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        null,
        true,
        true,
        true
      ],
      "note": "6컷의 한글 대사·영문 자막과 화자가 대응하고 캐릭터·책·우산이 유지됩니다. 2컷 클로즈업, 3컷 내려다보기, 5컷 어깨 너머가 구분되지만 4컷은 완전한 옆모습보다 사선에 가깝습니다. 배경에 책방 안내 문장을 추가했고 영어 자막은 지시와 달리 패널 바깥에 배치했습니다.",
      "readiness": "코믹 시안 · 구도·추가 문구·자막 위치 수정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/09_comic_sunburst_last.png"
      ]
    },
    "09_comic_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        false,
        false,
        true,
        true
      ],
      "note": "대사 6개와 자막 6개, 캐릭터 디자인과 말풍선 꼬리를 확인했습니다. 1컷에서는 모리가 책을 들고 2컷에서는 설명 없이 우리가 책을 듭니다. 4컷은 정면에 가까워 지정된 측면 시점과 다릅니다. 영어 자막은 패널 밖에 배치됐습니다.",
      "readiness": "코믹 시안 · 책의 연속성과 시점 수정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/09_comic_flare_last.png"
      ]
    },
    "09_comic_nano21": {
      "passed": [
        true,
        true,
        true,
        false,
        true,
        true,
        false,
        false,
        true,
        true
      ],
      "note": "한글 6대사와 영어 6자막은 읽히며 인용부호도 함께 인쇄했습니다. 2컷 파란 책이 손에 닿지 않고 공중에 떠 있습니다. 마지막 대사의 지정 화자는 우리인데 말풍선 꼬리가 모리 쪽을 향합니다. 2컷이 전신이고 4컷도 정면에 가까워 지시된 클로즈업·측면과 다릅니다. 영어 자막은 패널 바깥입니다.",
      "readiness": "구성 수정 필요 · 떠 있는 책·화자·시점",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음.",
      "inspection_paths": [
        "inspection/09_comic_nano21_last.png"
      ]
    },
    "10_storybook_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        false,
        true
      ],
      "note": "두 페이지와 04/05 번호, 한·영 제목, 네 한국어 문장과 네 영어 문장을 읽었습니다. 빗속 이동과 실내 책 전달, 시점 차이와 동일한 캐릭터·소품이 보입니다. 제목과 일부 본문이 외측 5% 여백에 가까워 안전 영역을 침범하며 인쇄 조판에서 안쪽으로 옮겨야 합니다. 그림 속 도서관 표지를 추가했습니다.",
      "readiness": "동화 시안 · 인쇄 여백 조정과 문구 교정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "10_storybook_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        false,
        true
      ],
      "note": "한·영 본문 8문장과 제목·페이지 번호, 두 장면의 사건 연결을 확인했습니다. 종이 질감과 수채화 배경을 유지하며 고슴도치에게 주황 가방을 추가했습니다. 제목과 왼쪽 본문이 외측 5% 안전 여백을 침범해 실제 책 조판에서 위치 조정이 필요합니다.",
      "readiness": "동화 시안 · 인쇄 여백 조정과 문구 교정 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "10_storybook_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "두 페이지의 한·영 원문과 번호를 읽을 수 있으며 제목이 왼쪽에만 있습니다. 중앙과 바깥 본문 여백을 넉넉히 뒀고 그림이 별도 영역에 놓였습니다. 실내는 다른 두 모델보다 먼 시점이지만 왼쪽 전경과 차이는 있습니다. 실제 동화 납품 전 문구와 페이지 크기로 다시 조판해야 합니다.",
      "readiness": "동화 시안 · 본문 교정·인쇄 조판 확인 필요",
      "review_method": "API 원본 전체를 눈으로 확인하고 필요한 영역은 원본 픽셀 크롭으로 추가 확인. OCR 미발견을 자동 실패로 간주하지 않음."
    },
    "01_light_sunburst": {
      "passed": [
        null,
        true,
        true,
        true,
        true
      ],
      "note": "유리잔 하나와 크루아상 하나가 분명합니다. 유리 아래의 굴절과 빵의 얇은 층, 오른쪽으로 떨어지는 그림자가 보입니다. 수면이 중간 부근에 있지만 시점·굴절 때문에 실제 부피의 절반 여부는 세 모델 모두 동일하게 보류했습니다."
    },
    "01_light_flare": {
      "passed": [
        null,
        true,
        true,
        true,
        true
      ],
      "note": "빵의 얇은 결과 유리의 반사·투과가 보입니다. 왼쪽 창빛과 오른쪽 그림자가 일치합니다. 유리 표면의 작은 물방울도 표현했습니다. 수면은 중간 부근이며 정확히 반쯤의 부피인지는 세 모델 모두 동일하게 보류했습니다."
    },
    "01_light_nano21": {
      "passed": [
        null,
        true,
        true,
        true,
        true
      ],
      "note": "5504픽셀의 원본을 반환했으며 빵의 결과 그림자가 잘 보입니다. 수위가 절반보다 높아 보여 ‘물 반쯤’ 조건은 확정을 보류했습니다. 높은 해상도와 지시 준수는 별도입니다."
    },
    "02_objects_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "파랑·흰색·빨강 컵 세 개가 지정된 순서로 놓였습니다. 중앙 컵 뒤의 유리 꽃병과 분리된 노란 꽃머리 다섯 개를 확인했습니다."
    },
    "02_objects_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        false,
        true
      ],
      "note": "컵 세 개와 색의 위치, 투명 꽃병은 맞습니다. 원본에서도 분리되어 보이는 튤립 꽃머리는 네 개로 관찰되어 ‘정확히 다섯 송이’ 조건을 불충족으로 표시했습니다. 직접 확대해 다시 셀 수 있습니다."
    },
    "02_objects_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "파란 컵·흰 컵·빨간 컵의 순서를 지켰습니다. 중앙 뒤 꽃병에서 노란 꽃머리 다섯 개가 확인됩니다. 꽃병과 컵 표면의 표현은 다른 두 모델과 구도가 다릅니다."
    },
    "03_poster_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "제목, ‘아메리카노 3,500원’, 마지막 문장을 정확히 읽을 수 있습니다. 큰 산호색 제목과 사실적인 컵·꽃 표현을 선택했습니다. 추가 글자와 로고는 관찰되지 않았습니다."
    },
    "03_poster_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "요청한 한글 세 줄과 쉼표를 포함한 가격을 정확히 표현했습니다. 컵과 꽃은 수채화 느낌이며, 세 줄의 크기가 커서 읽기 쉽습니다."
    },
    "03_poster_nano21": {
      "passed": [
        true,
        true,
        true,
        true,
        true,
        true
      ],
      "note": "한글 세 줄과 가격이 정확히 보입니다. 작은 잎과 꽃잎 장식을 추가했으나 추가 글자·로고는 없습니다. 마지막 줄은 다른 두 결과보다 상대적으로 작지만 충분히 읽힙니다."
    },
    "04_hands_sunburst": {
      "passed": [
        true,
        true,
        true,
        true,
        true
      ],
      "note": "앞에서 본 인물의 왼손이 컵 손잡이를, 오른손이 은색 주전자를 잡는 배치입니다. 커피 줄기는 주전자 입구에서 컵 안까지 이어집니다. 관찰되는 손과 도구의 접촉은 자연스럽지만 가려진 손가락 전체의 정확성까지 확정한 것은 아닙니다."
    },
    "04_hands_flare": {
      "passed": [
        true,
        true,
        true,
        true,
        true
      ],
      "note": "왼손의 컵 손잡이와 오른손의 주전자 잡기가 보이며, 커피 줄기도 컵 안으로 이어집니다. 따뜻한 창빛과 금속 반사를 표현했습니다. 보이는 손가락에는 뚜렷한 추가·융합 오류가 관찰되지 않았습니다."
    },
    "04_hands_nano21": {
      "passed": [
        null,
        null,
        true,
        true,
        true
      ],
      "note": "손이 파란 컵과 은색 주전자를 각각 잡고 커피 줄기가 연결됩니다. 인물을 옆에서 가까이 촬영한 구도라 해부학적 왼손·오른손의 구분은 보류했습니다. 컵 아래 저울이 추가됐지만 이번 프롬프트는 다른 도구를 금지하지 않았습니다."
    }
  },
  "ocr": {
    "05_menu_flare": {
      "id": "05_menu_flare",
      "image_sha256": "638285ce6b8dfdca8adb7d6a86dabf17a3858f18c748c991abc0eda30d8fa31a",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 47,
      "total": 72,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": false
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "SPRING MENU 2026",
          "matched": true
        },
        {
          "text": "COFFEE / 커피",
          "matched": true
        },
        {
          "text": "아메리카노",
          "matched": true
        },
        {
          "text": "Americano",
          "matched": true
        },
        {
          "text": "₩3,500",
          "matched": false
        },
        {
          "text": "맑고 깔끔한 에스프레소 커피",
          "matched": true
        },
        {
          "text": "Clean espresso with hot water",
          "matched": true
        },
        {
          "text": "카페라떼",
          "matched": true
        },
        {
          "text": "Caffè Latte",
          "matched": false
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "고소한 우유와 에스프레소",
          "matched": true
        },
        {
          "text": "Espresso with silky steamed milk",
          "matched": true
        },
        {
          "text": "바닐라 빈 라떼",
          "matched": true
        },
        {
          "text": "Vanilla Bean Latte",
          "matched": true
        },
        {
          "text": "₩5,200",
          "matched": false
        },
        {
          "text": "바닐라 빈의 은은한 단맛",
          "matched": true
        },
        {
          "text": "A gentle hint of real vanilla",
          "matched": true
        },
        {
          "text": "디카페인 콜드브루",
          "matched": true
        },
        {
          "text": "Decaf Cold Brew",
          "matched": true
        },
        {
          "text": "₩5,000",
          "matched": false
        },
        {
          "text": "천천히 우려낸 부드러운 커피",
          "matched": true
        },
        {
          "text": "Slow-steeped, smooth and mellow",
          "matched": true
        },
        {
          "text": "TEA & SPECIAL / 차와 특별한 음료",
          "matched": true
        },
        {
          "text": "제주 쑥 라떼",
          "matched": true
        },
        {
          "text": "Jeju Mugwort Latte",
          "matched": true
        },
        {
          "text": "₩5,800",
          "matched": false
        },
        {
          "text": "쑥의 향과 따뜻한 우유",
          "matched": false
        },
        {
          "text": "Earthy mugwort with warm milk",
          "matched": true
        },
        {
          "text": "딸기 말차 라떼",
          "matched": true
        },
        {
          "text": "Strawberry Matcha Latte",
          "matched": true
        },
        {
          "text": "₩6,200",
          "matched": false
        },
        {
          "text": "딸기와 말차의 두 가지 색",
          "matched": true
        },
        {
          "text": "Strawberry meets vibrant matcha",
          "matched": true
        },
        {
          "text": "얼그레이 밀크티",
          "matched": true
        },
        {
          "text": "Earl Grey Milk Tea",
          "matched": true
        },
        {
          "text": "₩5,500",
          "matched": false
        },
        {
          "text": "베르가모트 향의 홍차와 우유",
          "matched": false
        },
        {
          "text": "Bergamot tea with creamy milk",
          "matched": true
        },
        {
          "text": "레몬 진저 티",
          "matched": true
        },
        {
          "text": "Lemon Ginger Tea",
          "matched": true
        },
        {
          "text": "₩4,800",
          "matched": false
        },
        {
          "text": "레몬과 생강의 산뜻한 조화",
          "matched": false
        },
        {
          "text": "Bright lemon and warming ginger",
          "matched": true
        },
        {
          "text": "BAKERY / 베이커리",
          "matched": true
        },
        {
          "text": "버터 크루아상",
          "matched": true
        },
        {
          "text": "Butter Croissant",
          "matched": true
        },
        {
          "text": "₩3,800",
          "matched": false
        },
        {
          "text": "바삭한 겉과 촉촉한 결",
          "matched": false
        },
        {
          "text": "Flaky outside, tender inside",
          "matched": true
        },
        {
          "text": "크림치즈 꽈배기",
          "matched": false
        },
        {
          "text": "Cream Cheese Twist",
          "matched": true
        },
        {
          "text": "₩4,200",
          "matched": false
        },
        {
          "text": "쫄깃한 빵 속 부드러운 크림치즈",
          "matched": false
        },
        {
          "text": "A soft twist with cream cheese",
          "matched": true
        },
        {
          "text": "쑥 인절미 케이크",
          "matched": true
        },
        {
          "text": "Mugwort Injeolmi Cake",
          "matched": true
        },
        {
          "text": "₩6,500",
          "matched": false
        },
        {
          "text": "쑥과 고소한 콩가루",
          "matched": true
        },
        {
          "text": "Mugwort cake with roasted soy flour",
          "matched": true
        },
        {
          "text": "레몬 파운드케이크",
          "matched": true
        },
        {
          "text": "Lemon Pound Cake",
          "matched": true
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "레몬 껍질의 향긋한 풍미",
          "matched": false
        },
        {
          "text": "A fragrant finish of lemon zest",
          "matched": true
        },
        {
          "text": "OAT MILK +₩700 / 오트밀크 변경 +700원",
          "matched": false
        },
        {
          "text": "EXTRA SHOT +₩500 / 샷 추가 +500원",
          "matched": false
        },
        {
          "text": "ICED AVAILABLE / 아이스로도 주문할 수 있습니다.",
          "matched": false
        },
        {
          "text": "알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.",
          "matched": true
        },
        {
          "text": "Allergen notice: Some items contain milk, wheat or soy.",
          "matched": true
        },
        {
          "text": "모든 가격은 부가세 포함입니다. / All prices include VAT.",
          "matched": false
        }
      ],
      "raw_files": [
        "05_menu_flare_psm3.txt",
        "05_menu_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/05_menu_flare_psm3.txt",
        "commercial/ocr/05_menu_flare_psm11.txt"
      ]
    },
    "05_menu_nano21": {
      "id": "05_menu_nano21",
      "image_sha256": "6c0b4c7c87c83f0b131ce199278eab9c6a8ed6baf18e88463b24fb92485d1ef6",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 54,
      "total": 72,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": true
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "SPRING MENU 2026",
          "matched": true
        },
        {
          "text": "COFFEE / 커피",
          "matched": true
        },
        {
          "text": "아메리카노",
          "matched": true
        },
        {
          "text": "Americano",
          "matched": true
        },
        {
          "text": "₩3,500",
          "matched": false
        },
        {
          "text": "맑고 깔끔한 에스프레소 커피",
          "matched": true
        },
        {
          "text": "Clean espresso with hot water",
          "matched": true
        },
        {
          "text": "카페라떼",
          "matched": true
        },
        {
          "text": "Caffè Latte",
          "matched": false
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "고소한 우유와 에스프레소",
          "matched": true
        },
        {
          "text": "Espresso with silky steamed milk",
          "matched": true
        },
        {
          "text": "바닐라 빈 라떼",
          "matched": true
        },
        {
          "text": "Vanilla Bean Latte",
          "matched": true
        },
        {
          "text": "₩5,200",
          "matched": false
        },
        {
          "text": "바닐라 빈의 은은한 단맛",
          "matched": true
        },
        {
          "text": "A gentle hint of real vanilla",
          "matched": true
        },
        {
          "text": "디카페인 콜드브루",
          "matched": true
        },
        {
          "text": "Decaf Cold Brew",
          "matched": true
        },
        {
          "text": "₩5,000",
          "matched": false
        },
        {
          "text": "천천히 우려낸 부드러운 커피",
          "matched": true
        },
        {
          "text": "Slow-steeped, smooth and mellow",
          "matched": true
        },
        {
          "text": "TEA & SPECIAL / 차와 특별한 음료",
          "matched": true
        },
        {
          "text": "제주 쑥 라떼",
          "matched": true
        },
        {
          "text": "Jeju Mugwort Latte",
          "matched": true
        },
        {
          "text": "₩5,800",
          "matched": false
        },
        {
          "text": "쑥의 향과 따뜻한 우유",
          "matched": true
        },
        {
          "text": "Earthy mugwort with warm milk",
          "matched": true
        },
        {
          "text": "딸기 말차 라떼",
          "matched": true
        },
        {
          "text": "Strawberry Matcha Latte",
          "matched": true
        },
        {
          "text": "₩6,200",
          "matched": false
        },
        {
          "text": "딸기와 말차의 두 가지 색",
          "matched": true
        },
        {
          "text": "Strawberry meets vibrant matcha",
          "matched": true
        },
        {
          "text": "얼그레이 밀크티",
          "matched": true
        },
        {
          "text": "Earl Grey Milk Tea",
          "matched": true
        },
        {
          "text": "₩5,500",
          "matched": false
        },
        {
          "text": "베르가모트 향의 홍차와 우유",
          "matched": true
        },
        {
          "text": "Bergamot tea with creamy milk",
          "matched": true
        },
        {
          "text": "레몬 진저 티",
          "matched": true
        },
        {
          "text": "Lemon Ginger Tea",
          "matched": true
        },
        {
          "text": "₩4,800",
          "matched": false
        },
        {
          "text": "레몬과 생강의 산뜻한 조화",
          "matched": true
        },
        {
          "text": "Bright lemon and warming ginger",
          "matched": true
        },
        {
          "text": "BAKERY / 베이커리",
          "matched": true
        },
        {
          "text": "버터 크루아상",
          "matched": true
        },
        {
          "text": "Butter Croissant",
          "matched": true
        },
        {
          "text": "₩3,800",
          "matched": false
        },
        {
          "text": "바삭한 겉과 촉촉한 결",
          "matched": true
        },
        {
          "text": "Flaky outside, tender inside",
          "matched": true
        },
        {
          "text": "크림치즈 꽈배기",
          "matched": false
        },
        {
          "text": "Cream Cheese Twist",
          "matched": true
        },
        {
          "text": "₩4,200",
          "matched": false
        },
        {
          "text": "쫄깃한 빵 속 부드러운 크림치즈",
          "matched": false
        },
        {
          "text": "A soft twist with cream cheese",
          "matched": true
        },
        {
          "text": "쑥 인절미 케이크",
          "matched": true
        },
        {
          "text": "Mugwort Injeolmi Cake",
          "matched": true
        },
        {
          "text": "₩6,500",
          "matched": false
        },
        {
          "text": "쑥과 고소한 콩가루",
          "matched": true
        },
        {
          "text": "Mugwort cake with roasted soy flour",
          "matched": true
        },
        {
          "text": "레몬 파운드케이크",
          "matched": true
        },
        {
          "text": "Lemon Pound Cake",
          "matched": true
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "레몬 껍질의 향긋한 풍미",
          "matched": false
        },
        {
          "text": "A fragrant finish of lemon zest",
          "matched": true
        },
        {
          "text": "OAT MILK +₩700 / 오트밀크 변경 +700원",
          "matched": false
        },
        {
          "text": "EXTRA SHOT +₩500 / 샷 추가 +500원",
          "matched": false
        },
        {
          "text": "ICED AVAILABLE / 아이스로도 주문할 수 있습니다.",
          "matched": true
        },
        {
          "text": "알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.",
          "matched": true
        },
        {
          "text": "Allergen notice: Some items contain milk, wheat or soy.",
          "matched": true
        },
        {
          "text": "모든 가격은 부가세 포함입니다. / All prices include VAT.",
          "matched": true
        }
      ],
      "raw_files": [
        "05_menu_nano21_psm3.txt",
        "05_menu_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/05_menu_nano21_psm3.txt",
        "commercial/ocr/05_menu_nano21_psm11.txt"
      ]
    },
    "05_menu_sunburst": {
      "id": "05_menu_sunburst",
      "image_sha256": "8b5646de15815f2c249f7e1807b2387ca62979bf0c675f6e28b420dcccc0cde7",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 48,
      "total": 72,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": true
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "SPRING MENU 2026",
          "matched": true
        },
        {
          "text": "COFFEE / 커피",
          "matched": true
        },
        {
          "text": "아메리카노",
          "matched": true
        },
        {
          "text": "Americano",
          "matched": true
        },
        {
          "text": "₩3,500",
          "matched": false
        },
        {
          "text": "맑고 깔끔한 에스프레소 커피",
          "matched": true
        },
        {
          "text": "Clean espresso with hot water",
          "matched": true
        },
        {
          "text": "카페라떼",
          "matched": true
        },
        {
          "text": "Caffè Latte",
          "matched": false
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "고소한 우유와 에스프레소",
          "matched": true
        },
        {
          "text": "Espresso with silky steamed milk",
          "matched": true
        },
        {
          "text": "바닐라 빈 라떼",
          "matched": true
        },
        {
          "text": "Vanilla Bean Latte",
          "matched": true
        },
        {
          "text": "₩5,200",
          "matched": false
        },
        {
          "text": "바닐라 빈의 은은한 단맛",
          "matched": true
        },
        {
          "text": "A gentle hint of real vanilla",
          "matched": true
        },
        {
          "text": "디카페인 콜드브루",
          "matched": true
        },
        {
          "text": "Decaf Cold Brew",
          "matched": true
        },
        {
          "text": "₩5,000",
          "matched": false
        },
        {
          "text": "천천히 우려낸 부드러운 커피",
          "matched": true
        },
        {
          "text": "Slow-steeped, smooth and mellow",
          "matched": true
        },
        {
          "text": "TEA & SPECIAL / 차와 특별한 음료",
          "matched": false
        },
        {
          "text": "제주 쑥 라떼",
          "matched": true
        },
        {
          "text": "Jeju Mugwort Latte",
          "matched": true
        },
        {
          "text": "₩5,800",
          "matched": false
        },
        {
          "text": "쑥의 향과 따뜻한 우유",
          "matched": true
        },
        {
          "text": "Earthy mugwort with warm milk",
          "matched": true
        },
        {
          "text": "딸기 말차 라떼",
          "matched": true
        },
        {
          "text": "Strawberry Matcha Latte",
          "matched": true
        },
        {
          "text": "₩6,200",
          "matched": false
        },
        {
          "text": "딸기와 말차의 두 가지 색",
          "matched": true
        },
        {
          "text": "Strawberry meets vibrant matcha",
          "matched": true
        },
        {
          "text": "얼그레이 밀크티",
          "matched": true
        },
        {
          "text": "Earl Grey Milk Tea",
          "matched": true
        },
        {
          "text": "₩5,500",
          "matched": false
        },
        {
          "text": "베르가모트 향의 홍차와 우유",
          "matched": true
        },
        {
          "text": "Bergamot tea with creamy milk",
          "matched": true
        },
        {
          "text": "레몬 진저 티",
          "matched": true
        },
        {
          "text": "Lemon Ginger Tea",
          "matched": true
        },
        {
          "text": "₩4,800",
          "matched": false
        },
        {
          "text": "레몬과 생강의 산뜻한 조화",
          "matched": false
        },
        {
          "text": "Bright lemon and warming ginger",
          "matched": true
        },
        {
          "text": "BAKERY / 베이커리",
          "matched": true
        },
        {
          "text": "버터 크루아상",
          "matched": true
        },
        {
          "text": "Butter Croissant",
          "matched": true
        },
        {
          "text": "₩3,800",
          "matched": false
        },
        {
          "text": "바삭한 겉과 촉촉한 결",
          "matched": false
        },
        {
          "text": "Flaky outside, tender inside",
          "matched": true
        },
        {
          "text": "크림치즈 꽈배기",
          "matched": false
        },
        {
          "text": "Cream Cheese Twist",
          "matched": true
        },
        {
          "text": "₩4,200",
          "matched": false
        },
        {
          "text": "쫄깃한 빵 속 부드러운 크림치즈",
          "matched": false
        },
        {
          "text": "A soft twist with cream cheese",
          "matched": true
        },
        {
          "text": "쑥 인절미 케이크",
          "matched": true
        },
        {
          "text": "Mugwort Injeolmi Cake",
          "matched": true
        },
        {
          "text": "₩6,500",
          "matched": false
        },
        {
          "text": "쑥과 고소한 콩가루",
          "matched": true
        },
        {
          "text": "Mugwort cake with roasted soy flour",
          "matched": true
        },
        {
          "text": "레몬 파운드케이크",
          "matched": true
        },
        {
          "text": "Lemon Pound Cake",
          "matched": true
        },
        {
          "text": "₩4,500",
          "matched": false
        },
        {
          "text": "레몬 껍질의 향긋한 풍미",
          "matched": false
        },
        {
          "text": "A fragrant finish of lemon zest",
          "matched": true
        },
        {
          "text": "OAT MILK +₩700 / 오트밀크 변경 +700원",
          "matched": false
        },
        {
          "text": "EXTRA SHOT +₩500 / 샷 추가 +500원",
          "matched": false
        },
        {
          "text": "ICED AVAILABLE / 아이스로도 주문할 수 있습니다.",
          "matched": false
        },
        {
          "text": "알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.",
          "matched": false
        },
        {
          "text": "Allergen notice: Some items contain milk, wheat or soy.",
          "matched": true
        },
        {
          "text": "모든 가격은 부가세 포함입니다. / All prices include VAT.",
          "matched": false
        }
      ],
      "raw_files": [
        "05_menu_sunburst_psm3.txt",
        "05_menu_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/05_menu_sunburst_psm3.txt",
        "commercial/ocr/05_menu_sunburst_psm11.txt"
      ]
    },
    "06_document_flare": {
      "id": "06_document_flare",
      "image_sha256": "18aee486b0a04b703778f49203c0f250e239f537d3a0b478b832614fb504c30e",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 30,
      "total": 40,
      "lines": [
        {
          "text": "모닝포스트 브랜드 론칭",
          "matched": true
        },
        {
          "text": "MORNING POST BRAND LAUNCH",
          "matched": true
        },
        {
          "text": "제작 제안 및 견적서",
          "matched": true
        },
        {
          "text": "CREATIVE PROPOSAL & QUOTATION",
          "matched": true
        },
        {
          "text": "문서번호 MP-2026-014",
          "matched": true
        },
        {
          "text": "발행일 2026.10.09",
          "matched": false
        },
        {
          "text": "프로젝트 개요 / Project Overview",
          "matched": true
        },
        {
          "text": "동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.",
          "matched": false
        },
        {
          "text": "We connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.",
          "matched": true
        },
        {
          "text": "제작 범위 및 비용 / Deliverables & Fees",
          "matched": true
        },
        {
          "text": "항목",
          "matched": false
        },
        {
          "text": "수량",
          "matched": false
        },
        {
          "text": "단가",
          "matched": false
        },
        {
          "text": "금액",
          "matched": false
        },
        {
          "text": "한·영 메뉴판",
          "matched": false
        },
        {
          "text": "360,000원",
          "matched": true
        },
        {
          "text": "제품 이미지",
          "matched": true
        },
        {
          "text": "285,000원",
          "matched": true
        },
        {
          "text": "6컷 코믹",
          "matched": true
        },
        {
          "text": "420,000원",
          "matched": true
        },
        {
          "text": "동화 표지",
          "matched": true
        },
        {
          "text": "310,000원",
          "matched": true
        },
        {
          "text": "180,000원",
          "matched": true
        },
        {
          "text": "95,000원",
          "matched": true
        },
        {
          "text": "소계 1,375,000원",
          "matched": true
        },
        {
          "text": "부가세 137,500원",
          "matched": true
        },
        {
          "text": "합계 1,512,500원",
          "matched": true
        },
        {
          "text": "진행 일정 / Production Schedule",
          "matched": true
        },
        {
          "text": "10.12 기획 및 원문 확정",
          "matched": true
        },
        {
          "text": "10.15 1차 디자인 전달",
          "matched": true
        },
        {
          "text": "10.20 수정안 확인",
          "matched": true
        },
        {
          "text": "10.23 최종 파일 전달",
          "matched": true
        },
        {
          "text": "검수 기준 / Approval Checklist",
          "matched": true
        },
        {
          "text": "이름·가격·알레르기 문구 확인",
          "matched": false
        },
        {
          "text": "Check names, prices and allergen copy.",
          "matched": true
        },
        {
          "text": "납품: PNG 원본 + 편집 가능한 조판 파일",
          "matched": false
        },
        {
          "text": "Delivery: PNG originals + editable layout files.",
          "matched": true
        },
        {
          "text": "담당: 모닝포스트 디자인팀",
          "matched": true
        },
        {
          "text": "Prepared by Morning Post Design Team",
          "matched": true
        },
        {
          "text": "1 / 1",
          "matched": false
        }
      ],
      "raw_files": [
        "06_document_flare_psm3.txt",
        "06_document_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/06_document_flare_psm3.txt",
        "commercial/ocr/06_document_flare_psm11.txt"
      ]
    },
    "06_document_nano21": {
      "id": "06_document_nano21",
      "image_sha256": "eb671b209aa1660b0ad5d607e7b5f2207c0d2f8a2879c7ded9a5b10ce4ad3b87",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 35,
      "total": 40,
      "lines": [
        {
          "text": "모닝포스트 브랜드 론칭",
          "matched": true
        },
        {
          "text": "MORNING POST BRAND LAUNCH",
          "matched": true
        },
        {
          "text": "제작 제안 및 견적서",
          "matched": true
        },
        {
          "text": "CREATIVE PROPOSAL & QUOTATION",
          "matched": true
        },
        {
          "text": "문서번호 MP-2026-014",
          "matched": true
        },
        {
          "text": "발행일 2026.10.09",
          "matched": true
        },
        {
          "text": "프로젝트 개요 / Project Overview",
          "matched": true
        },
        {
          "text": "동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.",
          "matched": false
        },
        {
          "text": "We connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.",
          "matched": false
        },
        {
          "text": "제작 범위 및 비용 / Deliverables & Fees",
          "matched": true
        },
        {
          "text": "항목",
          "matched": true
        },
        {
          "text": "수량",
          "matched": true
        },
        {
          "text": "단가",
          "matched": true
        },
        {
          "text": "금액",
          "matched": true
        },
        {
          "text": "한·영 메뉴판",
          "matched": false
        },
        {
          "text": "360,000원",
          "matched": true
        },
        {
          "text": "제품 이미지",
          "matched": true
        },
        {
          "text": "285,000원",
          "matched": true
        },
        {
          "text": "6컷 코믹",
          "matched": true
        },
        {
          "text": "420,000원",
          "matched": true
        },
        {
          "text": "동화 표지",
          "matched": true
        },
        {
          "text": "310,000원",
          "matched": true
        },
        {
          "text": "180,000원",
          "matched": true
        },
        {
          "text": "95,000원",
          "matched": true
        },
        {
          "text": "소계 1,375,000원",
          "matched": true
        },
        {
          "text": "부가세 137,500원",
          "matched": true
        },
        {
          "text": "합계 1,512,500원",
          "matched": true
        },
        {
          "text": "진행 일정 / Production Schedule",
          "matched": true
        },
        {
          "text": "10.12 기획 및 원문 확정",
          "matched": true
        },
        {
          "text": "10.15 1차 디자인 전달",
          "matched": true
        },
        {
          "text": "10.20 수정안 확인",
          "matched": true
        },
        {
          "text": "10.23 최종 파일 전달",
          "matched": true
        },
        {
          "text": "검수 기준 / Approval Checklist",
          "matched": true
        },
        {
          "text": "이름·가격·알레르기 문구 확인",
          "matched": false
        },
        {
          "text": "Check names, prices and allergen copy.",
          "matched": true
        },
        {
          "text": "납품: PNG 원본 + 편집 가능한 조판 파일",
          "matched": true
        },
        {
          "text": "Delivery: PNG originals + editable layout files.",
          "matched": true
        },
        {
          "text": "담당: 모닝포스트 디자인팀",
          "matched": false
        },
        {
          "text": "Prepared by Morning Post Design Team",
          "matched": true
        },
        {
          "text": "1 / 1",
          "matched": true
        }
      ],
      "raw_files": [
        "06_document_nano21_psm3.txt",
        "06_document_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/06_document_nano21_psm3.txt",
        "commercial/ocr/06_document_nano21_psm11.txt"
      ]
    },
    "06_document_sunburst": {
      "id": "06_document_sunburst",
      "image_sha256": "cecac483167665aa07c95fd9b4d36c30312e6940d9913f8f99e2b9e07ff0d84b",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 33,
      "total": 40,
      "lines": [
        {
          "text": "모닝포스트 브랜드 론칭",
          "matched": false
        },
        {
          "text": "MORNING POST BRAND LAUNCH",
          "matched": true
        },
        {
          "text": "제작 제안 및 견적서",
          "matched": true
        },
        {
          "text": "CREATIVE PROPOSAL & QUOTATION",
          "matched": true
        },
        {
          "text": "문서번호 MP-2026-014",
          "matched": true
        },
        {
          "text": "발행일 2026.10.09",
          "matched": true
        },
        {
          "text": "프로젝트 개요 / Project Overview",
          "matched": true
        },
        {
          "text": "동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.",
          "matched": false
        },
        {
          "text": "We connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.",
          "matched": true
        },
        {
          "text": "제작 범위 및 비용 / Deliverables & Fees",
          "matched": true
        },
        {
          "text": "항목",
          "matched": true
        },
        {
          "text": "수량",
          "matched": true
        },
        {
          "text": "단가",
          "matched": true
        },
        {
          "text": "금액",
          "matched": true
        },
        {
          "text": "한·영 메뉴판",
          "matched": false
        },
        {
          "text": "360,000원",
          "matched": true
        },
        {
          "text": "제품 이미지",
          "matched": true
        },
        {
          "text": "285,000원",
          "matched": true
        },
        {
          "text": "6컷 코믹",
          "matched": true
        },
        {
          "text": "420,000원",
          "matched": true
        },
        {
          "text": "동화 표지",
          "matched": true
        },
        {
          "text": "310,000원",
          "matched": true
        },
        {
          "text": "180,000원",
          "matched": true
        },
        {
          "text": "95,000원",
          "matched": false
        },
        {
          "text": "소계 1,375,000원",
          "matched": true
        },
        {
          "text": "부가세 137,500원",
          "matched": true
        },
        {
          "text": "합계 1,512,500원",
          "matched": true
        },
        {
          "text": "진행 일정 / Production Schedule",
          "matched": true
        },
        {
          "text": "10.12 기획 및 원문 확정",
          "matched": true
        },
        {
          "text": "10.15 1차 디자인 전달",
          "matched": true
        },
        {
          "text": "10.20 수정안 확인",
          "matched": true
        },
        {
          "text": "10.23 최종 파일 전달",
          "matched": true
        },
        {
          "text": "검수 기준 / Approval Checklist",
          "matched": true
        },
        {
          "text": "이름·가격·알레르기 문구 확인",
          "matched": false
        },
        {
          "text": "Check names, prices and allergen copy.",
          "matched": true
        },
        {
          "text": "납품: PNG 원본 + 편집 가능한 조판 파일",
          "matched": true
        },
        {
          "text": "Delivery: PNG originals + editable layout files.",
          "matched": true
        },
        {
          "text": "담당: 모닝포스트 디자인팀",
          "matched": false
        },
        {
          "text": "Prepared by Morning Post Design Team",
          "matched": true
        },
        {
          "text": "1 / 1",
          "matched": false
        }
      ],
      "raw_files": [
        "06_document_sunburst_psm3.txt",
        "06_document_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/06_document_sunburst_psm3.txt",
        "commercial/ocr/06_document_sunburst_psm11.txt"
      ]
    },
    "07_package_flare": {
      "id": "07_package_flare",
      "image_sha256": "ac82f61870fef4ddb1cb783e25700b64a88da576e07dcd9b73aa684f5dbc415b",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 12,
      "total": 20,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": true
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "봄날의 드립백",
          "matched": true
        },
        {
          "text": "SPRING DRIP COFFEE",
          "matched": true
        },
        {
          "text": "ETHIOPIA BLEND",
          "matched": true
        },
        {
          "text": "5 BAGS × 10 g",
          "matched": false
        },
        {
          "text": "NET WT. 50 g",
          "matched": true
        },
        {
          "text": "TASTING NOTES: APRICOT · COCOA · FLORAL",
          "matched": false
        },
        {
          "text": "향미: 살구 · 코코아 · 꽃향기",
          "matched": false
        },
        {
          "text": "원재료명: 커피 100%",
          "matched": false
        },
        {
          "text": "Ingredients: 100% roasted coffee.",
          "matched": true
        },
        {
          "text": "01 뜯기 / OPEN",
          "matched": false
        },
        {
          "text": "02 걸기 / HANG",
          "matched": true
        },
        {
          "text": "03 붓기 / POUR",
          "matched": false
        },
        {
          "text": "컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.",
          "matched": false
        },
        {
          "text": "Hang on a cup and slowly pour 150 mL of water at 90–94°C.",
          "matched": false
        },
        {
          "text": "직사광선을 피하고 서늘한 곳에 보관하세요.",
          "matched": true
        },
        {
          "text": "Store in a cool place away from direct sunlight.",
          "matched": true
        },
        {
          "text": "BEST BEFORE 2027.04.30",
          "matched": true
        },
        {
          "text": "BATCH MP-0410",
          "matched": true
        }
      ],
      "raw_files": [
        "07_package_flare_psm3.txt",
        "07_package_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/07_package_flare_psm3.txt",
        "commercial/ocr/07_package_flare_psm11.txt"
      ]
    },
    "07_package_nano21": {
      "id": "07_package_nano21",
      "image_sha256": "6342d2c7597f9594bdc3e9adfe1393530b72cc03ffb9a59eac1b2538e53e0892",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 12,
      "total": 20,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": true
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "봄날의 드립백",
          "matched": true
        },
        {
          "text": "SPRING DRIP COFFEE",
          "matched": true
        },
        {
          "text": "ETHIOPIA BLEND",
          "matched": true
        },
        {
          "text": "5 BAGS × 10 g",
          "matched": false
        },
        {
          "text": "NET WT. 50 g",
          "matched": true
        },
        {
          "text": "TASTING NOTES: APRICOT · COCOA · FLORAL",
          "matched": false
        },
        {
          "text": "향미: 살구 · 코코아 · 꽃향기",
          "matched": false
        },
        {
          "text": "원재료명: 커피 100%",
          "matched": true
        },
        {
          "text": "Ingredients: 100% roasted coffee.",
          "matched": true
        },
        {
          "text": "01 뜯기 / OPEN",
          "matched": false
        },
        {
          "text": "02 걸기 / HANG",
          "matched": false
        },
        {
          "text": "03 붓기 / POUR",
          "matched": false
        },
        {
          "text": "컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.",
          "matched": false
        },
        {
          "text": "Hang on a cup and slowly pour 150 mL of water at 90–94°C.",
          "matched": false
        },
        {
          "text": "직사광선을 피하고 서늘한 곳에 보관하세요.",
          "matched": true
        },
        {
          "text": "Store in a cool place away from direct sunlight.",
          "matched": true
        },
        {
          "text": "BEST BEFORE 2027.04.30",
          "matched": true
        },
        {
          "text": "BATCH MP-0410",
          "matched": true
        }
      ],
      "raw_files": [
        "07_package_nano21_psm3.txt",
        "07_package_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/07_package_nano21_psm3.txt",
        "commercial/ocr/07_package_nano21_psm11.txt"
      ]
    },
    "07_package_sunburst": {
      "id": "07_package_sunburst",
      "image_sha256": "40e3ffaac4f12476818b56e8a4824eb7e92df239064e043b8bf28cd2954c0986",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 13,
      "total": 20,
      "lines": [
        {
          "text": "모닝포스트",
          "matched": true
        },
        {
          "text": "MORNING POST",
          "matched": true
        },
        {
          "text": "봄날의 드립백",
          "matched": true
        },
        {
          "text": "SPRING DRIP COFFEE",
          "matched": true
        },
        {
          "text": "ETHIOPIA BLEND",
          "matched": true
        },
        {
          "text": "5 BAGS × 10 g",
          "matched": false
        },
        {
          "text": "NET WT. 50 g",
          "matched": true
        },
        {
          "text": "TASTING NOTES: APRICOT · COCOA · FLORAL",
          "matched": false
        },
        {
          "text": "향미: 살구 · 코코아 · 꽃향기",
          "matched": false
        },
        {
          "text": "원재료명: 커피 100%",
          "matched": true
        },
        {
          "text": "Ingredients: 100% roasted coffee.",
          "matched": true
        },
        {
          "text": "01 뜯기 / OPEN",
          "matched": false
        },
        {
          "text": "02 걸기 / HANG",
          "matched": true
        },
        {
          "text": "03 붓기 / POUR",
          "matched": false
        },
        {
          "text": "컵에 걸고 90–94°C 물 150 mL를 천천히 부어 주세요.",
          "matched": false
        },
        {
          "text": "Hang on a cup and slowly pour 150 mL of water at 90–94°C.",
          "matched": false
        },
        {
          "text": "직사광선을 피하고 서늘한 곳에 보관하세요.",
          "matched": true
        },
        {
          "text": "Store in a cool place away from direct sunlight.",
          "matched": true
        },
        {
          "text": "BEST BEFORE 2027.04.30",
          "matched": true
        },
        {
          "text": "BATCH MP-0410",
          "matched": true
        }
      ],
      "raw_files": [
        "07_package_sunburst_psm3.txt",
        "07_package_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/07_package_sunburst_psm3.txt",
        "commercial/ocr/07_package_sunburst_psm11.txt"
      ]
    },
    "08_character_flare": {
      "id": "08_character_flare",
      "image_sha256": "d5bb50c76d425840e22c2363035f32a8c4b1397ffe0e3eb8f6003b33c2188b9d",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 7,
      "total": 9,
      "lines": [
        {
          "text": "모리",
          "matched": true
        },
        {
          "text": "MORI",
          "matched": true
        },
        {
          "text": "CHARACTER DESIGN SHEET",
          "matched": true
        },
        {
          "text": "정면 / FRONT",
          "matched": true
        },
        {
          "text": "3/4 / THREE-QUARTER",
          "matched": true
        },
        {
          "text": "측면 / SIDE",
          "matched": false
        },
        {
          "text": "뒷면 / BACK",
          "matched": true
        },
        {
          "text": "기쁨 / HAPPY",
          "matched": false
        },
        {
          "text": "호기심 / CURIOUS",
          "matched": true
        }
      ],
      "raw_files": [
        "08_character_flare_psm3.txt",
        "08_character_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/08_character_flare_psm3.txt",
        "commercial/ocr/08_character_flare_psm11.txt"
      ]
    },
    "08_character_nano21": {
      "id": "08_character_nano21",
      "image_sha256": "c6a025783978f7a5c68afbf729523620508c9d231d5f2cec26110b50f26f9c73",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 7,
      "total": 9,
      "lines": [
        {
          "text": "모리",
          "matched": false
        },
        {
          "text": "MORI",
          "matched": true
        },
        {
          "text": "CHARACTER DESIGN SHEET",
          "matched": true
        },
        {
          "text": "정면 / FRONT",
          "matched": true
        },
        {
          "text": "3/4 / THREE-QUARTER",
          "matched": true
        },
        {
          "text": "측면 / SIDE",
          "matched": true
        },
        {
          "text": "뒷면 / BACK",
          "matched": true
        },
        {
          "text": "기쁨 / HAPPY",
          "matched": false
        },
        {
          "text": "호기심 / CURIOUS",
          "matched": true
        }
      ],
      "raw_files": [
        "08_character_nano21_psm3.txt",
        "08_character_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/08_character_nano21_psm3.txt",
        "commercial/ocr/08_character_nano21_psm11.txt"
      ]
    },
    "08_character_sunburst": {
      "id": "08_character_sunburst",
      "image_sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 7,
      "total": 9,
      "lines": [
        {
          "text": "모리",
          "matched": true
        },
        {
          "text": "MORI",
          "matched": true
        },
        {
          "text": "CHARACTER DESIGN SHEET",
          "matched": true
        },
        {
          "text": "정면 / FRONT",
          "matched": true
        },
        {
          "text": "3/4 / THREE-QUARTER",
          "matched": false
        },
        {
          "text": "측면 / SIDE",
          "matched": true
        },
        {
          "text": "뒷면 / BACK",
          "matched": true
        },
        {
          "text": "기쁨 / HAPPY",
          "matched": false
        },
        {
          "text": "호기심 / CURIOUS",
          "matched": true
        }
      ],
      "raw_files": [
        "08_character_sunburst_psm3.txt",
        "08_character_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/08_character_sunburst_psm3.txt",
        "commercial/ocr/08_character_sunburst_psm11.txt"
      ]
    },
    "09_comic_flare": {
      "id": "09_comic_flare",
      "image_sha256": "dc34ce6545799c74b8864b9d4b6fbc07d19caff491f26701261716b39900a917",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 5,
      "total": 14,
      "lines": [
        {
          "text": "비 오는 날의 책 한 권",
          "matched": true
        },
        {
          "text": "A Book for a Rainy Day",
          "matched": false
        },
        {
          "text": "비가 와도 괜찮아.",
          "matched": false
        },
        {
          "text": "Rain won't stop us.",
          "matched": true
        },
        {
          "text": "책이 젖겠어!",
          "matched": false
        },
        {
          "text": "The book will get wet!",
          "matched": false
        },
        {
          "text": "내 우산을 같이 쓰자.",
          "matched": false
        },
        {
          "text": "Let's share my umbrella.",
          "matched": false
        },
        {
          "text": "고마워, 모리!",
          "matched": false
        },
        {
          "text": "Thank you, Mori!",
          "matched": true
        },
        {
          "text": "이 책은 네가 먼저 읽어.",
          "matched": false
        },
        {
          "text": "You can read it first.",
          "matched": true
        },
        {
          "text": "함께라서 더 좋아.",
          "matched": false
        },
        {
          "text": "It's better together.",
          "matched": true
        }
      ],
      "raw_files": [
        "09_comic_flare_psm3.txt",
        "09_comic_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/09_comic_flare_psm3.txt",
        "commercial/ocr/09_comic_flare_psm11.txt"
      ]
    },
    "09_comic_nano21": {
      "id": "09_comic_nano21",
      "image_sha256": "0e9d4e3914f372681800de3121403d6e58ab41c3174258f153a2dc11c6c1f377",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 4,
      "total": 14,
      "lines": [
        {
          "text": "비 오는 날의 책 한 권",
          "matched": true
        },
        {
          "text": "A Book for a Rainy Day",
          "matched": false
        },
        {
          "text": "비가 와도 괜찮아.",
          "matched": false
        },
        {
          "text": "Rain won't stop us.",
          "matched": false
        },
        {
          "text": "책이 젖겠어!",
          "matched": false
        },
        {
          "text": "The book will get wet!",
          "matched": true
        },
        {
          "text": "내 우산을 같이 쓰자.",
          "matched": false
        },
        {
          "text": "Let's share my umbrella.",
          "matched": false
        },
        {
          "text": "고마워, 모리!",
          "matched": false
        },
        {
          "text": "Thank you, Mori!",
          "matched": true
        },
        {
          "text": "이 책은 네가 먼저 읽어.",
          "matched": false
        },
        {
          "text": "You can read it first.",
          "matched": true
        },
        {
          "text": "함께라서 더 좋아.",
          "matched": false
        },
        {
          "text": "It's better together.",
          "matched": false
        }
      ],
      "raw_files": [
        "09_comic_nano21_psm3.txt",
        "09_comic_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/09_comic_nano21_psm3.txt",
        "commercial/ocr/09_comic_nano21_psm11.txt"
      ]
    },
    "09_comic_sunburst": {
      "id": "09_comic_sunburst",
      "image_sha256": "bb11c42e368977d7e020384c49f026778b43e97245aabd298d833a01adf18ad0",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 10,
      "total": 14,
      "lines": [
        {
          "text": "비 오는 날의 책 한 권",
          "matched": true
        },
        {
          "text": "A Book for a Rainy Day",
          "matched": true
        },
        {
          "text": "비가 와도 괜찮아.",
          "matched": true
        },
        {
          "text": "Rain won't stop us.",
          "matched": true
        },
        {
          "text": "책이 젖겠어!",
          "matched": false
        },
        {
          "text": "The book will get wet!",
          "matched": false
        },
        {
          "text": "내 우산을 같이 쓰자.",
          "matched": false
        },
        {
          "text": "Let's share my umbrella.",
          "matched": true
        },
        {
          "text": "고마워, 모리!",
          "matched": true
        },
        {
          "text": "Thank you, Mori!",
          "matched": false
        },
        {
          "text": "이 책은 네가 먼저 읽어.",
          "matched": true
        },
        {
          "text": "You can read it first.",
          "matched": true
        },
        {
          "text": "함께라서 더 좋아.",
          "matched": true
        },
        {
          "text": "It's better together.",
          "matched": true
        }
      ],
      "raw_files": [
        "09_comic_sunburst_psm3.txt",
        "09_comic_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/09_comic_sunburst_psm3.txt",
        "commercial/ocr/09_comic_sunburst_psm11.txt"
      ]
    },
    "10_storybook_flare": {
      "id": "10_storybook_flare",
      "image_sha256": "de7ff0e9597247c4f4721ecb613d32ecc4fb52d99e167314a3a801b10d9e3170",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 10,
      "total": 12,
      "lines": [
        {
          "text": "비 오는 날의 작은 약속",
          "matched": true
        },
        {
          "text": "A Little Promise in the Rain",
          "matched": true
        },
        {
          "text": "모리는 작은 책 한 권을 품에 안고 집을 나섰어요.",
          "matched": true
        },
        {
          "text": "길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.",
          "matched": false
        },
        {
          "text": "Mori left home with a little book held close.",
          "matched": true
        },
        {
          "text": "At the corner, Mori invited Uri to share a red umbrella.",
          "matched": true
        },
        {
          "text": "도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.",
          "matched": false
        },
        {
          "text": "창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.",
          "matched": true
        },
        {
          "text": "At the library, Mori handed the book to Uri first.",
          "matched": true
        },
        {
          "text": "Rain tapped the window, but the two friends felt warm inside.",
          "matched": true
        },
        {
          "text": "04",
          "matched": true
        },
        {
          "text": "05",
          "matched": true
        }
      ],
      "raw_files": [
        "10_storybook_flare_psm3.txt",
        "10_storybook_flare_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/10_storybook_flare_psm3.txt",
        "commercial/ocr/10_storybook_flare_psm11.txt"
      ]
    },
    "10_storybook_nano21": {
      "id": "10_storybook_nano21",
      "image_sha256": "7fa2daefec12e7cb105c79aca8f9ce61873b1d2838bb135995bc2a1ea67cd0a5",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 10,
      "total": 12,
      "lines": [
        {
          "text": "비 오는 날의 작은 약속",
          "matched": true
        },
        {
          "text": "A Little Promise in the Rain",
          "matched": true
        },
        {
          "text": "모리는 작은 책 한 권을 품에 안고 집을 나섰어요.",
          "matched": false
        },
        {
          "text": "길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.",
          "matched": true
        },
        {
          "text": "Mori left home with a little book held close.",
          "matched": true
        },
        {
          "text": "At the corner, Mori invited Uri to share a red umbrella.",
          "matched": true
        },
        {
          "text": "도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.",
          "matched": false
        },
        {
          "text": "창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.",
          "matched": true
        },
        {
          "text": "At the library, Mori handed the book to Uri first.",
          "matched": true
        },
        {
          "text": "Rain tapped the window, but the two friends felt warm inside.",
          "matched": true
        },
        {
          "text": "04",
          "matched": true
        },
        {
          "text": "05",
          "matched": true
        }
      ],
      "raw_files": [
        "10_storybook_nano21_psm3.txt",
        "10_storybook_nano21_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/10_storybook_nano21_psm3.txt",
        "commercial/ocr/10_storybook_nano21_psm11.txt"
      ]
    },
    "10_storybook_sunburst": {
      "id": "10_storybook_sunburst",
      "image_sha256": "6ae8430d3c24f8b1499a2676300629b6b33346959dccab87fedc8c4c0bb0fb02",
      "engine": "Tesseract 5 / kor+eng",
      "segmentation_modes": [
        3,
        11
      ],
      "normalization": "NFC, remove whitespace only; punctuation/case preserved",
      "matched": 7,
      "total": 12,
      "lines": [
        {
          "text": "비 오는 날의 작은 약속",
          "matched": false
        },
        {
          "text": "A Little Promise in the Rain",
          "matched": false
        },
        {
          "text": "모리는 작은 책 한 권을 품에 안고 집을 나섰어요.",
          "matched": true
        },
        {
          "text": "길모퉁이에서 만난 우리에게 빨간 우산을 함께 쓰자고 말했지요.",
          "matched": false
        },
        {
          "text": "Mori left home with a little book held close.",
          "matched": true
        },
        {
          "text": "At the corner, Mori invited Uri to share a red umbrella.",
          "matched": true
        },
        {
          "text": "도서관에 도착하자 모리는 책을 우리에게 먼저 건넸어요.",
          "matched": false
        },
        {
          "text": "창밖에는 비가 내렸지만, 두 친구의 마음은 따뜻했답니다.",
          "matched": false
        },
        {
          "text": "At the library, Mori handed the book to Uri first.",
          "matched": true
        },
        {
          "text": "Rain tapped the window, but the two friends felt warm inside.",
          "matched": true
        },
        {
          "text": "04",
          "matched": true
        },
        {
          "text": "05",
          "matched": true
        }
      ],
      "raw_files": [
        "10_storybook_sunburst_psm3.txt",
        "10_storybook_sunburst_psm11.txt"
      ],
      "interpretation": "OCR에서 원문 문자열을 발견한 수. 미발견은 오탈자 확정이 아니며 눈 검토가 필요합니다. 메뉴·가격의 위치 대응은 별도로 검사합니다.",
      "raw_paths": [
        "commercial/ocr/10_storybook_sunburst_psm3.txt",
        "commercial/ocr/10_storybook_sunburst_psm11.txt"
      ]
    }
  },
  "reference_policy": "코믹·동화에는 08_character_sunburst 최초 원본을 동일하게 제공. 참조가 한 모델에서 생성됐다는 편향을 공개하며 품질에 따라 고르지 않는다.",
  "costs": {
    "checked_date": "2026-10-09",
    "currency": "USD",
    "processing": "Standard; no Batch",
    "status": "usage_based_estimate_not_invoice",
    "rates_usd_per_million": {
      "openai": {
        "text_input": 5,
        "image_input": 8,
        "image_output": 30
      },
      "gemini-nano-banana-2.1": {
        "input": 1.5,
        "text_and_thinking_output": 7.5,
        "image_output": 30
      },
      "gemini-3.1-flash-image": {
        "input": 0.5,
        "text_and_thinking_output": 3,
        "image_output": 60
      }
    },
    "sources": [
      {
        "name": "Sunburst 공식 모델·가격",
        "url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"
      },
      {
        "name": "Flare 공식 모델·가격",
        "url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-flare"
      },
      {
        "name": "OpenAI 모델 선택 안내",
        "url": "https://developers.openai.com/api/docs/guides/image-generation"
      },
      {
        "name": "Google 공식 가격",
        "url": "https://ai.google.dev/gemini-api/docs/pricing"
      },
      {
        "name": "Nano Banana 2.1 공식 모델",
        "url": "https://ai.google.dev/gemini-api/docs/models/gemini-nano-banana-2.1"
      }
    ],
    "rows": [
      {
        "id": "01_light_flare",
        "group": "basic",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 52.993,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/01_light_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.400845,
        "components": {
          "text_input": {
            "tokens": 117,
            "usd_per_million": 5,
            "usd": 0.000585
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "01_light_nano21",
        "group": "basic",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 37.702,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "evidence/01_light_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.1249245,
        "components": {
          "input": {
            "tokens": 93,
            "usd_per_million": 1.5,
            "usd": 0.0001395
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 1518,
            "usd_per_million": 7.5,
            "usd": 0.011385
          }
        }
      },
      {
        "id": "01_light_sunburst",
        "group": "basic",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 97.706,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/01_light_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.400845,
        "components": {
          "text_input": {
            "tokens": 117,
            "usd_per_million": 5,
            "usd": 0.000585
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "02_objects_flare",
        "group": "basic",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 47.874,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/02_objects_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.400785,
        "components": {
          "text_input": {
            "tokens": 105,
            "usd_per_million": 5,
            "usd": 0.000525
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "02_objects_nano21",
        "group": "basic",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 31.931,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "evidence/02_objects_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.1233195,
        "components": {
          "input": {
            "tokens": 88,
            "usd_per_million": 1.5,
            "usd": 0.000132
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 1305,
            "usd_per_million": 7.5,
            "usd": 0.0097875
          }
        }
      },
      {
        "id": "02_objects_sunburst",
        "group": "basic",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 88.424,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/02_objects_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.400785,
        "components": {
          "text_input": {
            "tokens": 105,
            "usd_per_million": 5,
            "usd": 0.000525
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "03_poster_flare",
        "group": "basic",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 42.085,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/03_poster_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.400885,
        "components": {
          "text_input": {
            "tokens": 125,
            "usd_per_million": 5,
            "usd": 0.000625
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "03_poster_nano21",
        "group": "basic",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 34.044,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "evidence/03_poster_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.1277985,
        "components": {
          "input": {
            "tokens": 114,
            "usd_per_million": 1.5,
            "usd": 0.000171
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 1897,
            "usd_per_million": 7.5,
            "usd": 0.0142275
          }
        }
      },
      {
        "id": "03_poster_sunburst",
        "group": "basic",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 76.235,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/03_poster_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.400885,
        "components": {
          "text_input": {
            "tokens": 125,
            "usd_per_million": 5,
            "usd": 0.000625
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "04_hands_flare",
        "group": "basic",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 47.583,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/04_hands_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.400775,
        "components": {
          "text_input": {
            "tokens": 103,
            "usd_per_million": 5,
            "usd": 0.000515
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "04_hands_nano21",
        "group": "basic",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 50.866,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "evidence/04_hands_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.129669,
        "components": {
          "input": {
            "tokens": 91,
            "usd_per_million": 1.5,
            "usd": 0.0001365
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 2151,
            "usd_per_million": 7.5,
            "usd": 0.0161325
          }
        }
      },
      {
        "id": "04_hands_sunburst",
        "group": "basic",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 91.598,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "evidence/04_hands_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.400775,
        "components": {
          "text_input": {
            "tokens": 103,
            "usd_per_million": 5,
            "usd": 0.000515
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "05_menu_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 44.665,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/05_menu_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.40523,
        "components": {
          "text_input": {
            "tokens": 994,
            "usd_per_million": 5,
            "usd": 0.00497
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "05_menu_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 53.588,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "commercial/evidence/05_menu_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.149877,
        "components": {
          "input": {
            "tokens": 973,
            "usd_per_million": 1.5,
            "usd": 0.0014595
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 4669,
            "usd_per_million": 7.5,
            "usd": 0.0350175
          }
        }
      },
      {
        "id": "05_menu_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 81.187,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/05_menu_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.40523,
        "components": {
          "text_input": {
            "tokens": 994,
            "usd_per_million": 5,
            "usd": 0.00497
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "06_document_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 48.893,
        "dimensions": [
          2336,
          3504
        ],
        "evidence": "commercial/evidence/06_document_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.473085,
        "components": {
          "text_input": {
            "tokens": 747,
            "usd_per_million": 5,
            "usd": 0.003735
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 15645,
            "usd_per_million": 30,
            "usd": 0.46935
          }
        }
      },
      {
        "id": "06_document_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 47.964,
        "dimensions": [
          3392,
          5056
        ],
        "evidence": "commercial/evidence/06_document_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.1442685,
        "components": {
          "input": {
            "tokens": 804,
            "usd_per_million": 1.5,
            "usd": 0.001206
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 3955,
            "usd_per_million": 7.5,
            "usd": 0.0296625
          }
        }
      },
      {
        "id": "06_document_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 91.033,
        "dimensions": [
          2336,
          3504
        ],
        "evidence": "commercial/evidence/06_document_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.473085,
        "components": {
          "text_input": {
            "tokens": 747,
            "usd_per_million": 5,
            "usd": 0.003735
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 15645,
            "usd_per_million": 30,
            "usd": 0.46935
          }
        }
      },
      {
        "id": "07_package_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 46.295,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/07_package_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.402675,
        "components": {
          "text_input": {
            "tokens": 483,
            "usd_per_million": 5,
            "usd": 0.002415
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "07_package_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 55.961,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "commercial/evidence/07_package_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.1370295,
        "components": {
          "input": {
            "tokens": 508,
            "usd_per_million": 1.5,
            "usd": 0.000762
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 3049,
            "usd_per_million": 7.5,
            "usd": 0.0228675
          }
        }
      },
      {
        "id": "07_package_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 84.374,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/07_package_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.402675,
        "components": {
          "text_input": {
            "tokens": 483,
            "usd_per_million": 5,
            "usd": 0.002415
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "08_character_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 47.936,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/08_character_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.4035,
        "components": {
          "text_input": {
            "tokens": 648,
            "usd_per_million": 5,
            "usd": 0.00324
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "08_character_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 49.866,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "commercial/evidence/08_character_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.145374,
        "components": {
          "input": {
            "tokens": 601,
            "usd_per_million": 1.5,
            "usd": 0.0009015
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 4143,
            "usd_per_million": 7.5,
            "usd": 0.0310725
          }
        }
      },
      {
        "id": "08_character_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 79.44,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/08_character_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.4035,
        "components": {
          "text_input": {
            "tokens": 648,
            "usd_per_million": 5,
            "usd": 0.00324
          },
          "image_input": {
            "tokens": 0,
            "usd_per_million": 8,
            "usd": 0.0
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "09_comic_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 67.397,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/09_comic_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.417104,
        "components": {
          "text_input": {
            "tokens": 956,
            "usd_per_million": 5,
            "usd": 0.00478
          },
          "image_input": {
            "tokens": 1508,
            "usd_per_million": 8,
            "usd": 0.012064
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "09_comic_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 41.323,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "commercial/evidence/09_comic_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.130989,
        "components": {
          "input": {
            "tokens": 2021,
            "usd_per_million": 1.5,
            "usd": 0.0030315
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 1941,
            "usd_per_million": 7.5,
            "usd": 0.0145575
          }
        }
      },
      {
        "id": "09_comic_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 105.475,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/09_comic_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.417104,
        "components": {
          "text_input": {
            "tokens": 956,
            "usd_per_million": 5,
            "usd": 0.00478
          },
          "image_input": {
            "tokens": 1508,
            "usd_per_million": 8,
            "usd": 0.012064
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "10_storybook_flare",
        "group": "commercial",
        "model_id": "flare",
        "requested_model": "gpt-image-2.5-flare-2026-09-08",
        "elapsed_seconds": 65.572,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/10_storybook_flare.json",
        "basis": "saved_api_usage",
        "usd": 0.416399,
        "components": {
          "text_input": {
            "tokens": 815,
            "usd_per_million": 5,
            "usd": 0.004075
          },
          "image_input": {
            "tokens": 1508,
            "usd_per_million": 8,
            "usd": 0.012064
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "10_storybook_nano21",
        "group": "commercial",
        "model_id": "nano21",
        "requested_model": "gemini-nano-banana-2.1",
        "elapsed_seconds": 61.976,
        "dimensions": [
          5504,
          3072
        ],
        "evidence": "commercial/evidence/10_storybook_nano21.json",
        "basis": "saved_api_usage",
        "usd": 0.14094,
        "components": {
          "input": {
            "tokens": 1895,
            "usd_per_million": 1.5,
            "usd": 0.0028425
          },
          "image_output": {
            "tokens": 3780,
            "usd_per_million": 30,
            "usd": 0.1134
          },
          "text_and_thinking_output": {
            "tokens": 3293,
            "usd_per_million": 7.5,
            "usd": 0.0246975
          }
        }
      },
      {
        "id": "10_storybook_sunburst",
        "group": "commercial",
        "model_id": "sunburst",
        "requested_model": "gpt-image-2.5-sunburst-2026-09-08",
        "elapsed_seconds": 111.602,
        "dimensions": [
          3840,
          2160
        ],
        "evidence": "commercial/evidence/10_storybook_sunburst.json",
        "basis": "saved_api_usage",
        "usd": 0.416399,
        "components": {
          "text_input": {
            "tokens": 815,
            "usd_per_million": 5,
            "usd": 0.004075
          },
          "image_input": {
            "tokens": 1508,
            "usd_per_million": 8,
            "usd": 0.012064
          },
          "image_output": {
            "tokens": 13342,
            "usd_per_million": 30,
            "usd": 0.40026
          }
        }
      },
      {
        "id": "google_nano21_newkey_api_1.jpg",
        "group": "initial_tests",
        "requested_model": "gemini-nano-banana-2.1",
        "evidence": "evidence/initial_tests.json",
        "basis": "saved_api_usage",
        "usd": 0.0428535,
        "components": {
          "input": {
            "tokens": 174,
            "usd_per_million": 1.5,
            "usd": 0.000261
          },
          "image_output": {
            "tokens": 1120,
            "usd_per_million": 30,
            "usd": 0.0336
          },
          "text_and_thinking_output": {
            "tokens": 1199,
            "usd_per_million": 7.5,
            "usd": 0.0089925
          }
        }
      },
      {
        "id": "google_nano2_newkey_api_1.jpg",
        "group": "initial_tests",
        "requested_model": "gemini-3.1-flash-image",
        "evidence": "evidence/initial_tests.json",
        "basis": "saved_api_usage",
        "usd": 0.068097,
        "components": {
          "input": {
            "tokens": 174,
            "usd_per_million": 0.5,
            "usd": 8.7e-05
          },
          "image_output": {
            "tokens": 1120,
            "usd_per_million": 60,
            "usd": 0.0672
          },
          "text_and_thinking_output": {
            "tokens": 270,
            "usd_per_million": 3,
            "usd": 0.00081
          }
        }
      }
    ],
    "totals_usd": {
      "basic": 3.7122915,
      "commercial": 5.884464,
      "initial_tests": 0.1109505,
      "benchmark": 9.5967555,
      "measured_scope": 9.707706
    },
    "models": [
      {
        "id": "sunburst",
        "official_role": "정밀한 이미지 편집을 우선하는 OpenAI 모델",
        "observed": "메뉴의 요청하지 않은 영문 슬로건과 만화 배경 안내문을 추가했습니다. 코믹·동화의 배경을 세밀하게 그렸습니다.",
        "mean_seconds": 90.707,
        "min_seconds": 76.235,
        "max_seconds": 111.602,
        "mean_usd": 0.4121283,
        "total_usd": 4.121283,
        "count": 10,
        "min_usd": 0.400775,
        "max_usd": 0.473085
      },
      {
        "id": "flare",
        "official_role": "빠른 일상 이미지 생성을 우선하는 OpenAI 모델",
        "observed": "메뉴와 견적을 읽기 쉽게 배치했습니다. 코믹에서는 책의 소유가 컷 사이에서 바뀌고 지정된 측면 구도가 약했습니다.",
        "mean_seconds": 51.129,
        "min_seconds": 42.085,
        "max_seconds": 67.397,
        "mean_usd": 0.4121283,
        "total_usd": 4.121283,
        "count": 10,
        "min_usd": 0.400775,
        "max_usd": 0.473085
      },
      {
        "id": "nano21",
        "official_role": "효율적인 생성·대화 편집 중심의 Google 모델",
        "observed": "더 큰 4K 원본을 반환했습니다. 코믹 2컷에서 책이 공중에 떠 있고 마지막 말풍선의 화자가 모호합니다.",
        "mean_seconds": 46.522,
        "min_seconds": 31.931,
        "max_seconds": 61.976,
        "mean_usd": 0.13541895,
        "total_usd": 1.3541895,
        "count": 10,
        "min_usd": 0.1233195,
        "max_usd": 0.149877
      }
    ],
    "unmeasured": [
      {
        "group": "initial_tests",
        "file": "../openai_sunburst.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "initial_tests",
        "file": "../openai_flare.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "initial_tests",
        "file": "../openai_image2_api.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "initial_tests",
        "file": "../sunburst_newkey.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "initial_tests",
        "file": "../flare_newkey.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "initial_tests",
        "file": "../image2_newkey.png",
        "reason": "CLI에서 토큰 사용량을 보존하지 않아 비용을 산정할 수 없습니다."
      },
      {
        "group": "builtin_tools",
        "file": "../codex_builtin.png",
        "reason": "Codex 내장 생성·에이전트의 실제 과금 정보 미확인."
      },
      {
        "group": "builtin_tools",
        "file": "../agy_nano_banana_2.jpg",
        "reason": "AGY 경유 이미지·에이전트의 실제 과금 정보 미확인."
      },
      {
        "group": "development",
        "file": null,
        "reason": "프롬프트 조사·코드 작성·눈 검토를 수행한 개발 에이전트 비용 미확인. 로컬 OCR·정적 서버에는 외부 API 호출이 없습니다."
      }
    ],
    "note": "공식 공개 단가 × 저장된 응답 사용량. 청구서 미대조, 세금·환율·크레딧·별도 계약 할인 제외. 확인할 수 없는 비용을 0원으로 간주하지 않습니다.",
    "formulas": {
      "openai": "text_input × $5/M + image_input × $8/M + image_output × $30/M",
      "google": "promptTokenCount × input/M + IMAGE tokens × image_output/M + (candidatesTokenCount - IMAGE tokens + thoughtsTokenCount) × text_and_thinking_output/M"
    }
  },
  "editorial": {
    "05_menu": {
      "prompt_summary": "한·영 메뉴 12개를 3단으로 배치하고, 이름·설명·가격·추가 옵션·알레르기·부가세 안내를 원문 그대로 넣는 인쇄용 메뉴판.",
      "recommendation": "조판은 Flare, 가격 우선이면 Nano Banana 2.1. 세 모델 모두 메뉴와 가격은 읽히지만, Sunburst는 원문에 없는 슬로건을 추가했습니다.",
      "notes": {
        "nano21": "12개 메뉴와 가격 대응이 좋습니다. 저렴하지만 하단 안내가 빽빽합니다.",
        "flare": "읽기 편한 3단 조판. 메뉴·가격·설명 대응이 좋아 매장 시안에 추천합니다.",
        "sunburst": "메뉴 정보는 잘 맞았습니다. 제목 주변에 추가한 슬로건은 지워야 합니다."
      }
    },
    "06_document": {
      "prompt_summary": "긴 한·영 제안 문단과 4행 견적표를 한 페이지에 배치. 수량·단가·소계 1,375,000원·부가세·총액 1,512,500원까지 정확하게.",
      "recommendation": "가성비는 Nano Banana 2.1. 세 모델 모두 견적 숫자와 긴 문단을 표현했고, Nano는 더 큰 세로 원본을 낮은 비용으로 만들었습니다.",
      "notes": {
        "nano21": "긴 한·영 문단과 견적 합계를 읽을 수 있습니다. 3392×5056 세로 원본.",
        "flare": "견적표와 긴 문단이 잘 정리됐습니다. 승인란에 팀 이름을 추가했습니다.",
        "sunburst": "문서 위계와 숫자 대응이 좋습니다. 이 과제에서는 Flare와 생성비가 같습니다."
      }
    },
    "07_package": {
      "prompt_summary": "드립커피의 평면 앞면·뒷면·입체 상자를 한 장에. 5개입×10g, 90–94°C, 150mL, 원재료·보관·날짜와 한·영 추출 안내를 일치시킬 것.",
      "recommendation": "상업 시안은 Flare. Nano는 가장 저렴하지만 지시용 배치 비율을 실제 이미지에 인쇄했습니다. 세 모델 모두 작은 한글은 재교정이 필요합니다.",
      "notes": {
        "nano21": "세 뷰의 디자인이 대응합니다. 불필요한 (36%)/(28%) 표시는 삭제해야 합니다.",
        "flare": "앞·뒤·입체 상자의 정보가 잘 이어집니다. 작은 한글 받침은 납품 전 교정하세요.",
        "sunburst": "브랜드와 제품 정보가 일관됩니다. 상단에 추가한 뷰 라벨은 편집이 필요합니다."
      }
    },
    "08_character": {
      "prompt_summary": "노란 우비·초록 장화·주황 가방의 토끼 모리. 정면·3/4·측면·뒷면·기쁨·호기심의 여섯 전신을 한·영 라벨과 함께 한 시트에.",
      "recommendation": "캐릭터 기준 시트는 Sunburst. 이번 결과에서 방향과 분홍 코를 잘 유지했습니다. Flare는 3/4 회전이 약하고, Nano는 코 색이 어둡게 바뀌었습니다.",
      "notes": {
        "nano21": "여섯 시점은 갖췄습니다. 요청한 분홍 코의 색과 모양을 다시 확인하세요.",
        "flare": "복장·라벨이 안정적입니다. 정면과 3/4 시점의 차이가 약합니다.",
        "sunburst": "여섯 시점과 외형 조건을 잘 유지했습니다. 코믹·동화의 공통 참조로 사용했습니다."
      }
    },
    "09_comic": {
      "prompt_summary": "모리와 고슴도치 우리의 비 오는 도서관 이야기, 3×2의 6컷. 한글 대사·영문 자막·말풍선 화자·파란 책과 우산·카메라 시점을 지정.",
      "recommendation": "이번 코믹은 Sunburst를 출발점으로 추천합니다. Nano에는 책이 떠 있는 장면과 말풍선 화자 오류가 보였습니다. 세 모델 모두 컷 밖 영문 자막을 수정해야 합니다.",
      "notes": {
        "nano21": "2컷의 책이 떠 있고, 마지막 말풍선의 꼬리가 다른 인물을 가리킵니다.",
        "flare": "대사를 읽을 수 있습니다. 중간에 책을 든 인물이 바뀌고 측면 구도가 약합니다.",
        "sunburst": "배경과 소품 흐름이 좋습니다. 측면 구도와 컷 밖 영문 자막은 고쳐야 합니다."
      }
    },
    "10_storybook": {
      "prompt_summary": "같은 캐릭터로 동화 04·05쪽 펼침면. 바깥의 넓은 장면→안쪽의 책 건네기, 한글 4문장·영문 4문장·왼쪽 제목·바깥 여백 5%·중앙 4%.",
      "recommendation": "가성비와 여백 준수는 Nano Banana 2.1. 세 모델 모두 문장과 이야기 흐름을 유지했습니다. Sunburst·Flare의 왼쪽 제목은 바깥 안전 여백보다 가까웠습니다.",
      "notes": {
        "nano21": "문장·쪽 번호·안전 여백을 갖췄습니다. 비용을 아끼는 동화 시안에 추천합니다.",
        "flare": "이야기와 캐릭터가 이어집니다. 제목의 바깥 여백을 더 확보해야 합니다.",
        "sunburst": "배경과 삽화가 풍부합니다. 제목을 바깥 5% 안전 여백 안으로 옮기세요."
      }
    }
  },
  "legacy": {
    "records": [
      {
        "scene_id": "05_menu",
        "status": "success",
        "image_path": "05_menu.png",
        "requested_prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.\n",
        "actual_tool_prompt": null,
        "prompt_sha256": "950d48ad09d0a938a18d582b298465f5983c1eb2f8bad95dd497ad4da2ae5cc4",
        "actual_prompt_sha256": null,
        "reference": {
          "original_path": null,
          "sha256": null,
          "actually_passed": false
        },
        "image_model": null,
        "model_evidence": {
          "official_url": "https://developers.openai.com/api/docs/models/gpt-image-2",
          "official_model_id": "gpt-image-2",
          "note": "Official ID verified; this does not identify the model of a built-in generation response.",
          "response_evidence_file": "05_menu_response_evidence.json",
          "session_evidence_file": "session_tool_evidence.json",
          "observed_response_fields": [
            "image_url",
            "output_hint"
          ],
          "per_response_model_id_exposed": false
        },
        "agent_cli_version": "codex-cli 0.162.0",
        "width": 1672,
        "height": 941,
        "sha256": "3fe5321f10be249402c918c6ec52aaa4d7428c7844af5dca0267d2cd6968de6f",
        "elapsed_seconds": 34.938,
        "usage": null,
        "cost_usd": null,
        "generation_route": "codex_builtin_image_gen",
        "note": "Built-in tool does not expose size, quality, or model selection arguments. First successful output preserved byte-for-byte. Response exposes no image model ID, revised prompt, usage, or cost. Supplied tool argument exactly matches source UTF-8 bytes including final newline. Internal prompt rewriting is unobservable; identical downstream image-model prompts cannot be asserted. Elapsed time is measured tool wall time.",
        "id": "05_menu_codex_builtin",
        "model_id": "codex_builtin",
        "path": "legacy/openai/05_menu.png",
        "preview": "previews/05_menu_codex_builtin.webp",
        "display_name": "Codex 내장 이미지 · 모델 미노출",
        "company": "OpenAI",
        "agent": "Codex",
        "price_label": "GPT Image 2 API 참고 $0.0039–$0.1388",
        "price_note": "GPT Image 2라고 가정한 API 이미지 출력분. 참고 크기 1664×944, low–high 품질. 입력·참조 비용 별도, 실제 Codex 모델·품질·요금 미확인.",
        "api_price_reference": {
          "provider": "openai",
          "scene_id": "05_menu",
          "image_path": "05_menu.png",
          "image_sha256": "3fe5321f10be249402c918c6ec52aaa4d7428c7844af5dca0267d2cd6968de6f",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            1672,
            941
          ],
          "requested_reference_model": "gpt-image-2",
          "observed_image_model": null,
          "model_status": "conditional_reference_model_estimate; tool model not verified",
          "quality": null,
          "quality_status": "auto unconfirmed / auto 미확인; Codex client request quality not supplied",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 1960,
          "reference_image_evidence": {
            "original_path": null,
            "sha256": null,
            "actually_passed": false
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            1672,
            941
          ],
          "actual_size_api_valid": false,
          "actual_size_validation_errors": [
            "both edges must be multiples of 16"
          ],
          "reference_type": "adjacent_or_standard_valid_api_size_only",
          "reference_dimensions": [
            1664,
            944
          ],
          "equally_near_reference_dimensions": [
            [
              1664,
              944
            ],
            [
              1680,
              944
            ]
          ],
          "output_estimates_by_quality": {
            "low": {
              "estimated_output_tokens": 129,
              "estimated_image_output_cost_usd": 0.00387
            },
            "medium": {
              "estimated_output_tokens": 1157,
              "estimated_image_output_cost_usd": 0.03471
            },
            "high": {
              "estimated_output_tokens": 4628,
              "estimated_image_output_cost_usd": 0.13884
            }
          },
          "display_price_text_ko": "GPT Image 2 조건부 API 출력 참고 $0.00387–$0.13884/장 · quality auto 미확인 · 1664×944 API 참고 크기"
        },
        "comparison_note": "최신 API와 도구·해상도·품질이 다릅니다. 생성 모델 ID는 Codex 응답에서 노출되지 않아 GPT Image 2로 확정하지 않았습니다.",
        "review_note": "12개 메뉴를 3단에 배치했습니다. 원문에 없는 영문 슬로건과 장식을 추가했습니다.",
        "evidence_path": "legacy/openai/05_menu_codex_builtin_public.json"
      },
      {
        "scene_id": "06_document",
        "status": "success",
        "image_path": "06_document.png",
        "requested_prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.\n",
        "actual_tool_prompt": null,
        "prompt_sha256": "dbcda55aa4daeda1e2a745257a243a478bb6ab5ebe45bba9d4322fd7eb93c844",
        "actual_prompt_sha256": null,
        "reference": {
          "original_path": null,
          "sha256": null,
          "actually_passed": false
        },
        "image_model": null,
        "model_evidence": {
          "official_url": "https://developers.openai.com/api/docs/models/gpt-image-2",
          "official_model_id": "gpt-image-2",
          "note": "Official ID verified; this does not identify the model of a built-in generation response.",
          "response_evidence_file": "06_document_response_evidence.json",
          "session_evidence_file": "session_tool_evidence.json",
          "observed_response_fields": [
            "image_url",
            "output_hint"
          ],
          "per_response_model_id_exposed": false
        },
        "agent_cli_version": "codex-cli 0.162.0",
        "width": 1024,
        "height": 1536,
        "sha256": "0339fc974999f78c92ddd75ff5fcca0eaf2e9874ecd51d33402d4dfa1b84c2e0",
        "elapsed_seconds": 34.295,
        "usage": null,
        "cost_usd": null,
        "generation_route": "codex_builtin_image_gen",
        "note": "Built-in tool does not expose size, quality, or model selection arguments. First successful output preserved byte-for-byte. Response exposes no image model ID, revised prompt, usage, or cost. Supplied tool argument exactly matches source UTF-8 bytes including final newline. Internal prompt rewriting is unobservable; identical downstream image-model prompts cannot be asserted. Elapsed time is measured tool wall time.",
        "id": "06_document_codex_builtin",
        "model_id": "codex_builtin",
        "path": "legacy/openai/06_document.png",
        "preview": "previews/06_document_codex_builtin.webp",
        "display_name": "Codex 내장 이미지 · 모델 미노출",
        "company": "OpenAI",
        "agent": "Codex",
        "price_label": "GPT Image 2 API 참고 $0.0047–$0.1646",
        "price_note": "GPT Image 2라고 가정한 API 이미지 출력분. 참고 크기 1024×1536, low–high 품질. 입력·참조 비용 별도, 실제 Codex 모델·품질·요금 미확인.",
        "api_price_reference": {
          "provider": "openai",
          "scene_id": "06_document",
          "image_path": "06_document.png",
          "image_sha256": "0339fc974999f78c92ddd75ff5fcca0eaf2e9874ecd51d33402d4dfa1b84c2e0",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            1024,
            1536
          ],
          "requested_reference_model": "gpt-image-2",
          "observed_image_model": null,
          "model_status": "conditional_reference_model_estimate; tool model not verified",
          "quality": null,
          "quality_status": "auto unconfirmed / auto 미확인; Codex client request quality not supplied",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 2559,
          "reference_image_evidence": {
            "original_path": null,
            "sha256": null,
            "actually_passed": false
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            1024,
            1536
          ],
          "actual_size_api_valid": true,
          "actual_size_validation_errors": [],
          "reference_type": "same_dimensions_api_hypothesis",
          "reference_dimensions": [
            1024,
            1536
          ],
          "equally_near_reference_dimensions": [
            [
              1024,
              1536
            ]
          ],
          "output_estimates_by_quality": {
            "low": {
              "estimated_output_tokens": 158,
              "estimated_image_output_cost_usd": 0.00474
            },
            "medium": {
              "estimated_output_tokens": 1372,
              "estimated_image_output_cost_usd": 0.04116
            },
            "high": {
              "estimated_output_tokens": 5488,
              "estimated_image_output_cost_usd": 0.16464
            }
          },
          "display_price_text_ko": "GPT Image 2 조건부 API 출력 참고 $0.00474–$0.16464/장 · quality auto 미확인 · 1024×1536 API 참고 크기"
        },
        "comparison_note": "최신 API와 도구·해상도·품질이 다릅니다. 생성 모델 ID는 Codex 응답에서 노출되지 않아 GPT Image 2로 확정하지 않았습니다.",
        "review_note": "4행 견적 표와 합계를 배치했습니다. 검수란에 원문보다 많은 체크박스가 보입니다.",
        "evidence_path": "legacy/openai/06_document_codex_builtin_public.json"
      },
      {
        "scene_id": "09_comic",
        "status": "success",
        "image_path": "09_comic.png",
        "requested_prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.\n",
        "actual_tool_prompt": null,
        "prompt_sha256": "ad6738a67c7d8befe04a68f6aaf41a3461b7bb0d3f533634f3b23104d02dece9",
        "actual_prompt_sha256": null,
        "reference": {
          "original_path": "commercial/images/08_character_sunburst.png",
          "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
          "actually_passed": true
        },
        "image_model": null,
        "model_evidence": {
          "official_url": "https://developers.openai.com/api/docs/models/gpt-image-2",
          "official_model_id": "gpt-image-2",
          "note": "Official ID verified; this does not identify the model of a built-in generation response.",
          "response_evidence_file": "09_comic_response_evidence.json",
          "session_evidence_file": "session_tool_evidence.json",
          "observed_response_fields": [
            "image_url",
            "output_hint"
          ],
          "per_response_model_id_exposed": false
        },
        "agent_cli_version": "codex-cli 0.162.0",
        "width": 1672,
        "height": 941,
        "sha256": "922aae6ed06394675ffde53835db99a5e299dac0a135254eaffaec816bd921a0",
        "elapsed_seconds": 95.594,
        "usage": null,
        "cost_usd": null,
        "generation_route": "codex_builtin_image_gen",
        "note": "Built-in tool does not expose size, quality, or model selection arguments. Exact original reference file passed through referenced_image_paths. First successful output preserved byte-for-byte. Response exposes no image model ID, revised prompt, usage, or cost. Supplied tool argument exactly matches source UTF-8 bytes including final newline. Internal prompt rewriting is unobservable; identical downstream image-model prompts cannot be asserted. Elapsed time is measured tool wall time.",
        "id": "09_comic_codex_builtin",
        "model_id": "codex_builtin",
        "path": "legacy/openai/09_comic.png",
        "preview": "previews/09_comic_codex_builtin.webp",
        "display_name": "Codex 내장 이미지 · 모델 미노출",
        "company": "OpenAI",
        "agent": "Codex",
        "price_label": "GPT Image 2 API 참고 $0.0039–$0.1388",
        "price_note": "GPT Image 2라고 가정한 API 이미지 출력분. 참고 크기 1664×944, low–high 품질. 입력·참조 비용 별도, 실제 Codex 모델·품질·요금 미확인.",
        "api_price_reference": {
          "provider": "openai",
          "scene_id": "09_comic",
          "image_path": "09_comic.png",
          "image_sha256": "922aae6ed06394675ffde53835db99a5e299dac0a135254eaffaec816bd921a0",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            1672,
            941
          ],
          "requested_reference_model": "gpt-image-2",
          "observed_image_model": null,
          "model_status": "conditional_reference_model_estimate; tool model not verified",
          "quality": null,
          "quality_status": "auto unconfirmed / auto 미확인; Codex client request quality not supplied",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 1534,
          "reference_image_evidence": {
            "original_path": "08_character_sunburst.png",
            "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
            "actually_passed": true
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            1672,
            941
          ],
          "actual_size_api_valid": false,
          "actual_size_validation_errors": [
            "both edges must be multiples of 16"
          ],
          "reference_type": "adjacent_or_standard_valid_api_size_only",
          "reference_dimensions": [
            1664,
            944
          ],
          "equally_near_reference_dimensions": [
            [
              1664,
              944
            ],
            [
              1680,
              944
            ]
          ],
          "output_estimates_by_quality": {
            "low": {
              "estimated_output_tokens": 129,
              "estimated_image_output_cost_usd": 0.00387
            },
            "medium": {
              "estimated_output_tokens": 1157,
              "estimated_image_output_cost_usd": 0.03471
            },
            "high": {
              "estimated_output_tokens": 4628,
              "estimated_image_output_cost_usd": 0.13884
            }
          },
          "display_price_text_ko": "GPT Image 2 조건부 API 출력 참고 $0.00387–$0.13884/장 · quality auto 미확인 · 1664×944 API 참고 크기"
        },
        "comparison_note": "최신 API와 도구·해상도·품질이 다릅니다. 생성 모델 ID는 Codex 응답에서 노출되지 않아 GPT Image 2로 확정하지 않았습니다.",
        "review_note": "6컷과 두 캐릭터를 그렸습니다. 영문 자막을 요청과 달리 컷 바깥에 배치했습니다.",
        "evidence_path": "legacy/openai/09_comic_codex_builtin_public.json"
      },
      {
        "scene_id": "05_menu",
        "status": "success",
        "image_path": "05_menu.jpg",
        "requested_prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.\n",
        "actual_tool_prompt": "[납품 목적]\n가상 카페 브랜드 ‘모닝포스트 / MORNING POST’의 실제 매장 벽에 걸 수 있는 완성된 가로 메뉴판을 디자인한다. 사진 속 메뉴판이나 목업이 아니라 인쇄할 평면 디자인 한 장이다.\n[조판과 디자인]\n16:9. 따뜻한 크림색 바탕, 짙은 초록색 본문, 산호색 강조. 상단 12%는 브랜드와 제목. 그 아래 본문 3단은 COFFEE, TEA & SPECIAL, BAKERY 순서로 동일 너비를 가진다. 각 단은 메뉴 4개로, 한국어 이름을 굵게, 바로 아래 영어 이름, 우측 끝에 가격을 정렬한다. 항목마다 한국어 설명과 영어 설명을 작은 크기로 넣되 충분히 읽히게 한다. 하단 14%에 옵션·알레르기·부가세 안내를 담는다. 여백과 줄 간격을 확보하고 작은 글자까지 선명하게 표현한다.\n[반드시 그대로 들어갈 원문]\nCOFFEE / 커피\n\n아메리카노 / Americano / ₩3,500\n맑고 깔끔한 에스프레소 커피\nClean espresso with hot water\n\n카페라떼 / Caffè Latte / ₩4,500\n고소한 우유와 에스프레소\nEspresso with silky steamed milk\n\n바닐라 빈 라떼 / Vanilla Bean Latte / ₩5,200\n바닐라 빈의 은은한 단맛\nA gentle hint of real vanilla\n\n디카페인 콜드브루 / Decaf Cold Brew / ₩5,000\n천천히 우려낸 부드러운 커피\nSlow-steeped, smooth and mellow\n\nTEA & SPECIAL / 차와 특별한 음료\n\n제주 쑥 라떼 / Jeju Mugwort Latte / ₩5,800\n쑥의 향과 따뜻한 우유\nEarthy mugwort with warm milk\n\n딸기 말차 라떼 / Strawberry Matcha Latte / ₩6,200\n딸기와 말차의 두 가지 색\nStrawberry meets vibrant matcha\n\n얼그레이 밀크티 / Earl Grey Milk Tea / ₩5,500\n베르가모트 향의 홍차와 우유\nBergamot tea with creamy milk\n\n레몬 진저 티 / Lemon Ginger Tea / ₩4,800\n레몬과 생강의 산뜻한 조화\nBright lemon and warming ginger\n\nBAKERY / 베이커리\n\n버터 크루아상 / Butter Croissant / ₩3,800\n바삭한 겉과 촉촉한 결\nFlaky outside, tender inside\n\n크림치즈 꽈배기 / Cream Cheese Twist / ₩4,200\n쫄깃한 빵 속 부드러운 크림치즈\nA soft twist with cream cheese\n\n쑥 인절미 케이크 / Mugwort Injeolmi Cake / ₩6,500\n쑥과 고소한 콩가루\nMugwort cake with roasted soy flour\n\n레몬 파운드케이크 / Lemon Pound Cake / ₩4,500\n레몬 껍질의 향긋한 풍미\nA fragrant finish of lemon zest\n\nOAT MILK +₩700 / 오트밀크 변경 +700원\nEXTRA SHOT +₩500 / 샷 추가 +500원\nICED AVAILABLE / 아이스로도 주문할 수 있습니다.\n알레르기 안내: 우유, 밀, 대두가 포함된 메뉴가 있습니다.\nAllergen notice: Some items contain milk, wheat or soy.\n모든 가격은 부가세 포함입니다. / All prices include VAT.\n[삽화와 제약]\n브랜드 ‘모닝포스트’, ‘MORNING POST’, 제목 ‘SPRING MENU 2026’을 모두 넣는다. 본문을 가리지 않는 작은 파란 커피잔과 노란 튤립 선화만 허용한다. 총 메뉴는 정확히 12개다. 가격·쉼표·₩ 기호·Caffè의 악센트·한국어 받침을 바꾸지 않는다. 번역·축약·중복·추가 메뉴·임의 가격·로고·QR·워터마크는 넣지 않는다. 어려운 글자를 가짜 획으로 대체하지 않는다. 상업 디자인다운 위계와 깔끔한 조판을 구현한다.",
        "prompt_sha256": "950d48ad09d0a938a18d582b298465f5983c1eb2f8bad95dd497ad4da2ae5cc4",
        "actual_prompt_sha256": "3abb2c260ab3a544b3bb207de1c9aac1058a8a7a2c220a71f121c29dffbe413e",
        "reference": {
          "original_path": null,
          "sha256": null,
          "actually_passed": false
        },
        "image_model": "gemini-3.1-flash-image",
        "model_evidence": {
          "model_id_in_payload": "gemini-3.1-flash-image",
          "evidence_source": "Antigravity conversation database e78236a4-e5b1-4066-923e-7b79ed85ddfe.db step idx 2 protobuf payload",
          "public_model_family": "Nano Banana 2 (Google Gemini 3.1 Flash Image)",
          "note": "Confirmed directly from runtime tool response protobuf in SQLite session steps table."
        },
        "agent_cli_version": "agy 1.3.2",
        "width": 1376,
        "height": 768,
        "sha256": "e3cd7a639c4f2ad0b67ef8eb02385ab7595ebfa7db4e915b9f841a1eb1f411ed",
        "elapsed_seconds": 11.0,
        "usage": null,
        "cost_usd": null,
        "generation_route": "antigravity_builtin_generate_image",
        "note": "Generated using Antigravity built-in generate_image tool (ImageName: 05_menu, AspectRatio: 16:9). Requested prompt was passed verbatim without rewrite or translation. First successful output preserved byte-for-byte in original dimensions. Image generation model gemini-3.1-flash-image confirmed from session response protobuf.",
        "id": "05_menu_agy_nano2",
        "model_id": "agy_nano2",
        "path": "legacy/google/05_menu.jpg",
        "preview": "previews/05_menu_agy_nano2.webp",
        "display_name": "Nano Banana 2 · AGY",
        "company": "Google",
        "agent": "AGY",
        "price_label": "Nano Banana 2 API 참고 $0.0672 / 1K",
        "price_note": "공식 1K 이미지 출력분 참고액. 실제 요청 해상도 tier와 사용량은 미노출. 0.5K–4K 출력분 $0.04482–$0.1512, 입력·텍스트·추론 별도. AGY 구독 청구액과 다릅니다.",
        "api_price_reference": {
          "provider": "google",
          "scene_id": "05_menu",
          "image_path": "05_menu.jpg",
          "image_sha256": "e3cd7a639c4f2ad0b67ef8eb02385ab7595ebfa7db4e915b9f841a1eb1f411ed",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            1376,
            768
          ],
          "requested_reference_model": "gemini-3.1-flash-image",
          "observed_image_model": "gemini-3.1-flash-image",
          "model_status": "record model observed; verify evidence before billing",
          "quality": null,
          "quality_status": "OpenAI quality axis does not apply; Google resolution-tier request unconfirmed",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 1960,
          "reference_image_evidence": {
            "original_path": null,
            "sha256": null,
            "actually_passed": false
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            1376,
            768
          ],
          "actual_dimensions_match_official_table": true,
          "reference_type": "official_table_size_match_api_hypothesis",
          "reference_dimensions": [
            1376,
            768
          ],
          "reference_aspect_ratio": "16:9",
          "estimate": {
            "reference_resolution_tier": "1K",
            "official_tier_output_tokens": 1120,
            "estimated_image_output_cost_usd": 0.0672
          },
          "output_estimates_by_resolution_tier": {
            "0.5K": {
              "reference_resolution_tier": "0.5K",
              "official_tier_output_tokens": 747,
              "estimated_image_output_cost_usd": 0.04482
            },
            "1K": {
              "reference_resolution_tier": "1K",
              "official_tier_output_tokens": 1120,
              "estimated_image_output_cost_usd": 0.0672
            },
            "2K": {
              "reference_resolution_tier": "2K",
              "official_tier_output_tokens": 1680,
              "estimated_image_output_cost_usd": 0.1008
            },
            "4K": {
              "reference_resolution_tier": "4K",
              "official_tier_output_tokens": 2520,
              "estimated_image_output_cost_usd": 0.1512
            }
          },
          "resolution_tier_status": "actual request tier unconfirmed; file dimensions match reference table",
          "inferred_reference_resolution_tier": "1K",
          "actual_requested_resolution_tier": null,
          "display_price_text_ko": "API 이미지 출력 참고: 1K $0.0672/장 · 실제 tier 미확인 · 0.5K–4K 참고 범위 $0.04482–$0.15120"
        },
        "comparison_note": "gemini-3.1-flash-image가 새 도구 세션에 기록됐습니다. 도구에 전달한 원문은 마지막 줄바꿈을 제외하고 같으며, 최신 API와 해상도·품질이 다릅니다.",
        "review_note": "12개 메뉴와 가격을 3단에 배치했습니다. 하단 안내는 좁고 작은 글자로 조판했습니다.",
        "evidence_path": "legacy/google/05_menu_agy_nano2_public.json"
      },
      {
        "scene_id": "06_document",
        "status": "success",
        "image_path": "06_document.jpg",
        "requested_prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.\n",
        "actual_tool_prompt": "[Deliverable]\nCreate one polished, flat portrait 2:3 proposal-and-quotation document for the fictional MORNING POST café brand. This is a printable page design, not a photograph, desk scene, mockup or perspective-distorted sheet. Treat the quoted Korean and English copy as authoritative artwork text: do not translate, paraphrase or shorten it.\n[Layout]\nIvory paper, forest-green headings, restrained coral rules, modern editorial sans-serif typography with proper Hangul glyphs. Keep 6% safe margins. Top 14%: bilingual project name, document title, document number and issue date. Next 25%: project overview in two stacked paragraphs, Korean then English. Middle 30%: a four-column quotation table, with row labels at left and amounts right-aligned. Lower 24%: schedule at left and approval checklist at right. Bottom: team name and page number. Use real baseline alignment, clear hierarchy and comfortable leading. Small text must remain readable at native resolution.\n[Exact headings and metadata]\n모닝포스트 브랜드 론칭\nMORNING POST BRAND LAUNCH\n제작 제안 및 견적서\nCREATIVE PROPOSAL & QUOTATION\n문서번호 MP-2026-014\n발행일 2026.10.09\n프로젝트 개요 / Project Overview\n[Exact Korean paragraph]\n동네 카페의 첫인상을 메뉴판과 패키지, 캐릭터 콘텐츠로 연결합니다. 한글과 영어를 함께 사용하되, 메뉴 이름과 가격을 가장 먼저 읽을 수 있도록 정보의 위계를 정리합니다. 모든 이미지와 문구는 실제 매장 안내와 온라인 홍보에 맞춰 제작합니다.\n[Exact English paragraph]\nWe connect the first impression of a neighborhood café through menus, packaging and character-led content. Korean and English appear together, with clear names, prices and reading order. Every visual is planned for both in-store communication and digital promotion.\n[Table; vertical bars define columns and are not literal artwork characters]\n제작 범위 및 비용 / Deliverables & Fees\n항목 | 수량 | 단가 | 금액\n한·영 메뉴판 | 2 | 180,000원 | 360,000원\n제품 이미지 | 3 | 95,000원 | 285,000원\n6컷 코믹 | 1 | 420,000원 | 420,000원\n동화 표지 | 1 | 310,000원 | 310,000원\n소계 1,375,000원\n부가세 137,500원\n합계 1,512,500원\n[Exact schedule and checklist]\n진행 일정 / Production Schedule\n10.12 기획 및 원문 확정\n10.15 1차 디자인 전달\n10.20 수정안 확인\n10.23 최종 파일 전달\n검수 기준 / Approval Checklist\n이름·가격·알레르기 문구 확인\nCheck names, prices and allergen copy.\n납품: PNG 원본 + 편집 가능한 조판 파일\nDelivery: PNG originals + editable layout files.\n담당: 모닝포스트 디자인팀\nPrepared by Morning Post Design Team\n1 / 1\n[Constraints]\nExactly one page, one table with four deliverable rows, and all supplied text. Do not change dates, currencies, commas, quantities or arithmetic. Do not invent bank accounts, signatures, contact details, legal clauses, extra rows or decorative text. The amounts are given data to typeset, not values to improvise.",
        "prompt_sha256": "dbcda55aa4daeda1e2a745257a243a478bb6ab5ebe45bba9d4322fd7eb93c844",
        "actual_prompt_sha256": "c6193f36dc4f9f06a3947c5904e1d18e58e8ec75a0f7506b679970f98ba21616",
        "reference": {
          "original_path": null,
          "sha256": null,
          "actually_passed": false
        },
        "image_model": "gemini-3.1-flash-image",
        "model_evidence": {
          "model_id_in_payload": "gemini-3.1-flash-image",
          "evidence_source": "Antigravity conversation database 91711f23-1bb1-4673-98ab-1df793f6575d.db step idx 2 protobuf payload",
          "public_model_family": "Nano Banana 2 (Google Gemini 3.1 Flash Image)",
          "note": "Confirmed directly from runtime tool response protobuf in SQLite session steps table."
        },
        "agent_cli_version": "agy 1.3.2",
        "width": 848,
        "height": 1264,
        "sha256": "68d32d2b2d4c513fa4c3d255dc0eebdf3a0f661d5f7348449aa7e776990a458d",
        "elapsed_seconds": 16.0,
        "usage": null,
        "cost_usd": null,
        "generation_route": "antigravity_builtin_generate_image",
        "note": "Generated using Antigravity built-in generate_image tool (ImageName: 06_document, AspectRatio: 2:3). Requested prompt was passed verbatim without rewrite or translation. First successful output preserved byte-for-byte in original dimensions. Image generation model gemini-3.1-flash-image confirmed from session response protobuf.",
        "id": "06_document_agy_nano2",
        "model_id": "agy_nano2",
        "path": "legacy/google/06_document.jpg",
        "preview": "previews/06_document_agy_nano2.webp",
        "display_name": "Nano Banana 2 · AGY",
        "company": "Google",
        "agent": "AGY",
        "price_label": "Nano Banana 2 API 참고 $0.0672 / 1K",
        "price_note": "공식 1K 이미지 출력분 참고액. 실제 요청 해상도 tier와 사용량은 미노출. 0.5K–4K 출력분 $0.04482–$0.1512, 입력·텍스트·추론 별도. AGY 구독 청구액과 다릅니다.",
        "api_price_reference": {
          "provider": "google",
          "scene_id": "06_document",
          "image_path": "06_document.jpg",
          "image_sha256": "68d32d2b2d4c513fa4c3d255dc0eebdf3a0f661d5f7348449aa7e776990a458d",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            848,
            1264
          ],
          "requested_reference_model": "gemini-3.1-flash-image",
          "observed_image_model": "gemini-3.1-flash-image",
          "model_status": "record model observed; verify evidence before billing",
          "quality": null,
          "quality_status": "OpenAI quality axis does not apply; Google resolution-tier request unconfirmed",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 2559,
          "reference_image_evidence": {
            "original_path": null,
            "sha256": null,
            "actually_passed": false
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            848,
            1264
          ],
          "actual_dimensions_match_official_table": true,
          "reference_type": "official_table_size_match_api_hypothesis",
          "reference_dimensions": [
            848,
            1264
          ],
          "reference_aspect_ratio": "2:3",
          "estimate": {
            "reference_resolution_tier": "1K",
            "official_tier_output_tokens": 1120,
            "estimated_image_output_cost_usd": 0.0672
          },
          "output_estimates_by_resolution_tier": {
            "0.5K": {
              "reference_resolution_tier": "0.5K",
              "official_tier_output_tokens": 747,
              "estimated_image_output_cost_usd": 0.04482
            },
            "1K": {
              "reference_resolution_tier": "1K",
              "official_tier_output_tokens": 1120,
              "estimated_image_output_cost_usd": 0.0672
            },
            "2K": {
              "reference_resolution_tier": "2K",
              "official_tier_output_tokens": 1680,
              "estimated_image_output_cost_usd": 0.1008
            },
            "4K": {
              "reference_resolution_tier": "4K",
              "official_tier_output_tokens": 2520,
              "estimated_image_output_cost_usd": 0.1512
            }
          },
          "resolution_tier_status": "actual request tier unconfirmed; file dimensions match reference table",
          "inferred_reference_resolution_tier": "1K",
          "actual_requested_resolution_tier": null,
          "display_price_text_ko": "API 이미지 출력 참고: 1K $0.0672/장 · 실제 tier 미확인 · 0.5K–4K 참고 범위 $0.04482–$0.15120"
        },
        "comparison_note": "gemini-3.1-flash-image가 새 도구 세션에 기록됐습니다. 도구에 전달한 원문은 마지막 줄바꿈을 제외하고 같으며, 최신 API와 해상도·품질이 다릅니다.",
        "review_note": "견적 표와 일정·검수란을 한 페이지에 배치했습니다. 원본이 848×1264로 작은 글자는 확대 검수가 필요합니다.",
        "evidence_path": "legacy/google/06_document_agy_nano2_public.json"
      },
      {
        "scene_id": "09_comic",
        "status": "success",
        "image_path": "09_comic.jpg",
        "requested_prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.\n",
        "actual_tool_prompt": "[입력 이미지의 역할]\n첨부 이미지 1은 토끼 모리의 공통 캐릭터 참조 시트다. 이 시트의 레이아웃을 다시 그리는 것이 아니라, 디자인을 유지해 아래 6컷 코믹을 새로 만든다. 모든 모델에 같은 참조 파일을 제공한다.\n[납품 목적과 스타일]\n한·영 독자에게 보여줄 완성된 가로형 6컷 코믹 한 페이지. 따뜻한 파스텔 채색, 진한 갈색의 일정한 선, 섬세한 종이 질감. 캐릭터 시트의 모리 얼굴·귀·노란 우비·초록 장화·주황 가방을 유지한다. 친구 ‘우리’는 갈색 가시와 연한 얼굴을 가진 작은 고슴도치이며, 보라색 조끼와 둥근 안경을 모든 등장 컷에서 동일하게 착용한다.\n[페이지와 읽는 순서]\n16:9. 위쪽 10%에 ‘비 오는 날의 책 한 권’, 그 아래 ‘A Book for a Rainy Day’를 정확히 넣는다. 아래에는 똑같은 크기의 3열×2행 패널 총 6개와 일정한 흰 여백을 둔다. 위 행 왼쪽에서 오른쪽으로 1·2·3컷, 아래 행 왼쪽에서 오른쪽으로 4·5·6컷 순서다. 각 컷마다 한국어 말풍선 하나, 하단 영어 자막 한 줄을 넣는다. 말풍선 꼬리는 지정된 화자를 정확히 가리킨다. 영어는 추가 말풍선이 아니라 해당 컷 안의 하단 자막이다.\n[컷별 대본과 시점; 모든 대사는 원문 그대로]\n1컷: 넓은 외부 전경. 모리가 책방 문 앞에서 파란 책을 들고 빗속을 바라본다. 화자는 모리다.\n한국어 말풍선: “비가 와도 괜찮아.”\n영어 자막: “Rain won't stop us.”\n\n2컷: 고슴도치 우리의 얼굴과 손을 가까이 본 장면. 밖에서 기다리는 우리가 젖을까 봐 파란 책을 걱정한다. 화자는 우리다.\n한국어 말풍선: “책이 젖겠어!”\n영어 자막: “The book will get wet!”\n\n3컷: 약간 위에서 내려다본 장면. 모리가 빨간 우산을 펼쳐 우리도 들어오라고 권한다. 화자는 모리다.\n한국어 말풍선: “내 우산을 같이 쓰자.”\n영어 자막: “Let's share my umbrella.”\n\n4컷: 두 캐릭터의 옆모습. 모리와 우리가 빨간 우산 아래 함께 걷는다. 화자는 우리다.\n한국어 말풍선: “고마워, 모리!”\n영어 자막: “Thank you, Mori!”\n\n5컷: 모리의 어깨 너머로 보는 실내 장면. 둘은 작은 도서관에 도착했고 모리가 마른 파란 책을 우리에게 건넨다. 화자는 모리다.\n한국어 말풍선: “이 책은 네가 먼저 읽어.”\n영어 자막: “You can read it first.”\n\n6컷: 따뜻한 마무리 클로즈업. 비가 보이는 창가에 둘이 나란히 앉아 파란 책을 함께 읽는다. 화자는 우리다.\n한국어 말풍선: “함께라서 더 좋아.”\n영어 자막: “It's better together.”\n[연속성과 제약]\n파란 책과 빨간 우산의 색·크기는 유지하고 장면마다 소품이 갑자기 바뀌거나 복제되지 않게 한다. 빗속에서 도서관 실내로 들어오는 사건 흐름이 분명해야 한다. 마지막 책은 마른 상태다. 인물의 역할·대사·읽는 순서·패널 수를 바꾸지 않는다. 여섯 컷에 같은 정면 구도를 반복하지 않는다. 참조 시트의 라벨을 만화에 복사하지 않으며, 패널 번호나 지시문·추가 대사·로고는 넣지 않는다.",
        "prompt_sha256": "ad6738a67c7d8befe04a68f6aaf41a3461b7bb0d3f533634f3b23104d02dece9",
        "actual_prompt_sha256": "a366f7c16203c26f927b183e8304e444e34986741311dcdee47a8c9f254781a3",
        "reference": {
          "original_path": "commercial/images/08_character_sunburst.png",
          "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
          "actually_passed": true
        },
        "image_model": "gemini-3.1-flash-image",
        "model_evidence": {
          "model_id_in_payload": "gemini-3.1-flash-image",
          "evidence_source": "Antigravity conversation database b31e7f7e-12df-4ae0-8003-bc48d848dae1.db step idx 2 protobuf payload",
          "public_model_family": "Nano Banana 2 (Google Gemini 3.1 Flash Image)",
          "note": "Confirmed directly from runtime tool response protobuf in SQLite session steps table."
        },
        "agent_cli_version": "agy 1.3.2",
        "width": 1376,
        "height": 768,
        "sha256": "504294bad4baaeace308e5a0f812394b92f1dd60519ade26d7d580c4c4cd74ec",
        "elapsed_seconds": 19.0,
        "usage": null,
        "cost_usd": null,
        "generation_route": "antigravity_builtin_generate_image",
        "note": "Generated using Antigravity built-in generate_image tool (ImageName: 09_comic, AspectRatio: 16:9). Requested prompt was passed verbatim without rewrite or translation. First successful output preserved byte-for-byte in original dimensions. Image generation model gemini-3.1-flash-image confirmed from session response protobuf.",
        "id": "09_comic_agy_nano2",
        "model_id": "agy_nano2",
        "path": "legacy/google/09_comic.jpg",
        "preview": "previews/09_comic_agy_nano2.webp",
        "display_name": "Nano Banana 2 · AGY",
        "company": "Google",
        "agent": "AGY",
        "price_label": "Nano Banana 2 API 참고 $0.0672 / 1K",
        "price_note": "공식 1K 이미지 출력분 참고액. 실제 요청 해상도 tier와 사용량은 미노출. 0.5K–4K 출력분 $0.04482–$0.1512, 입력·텍스트·추론 별도. AGY 구독 청구액과 다릅니다.",
        "api_price_reference": {
          "provider": "google",
          "scene_id": "09_comic",
          "image_path": "09_comic.jpg",
          "image_sha256": "504294bad4baaeace308e5a0f812394b92f1dd60519ade26d7d580c4c4cd74ec",
          "dimension_evidence": "Pillow",
          "result_json_present": true,
          "metadata_dimensions": [
            1376,
            768
          ],
          "requested_reference_model": "gemini-3.1-flash-image",
          "observed_image_model": "gemini-3.1-flash-image",
          "model_status": "record model observed; verify evidence before billing",
          "quality": null,
          "quality_status": "OpenAI quality axis does not apply; Google resolution-tier request unconfirmed",
          "actual_usage": null,
          "actual_tool_cost_usd": null,
          "record_reported_cost_usd_unvalidated": null,
          "prompt_input_token_estimate": null,
          "prompt_token_estimation_status": "No matching offline tokenizer was used. tiktoken is not installed; Gemini tokenizer not available locally. No API countTokens call or installation performed.",
          "prompt_character_count": 1534,
          "reference_image_evidence": {
            "original_path": "08_character_sunburst.png",
            "sha256": "257df58d75c4ff635823fe187965f8c47328901459a89ed8436b4868d8c34418",
            "actually_passed": true
          },
          "estimated_scope": "API image output only, conditional on requested reference model. Not actual built-in tool usage, total API cost, or tool billing.",
          "missing_fields": [
            "Actual per-image model id when not returned by the built-in tool",
            "Actual API image output tokens",
            "Actual API input text and image tokens",
            "Effective OpenAI quality and size request",
            "Google effective resolution tier when not observed",
            "Output text/thinking tokens and any grounding charges",
            "Actual built-in tool billing"
          ],
          "reference_input_tokens": null,
          "input_cost_usd": null,
          "total_api_cost_usd": null,
          "actual_dimensions": [
            1376,
            768
          ],
          "actual_dimensions_match_official_table": true,
          "reference_type": "official_table_size_match_api_hypothesis",
          "reference_dimensions": [
            1376,
            768
          ],
          "reference_aspect_ratio": "16:9",
          "estimate": {
            "reference_resolution_tier": "1K",
            "official_tier_output_tokens": 1120,
            "estimated_image_output_cost_usd": 0.0672
          },
          "output_estimates_by_resolution_tier": {
            "0.5K": {
              "reference_resolution_tier": "0.5K",
              "official_tier_output_tokens": 747,
              "estimated_image_output_cost_usd": 0.04482
            },
            "1K": {
              "reference_resolution_tier": "1K",
              "official_tier_output_tokens": 1120,
              "estimated_image_output_cost_usd": 0.0672
            },
            "2K": {
              "reference_resolution_tier": "2K",
              "official_tier_output_tokens": 1680,
              "estimated_image_output_cost_usd": 0.1008
            },
            "4K": {
              "reference_resolution_tier": "4K",
              "official_tier_output_tokens": 2520,
              "estimated_image_output_cost_usd": 0.1512
            }
          },
          "resolution_tier_status": "actual request tier unconfirmed; file dimensions match reference table",
          "inferred_reference_resolution_tier": "1K",
          "actual_requested_resolution_tier": null,
          "display_price_text_ko": "API 이미지 출력 참고: 1K $0.0672/장 · 실제 tier 미확인 · 0.5K–4K 참고 범위 $0.04482–$0.15120"
        },
        "comparison_note": "gemini-3.1-flash-image가 새 도구 세션에 기록됐습니다. 도구에 전달한 원문은 마지막 줄바꿈을 제외하고 같으며, 최신 API와 해상도·품질이 다릅니다.",
        "review_note": "6컷과 두 캐릭터를 그렸습니다. 영문 자막을 요청과 달리 컷 바깥에 배치했습니다.",
        "evidence_path": "legacy/google/09_comic_agy_nano2_public.json"
      }
    ],
    "note": "내장 도구 6장. 공통 원문과 실제 생성 결과를 보존했지만, 최신 직접 API 30장과 계산 조건이 다른 참고 비교입니다.",
    "price_reference_path": "legacy/pricing/api_price_reference.json"
  },
  "display_order": [
    "01_light",
    "02_objects",
    "04_hands",
    "03_poster",
    "05_menu",
    "07_package",
    "06_document",
    "08_character",
    "09_comic",
    "10_storybook"
  ]
}