Overview
This is a skill that generates 13-section emotional journey detail page images and creates a vertically composited PNG. Using moai-media:media-higgsfield-image as the backend, it creates 13 section images with a consistent visual tone per category, and produces a single 1080×12720 composite image with Pillow as the sole dependency.
Trigger Keywords
detail page image, sangpye image, 13-section image, 1080 12720, detail page composite, product detail image, combined.png, sangpye composite, e-commerce image composite
Prerequisites
- Pillow installation:
pip install Pilloworuv pip install Pillow- Python 3.10+ environment
- No other dependencies (NumPy not required)
-
moai-coworker plugin enabled: use media-higgsfield-image for 13-section image generation
- Or the user separately prepares 13 section images and provides the folder path
-
1-14 product photos: actual product reference (optional but recommended)
Workflow
Step 1: Collect Inputs
Secure the following:
- 13-section copy JSON (
commerce-detail-page-copyskill output) - Paths to 1-14 product photos
- Category (electronics/fashion/food/beauty/home/supplement/pet/kids/handmade/general)
- ProductDNA (optional,
commerce-product-photo-briefskill output) - Output directory (default:
./commerce-output/{job_id}/)
Step 2: Generate 13-Section Image Prompts
Combine each section's copy and category visual brief to write media-higgsfield-image prompts.
references/image-prompts.md reference (per-section visual language, composition guide).
Each section has a unique visual language:
- Hero: cinematic_product_portrait — full bleed + dramatic rim light
- Pain: emotional_photography_no_product — dark tone, product not shown
- Problem: clinical_infographic — clean infographic
- Story: editorial_split_before_after — Before/After left-right split
- Solution: product_beauty_shot — studio beauty shot
- How: illustrated_step_sequence — 3-step illustration
- Proof: magazine_spread — magazine spread
- Authority: portrait_with_quote — portrait + quote
- Benefits: icon_grid_with_lifestyle — icon grid + lifestyle
- Risk: document_with_seal — document/certification style
- Compare: split_screen_vs — 50/50 split comparison
- Filter: checklist_visual — checklist visualization
- CTA: urgent_product_reveal — urgency + price emphasis
Step 3: Image Generation (moai-media:media-higgsfield-image)
Generation strategy:
- Each section width: 1080px
- Height per section:
references/sections-spec.mdSee table (Hero 1600-Filter 700) - Category visual brief (electronics/fashion/...) injected into all prompts
- Pass product reference photos to media-higgsfield-image's image-to-image mode
Save generation results from output_dir/{job_id}/sections/01_hero.png to 13_cta.png .
On generation failure: fill that section with a dark placeholder (40,40,40) and proceed with composition.
Step 4: 1080×12720 composition (Pillow inline assembly)
Without a separate script, run the Pillow code below as-is to stitch the 13 images vertically.
Behavior: (1) Load in order 01_hero~13_cta → (2) Resize to width 1080 (preserve aspect ratio + center crop) →
(3) Adjust to standard height per section → (4) Vertical stack → (5) Missing sections replaced with (40,40,40) dark placeholder.
from 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})
For standard height values, refer to references/sections-spec.md, and for per-section visual language, refer to references/image-prompts.md.
Step 5: Output report
{
"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_sectionsIf is not empty, guide the user on the following:
- Which sections failed
- Whether it auto-resumes when re-run with the same
--output --job-id(resume means the user manually regenerates only that section)
Output file structure
./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 세로 합성본
Composition code adjustment points
In the Step 4 inline Pillow code, you only need to change the following values:
WIDTH: Output width (default 1080)PLACEHOLDER: Missing section color (default(40, 40, 40))SECTIONS: Section order·standard height (default 13 sections,references/sections-spec.mdsame as)sections_dir: Replace with actual job_id path
This skill replaced the reference to the nonexistent script (compose.py) with Principle A (prompt/inline code path) — composition directly runs the Pillow code above.
Usage examples
- "Compose a 13-section image with this copy result"
- "Make a 1080 12720 detail page with 5 product photos"
- "electronics category, wireless earbuds detail page image full set"
Related skills
moai-seller:commerce-detail-page-copy— 13-section copy generation (input to this skill)moai-seller:commerce-product-photo-brief— Product photo pre-analysis- 13-section image generation — Higgsfield MCP(Soul·cinematic image·character) direct call
moai-seller:commerce-marketplace-coupang— Image spec guide per channel
When not to use this skill
- When only copy is needed:
commerce-detail-page-copyuse standalone - When only a single product shot is needed: Higgsfield MCP direct call
- Video generation: Higgsfield MCP(DOP·Soul) direct call
- shadcn/ui-based web detail page:
moai-seller:commerce-product-detail
License
MIT.