image-ecommerce
Use this skill for all e-commerce product photography requests on Starchild.
Covers: white-background hero shots, lifestyle product scenes, flat lay arrangements, detail/macro close-ups, packaging/unboxing shots, group/collection displays, scale reference images, seasonal themes (spring/summer/autumn/winter), 360-degree views, comparison layouts, infographic-style feature callouts, and platform-optimized images for Amazon, Shopify, Taobao, Instagram, Xiaohongshu, Etsy, eBay.
Core principle: call the provided script. Do not re-implement proxy/billing plumbing.
When to use image-ecommerce vs other image skills:
- image-ecommerce → user wants PRODUCT PHOTOS for e-commerce, catalogs, or marketing
- image-edit → user wants to EDIT or TRANSFORM an existing image (not product-specific)
- image-portrait → user wants a portrait with their face/identity preserved
- image-create → user wants to CREATE something from text (not product photography)
- image-tryon → user wants to try on clothing/accessories on a person
1. Quick start — single product photo (most common)
⚠️ Execution context — read this first.
The code blocks below are Python, not shell commands. Starchild's bash tool
runs /bin/bash -c, which cannot parse exec(open(...)) — pasting them directly
into a bash command will fail with syntax error near unexpected token 'open'.
Also, exec(open(...)) inside python3 -c fails with NameError: __file__
because the script uses __file__ for path resolution.
Use python3 - <<'EOF' with from exports import when calling via the bash tool:
python3 - <<'EOF'
import sys
sys.path.insert(0, "skills/image-ecommerce")
from exports import product_photo
result = product_photo(
product_path="uploads/product.jpg",
style="hero",
background="white",
)
print(result)
EOF
The heredoc (<<'EOF') preserves all quotes and newlines — no escaping needed.
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/product.jpg",
style="hero",
background="white",
)
# result -> {"success": True, "images": [{"local_path": "output/images/..."}], ...}
The script reads the local file, base64-encodes it, and sends it to fal.ai as a data URI — no manual URL publishing needed.
2. Quick start — public URL
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_url="https://example.com/product.jpg",
style="lifestyle",
background="natural",
)
3. Quick start — text-to-image (no product photo)
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
prompt="premium wireless bluetooth headphones, matte black finish, over-ear design",
style="hero",
background="white",
)
When no product_path or product_url is provided, the script uses the text-to-image endpoint (no /edit suffix). A prompt describing the product is required in this mode.
4. Quick start — platform-optimized
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/product.jpg",
platform="amazon",
)
# Automatically applies: style=hero, background=white, aspect_ratio=1:1
5. Quick start — complete product image set
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo_set(
product_path="uploads/product.jpg",
prompt="premium leather wallet",
platform="amazon",
)
# Generates 7 images: hero, lifestyle, detail, scale, alternate angle, packaging, flat lay
Delivering the result to the user — IMPORTANT
Never hand the user the raw fal.media URL. fal serves files with restrictive CSP headers. The only reliable delivery path is the already-downloaded local file:
- Use each image's
local_path (e.g. output/images/xxx.png) — the script always downloads on success.
- Tell the user the files are saved to
output/images/ and viewable in the workspace file panel.
- On Web channel, embed inline so the user can preview in chat:

