AYS 이미지 생성·부착 도구
개요
ays.crowny.org 운영자(유대표)가 랜딩에 쓸 이미지를 직접 생성해 붙일 수 있는 도구. 코어는 한선씨 SVG 생성기, 옵션으로 Gemini(gemini-3.1-flash-image) 실사 이미지 시도 후 폴백.
무엇을 했는지
- 한선씨 SVG 생성기
이미지생성기.한선(+.toau) — 사업부 4종(heat/sheet/blind/interior) 모티프(창+햇살 / 필름롤·패턴 / 블라인드 슬랫 / 벽면 몰딩) × 색조 3종(gold/warm/cool) 조합으로 800×500 SVG를 생성. 제목/부제 텍스트 오버레이 포함, XML 이스케이프 처리. 4상 자체판정(자체판정() — 크기<200=타, svg//svg 태그 없음=타, >60000B=옴, 정상=티) 출력. 입력은 ASCII 환경변수(GENUSE/GENDIV/GENTITLE/GENSUB/GENTONE/GENOUT — 한글 env명은 셸 export 불가 함정 회피).
- server.js 라우트 3종 (
/Users/ef/crowny-ays/server.js):
-
POST /api/admin/imagegen — 프롬프트 있으면 Gemini(20s 타임아웃, https 모듈) 시도 → 429/실패 시
execFile(crownyc, ['run', 이미지생성기.toau])로 SVG 폴백. 응답에
backend: "gemini"|"svg" 명시.
-
POST /api/admin/imagegen/attach — target=
hero|
division:<key>|
case:<id>로 content.json 반영(hero는
hero.hero_image, division/case는
이미지 필드). 이전값 응답에 포함(복원용).
-
GET /api/admin/imagegen/list —
public/images/generated/ 목록.
- 모두 기존
isAdmin()(x-admin-pass 헤더, env AYS_ADMIN_PASS) 인증 재사용.
- 관리 UI
public/imagegen.html — 패스코드 로그인 → 폼(용도/사업부/제목/부문구/색조/프롬프트) → 생성 → 미리보기(backend 태그 표시) → 대상 선택 후 "랜딩에 붙이기". admin.html에 진입 링크 추가. 크라우니디자인 중앙 CSS 적용(디자인적용대상.psv 등록 + crowny-design.sh apply ays-imagegen).
- 프론트 반영:
public/app.js renderHero가 h.hero_image 있으면 .hero-visual img src 교체. renderDivisions가 d['이미지'] 있으면 카드 상단에 .div-image 배경이미지 블록 추가(public/style.css에 스타일 추가).
검증 실측 (2026-07-30)
lsof PID kill → launchctl kickstart -k gui/501/com.crowny.ays 재기동
- 인증: 미인증
/api/admin/imagegen/list → 401, 정상 패스(plist EnvironmentVariables 값) → 200
- 생성(프롬프트 없음, 강제 SVG):
{"success":true,"backend":"svg","path":"/images/generated/20260730083753_division_heat.svg", ...}
- 생성(프롬프트 있음, Gemini 경로): 0.4초만에
backend:"svg" 응답 — 무료쿼터 0으로 즉시 429→폴백 확인(2026-07-12 실측과 일치)
- attach: division:heat에 생성 이미지 반영 →
GET /api/content 응답에 반영 경로 노출 확인 → 백업 파일로 원상복구 → 서버 재기동 후 undefined(복원 확인)
- 회귀:
/ 200, /landing 200, /work 200, /api/stats 200
- 헤드리스 렌더:
크라우니AI검증.sh text로 imagegen.html 로그인 화면 텍스트 확인
관련 파일
/Users/ef/crowny-ays/이미지생성기.한선, 이미지생성기.toau
/Users/ef/crowny-ays/server.js (라우트 3종 + DIV_LABEL_MAP + Gemini/SVG 헬퍼)
/Users/ef/crowny-ays/public/imagegen.html
/Users/ef/crowny-ays/public/admin.html (진입 링크)
/Users/ef/crowny-ays/public/app.js, public/style.css (hero_image/division 이미지 반영)
/Users/ef/crowny-fonts/디자인적용대상.psv (ays-imagegen 등록)
잔여 이슈
- RPN(
이미지생성기.rpn.한선) 정본 변환 미완 — 현재 고수준(hanseonc_high) 경로만 구현. 헌법상 상승 경로 완성을 위해 추후 clike_to_rpn.py로 변환 필요.
- Gemini 경로는 여전히 free-tier 쿼터 0(2026-07-12 기록과 동일) — 결제 활성화 후 실제 이미지 생성 실측 필요(현재는 폴백 경로만 실동작 확인).
- case(
case:<id>) 대상 attach는 라우트 구현됐으나 실사용 시나리오(구체적 시공사례 이미지 교체) 검증은 미실시(division/hero만 실측).
- 생성 이미지는
public/images/generated/에 계속 누적됨 — 운영 장기화 시 정리 정책 필요.