← 목록으로

라우드 야간 작업 보고 — 당선 컨벤션·퀵스타트 프리셋·fal 단가 정정 (8/27 새벽)

커밋 4개, 워커 3회 배포 완료. 전부 실측 검증했고 검증 못 한 항목은 아래에 그대로 표시했습니다.


한 장 요약

형님이 지적한 것 결과
당선작 특징이 프롬프트에 반영 안 된 것 아니냐 맞았습니다. 한 줄도 없었음 → 규칙 역산해 박음. A/B로 효과 확인
퀵스타트 프롬프트에는 그게 안 들어가지 않느냐 맞았습니다. 별도 경로라 빠짐 → 국문 프리셋 신설
GPT를 하이로 뽑고 있는 것 같다 맞았습니다. 자동 파이프라인이 quality="high" 고정 → medium 기본화
fal 가격 우리가 잘못 가져온 것 아니냐 맞았습니다. nb2가 구형 v1 단가였음. 최대 8.6배 오차 정정
리뷰 헤더에 출품 수가 안 보인다 발견 시점 스냅샷이라 낡아 있었음 → 라우드 실시간 조회로 교체

1. 당선작 코퍼스 — 무엇을 봤나

라우드 종료 콘테스트(state=End, 로고·브랜딩 카테고리)의 1등 당선작을 업종별로 내려받아
4×5 그리드 시트로 만들고 직접 눈으로 봤습니다.

그룹 기간 건수
치과·의원·한의원 등 의료 최근 12개월 254
세무·회계 최근 18개월 33
법무·법률·노무·특허 최근 18개월 75

그리드 시트 (클릭하면 열립니다)

형님이 말한 "채움" 유형이 법률 그리드에 그대로 있습니다 — #3 채움(208178), #7 동행(204541),

12 한가온(203364), #16 ㄷㄷㄷ(201513), 세무 #3 지온(205518), #15 온늘(189923).

역산한 규칙 (공통)

  1. 한글이 워드마크 주역. 영문은 그 아래 자간 넓은 대문자 캡션(한글 캡하이트의 25~40%).
    브랜드명 자체가 영문인 경우(TRINI·LUMiCO·DOLEND)만 예외.
  2. 업태어를 얇게 병기. 치과/의원/세무회계/법무법인을 브랜드명보다 작고 얇게 같은 줄에.
    빼지도, 같은 굵기로 주지도 않는다.
  3. 락업: 심볼 좌 + 워드마크 우 한 베이스라인. 심볼은 전체 폭의 1/4~1/3.
  4. 저채도 1~2도. 딥네이비·딥그린·차콜·버건디·웜골드. 그라디언트·글로우·3D 없음.
  5. 한글 자소를 심볼로 — 최근 최강세. (a) 한 음절을 굵은 솔리드로 키움 (b) 두 음절 자소를
    사각·원형 프레임 안 격자로 재배치(도장) (c) 자음만 기하 환원. 판독 가능해야 함.
  6. 생산 현실: 간판 절단·명판 각인·가운 자수. 단색 축소에 견딜 것.

업종별


2. 프롬프트에 어떻게 넣었나

리뷰에서 로고를 뽑는 기본 프롬프트는 REFERENCE_ADAPTATION_PROMPT 하나입니다
(pipeline/logo_generator.py:155, 워커 정본 worker/src/lib/prompt_template.ts).
언어는 영문이고, 제가 추가한 블록도 영문으로 썼습니다 — 나머지가 전부 영문인데 한글 섹션을
끼우면 지시 준수가 나빠집니다. 다만 규칙 안에서 인용하는 업태어(치과/세무회계/법무법인)와
예시(채움)는 한글 원문 그대로 넣었습니다. 모델이 실제로 그려야 할 글자니까요.

        전 (~5,100자)                    후 (8,000자)
  [ROLE] … [RENDERING]             [ROLE] … [RENDERING]
                                   [KOREAN MARKET CONVENTION]   ← 신규 2,900자
                                   [CATEGORY CONVENTION]        ← 업종 판정 시에만 700~950자
  [FINAL CHECK]                    [FINAL CHECK]
  [BRIEF]                          [BRIEF]

