← 목록
기타 2026-07-22 6KB 읽기 7분

crowny-media local-render/local-mlx 어댑터 + 템플릿 3종 구축

개요

crowny-media(SPEC.md SSOT) §4.1·§4.2 담당분 완성: 어댑터/local-render.sh(오늘 즉시 동작하는 유일한 어댑터), 어댑터/local-mlx.sh(mflux opt-in, 오늘은 미설치라 exit5), 템플릿/*.html 3종. 동시에 다른 세션이 gemini-image/imagen/openai-image/ideogram/seedance/veo 어댑터를 병행 구축 중이었음 — 크라우니미디어 CLI/설정.psv/미디어판정.한선은 이미 존재하는 상태에서 시작.

무엇을 했는지

1. 템플릿 3종 + 한선씨 동반본

  • 템플릿/상품플레이스홀더.html — SPEC 지정 그라디언트(repeating-linear-gradient(135deg,#ECE4D8 0 14px,#F3ECE1 14px 28px))
+ 중앙 카테고리명(letter-spacing .28em, #CBBFAF) + 좌하단 코드(#B3A697) + 배경 #FAF8F4. 우상단에 "AI PLACEHOLDER" 배지 추가(SPEC §7 표시 취지).
  • 템플릿/룩북.html, 템플릿/배너.html — 같은 팔레트 확장(배너는 다크초콜릿×골드 대비).
  • 각 템플릿에 동반 .한선 파일(치환 로직 + reallux 카테고리추정 규칙 자체검증). 3파일 모두 STRICT 경고 0, 자체검증 14/14·11/11·11/11 PASS.

2. 어댑터/local-render.sh

계약(SPEC §4) 그대로: <종류> <프롬프트파일> <비율> <폭> <참조이미지|""> <출력경로>.
  • 종류=영상이면 exit5(정지 이미지 전용, 이 어댑터는 영상 불가).
  • 비율→높이는 한선씨/미디어판정.toau비율픽셀()을 그대로 호출(SSOT 재구현 금지), toau 없으면 동일 공식 bash 폴백.
  • 프롬프트 키워드로 템플릿 자동선택("배너"/"룩북" 포함 시 해당 템플릿, 그 외 상품플레이스홀더 기본).
  • 코드=출력경로 슬러그 디렉터리명, 카테고리=프롬프트 키워드 추정(원피스>코트류>니트류>셔츠류>팬츠류>잡화류>ITEM 우선순위).
  • Chrome headless(--headless=new --window-size=W,H --screenshot)로 PNG 캡처 → sips로 목표 포맷(jpg/png) 변환 → exiftool로 Description/IPTC Caption-Abstract에 "CROWNY-MEDIA PLACEHOLDER" 표기(exiftool 없으면 sips description 최소표기로 폴백).
  • 동반 local-render.한선: 템플릿선택()/확장자포맷()/카테고리추정() 로직 자체검증 13/13 PASS.

3. 어댑터/local-mlx.sh

  • SPEC §4.2 절대원칙 준수: mflux 미설치 감지 시 자동 설치 시도 없이 즉시 exit5. 설치는 크라우니미디어 설치 mlx로만.
  • 설치돼 있는 경우의 생성 경로(mflux-generate CLI 우선, 없으면 python mflux API)는 작성했으나 이 환경엔 mflux가 없어 실행/검증하지 못했다 — 주석·본 문서에 명시(성공한 척 안 함).
  • MLX 해상도 16배수 보정 함수(round_down_16/한선씨 배수내림16) 포함. 한선씨 쪽에서 VM 함정 발견: 나눗셈이 자연반올림(반내림 타이브레이크, 실측 1000/16=62,607/16=38,24/16=1)이라 몫*16이 단순 floor가 아님(607→608로 반올림) → 후보>v면 몫-1로 재보정하는 진짜 floor-to-16 알고리즘 작성, 자체검증 7/7 PASS. 학습DB에 16배수내림_자연반올림보정_floor구현로 기록.

검증 결과 (전부 실측, 추측 없음)

  1. STRICT 컴파일: 템플릿 3종 .한선 + 어댑터 2종 .한선 전부 CROWNY_STRICT=1 경고 0, 자체검증 전항목 PASS(14/14, 11/11, 11/11, 13/13, 7/7).
  2. local-render 실제 생성: reallux 6→16개 슬러그(OUTER×3/KNIT×3/TOP×3/DRESS×3/PANTS×2/ACC×2) 전부 산출/reallux/<slug>/1.jpg 생성 성공. sips -g pixelWidth -g pixelHeight 실측 전부 1600×1200(요구 ≥300×300 대비 여유), 파일크기 272~275KB. exiftool로 Description/IPTC Caption-Abstract 부착 확인.
  3. PNG·비율·배너 템플릿 분기: 16:9/1200폭 프롬프트에 "배너" 포함 → 배너.html 선택 확인, 높이 675(=1200*9/16, 비율픽셀 SSOT와 일치), PNG 포맷 변환 확인.
  4. local-mlx exit5: mflux 미설치 상태에서 정확히 exit5 반환, 출력파일 생성 안 됨, 자동설치 시도 없음 실측.
  5. 에러경로: 종류=영상→exit5, 잘못된 비율 문자열→exit4, 빈 프롬프트파일→exit4 전부 실측 확인.
  6. 크라우니미디어 CLI 통합: 상태(오늘 실사용가능=local-render만), 비용 reallux --실행안함(16건 전부 티/0비용), 생성 reallux all --실행(1회차 10건 생성+6건 skip, 2회차 16건 전부 SKIP — 멱등 확인).
  7. 폴백(옴) 실측: --어댑터 openai-image 강제 지정(키 자체 없음) → openai-image(exit5)→ideogram(exit5)→local-mlx(exit5)→local-render(exit0 성공) 전체 cascade 라이브 확인, 판정=옴.
  8. 예산초과(음) 실측: --어댑터 gemini-image --예산 0 → 판정=음, "승인대기-중단", 파일 생성 안 됨 확인.

관련 파일 경로

  • /Users/ef/crowny-media/어댑터/local-render.sh, local-render.한선
  • /Users/ef/crowny-media/어댑터/local-mlx.sh, local-mlx.한선
  • /Users/ef/crowny-media/템플릿/상품플레이스홀더.html(.한선), 룩북.html(.한선), 배너.html(.한선)
  • 산출물: /Users/ef/crowny-media/산출/reallux/RL-101~602/1.jpg (16개)
  • 로그: /Users/ef/crowny-media/로그/생성로그.psv

잔여 이슈

  • 크라우니미디어(CLI, 다른 세션 담당)에서 관찰된 버그: 재시도가능실패(exit3, 예: gemini-image 429)를 같은 어댑터로 maxattempts(4회)까지 재시도만 하고, 시도 소진 후에도 폴백대상()으로 넘어가지 않고 그냥 "생성실패" 종료함 — exit5(미설정)에서만 폴백함. SPEC 3.1 옴 판정 취지("우선순위표 따라 폴백")와 어긋날 수 있어 CLI 담당 세션에 공유 필요.
  • local-mlx.sh의 실제 생성 경로(mflux 설치돼 있을 때)는 이 머신에 mflux가 없어 미검증 상태로 남음 — opt-in 설치 후 별도 검증 필요.
  • 어댑터 8종 중 gemini-image/imagen/openai-image/ideogram/seedance/veo는 다른 세션 산출물이라 본 문서는 검증범위에서 제외(해당 세션 문서 별도 존재 가능).
크라우니코드: lookup HIT 4 / MISS 2 / learn 6 (html템플릿_자리표시자치환_카테고리추정, html템플릿_룩북_prompt치환, html템플릿_배너_prompt치환, local_render_템플릿선택_확장자포맷, 16배수내림_자연반올림보정_floor구현 — 총 5건 신규학습 + 1건은 룩북/배너 작성 시 상품플레이스홀더 패턴 재사용 HIT).