커밋 4개, 워커 3회 배포 완료. 전부 실측 검증했고 검증 못 한 항목은 아래에 그대로 표시했습니다.
| 형님이 지적한 것 | 결과 |
|---|---|
| 당선작 특징이 프롬프트에 반영 안 된 것 아니냐 | 맞았습니다. 한 줄도 없었음 → 규칙 역산해 박음. A/B로 효과 확인 |
| 퀵스타트 프롬프트에는 그게 안 들어가지 않느냐 | 맞았습니다. 별도 경로라 빠짐 → 국문 프리셋 신설 |
| GPT를 하이로 뽑고 있는 것 같다 | 맞았습니다. 자동 파이프라인이 quality="high" 고정 → medium 기본화 |
| fal 가격 우리가 잘못 가져온 것 아니냐 | 맞았습니다. nb2가 구형 v1 단가였음. 최대 8.6배 오차 정정 |
| 리뷰 헤더에 출품 수가 안 보인다 | 발견 시점 스냅샷이라 낡아 있었음 → 라우드 실시간 조회로 교체 |
라우드 종료 콘테스트(state=End, 로고·브랜딩 카테고리)의 1등 당선작을 업종별로 내려받아
4×5 그리드 시트로 만들고 직접 눈으로 봤습니다.
| 그룹 | 기간 | 건수 |
|---|---|---|
| 치과·의원·한의원 등 의료 | 최근 12개월 | 254 |
| 세무·회계 | 최근 18개월 | 33 |
| 법무·법률·노무·특허 | 최근 18개월 | 75 |
그리드 시트 (클릭하면 열립니다)
형님이 말한 "채움" 유형이 법률 그리드에 그대로 있습니다 — #3 채움(208178), #7 동행(204541),
[정사각 심볼] + "세무회계"(얇게) + 브랜드명(굵게) 한 줄 +리뷰에서 로고를 뽑는 기본 프롬프트는 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]
같은 레퍼런스(라틴 모노그램 법률 당선작), 같은 브리프("세무회계 온결"):
| 적용 전 | 적용 후 |
|---|---|
| 보기 | 보기 |
| "세무회계"와 "온결"이 같은 굵기 2줄 스택, 영문 캡션 없음, 정체불명 심볼이 워드마크보다 큼 | 사각 프레임 안 '온결' 자소(도장형) + "세무회계"(얇게) + "온결"(굵게) 한 줄 + "TAX & ACCOUNTING" 자간 캡션 + 딥그린 1도 |
코퍼스에서 본 세무 당선 공식이 그대로 재현됐습니다.
왜 안 들어갔나: 퀵스타트만 다른 경로입니다. textarea 내용을 [raw_prompt:]로 그대로
보내기 때문에 그 textarea가 곧 최종 프롬프트이고, build_reference_prompt()를 안 탑니다.
게다가 기본값인 그룹 ON이면 영문 그리드 템플릿이 채워져서 한국 문법이 한 줄도 없었습니다.
어떻게 고쳤나: 퀵스타트 컨트롤에 프리셋 셀렉터를 넣고, 컨벤션을 textarea 안에 실제로
삽입합니다. 서버가 몰래 붙이는 방식이면 화면에서 안 보이고 편집도 못 하니까요.
| 프리셋 | 동작 |
|---|---|
| 국문 자동 (기본) | 브랜드명·브리프에 한글이 있으면 컨벤션 삽입 |
| 국문 강제 | 항상 삽입 |
| 영문 | 삽입 안 함 (기존 영문 그리드 템플릿 그대로) |
| 프리셋 없음 | 레거시 동작 |
===== 한국 시장 당선 컨벤션 ===== ~ ===== 컨벤션 끝 =====로GET /api/contests/:id/convention — 워커가 LLM으로 판정하고 캐시합니다.삽입·제거·재삽입 멱등성은 브라우저와 동일한 코드를 node로 떼어 돌려 7/7 통과 확인했습니다.
형님 말대로 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 | 맞음 |
원인 두 가지입니다.
nanobanana(v1, $0.0398) 단가였습니다. fal 가격 페이지에 그 이름으로그래서 "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, 리뷰 페이지 인라인 표)을
동기화해서 배포했습니다. 리뷰 하단 비용 표시가 이제 실제 청구액과 맞습니다.
LogoGenerator가 quality="high" 고정이었습니다. gpt2 1K 기준 장당 $0.219 →/api/tools/i2i, falGenImage, 캐러셀)도 quality="high" 고정이라[quality:X] 태그로 워커 → loud_design →generate_banana_image, run_pipeline 슬롯, find_promo, og_people,유지한 곳: 패키지 전개도와 face_sheet 앵커 1장. 전개도는 제출물이라 승인하신 정책대로고,
앵커 시트는 1장뿐이라 비용 영향이 0인데 다운스트림 i2i 품질에 직결됩니다.
contests.participants가 콘테스트 발견 시점 스냅샷이라 바깥과 안이 달랐던 겁니다.
헤더 상금/D-Day 박스 안에 ▦ N 배지를 넣고, GET /api/contests/:id/live가 라우드 공개
API에서 현재 값을 받아 덮어씁니다. 조회값은 D1에도 되써서 다음 렌더가 최신값으로 시작합니다.
실패하면 스냅샷을 그대로 둡니다(헤더 안 깨짐).
실측: 210214(모집 중) 2개·디자이너 1명 / 209518 73개·69명 / 208178 49개·43명.
마우스 올리면 "현재 출품 N개 · 디자이너 M명" 툴팁이 뜹니다.
지금 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).
scripts/winner_corpus.py (분기마다 재실행해 눈으로 보고 갱신)pipeline/winning_conventions.pypython scripts/gen_conventions_ts.py (--check로 stale 감지)claudedocs/policies/WINNING_CONVENTIONS_POLICY.md (근거 콘테스트 ID 포함)| 항목 | 방법 | 결과 |
|---|---|---|
| 컨벤션 2층 주입·중복 없음 | 실행 확인 | 통과 |
| 업종 판정 정확도 | 5케이스(함정 포함) | 5/5 |
| A/B 생성 결과 | 실제 생성 2장 | 육안 확인 |
| 프리셋 삽입·제거 멱등 | node 실행 | 7/7 |
| 리뷰 페이지 인라인 JS 문법 | node --check | 오류 0 |
| 워커 타입체크 | tsc | 기존 14건 유지, 신규 0 |
| 라이브 출품 수 | 콘테스트 3건 조회 | 실제값 일치 |
| fal 단가 | 모델 페이지 직접 조회 | 정정 완료 |
검증 못 한 것: 새 프롬프트로 실제 콘테스트를 끝까지 돌려 당선 여부를 본 것은 아닙니다.
A/B 1쌍이 전부입니다.
지금 반복해서 돌 만한 대기 작업이 없어서, 자는 동안 빈 사이클만 도는 게 됩니다.
돌릴 대상을 지정해 주시면 그때 걸겠습니다.