실제로 달라졌다는 증거 (A/B 실생성)

같은 레퍼런스(라틴 모노그램 법률 당선작), 같은 브리프("세무회계 온결"):

적용 전 적용 후
보기 보기
"세무회계"와 "온결"이 같은 굵기 2줄 스택, 영문 캡션 없음, 정체불명 심볼이 워드마크보다 큼 사각 프레임 안 '온결' 자소(도장형) + "세무회계"(얇게) + "온결"(굵게) 한 줄 + "TAX & ACCOUNTING" 자간 캡션 + 딥그린 1도

코퍼스에서 본 세무 당선 공식이 그대로 재현됐습니다.


3. 퀵스타트 국문 프리셋 (형님이 두 번째로 지적한 것)

왜 안 들어갔나: 퀵스타트만 다른 경로입니다. textarea 내용을 [raw_prompt:]로 그대로
보내기 때문에 그 textarea가 곧 최종 프롬프트이고, build_reference_prompt()를 안 탑니다.
게다가 기본값인 그룹 ON이면 영문 그리드 템플릿이 채워져서 한국 문법이 한 줄도 없었습니다.

어떻게 고쳤나: 퀵스타트 컨트롤에 프리셋 셀렉터를 넣고, 컨벤션을 textarea 안에 실제로
삽입
합니다. 서버가 몰래 붙이는 방식이면 화면에서 안 보이고 편집도 못 하니까요.

프리셋 동작
국문 자동 (기본) 브랜드명·브리프에 한글이 있으면 컨벤션 삽입
국문 강제 항상 삽입
영문 삽입 안 함 (기존 영문 그리드 템플릿 그대로)
프리셋 없음 레거시 동작

삽입·제거·재삽입 멱등성은 브라우저와 동일한 코드를 node로 떼어 돌려 7/7 통과 확인했습니다.


4. fal 단가 — 우리가 잘못 가져오고 있었습니다

형님 말대로 fal 모델 페이지를 직접 조회했습니다.

우리 표(전) 실제
nb2 1K $0.039 $0.080 2배 과소
nb2 2K $0.078 $0.120
gpt2 medium 1K $0.061 $0.061 맞음
gpt2 high 1K $0.219 $0.219 맞음
gpt2 medium 4K $0.976 $0.113 8.6배 과대
gpt2 high 4K $3.504 $0.413 8.5배 과대
nb-lite 1K $0.042 $0.042 맞음

원인 두 가지입니다.

  1. nb2 값이 구형 nanobanana(v1, $0.0398) 단가였습니다. fal 가격 페이지에 그 이름으로
    남아 있는 걸 그대로 옮긴 겁니다. 실제 nano-banana-2 edit은 base $0.08/1K, 배수는
    0.5K×0.75 / 2K×1.5 / 4K×2입니다.
  2. gpt2의 2K·4K를 "면적 비례"로 추정했습니다. 실제 fal 표는 강한 sublinear라 추정이
    최대 8.6배 부풀었습니다. 이제 표 값을 그대로 씁니다.

그래서 "1K면 nano-banana-2 lite" 지시가 맞습니다. 1K 최저가는
nb-lite $0.042 → gpt2 medium $0.061 → nb2 $0.080 순입니다.
제가 어제 "lite가 더 비싸다"고 한 건 틀린 표를 보고 한 말이었습니다. 정정합니다.

가격표 3곳(pipeline/pricing.py, worker/src/lib/pricing.ts, 리뷰 페이지 인라인 표)을
동기화해서 배포했습니다. 리뷰 하단 비용 표시가 이제 실제 청구액과 맞습니다.


5. 비용 — 실제로 새던 곳