- On Telegram / WeChat: send via
send_to_telegram(file_path="output/images/...", message_type="image") or send_to_wechat(file_path="output/images/...", message_type="image").
6. Parameters — product_photo()
| Parameter |
Required |
Default |
Description |
product_path |
no |
— |
Local workspace file path to the product image |
product_url |
no |
— |
Public HTTPS URL of the product image |
prompt |
no |
— |
Custom prompt describing the product or desired photo |
style |
no |
"hero" |
Photography style preset (see §7) |
background |
no |
"white" |
Background type (see §8) |
model |
no |
"nanopro" |
Model: "nanopro" (fast ~25s) or "gpt" (best quality ~150s) |
count |
no |
1 |
Number of images to generate (1–8) |
aspect_ratio |
no |
"1:1" |
Output ratio: 1:1, 3:4, 4:3, 9:16, 16:9 |
platform |
no |
— |
Platform preset: amazon, shopify, taobao, instagram, xiaohongshu, etsy, ebay |
Image input rules:
- Provide
product_path OR product_url for edit mode (transform existing product photo).
- If both are given,
product_path takes priority.
- Omit both for pure text-to-image generation (requires
prompt).
Prompt priority: prompt + style/background (enhanced) > style + background templates.
Platform preset: When platform is set, it overrides default style, background, and aspect_ratio with platform-optimized values — unless you explicitly set them.
7. Photography styles
Core product shots
| Style |
Key |
Best for |
| Hero shot |
hero |
Primary listing image, magazine ads, main product display |
| Lifestyle |
lifestyle |
Product in use, editorial, social media |
| Flat lay |
flat_lay |
Instagram, top-down arrangement, catalog |
| Detail close-up |
detail |
Material quality, texture, craftsmanship |
| Packaging |
packaging |
Unboxing experience, brand packaging |
| Group/collection |
group |
Multiple products, variants, bundles |
| Scale reference |
scale |
Size comparison, product in hand |
Marketing & informational
| Style |
Key |
Best for |
| 360° view |
360_view |
Multi-angle showcase, turntable display |
| Comparison |
comparison |
Side-by-side, before/after, feature highlight |
| Infographic |
infographic |
Feature callouts, specs, dimensions |
Seasonal campaigns
| Style |
Key |
Best for |
| Spring |
seasonal_spring |
Cherry blossoms, fresh green, pastel |
| Summer |
seasonal_summer |
Beach, sunshine, tropical, vacation |
| Autumn |
seasonal_autumn |
Fall leaves, golden tones, harvest |
| Winter |
seasonal_winter |
Snow, holiday, festive, cozy |
8. Background types
| Background |
Key |
Best for |
| Pure white |
white |
Amazon, e-commerce standard, marketplace listings |
| Gradient |
gradient |
Hero shots, premium feel, modern |
| Studio |
studio |
Professional catalog, controlled lighting |
| Natural |
natural |
Outdoor products, organic brands |
| Lifestyle |
lifestyle |
Home/office context, in-use scenarios |
| Colored |
colored |
Brand-matching, vibrant marketing |
| Textured |
textured |
Luxury products, marble/wood surface |
| Transparent |
transparent |
Product cutout, PNG for design use |
9. Platform presets
| Platform |
Aspect Ratio |
Background |
Style |
Key Requirements |
| Amazon |
1:1 |
white |
hero |
Pure white bg (RGB 255,255,255), product fills 85%+, no props/text/watermarks, min 1000px (1600px+ for zoom) |
| Shopify |
1:1 |
white |
hero |
Square format, consistent catalog style, 2048x2048 recommended |
| Taobao |
1:1 |
white |
hero |
800x800 minimum, white bg for main image |
| Instagram |
1:1 |
lifestyle |
lifestyle |
1080x1080 feed, lifestyle context, visually appealing |
| Xiaohongshu |
3:4 |
lifestyle |
flat_lay |
1080x1440 vertical, aesthetic flat lay, text overlay space |
| Etsy |
4:3 |
natural |
lifestyle |
Handmade/artisan feel, natural backgrounds |
| eBay |
1:1 |
white |
hero |
White background, clear product view, 1600px min for zoom |
10. Model selection guide
| Model |
Key |
Speed |
Quality |
Best for |
| NanoPro |
nanopro |
~25s |
Good |
Default for all requests. Fast iteration. |
| GPT Image 2 |
gpt |
~150s |
Best |
When user explicitly asks for "highest quality" or "best quality". Complex scenes. |
Decision rules:
- Default: always use
nanopro unless the user explicitly requests higher quality.
- Use
gpt when: user says "highest quality", "best quality", "premium", or the scene is very complex with many specific details.
- Use
nanopro when: user wants fast results, is iterating on styles, or generating multiple images.
# Default (fast)
result = product_photo(product_path="product.jpg", style="hero")
# High quality (user requested)
result = product_photo(product_path="product.jpg", style="hero", model="gpt")
11. Intent recognition guide
Use this table to map user requests to the correct style + background:
Product listing images
| User says |
Style |
Background |
Notes |
| "product photo", "listing image", "主图" |
hero |
white |
Default e-commerce |
| "Amazon listing", "亚马逊主图" |
hero |
white |
Use platform="amazon" |
| "Shopify product", "独立站产品图" |
hero |
white |
Use platform="shopify" |
| "淘宝主图", "天猫主图" |
hero |
white |
Use platform="taobao" |
| "white background", "白底图" |
hero |
white |
Standard packshot |
| "product on white", "纯白背景" |
hero |
white |
Amazon-style |
Lifestyle & context
| User says |
Style |
Background |
Notes |
| "lifestyle photo", "场景图" |
lifestyle |
lifestyle |
Product in context |
| "product in use", "使用场景" |
lifestyle |
lifestyle |
Show product being used |
| "flat lay", "俯拍", "平铺" |
flat_lay |
textured |
Top-down arrangement |
| "Instagram product", "小红书产品" |
flat_lay |
lifestyle |
Social media optimized |
Detail & technical
| User says |
Style |
Background |
Notes |
| "close-up", "detail shot", "细节图" |
detail |
studio |
Macro/texture |
| "packaging", "包装图", "开箱" |
packaging |
studio |
Box + product |
| "size comparison", "尺寸对比" |
scale |
studio |
With reference object |
| "multiple products", "组合图" |
group |
white |
Collection display |
| "360 view", "多角度" |
360_view |
white |
Turntable style |
| "comparison", "对比图" |
comparison |
white |
Side by side |
| "infographic", "功能标注" |
infographic |
white |
Feature callouts |
Seasonal & campaign
| User says |
Style |
Background |
Notes |
| "spring campaign", "春季" |
seasonal_spring |
auto |
Cherry blossoms, pastel |
| "summer sale", "夏季" |
seasonal_summer |
auto |
Beach, tropical |
| "autumn/fall", "秋季" |
seasonal_autumn |
auto |
Golden leaves, warm |
| "winter/holiday", "冬季", "圣诞" |
seasonal_winter |
auto |
Snow, festive |
Complete product set
| User says |
Function |
Notes |
| "complete set", "全套产品图", "listing images" |
product_photo_set() |
7 images covering all angles |
| "Amazon listing set", "亚马逊全套" |
product_photo_set(platform="amazon") |
Platform-optimized set |
12. Usage examples by scenario
Amazon listing — white background hero shot
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/headphones.jpg",
platform="amazon",
)
Lifestyle product photo
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/coffee_mug.jpg",
style="lifestyle",
background="lifestyle",
prompt="premium coffee mug on rustic wooden table beside an open book, morning sunlight",
)
Product detail close-up
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/leather_bag.jpg",
style="detail",
background="studio",
prompt="extreme close-up of leather stitching and grain texture",
)
Seasonal campaign — winter holiday
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/candle.jpg",
style="seasonal_winter",
prompt="luxury scented candle in cozy holiday setting with pine branches and warm glow",
)
Text-to-image — generate product from description
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
prompt="sleek minimalist smartwatch with black silicone band and OLED display showing time",
style="hero",
background="gradient",
model="gpt",
)
Flat lay for Instagram / Xiaohongshu
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/skincare_set.jpg",
style="flat_lay",
background="textured",
platform="xiaohongshu",
)
Multiple images — batch generation
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo(
product_path="uploads/sneakers.jpg",
style="hero",
background="white",
count=4,
)
# Generates 4 variations of the hero shot
Complete product image set
exec(open('skills/image-ecommerce/product_photo.py').read())
result = product_photo_set(
product_path="uploads/wallet.jpg",
prompt="premium leather bifold wallet",
platform="amazon",
)
# result -> {"success": True, "sets": [...], "total_images": 7, ...}
# Generates: hero, lifestyle, detail, scale, alternate angle, packaging, flat lay
13. Prompt engineering best practices
The product photography prompt structure
Every effective product photo prompt should include these elements:
[product description], [photography style], [lighting], [background/surface], [composition], [quality modifiers]
Key principles (derived from product-photography, eachlabs-product-visuals, image-create skills)
Product preservation is critical — when editing an existing product image:
- Always emphasize "keep the product exactly as it is"
- Preserve shape, color, branding, and details
- Only change the background/context/lighting
Lighting specificity — always specify lighting type:
- Studio: "soft diffused studio lighting", "even lighting with no shadows"
- Dramatic: "dramatic rim lighting", "edge light for premium feel"
- Natural: "natural window light", "golden hour warm light"
- Flat: "flat even lighting" (for e-commerce white background)
Background precision — vague backgrounds produce poor results:
- ❌ "nice background"
- ✅ "pure white background #FFFFFF, no shadows"
- ✅ "rustic wooden table with morning sunlight"
- ✅ "soft gradient from white to light grey"
Composition rules (from product-photography skill):
- Hero shot: product fills 80% of frame, slight 15-30° angle
- Packshot (Amazon): product dead center, fills 85%+
- Flat lay: bird's eye view, organized arrangement
- Group: odd numbers (3 or 5), triangle composition
Shadow types matter:
- No shadow: Amazon/e-commerce requirements
- Contact shadow: grounded but clean
- Drop shadow: adds depth, professional
- Reflection: tech, luxury, premium feel
Material and texture — for detail shots, specify:
- "visible leather grain and stitching"
- "brushed metal finish with subtle reflections"
- "soft fabric texture, thread detail visible"
Platform compliance — when targeting a specific platform:
- Amazon: pure white (RGB 255,255,255), no props/text/watermarks
- Instagram: lifestyle context, visually appealing
- Xiaohongshu: vertical format, aesthetic, text overlay space
Example: building a custom prompt
User request: "I need a hero shot of my leather wallet for Amazon"
result = product_photo(
product_path="uploads/wallet.jpg",
platform="amazon",
prompt="premium leather bifold wallet, rich brown color, slight angle showing card slots",
)
The script automatically builds:
Transform this product image into a professional e-commerce photo.
Keep the product exactly as it is — preserve its shape, color, details, and branding.
premium leather bifold wallet, rich brown color, slight angle showing card slots.
Photography style: professional product hero shot, clean composition, studio lighting...
Background: pure white background #FFFFFF, clean, e-commerce standard, no shadows.
14. E-commerce image set guide
A complete product listing needs 7-9 images. Use product_photo_set() for automatic generation, or create individual shots:
| Position |
Image Type |
Style |
Background |
Purpose |
| 1 |
Hero / packshot |
hero |
white |
Primary listing image |
| 2 |
Lifestyle |
lifestyle |
lifestyle |
Product in use/context |
| 3 |
Detail close-up |
detail |
studio |
Material quality, craftsmanship |
| 4 |
Scale reference |
scale |
studio |
Size in hand or next to known object |
| 5 |
Alternate angle |
hero |
white |
Back or side view |
| 6 |
Packaging |
packaging |
studio |
Unboxing experience |
| 7 |
Flat lay |
flat_lay |
textured |
Arranged composition |
| 8 |
Infographic |
infographic |
white |
Dimensions, specs, features |
| 9 |
Seasonal |
seasonal_* |
auto |
Campaign-specific |
15. Error handling
The script returns structured results. Always check success:
result = product_photo(product_path="uploads/product.jpg")
if result["success"]:
for img in result["images"]:
print(f"Saved: {img['local_path']}")
else:
print(f"Error: {result.get('error')}")
Common errors:
"File not found" — check the product_path
"Unsupported image format" — use JPG, PNG, or WebP
"Image too large" — max 10 MB
"Either a product image or a prompt is required" — provide product_path/product_url or prompt
"Unknown style/background" — check available presets in §7/§8
1---2name: image-ecommerce3description: E-commerce product photography: white-background hero shots, lifestyle scenes, flat lay, detail close-ups, packaging shots, group/collection displays, scale references, seasonal/holiday themes, 360-degree views, comparison layouts, infographics, and platform-optimized images (Amazon, Shopify, Taobao, Instagram, Xiaohongshu, Etsy, eBay). Use when generating professional product photos for e-commerce listings, catalogs, or marketing (e.g. product hero shot, Amazon listing image, lifestyle product photo, product on white background, product detail close-up, seasonal product campaign).4---56# image-ecommerce78Use this skill for **all e-commerce product photography requests** on Starchild.910Covers: white-background hero shots, lifestyle product scenes, flat lay arrangements, detail/macro close-ups, packaging/unboxing shots, group/collection displays, scale reference images, seasonal themes (spring/summer/autumn/winter), 360-degree views, comparison layouts, infographic-style feature callouts, and platform-optimized images for Amazon, Shopify, Taobao, Instagram, Xiaohongshu, Etsy, eBay.1112**Core principle:** call the provided script. Do not re-implement proxy/billing plumbing.1314**When to use image-ecommerce vs other image skills:**15- **image-ecommerce** → user wants PRODUCT PHOTOS for e-commerce, catalogs, or marketing16- **image-edit** → user wants to EDIT or TRANSFORM an existing image (not product-specific)17- **image-portrait** → user wants a portrait with their face/identity preserved18- **image-create** → user wants to CREATE something from text (not product photography)19- **image-tryon** → user wants to try on clothing/accessories on a person2021---2223## 1. Quick start — single product photo (most common)2425> **⚠️ Execution context — read this first.**26> The code blocks below are **Python**, not shell commands. Starchild's `bash` tool27> runs `/bin/bash -c`, which cannot parse `exec(open(...))` — pasting them directly28> into a bash command will fail with `syntax error near unexpected token 'open'`.29> Also, `exec(open(...))` inside `python3 -c` fails with `NameError: __file__`30> because the script uses `__file__` for path resolution.31>32> **Use `python3 - <<'EOF'` with `from exports import` when calling via the bash tool:**33>34> ```bash35> python3 - <<'EOF'36> import sys37> sys.path.insert(0, "skills/image-ecommerce")38> from exports import product_photo39> result = product_photo(40> product_path="uploads/product.jpg",41> style="hero",42> background="white",43> )44> print(result)45> EOF46> ```47>48> The heredoc (`<<'EOF'`) preserves all quotes and newlines — no escaping needed.4950```python51exec(open('skills/image-ecommerce/product_photo.py').read())52result = product_photo(53 product_path="uploads/product.jpg",54 style="hero",55 background="white",56)57# result -> {"success": True, "images": [{"local_path": "output/images/..."}], ...}58```5960The script reads the local file, base64-encodes it, and sends it to fal.ai as a data URI — no manual URL publishing needed.6162## 2. Quick start — public URL6364```python65exec(open('skills/image-ecommerce/product_photo.py').read())66result = product_photo(67 product_url="https://example.com/product.jpg",68 style="lifestyle",69 background="natural",70)71```7273## 3. Quick start — text-to-image (no product photo)7475```python76exec(open('skills/image-ecommerce/product_photo.py').read())77result = product_photo(78 prompt="premium wireless bluetooth headphones, matte black finish, over-ear design",79 style="hero",80 background="white",81)82```8384When no `product_path` or `product_url` is provided, the script uses the text-to-image endpoint (no `/edit` suffix). A `prompt` describing the product is required in this mode.8586## 4. Quick start — platform-optimized8788```python89exec(open('skills/image-ecommerce/product_photo.py').read())90result = product_photo(91 product_path="uploads/product.jpg",92 platform="amazon",93)94# Automatically applies: style=hero, background=white, aspect_ratio=1:195```9697## 5. Quick start — complete product image set9899```python100exec(open('skills/image-ecommerce/product_photo.py').read())101result = product_photo_set(102 product_path="uploads/product.jpg",103 prompt="premium leather wallet",104 platform="amazon",105)106# Generates 7 images: hero, lifestyle, detail, scale, alternate angle, packaging, flat lay107```108109### Delivering the result to the user — IMPORTANT110111**Never hand the user the raw fal.media URL.** fal serves files with restrictive CSP headers. The only reliable delivery path is the **already-downloaded local file**:1121131. Use each image's `local_path` (e.g. `output/images/xxx.png`) — the script always downloads on success.1142. Tell the user the files are saved to `output/images/` and viewable in the workspace file panel.1153. On Web channel, embed inline so the user can preview in chat:116 ```markdown117 118 ```1194. On Telegram / WeChat: send via `send_to_telegram(file_path="output/images/...", message_type="image")` or `send_to_wechat(file_path="output/images/...", message_type="image")`.120121---122123## 6. Parameters — `product_photo()`124125| Parameter | Required | Default | Description |126|-----------|----------|---------|-------------|127| `product_path` | no | — | Local workspace file path to the product image |128| `product_url` | no | — | Public HTTPS URL of the product image |129| `prompt` | no | — | Custom prompt describing the product or desired photo |130| `style` | no | `"hero"` | Photography style preset (see §7) |131| `background` | no | `"white"` | Background type (see §8) |132| `model` | no | `"nanopro"` | Model: `"nanopro"` (fast ~25s) or `"gpt"` (best quality ~150s) |133| `count` | no | `1` | Number of images to generate (1–8) |134| `aspect_ratio` | no | `"1:1"` | Output ratio: `1:1`, `3:4`, `4:3`, `9:16`, `16:9` |135| `platform` | no | — | Platform preset: `amazon`, `shopify`, `taobao`, `instagram`, `xiaohongshu`, `etsy`, `ebay` |136137**Image input rules:**138- Provide `product_path` OR `product_url` for edit mode (transform existing product photo).139- If both are given, `product_path` takes priority.140- Omit both for pure text-to-image generation (requires `prompt`).141142**Prompt priority:** `prompt + style/background` (enhanced) > `style + background` templates.143144**Platform preset:** When `platform` is set, it overrides default `style`, `background`, and `aspect_ratio` with platform-optimized values — unless you explicitly set them.145146---147148## 7. Photography styles149150### Core product shots151152| Style | Key | Best for |153|-------|-----|----------|154| Hero shot | `hero` | Primary listing image, magazine ads, main product display |155| Lifestyle | `lifestyle` | Product in use, editorial, social media |156| Flat lay | `flat_lay` | Instagram, top-down arrangement, catalog |157| Detail close-up | `detail` | Material quality, texture, craftsmanship |158| Packaging | `packaging` | Unboxing experience, brand packaging |159| Group/collection | `group` | Multiple products, variants, bundles |160| Scale reference | `scale` | Size comparison, product in hand |161162### Marketing & informational163164| Style | Key | Best for |165|-------|-----|----------|166| 360° view | `360_view` | Multi-angle showcase, turntable display |167| Comparison | `comparison` | Side-by-side, before/after, feature highlight |168| Infographic | `infographic` | Feature callouts, specs, dimensions |169170### Seasonal campaigns171172| Style | Key | Best for |173|-------|-----|----------|174| Spring | `seasonal_spring` | Cherry blossoms, fresh green, pastel |175| Summer | `seasonal_summer` | Beach, sunshine, tropical, vacation |176| Autumn | `seasonal_autumn` | Fall leaves, golden tones, harvest |177| Winter | `seasonal_winter` | Snow, holiday, festive, cozy |178179---180181## 8. Background types182183| Background | Key | Best for |184|------------|-----|----------|185| Pure white | `white` | Amazon, e-commerce standard, marketplace listings |186| Gradient | `gradient` | Hero shots, premium feel, modern |187| Studio | `studio` | Professional catalog, controlled lighting |188| Natural | `natural` | Outdoor products, organic brands |189| Lifestyle | `lifestyle` | Home/office context, in-use scenarios |190| Colored | `colored` | Brand-matching, vibrant marketing |191| Textured | `textured` | Luxury products, marble/wood surface |192| Transparent | `transparent` | Product cutout, PNG for design use |193194---195196## 9. Platform presets197198| Platform | Aspect Ratio | Background | Style | Key Requirements |199|----------|-------------|------------|-------|------------------|200| Amazon | 1:1 | white | hero | Pure white bg (RGB 255,255,255), product fills 85%+, no props/text/watermarks, min 1000px (1600px+ for zoom) |201| Shopify | 1:1 | white | hero | Square format, consistent catalog style, 2048x2048 recommended |202| Taobao | 1:1 | white | hero | 800x800 minimum, white bg for main image |203| Instagram | 1:1 | lifestyle | lifestyle | 1080x1080 feed, lifestyle context, visually appealing |204| Xiaohongshu | 3:4 | lifestyle | flat_lay | 1080x1440 vertical, aesthetic flat lay, text overlay space |205| Etsy | 4:3 | natural | lifestyle | Handmade/artisan feel, natural backgrounds |206| eBay | 1:1 | white | hero | White background, clear product view, 1600px min for zoom |207208---209210## 10. Model selection guide211212| Model | Key | Speed | Quality | Best for |213|-------|-----|-------|---------|----------|214| NanoPro | `nanopro` | ~25s | Good | Default for all requests. Fast iteration. |215| GPT Image 2 | `gpt` | ~150s | Best | When user explicitly asks for "highest quality" or "best quality". Complex scenes. |216217**Decision rules:**2181. **Default:** always use `nanopro` unless the user explicitly requests higher quality.2192. **Use `gpt` when:** user says "highest quality", "best quality", "premium", or the scene is very complex with many specific details.2203. **Use `nanopro` when:** user wants fast results, is iterating on styles, or generating multiple images.221222```python223# Default (fast)224result = product_photo(product_path="product.jpg", style="hero")225226# High quality (user requested)227result = product_photo(product_path="product.jpg", style="hero", model="gpt")228```229230---231232## 11. Intent recognition guide233234Use this table to map user requests to the correct style + background:235236### Product listing images237238| User says | Style | Background | Notes |239|-----------|-------|------------|-------|240| "product photo", "listing image", "主图" | `hero` | `white` | Default e-commerce |241| "Amazon listing", "亚马逊主图" | `hero` | `white` | Use `platform="amazon"` |242| "Shopify product", "独立站产品图" | `hero` | `white` | Use `platform="shopify"` |243| "淘宝主图", "天猫主图" | `hero` | `white` | Use `platform="taobao"` |244| "white background", "白底图" | `hero` | `white` | Standard packshot |245| "product on white", "纯白背景" | `hero` | `white` | Amazon-style |246247### Lifestyle & context248249| User says | Style | Background | Notes |250|-----------|-------|------------|-------|251| "lifestyle photo", "场景图" | `lifestyle` | `lifestyle` | Product in context |252| "product in use", "使用场景" | `lifestyle` | `lifestyle` | Show product being used |253| "flat lay", "俯拍", "平铺" | `flat_lay` | `textured` | Top-down arrangement |254| "Instagram product", "小红书产品" | `flat_lay` | `lifestyle` | Social media optimized |255256### Detail & technical257258| User says | Style | Background | Notes |259|-----------|-------|------------|-------|260| "close-up", "detail shot", "细节图" | `detail` | `studio` | Macro/texture |261| "packaging", "包装图", "开箱" | `packaging` | `studio` | Box + product |262| "size comparison", "尺寸对比" | `scale` | `studio` | With reference object |263| "multiple products", "组合图" | `group` | `white` | Collection display |264| "360 view", "多角度" | `360_view` | `white` | Turntable style |265| "comparison", "对比图" | `comparison` | `white` | Side by side |266| "infographic", "功能标注" | `infographic` | `white` | Feature callouts |267268### Seasonal & campaign269270| User says | Style | Background | Notes |271|-----------|-------|------------|-------|272| "spring campaign", "春季" | `seasonal_spring` | auto | Cherry blossoms, pastel |273| "summer sale", "夏季" | `seasonal_summer` | auto | Beach, tropical |274| "autumn/fall", "秋季" | `seasonal_autumn` | auto | Golden leaves, warm |275| "winter/holiday", "冬季", "圣诞" | `seasonal_winter` | auto | Snow, festive |276277### Complete product set278279| User says | Function | Notes |280|-----------|----------|-------|281| "complete set", "全套产品图", "listing images" | `product_photo_set()` | 7 images covering all angles |282| "Amazon listing set", "亚马逊全套" | `product_photo_set(platform="amazon")` | Platform-optimized set |283284---285286## 12. Usage examples by scenario287288### Amazon listing — white background hero shot289290```python291exec(open('skills/image-ecommerce/product_photo.py').read())292result = product_photo(293 product_path="uploads/headphones.jpg",294 platform="amazon",295)296```297298### Lifestyle product photo299300```python301exec(open('skills/image-ecommerce/product_photo.py').read())302result = product_photo(303 product_path="uploads/coffee_mug.jpg",304 style="lifestyle",305 background="lifestyle",306 prompt="premium coffee mug on rustic wooden table beside an open book, morning sunlight",307)308```309310### Product detail close-up311312```python313exec(open('skills/image-ecommerce/product_photo.py').read())314result = product_photo(315 product_path="uploads/leather_bag.jpg",316 style="detail",317 background="studio",318 prompt="extreme close-up of leather stitching and grain texture",319)320```321322### Seasonal campaign — winter holiday323324```python325exec(open('skills/image-ecommerce/product_photo.py').read())326result = product_photo(327 product_path="uploads/candle.jpg",328 style="seasonal_winter",329 prompt="luxury scented candle in cozy holiday setting with pine branches and warm glow",330)331```332333### Text-to-image — generate product from description334335```python336exec(open('skills/image-ecommerce/product_photo.py').read())337result = product_photo(338 prompt="sleek minimalist smartwatch with black silicone band and OLED display showing time",339 style="hero",340 background="gradient",341 model="gpt",342)343```344345### Flat lay for Instagram / Xiaohongshu346347```python348exec(open('skills/image-ecommerce/product_photo.py').read())349result = product_photo(350 product_path="uploads/skincare_set.jpg",351 style="flat_lay",352 background="textured",353 platform="xiaohongshu",354)355```356357### Multiple images — batch generation358359```python360exec(open('skills/image-ecommerce/product_photo.py').read())361result = product_photo(362 product_path="uploads/sneakers.jpg",363 style="hero",364 background="white",365 count=4,366)367# Generates 4 variations of the hero shot368```369370### Complete product image set371372```python373exec(open('skills/image-ecommerce/product_photo.py').read())374result = product_photo_set(375 product_path="uploads/wallet.jpg",376 prompt="premium leather bifold wallet",377 platform="amazon",378)379# result -> {"success": True, "sets": [...], "total_images": 7, ...}380# Generates: hero, lifestyle, detail, scale, alternate angle, packaging, flat lay381```382383---384385## 13. Prompt engineering best practices386387### The product photography prompt structure388389Every effective product photo prompt should include these elements:390391```392[product description], [photography style], [lighting], [background/surface], [composition], [quality modifiers]393```394395### Key principles (derived from product-photography, eachlabs-product-visuals, image-create skills)3963971. **Product preservation is critical** — when editing an existing product image:398 - Always emphasize "keep the product exactly as it is"399 - Preserve shape, color, branding, and details400 - Only change the background/context/lighting4014022. **Lighting specificity** — always specify lighting type:403 - Studio: "soft diffused studio lighting", "even lighting with no shadows"404 - Dramatic: "dramatic rim lighting", "edge light for premium feel"405 - Natural: "natural window light", "golden hour warm light"406 - Flat: "flat even lighting" (for e-commerce white background)4074083. **Background precision** — vague backgrounds produce poor results:409 - ❌ "nice background"410 - ✅ "pure white background #FFFFFF, no shadows"411 - ✅ "rustic wooden table with morning sunlight"412 - ✅ "soft gradient from white to light grey"4134144. **Composition rules** (from product-photography skill):415 - Hero shot: product fills 80% of frame, slight 15-30° angle416 - Packshot (Amazon): product dead center, fills 85%+417 - Flat lay: bird's eye view, organized arrangement418 - Group: odd numbers (3 or 5), triangle composition4194205. **Shadow types matter**:421 - No shadow: Amazon/e-commerce requirements422 - Contact shadow: grounded but clean423 - Drop shadow: adds depth, professional424 - Reflection: tech, luxury, premium feel4254266. **Material and texture** — for detail shots, specify:427 - "visible leather grain and stitching"428 - "brushed metal finish with subtle reflections"429 - "soft fabric texture, thread detail visible"4304317. **Platform compliance** — when targeting a specific platform:432 - Amazon: pure white (RGB 255,255,255), no props/text/watermarks433 - Instagram: lifestyle context, visually appealing434 - Xiaohongshu: vertical format, aesthetic, text overlay space435436### Example: building a custom prompt437438User request: "I need a hero shot of my leather wallet for Amazon"439440```python441result = product_photo(442 product_path="uploads/wallet.jpg",443 platform="amazon",444 prompt="premium leather bifold wallet, rich brown color, slight angle showing card slots",445)446```447448The script automatically builds:449```450Transform this product image into a professional e-commerce photo.451Keep the product exactly as it is — preserve its shape, color, details, and branding.452premium leather bifold wallet, rich brown color, slight angle showing card slots.453Photography style: professional product hero shot, clean composition, studio lighting...454Background: pure white background #FFFFFF, clean, e-commerce standard, no shadows.455```456457---458459## 14. E-commerce image set guide460461A complete product listing needs 7-9 images. Use `product_photo_set()` for automatic generation, or create individual shots:462463| Position | Image Type | Style | Background | Purpose |464|----------|-----------|-------|------------|---------|465| 1 | Hero / packshot | `hero` | `white` | Primary listing image |466| 2 | Lifestyle | `lifestyle` | `lifestyle` | Product in use/context |467| 3 | Detail close-up | `detail` | `studio` | Material quality, craftsmanship |468| 4 | Scale reference | `scale` | `studio` | Size in hand or next to known object |469| 5 | Alternate angle | `hero` | `white` | Back or side view |470| 6 | Packaging | `packaging` | `studio` | Unboxing experience |471| 7 | Flat lay | `flat_lay` | `textured` | Arranged composition |472| 8 | Infographic | `infographic` | `white` | Dimensions, specs, features |473| 9 | Seasonal | `seasonal_*` | auto | Campaign-specific |474475---476477## 15. Error handling478479The script returns structured results. Always check `success`:480481```python482result = product_photo(product_path="uploads/product.jpg")483if result["success"]:484 for img in result["images"]:485 print(f"Saved: {img['local_path']}")486else:487 print(f"Error: {result.get('error')}")488```489490Common errors:491- `"File not found"` — check the product_path492- `"Unsupported image format"` — use JPG, PNG, or WebP493- `"Image too large"` — max 10 MB494- `"Either a product image or a prompt is required"` — provide product_path/product_url or prompt495- `"Unknown style/background"` — check available presets in §7/§8