Skip to content

NewTurn2017/codex-sangpye-skill

Repository files navigation

codex-sangpye-skill

codex-sangpye-skill 소개 — 상품 사진 넣고, sangpye 한 번이면 상세페이지가 완성됩니다

↑ 스킬 공식 홍보 이미지 (1080×12720). 클릭 시 원본.


한국 이커머스 상세페이지(상폐)를 ChatGPT 구독만으로 자동 생성하는 Codex 스킬. Korean e-commerce product detail pages generated from your ChatGPT Plus/Pro subscription — no OpenAI API key required.

English version: README.en.md

상품 사진 1~14장 + 한국어 브리프 → 13섹션 이미지 + 1080×12720 합성본 1장. 당신의 codex login OAuth 세션을 그대로 사용합니다. 별도 API 키 발급/과금 불필요.


🚀 Codex OAuth로 시작하기 (가장 먼저 읽을 것)

이 스킬의 핵심 아이디어: OpenAI API 키 없이, ChatGPT 구독(Plus/Pro)만으로 돌아간다.

이전에는 codex responses 서브커맨드를 통해 OAuth 세션을 재사용했지만, Codex CLI 0.130에서 해당 서브커맨드가 제거됐습니다. v0.3.0부터는 codex login이 저장한 토큰(~/.codex/auth.json)을 직접 읽어 ChatGPT 백엔드(chatgpt.com/backend-api/codex/responses)로 바로 HTTPS POST 합니다. 결과적으로:

  • 키 관리 안 함 · 별도 billing 없음 · ChatGPT 쿼터 안에서 돌아감
  • codex 바이너리 버전 의존성 없음 (auth.json만 살아있으면 됨)
  • gpt-5.5 멀티모달 분석 + image_generation 툴 5회 병렬 호출 → 13섹션 자동 생성 (rollout 중인 ChatGPT 티어라면 SANGPYE_MODEL=gpt-5.4로 폴백)
  • 보통 5~10분 소요 (한가할 땐 ~5분, ChatGPT 서버가 혼잡하면 최대 15분). 재시도 로직이 server overloaded/rate_limit를 자동으로 흡수합니다.

필수 사전 준비 (단 1가지)

# ChatGPT OAuth로 한 번만 로그인하면 끝 (API 키 아님!)
codex login       # 프롬프트에서 "Sign in with ChatGPT" 선택
# → ~/.codex/auth.json에 access_token + account_id 저장됨 (유효기간 ~10일)

v0.3.0+는 codex 바이너리를 호출하지 않습니다. 토큰이 만료되면 codex login을 다시 실행해 갱신하세요. OPENAI_API_KEY/CODEX_API_KEY 환경 변수는 이 스킬이 무시합니다 — 오직 auth.json의 OAuth 토큰만 사용합니다.

한 방 설치

macOS / Linux / WSL

curl -fsSL https://raw.githubusercontent.com/NewTurn2017/codex-sangpye-skill/main/install.sh | bash

Windows (PowerShell)

iwr -useb https://raw.githubusercontent.com/NewTurn2017/codex-sangpye-skill/main/install.ps1 | iex

스크립트가 하는 일:

  1. uv~/.codex/auth.json의 ChatGPT OAuth 토큰 존재 확인
  2. uv tool installsangpye CLI 글로벌 설치
  3. SKILL.md~/.claude/skills/codex-sangpye/에 드롭 (Claude Code 스킬 자동 인식)
  4. smoke check

스크립트를 먼저 읽고 싶으면 install.sh / install.ps1를 확인하세요. 재실행 안전 (idempotent).

설치가 끝났으면 — 첫 실행

sangpye \
  --image ./your_product.jpg \
  --prompt "무선 이어폰, ANC 탑재, 30시간 배터리, IPX5 방수" \
  --category electronics \
  --output ./out

5분 뒤:

{"job_id":"a1b2c3d4","combined":"/abs/.../combined.png","sections":["/abs/.../01_hero.png", ...],"elapsed_sec":312.5}

🎯 출력물 구성 (Output Spec)

13 섹션 (감정 여정 기반)

# 섹션 높이 역할
1 Hero 1600px 긴급성 헤더 + 메인 이미지
2 Pain 800px 공감 — "이런 고민 있으신가요?"
3 Problem 800px 문제 정의
4 Story 1200px Before→After 스토리
5 Solution 800px 솔루션 소개
6 How 900px 작동 방식 시각화
7 Proof 1420px 사회적 증거 (리뷰/수치)
8 Authority 800px 권위/전문성
9 Benefits 1200px 핵심 혜택
10 Risk 800px 리스크 제거 (보증/환불)
11 Compare 800px 최종 Before/After
12 Filter 700px 타겟 필터링
13 CTA 900px 최종 구매 유도

