diff --git a/CLAUDE.md b/CLAUDE.md index ae06300..0f9290b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -467,6 +467,7 @@ docker compose up -d - `ANTHROPIC_MODEL_HAIKU` / `ANTHROPIC_MODEL_SONNET`: 모델명 오버라이드 - `INSTA_DATA_PATH`: SQLite + 카드 PNG 저장 경로 (기본 `/app/data`) - `CARD_TEMPLATE_DIR`: HTML 템플릿 디렉토리 (기본 `/app/app/templates`) +- `INSTA_DEFAULT_THEME`: 카드 렌더에 사용할 theme 디렉토리명 (기본 `default`). `templates//card.html.j2`가 없으면 자동으로 default 폴백 - `NEWS_PER_CATEGORY` / `KEYWORDS_PER_CATEGORY`: 수집·추출 limit 튜닝 **카테고리 시드 키워드** @@ -482,6 +483,17 @@ docker compose up -d - 09:30 매일 — `_run_insta_schedule` (insta_pipeline) → 뉴스 수집 → 키워드 추출 → 텔레그램 후보 푸시 - `agent_config.custom_config.auto_select=True`이면 카테고리당 1위 키워드 자동 슬레이트 생성·발송 +**디자인 import (사용자 디자인 PNG → Claude Vision → Jinja HTML 자동 생성)** +- `insta-lab/app/templates//pages/*.png` (10장, 1080×1350, placeholder 텍스트 박혀있는 형태) → Claude Sonnet Vision → `templates//card.html.j2` 자동 생성 +- CLI: `docker exec insta-lab python -m app.design_importer ` +- 파일명 자동 매핑: `cover`/`start`/`intro` → page 1, `cta`/`outro`/`finish`/`end` → page 10, 나머지 알파벳 순 → page 2~9 +- 매핑 override: `pages/_order.json`에 `{filename: page_no}` 명시 (10장 + page 1~10 완전 매핑일 때만 적용) +- Vision prompt에 placeholder 마스킹 요구 포함 (2-layer: 마스킹 박스 + 동적 텍스트 layer) +- 기존 HTML 자동 백업 (`card.html.j2.bak.YYYYMMDD-HHMMSS`) +- Jinja 문법 깨진 응답은 `card.html.j2.error.txt`로 보존 + ValueError +- 활성화: NAS `.env`에 `INSTA_DEFAULT_THEME=` 추가 + `docker compose restart insta-lab` +- 토큰 비용: 1회당 ~15K tokens (~$0.05 Sonnet 기준) + **insta-lab API 목록** | 메서드 | 경로 | 설명 |