diff --git a/CLAUDE.md b/CLAUDE.md index 0f9290b..cdbc895 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -484,16 +484,30 @@ docker compose up -d - `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 ` +- `insta-lab/app/templates//pages/*.png` (10장, 4:5 비율 권장 1080×1350, placeholder 텍스트 박혀있는 형태) → Claude Sonnet Vision → `templates//card.html.j2` 자동 생성 - 파일명 자동 매핑: `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` +- 활성화: `.env`에 `INSTA_DEFAULT_THEME=` 추가 + `docker compose restart insta-lab` (테마 디렉토리에 `card.html.j2` 없으면 렌더러가 default로 폴백) - 토큰 비용: 1회당 ~15K tokens (~$0.05 Sonnet 기준) +**⚠️ 실행 위치 — 로컬 권장, NAS docker exec 금지** +- docker-compose의 insta-lab volume은 `/app/data`만 마운트. **`/app/app/templates`는 컨테이너 ephemeral state**. +- NAS에서 `docker exec insta-lab python -m app.design_importer `로 돌리면 `card.html.j2`가 컨테이너 안에만 생성되고 다음 image rebuild(다른 push의 webhook이라도) 때 사라짐 → 렌더러가 default로 폴백. +- **로컬 실행** (host repo working tree에 영속화 → git push → 자동 배포): + ```bash + cd insta-lab + pip install anthropic Pillow jinja2 # 이미 있으면 skip + export ANTHROPIC_API_KEY=sk-ant-... + python -m app.design_importer --templates-dir ./app/templates + git add app/templates//card.html.j2 + git commit -m "feat(insta-lab): 디자인 import" + git push # → Gitea webhook → NAS rebuild → 영구 활성화 + ``` +- 응급 hotfix로 NAS에서 돌렸다면 `docker cp insta-lab:/app/app/templates//card.html.j2 ./` 후 즉시 host repo에 commit + push 필요 + **insta-lab API 목록** | 메서드 | 경로 | 설명 | diff --git a/insta-lab/app/design_importer.py b/insta-lab/app/design_importer.py index 794eddf..c621a54 100644 --- a/insta-lab/app/design_importer.py +++ b/insta-lab/app/design_importer.py @@ -1,6 +1,19 @@ """사용자 디자인 PNG 10장 → Claude Sonnet Vision → Jinja card.html.j2 자동 생성. -CLI (이 phase 이후 추가): python -m app.design_importer +⚠️ 실행 위치 — 로컬 권장: + docker-compose의 insta-lab volume은 /app/data만 마운트. /app/app/templates는 + 컨테이너 ephemeral이라 NAS docker exec로 돌리면 다음 rebuild에 결과물 소실됨. + +로컬: + cd insta-lab + export ANTHROPIC_API_KEY=sk-ant-... + python -m app.design_importer --templates-dir ./app/templates + git add app/templates//card.html.j2 && git commit + push + +응급 hotfix만 NAS: + docker exec insta-lab python -m app.design_importer + docker cp insta-lab:/app/app/templates//card.html.j2 ./ + # → 즉시 host repo에 commit + push (안 그러면 다음 rebuild에 소실) """ import base64