유지한 곳: 패키지 전개도와 face_sheet 앵커 1장. 전개도는 제출물이라 승인하신 정책대로고,
앵커 시트는 1장뿐이라 비용 영향이 0인데 다운스트림 i2i 품질에 직결됩니다.


6. 리뷰 헤더 출품 수

contests.participants콘테스트 발견 시점 스냅샷이라 바깥과 안이 달랐던 겁니다.
헤더 상금/D-Day 박스 안에 ▦ N 배지를 넣고, GET /api/contests/:id/live가 라우드 공개
API에서 현재 값을 받아 덮어씁니다. 조회값은 D1에도 되써서 다음 렌더가 최신값으로 시작합니다.
실패하면 스냅샷을 그대로 둡니다(헤더 안 깨짐).

실측: 210214(모집 중) 2개·디자이너 1명 / 209518 73개·69명 / 208178 49개·43명.
마우스 올리면 "현재 출품 N개 · 디자이너 M명" 툴팁이 뜹니다.


확인·결정이 필요한 것

① nb2를 nb-lite로 내릴지 — 형님 결정 필요

지금 nb2가 기본값인 자리는 워커 falGenImage(블로그·소셜·캐러셀)와 패키지 design_set입니다.
lite로 내리면 장당 $0.080 → $0.042, 절반입니다.
다만 lite는 경량 모델이라 블로그 히어로 이미지 품질이 떨어질 수 있습니다.
추천: 시안(gpt2 medium)은 그대로 두고 블로그·소셜 쪽만 lite로. 말씀 주시면 바로 하겠습니다.

② 제출물 해상도 — 사실관계 정정

"제출물 2K 유지"를 고르셨는데, 실제 운영 경로(tasks/loud_presentation.py)는 이미
1K/medium
을 쓰고 있었습니다. 2K였던 건 수동 CLI 경로뿐이라 그쪽을 1K로 맞췄습니다.
진짜 2K로 올리시려면 pipeline/pricing.py 한 줄입니다.

③ 프롬프트 길이 — 관찰 필요

5,100자 → 8,000자로 길어졌습니다. A/B에서는 오히려 좋아졌지만 표본 1장입니다.
다음 실제 콘테스트 몇 건 돌려보고 레퍼런스 지문 보존이 약해지지 않았는지 봐 주세요.
약해졌다 싶으면 공통 블록을 6항목에서 3항목(①②④)으로 줄이는 게 첫 손볼 자리입니다.


커밋 / 파일

d45d49f  feat(review): 퀵스타트 국문 프리셋 — 당선 컨벤션이 실제 프롬프트에 들어가게
5a51125  fix(pricing): fal 실단가로 가격표 정정 + 리뷰 헤더에 실시간 출품 수
765aedf  chore(cost): fal 결제 경로의 비제출물 2K 기본값을 1K로
693db27  feat(logo): 라우드 당선 컨벤션 프롬프트 반영 + GPT 품질 medium 기본화

브랜치 feature/winning-conventions. 워커는 3회 배포 완료(최신 c11d223a).

검증 상태

항목 방법 결과
컨벤션 2층 주입·중복 없음 실행 확인 통과
업종 판정 정확도 5케이스(함정 포함) 5/5
A/B 생성 결과 실제 생성 2장 육안 확인
프리셋 삽입·제거 멱등 node 실행 7/7
리뷰 페이지 인라인 JS 문법 node --check 오류 0
워커 타입체크 tsc 기존 14건 유지, 신규 0
라이브 출품 수 콘테스트 3건 조회 실제값 일치
fal 단가 모델 페이지 직접 조회 정정 완료

검증 못 한 것: 새 프롬프트로 실제 콘테스트를 끝까지 돌려 당선 여부를 본 것은 아닙니다.
A/B 1쌍이 전부입니다.


참고 — 반복 실행(/loop)은 걸지 않았습니다

지금 반복해서 돌 만한 대기 작업이 없어서, 자는 동안 빈 사이클만 도는 게 됩니다.
돌릴 대상을 지정해 주시면 그때 걸겠습니다.