합계: 1080 × 12720 픽셀.

실제 출력 디렉토리 구조

./out/a1b2c3d4/                 # {job_id}
├── analysis.json               # Product DNA + 5 bundle specs + 13 Korean copies
├── bundles/
│   ├── B1_HERO.png             # 1088×1600 원본
│   ├── B2_OPENING.png          # 1088×2800
│   ├── B3_SOLUTION.png         # 1088×3120
│   ├── B4_TRUST.png            # 1088×2800
│   └── B5_ACTION.png           # 1088×2400
├── sections/                   # 1080×가변 (13장)
│   ├── 01_hero.png            (1600)
│   ├── 02_pain.png            (800)
│   ├── ...
│   └── 13_cta.png             (900)
└── combined.png                # 1080×12720 세로 합성본

🤖 Claude Code / Codex / Hermes에서 스킬로 호출

설치 스크립트가 SKILL.md~/.claude/skills/codex-sangpye/에 드롭해줍니다. 새 Claude Code 세션에서 자연어로 요청하면 자동 디스패치됩니다.

사용 예 (자연어)

> 이 사진으로 상세페이지 만들어줘: ./mug.jpg
> 프롬프트는 "핸드메이드 머그컵, 전자레인지 가능, 수제 도자기"로 부탁.

Claude가:

  1. codex-sangpye 스킬 인식
  2. sangpye --image ./mug.jpg --prompt "..." --output ./out 호출
  3. stderr 진행 로그 표시 (~5분)
  4. 결과 JSON 파싱 → 사용자에게 combined.png 경로 안내

수동으로 SKILL.md 드롭 (설치 스크립트 안 쓸 때)

mkdir -p ~/.claude/skills/codex-sangpye
curl -fsSL https://raw.githubusercontent.com/NewTurn2017/codex-sangpye-skill/main/SKILL.md \
  -o ~/.claude/skills/codex-sangpye/SKILL.md

Hermes 사용 시:

mkdir -p ~/.hermes/skills/creative/codex-sangpye
cp ~/.claude/skills/codex-sangpye/SKILL.md ~/.hermes/skills/creative/codex-sangpye/

🛠️ CLI 사용법 전체

sangpye \
  --image ./photos/earbuds_01.jpg \
  --image ./photos/earbuds_02.jpg \
  --image ./photos/earbuds_lifestyle.jpg \
  --prompt "프리미엄 무선 이어폰. 30시간 재생, ANC, IPX5 방수, 인체공학 디자인. 20~40대 직장인 대상." \
  --category electronics \
  --quality high \
  --output ./out

플래그 전체

플래그 필수 기본값 설명
--image PATH 반복 가능 (1~14장). 상품 이미지 경로.
--prompt TEXT 한국어 상품 브리프.
--category general electronics | fashion | food | beauty | home | general
--output DIR ./sangpye-output 출력 디렉토리 (하위에 {job_id}/ 생성).
--quality high standard | high. 저티어 구독에서 rate limit 만나면 standard로.
--job-id ID 랜덤 8자 hex 수동 지정 시 디렉토리명이 됨.
--layout flat flat = 섹션 풀블리드(기본, 제품 상폐) | cards = 통일 다크 배경 위 둥근 카드 + 여백(강의/콘텐츠용).
--card-side / --card-gap / --card-pad / --card-radius / --card-bg 30 / 40 / 40 / 24 / #0B1020 --layout cards일 때만 적용되는 좌우·세로 간격·상하 여백·모서리·배경 튜닝.

출력

  • stdout: 성공 시 한 줄 JSON — job_id, output_dir, combined, sections[13], plan_path, elapsed_sec
  • stderr: 사람용 진행 로그 ([analyzing] Codex(gpt-5.5) 분석 중..., [generating_images] 이미지 생성 중: 5개 묶음 병렬 생성, ...)

종료 코드

코드 의미
0 성공
1 codex 인증 오류 (로그아웃, 만료)
2 입력 오류 (잘못된 경로, 이미지 수 초과)
3 API/생성 오류 (rate limit, 모델 없음 등) — combined.png 생성 안 됨
4 파일시스템 오류 (권한, 디스크 부족)
5 부분 성공 — 1개 이상 묶음은 실패했지만 combined.png는 생성됨 (실패 섹션은 dark placeholder). failed_bundles JSON 필드로 확인.

🔁 자동 재개 (Auto-resume)

실행 중간에 서버 과부하로 일부 번들이 실패했다면, 같은 --output --job-id 조합으로 재실행하세요:

