Install any skill in seconds. Free to start, no credit card required.
Get Started Free →한국 이커머스 상세페이지 13섹션 이미지를 자동 생성하고 1080×12720 단일 PNG로 합성하는 스킬입니다. "상세페이지 이미지 만들어줘", "13섹션 합성 이미지", "상폐 이미지", "1080 12720 합성"처럼 말하면 됩니다. commerce-detail-page-copy의 13섹션 카피와 사용자 상품 사진을 받아 섹션별 이미지 프롬프트를 작성하고, moai-media:media-higgsfield-image(Nano Banana Pro 등 11개 모델)로 13장의 이미지를 생성한 뒤 Pillow로 1080×12720 세로 합성 PNG를 직접 조립합니다(합성 로직은 이 문서에 인라인 코드로 포함). 외부 패키지는 Pillow 하나만 필요합니다.
.claude/skills/modu-ai-commerce-detail-page-image/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 149% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 68% | 0% |
13섹션 감정여정 상세페이지 이미지를 생성하고 세로 합성 PNG로 만드는 스킬입니다. moai-media:media-higgsfield-image를 백엔드로 사용하여 카테고리별 비주얼 톤이 일관된 13장의 섹션 이미지를 만들고, Pillow 단일 의존성으로 1080×12720 단일 합성 이미지를 산출합니다.
상세페이지 이미지, 상폐 이미지, 13섹션 이미지, 1080 12720, 상세페이지 합성, 상품 상세 이미지, combined.png, 상폐 합성본, 이커머스 이미지 합성
pip install Pillow 또는 uv pip install Pillow다음을 확보합니다:
commerce-detail-page-copy 스킬 출력)commerce-product-photo-brief 스킬 출력)./commerce-output/{job_id}/)각 섹션의 카피와 카테고리 비주얼 브리프를 합쳐 media-higgsfield-image 프롬프트를 작성합니다. references/image-prompts.md 참조 (섹션별 비주얼 언어, 합성 가이드).
각 섹션은 고유한 비주얼 언어를 가집니다:
생성 전략:
references/sections-spec.md 표 참조 (Hero 1600-Filter 700)생성 결과를 output_dir/{job_id}/sections/01_hero.png 부터 13_cta.png 까지 저장.
생성 실패 시: 해당 섹션은 다크 플레이스홀더(40,40,40)로 채워 합성을 진행합니다.
별도 스크립트 없이, 아래 Pillow 코드를 그대로 실행해 13장을 세로로 이어붙입니다. 동작: (1) 01_hero~13_cta 순서 로드 → (2) 너비 1080으로 리사이즈(비율 유지 + 중앙 크롭) → (3) 섹션별 표준 높이로 조정 → (4) 세로 스택 → (5) 누락 섹션은 (40,40,40) 다크 플레이스홀더로 대체.
pythonfrom PIL import Image from pathlib import Path WIDTH = 1080 # (파일명 슬러그, 표준 높이) — sections-spec.md 표와 동일 SECTIONS = [ ("01_hero", 1600), ("02_pain", 800), ("03_problem", 900), ("04_story", 1000), ("05_solution", 1100), ("06_how", 1000), ("07_proof", 1100), ("08_authority", 900), ("09_benefits", 1000), ("10_risk", 800), ("11_compare", 900), ("12_filter", 700), ("13_cta", 900), ] PLACEHOLDER = (40, 40, 40) def fit(img, w, h): # 비율 유지 리사이즈 후 중앙 크롭으로 정확히 w×h 맞춤 scale = max(w / img.width, h / img.height) img = img.resize((round(img.width * scale), round(img.height * scale)), Image.LANCZOS) left, top = (img.width - w) // 2, (img.height - h) // 2 return img.crop((left, top, left + w, top + h)) sections_dir = Path("./commerce-output/JOB_ID/sections") # 실제 job_id로 치환 total_h = sum(h for _, h in SECTIONS) canvas = Image.new("RGB", (WIDTH, total_h), PLACEHOLDER) failed, y = [], 0 for slug, h in SECTIONS: p = sections_dir / f"{slug}.png" if p.exists(): canvas.paste(fit(Image.open(p).convert("RGB"), WIDTH, h), (0, y)) else: failed.append(slug) # 누락 → 다크 플레이스홀더 그대로 유지 y += h canvas.save(sections_dir.parent / "combined.png") print({"size": f"{WIDTH}x{total_h}", "failed_sections": failed})
높이 표준값은 references/sections-spec.md를, 섹션별 비주얼 언어는 references/image-prompts.md를 참조합니다.
json{ "job_id": "a1b2c3d4", "output_dir": "/abs/.../commerce-output/a1b2c3d4", "combined": "/abs/.../combined.png", "sections": [ "/abs/.../sections/01_hero.png", "...", "/abs/.../sections/13_cta.png" ], "failed_sections": [], "elapsed_sec": 0, "size": "1080x12720" }
failed_sections가 비어있지 않으면 사용자에게 다음을 안내:
--output --job-id로 재실행 시 자동 재개되는지 (재개는 사용자가 수동으로 해당 섹션만 재생성)./commerce-output/{job_id}/
├── analysis.json # 13섹션 카피 + 프롬프트 + ProductDNA
├── sections/ # 13장 섹션 (1080×가변)
│ ├── 01_hero.png (1080×1600)
│ ├── 02_pain.png (1080×800)
│ ├── ...
│ └── 13_cta.png (1080×900)
└── combined.png # 1080×12720 세로 합성본4단계 인라인 Pillow 코드에서 다음 값만 바꾸면 됩니다:
WIDTH: 출력 너비 (기본 1080)PLACEHOLDER: 누락 섹션 색 (기본 (40, 40, 40))SECTIONS: 섹션 순서·표준 높이 (기본 13섹션, references/sections-spec.md와 동일)sections_dir: 실제 job_id 경로로 치환> 이 스킬은 부재 스크립트(compose.py) 참조를 원칙 A(프롬프트/인라인 코드 경로)로 대체했습니다 — 합성은 위 Pillow 코드를 직접 실행합니다.
moai-seller:commerce-detail-page-copy — 13섹션 카피 생성 (이 스킬 입력)moai-seller:commerce-product-photo-brief — 상품 사진 사전 분석moai-seller:commerce-marketplace-coupang — 채널별 이미지 규격 가이드commerce-detail-page-copy 단독 사용moai-seller:commerce-product-detailMIT.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | fail→pass | 18,656 | 18,891 | +1% | 1 | 1 | 0% | 3,232 | 6,114 | +89% | 0 | 0 | — |
case-01 | fail→pass | 21,235 | 25,734 | +21% | 1 | 1 | 0% | 2,722 | 6,791 | +149% | 0 | 0 | — |
case-02 | fail→fail | 25,658 | 19,266 | -25% | 1 | 1 | 0% | 3,440 | 6,567 | +91% | 0 | 0 | — |
case-03 | fail→pass | 35,061 | 21,450 | -39% | 1 | 1 | 0% | 7,470 | 6,980 | -7% | 0 | 0 | — |
case-04 | fail→fail | 20,499 | 20,814 | +2% | 1 | 1 | 0% | 2,898 | 6,338 | +119% | 0 | 0 | — |
case-05 | fail→fail | 8,817 | 10,316 | +17% | 1 | 1 | 0% | 1,417 | 3,983 | +181% | 0 | 0 | — |
case-06 | fail→fail | 23,346 | 13,783 | -41% | 1 | 1 | 0% | 2,839 | 4,790 | +69% | 0 | 0 | — |
case-07 | fail→fail | 35,142 | 39,385 | +12% | 1 | 1 | 0% | 6,551 | 10,730 | +64% | 0 | 0 | — |
case-08 | fail→pass | 18,336 | 13,257 | -28% | 1 | 1 | 0% | 2,875 | 4,664 | +62% | 0 | 0 | — |
case-09 | fail→pass | 21,719 | 18,772 | -14% | 1 | 1 | 0% | 2,778 | 4,678 | +68% | 0 | 0 | — |
case-10 | fail→pass | 17,338 | 13,540 | -22% | 1 | 1 | 0% | 2,555 | 4,753 | +86% | 0 | 0 | — |
case-11 | fail→pass | 20,124 | 12,257 | -39% | 1 | 1 | 0% | 2,791 | 4,422 | +58% | 0 | 0 | — |
case-12 | fail→pass | 19,455 | 8,887 | -54% | 1 | 1 | 0% | 2,230 | 3,925 | +76% | 0 | 0 | — |
case-13 | pass→pass | 16,700 | 19,374 | +16% | 1 | 1 | 0% | 2,630 | 4,606 | +75% | 0 | 0 | — |
case-14 | fail→pass | 13,607 | 8,198 | -40% | 1 | 1 | 0% | 2,346 | 3,939 | +68% | 0 | 0 | — |
case-15 | fail→pass | 17,474 | 10,910 | -38% | 1 | 1 | 0% | 2,666 | 4,156 | +56% | 0 | 0 | — |
case-16 | pass→pass | 16,933 | 20,012 | +18% | 1 | 1 | 0% | 2,975 | 6,181 | +108% | 0 | 0 | — |
case-17 | fail→pass | 19,094 | 12,177 | -36% | 1 | 1 | 0% | 3,315 | 4,756 | +43% | 0 | 0 | — |
case-19 | fail→pass | 20,292 | 5,405 | -73% | 1 | 1 | 0% | 2,988 | 3,505 | +17% | 0 | 0 | — |
case-20 | pass→pass | 13,080 | 9,283 | -29% | 1 | 1 | 0% | 2,278 | 4,131 | +81% | 0 | 0 | — |
case-21 | fail→pass | 26,393 | 14,059 | -47% | 1 | 1 | 0% | 2,557 | 4,552 | +78% | 0 | 0 | — |
case-22 | fail→pass | 15,761 | 10,023 | -36% | 1 | 1 | 0% | 2,516 | 4,323 | +72% | 0 | 0 | — |
case-23 | fail→pass | 11,999 | 4,607 | -62% | 1 | 1 | 0% | 1,990 | 3,256 | +64% | 0 | 0 | — |
case-24 | fail→pass | 16,627 | 26,093 | +57% | 1 | 1 | 0% | 2,575 | 4,797 | +86% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +67 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.