sangpye \
  --image ./your_product.jpg \
  --prompt "..." \
  --output ./out \
  --job-id <이전과 동일>         # 실패 시 stderr에 표시됨
  • output_dir/{job_id}/analysis.json이 있으면 gpt-5.5 분석 단계(Step 1) 자동 스킵 — 쿼터 절약 + ~30초 단축
  • bundles/{bundle_id}.png가 이미 있는 번들은 재생성 안 함 — 이미 성공한 4개 번들이 있으면 실패한 1개만 재시도 (23분)
  • sections/ + combined.png는 항상 다시 만듦 (비용 무시 가능한 수준)

총 UX: "다시 돌리기 = 이전 진행 그대로, 실패한 것만"


🧠 내부 작동 원리

Input: 1~14장 이미지 + 한국어 프롬프트
   ↓
[1] gpt-5.5 분석 (멀티모달)
   → ProductDNA + 5 Bundle specs + 13 섹션 한국어 카피
   ↓
[2] image_generation 툴 × 5회 (동시 3개 세마포어)
   → 5개 거대 묶음 이미지 (각 1088×N)
   ↓
[3] 각 묶음을 Y 좌표로 슬라이스
   → 13개 섹션 이미지 (각 1080×가변)
   ↓
[4] Pillow 세로 합성
   → combined.png (1080×12720)
  • Celery/Redis/Docker 전혀 없음. 로컬 sangpye 프로세스 하나가 동기로 돌고 끝.
  • 모든 모델 호출은 codex_client.py~/.codex/auth.json의 OAuth 토큰으로 chatgpt.com/backend-api/codex/responses에 직접 SSE POST. codex 바이너리는 호출하지 않습니다 (Codex CLI 0.130에서 codex responses 서브커맨드가 제거됨).

🏗️ 프로젝트 유래

이 레포는 make-detailed-product-page 라는 FastAPI + Celery + Redis 기반 프로덕션 백엔드(현재 api.codewithgenie.com/productpage/에서 서비스 중)에서 핵심 파이프라인만 추출한 포트입니다.

원본 여기 변경
app/services/openai_client.py sangpye_skill/codex_client.py 재작성: ~/.codex/auth.json OAuth 토큰으로 ChatGPT 백엔드(chatgpt.com/backend-api/codex/responses)에 직접 SSE POST (v0.3.0+, codex 0.130 호환)
app/services/pipeline.py sangpye_skill/pipeline.py 동기 버전. Celery/Redis/cancel hook 제거
app/services/analysis.py sangpye_skill/analysis.py 같은 프롬프트/스키마. codex_client.call_responses 사용
app/services/image_generator_v3.py sangpye_skill/image_generator.py 같은 재시도/동시성. codex_client.generate_image_with_reference 사용
app/services/{bundle_slicer, composer, product_dna, section_language, category_briefs}.py 동일 이름 그대로 복사
FastAPI / Celery / Redis / Docker 제거

🐛 문제 해결

증상 해결
error: ~/.codex/auth.json not found codex login → "Sign in with ChatGPT" 한 번 실행
error: ~/.codex/auth.json has no ChatGPT OAuth tokens API 키 모드로 로그인된 상태 → codex logout && codex login, ChatGPT 선택
error: ChatGPT OAuth rejected the request (HTTP 401) access_token 만료(보통 10일) → codex login으로 갱신
responses HTTP 500 / 503 ChatGPT 백엔드 일시 장애 — 잠시 후 재시도
responses network error 로컬 네트워크/방화벽 문제로 chatgpt.com 접근 불가
The model 'gpt-5.5' does not exist or you do not have access to it ChatGPT 티어에 5.5 미반영 — SANGPYE_MODEL=gpt-5.4 sangpye ...로 폴백
error (codex): rate_limit ChatGPT 쿼터 throttle — 잠시 대기 or --quality standard
10분+ 소요 재시도 흡수 중 — 그대로 두기. OAuth 혼잡 시 정상 범위
server overloaded가 자주 뜬다 SANGPYE_MAX_CONCURRENCY=1 환경변수로 병렬도 1로 내리기 (기본 2). 총 시간은 늘어나지만 재시도는 줄어듦
생성 도중 중단됐는데 다시 돌리긴 아깝다 output_dir/{job_id}/analysis.json이 이미 저장돼 있으니 같은 --output --job-id로 재실행 (자동 재개)

🔗 관련


📄 License

MIT — 자유롭게 fork/사용. 만든 이: @NewTurn2017.

About

Korean e-commerce 상세페이지(상폐) generator — 13 sections + 1080×12720 combined image via Codex OAuth. No OpenAI API key required.

Resources

License

Stars

42 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors