product-shots-multi-angle について
1枚の参照写真から、統一感のある9枚のファッションエディトリアル画像を作るproduct-shotsのスキルです。アパレル、靴、アクセサリーの商品掲載向けに、画像変数の抽出、スタイルプリセット、プロンプトテンプレートを用います。
主な機能
- 019枚のエディトリアルシリーズ
- 02参照画像から14項目を抽出
- 033種類の撮影スタイルプリセット
- 04トリミング・ポーズ・髪型の統一
- 05一括生成用プロンプト
活用シーン
- 01多角度のアパレルルックブック制作
- 02靴の商品画像の作成
- 03統一感のあるアクセサリー画像制作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ motiful/ product-shots --skill product-shots-multi-angleインストール後、Claude Code で/product-shots-multi-angleを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/hard-constraints.mdphotography-style-presets.mdtask-prompts-6-9.mdtask-prompts.mdvariables-and-workflow.md詳細
Multi-Angle
ペルソナ — 複数画像のモデルキャンペーンを専門とするファッションエディトリアルディレクターです。
ユーザーがアップロードした1枚の参照写真から、9枚のファッションエディトリアルシリーズ(「Model Consistency Series」)を作成します。このスキルは参照画像から調整可能な14個の変数を抽出し、3種類の撮影スタイルプリセット(Retro Analog Flash / Soft Muted Film / Hard Flash Editorial)を提示した後、9種類のタスクプロンプトテンプレート(画像1枚につき1つ)を使用して画像を生成します。すべてのフレームが1回の撮影で撮られたように見えるよう、トリミング、ポーズ、ヘアスタイル、スタイルの一貫性に関する厳格なルールを適用します。
このスキルはproduct-shotsエコシステムの一部であり、1枚の参照画像から統一感のあるマルチアングルのルックブックを必要とする、越境ECのアパレル、フットウェア、アクセサリーの商品リスティング向けに設計されています。
実行原則
以下のルールは、すべてのセクションに適用されます。実行前にお読みください。
- 参照画像は必須です — 画像生成を行うすべての呼び出しで、画像入力として
REFERENCE_IMAGEを渡す必要があります。テキストだけによる説明は認められません。参照画像がなければ、人物の同一性を一貫して保てません。 - 生成前に分析します — プロンプトを記入する前に、参照画像から14個の変数をすべて抽出します。デフォルト値を推測したり、抽出を省略したりしないでください。
- ヘアスタイルの構造は変更できません — すべてのプロンプトに
{HAIRSTYLE} intact、NO loose hair、NO reinterpretationを必ず含めます。参照画像で結んでいる、ピンで留めている、または編み込んでいるヘアスタイルは、9つすべてのアングルでそのまま維持する必要があります。 - トリミング範囲は厳守します — 「太ももの中央までフレームに収める」場合、膝、下腿、足をフレームに入れてはいけません。「胸までフレームに収める」場合、腹部を入れてはいけません。「腰のラインまでフレームに収める」場合、太ももを入れてはいけません。各フレームのトリミングは目安ではなく、確認可能なルールとして扱います。
- スタイルは全体で統一します — 同じ
{PHOTOGRAPHY_STYLE}ブロックを9つすべてのプロンプトに一字一句そのまま繰り返します。他の画像よりクリーンに見えたり、デジタル感が強く見えたり、コントラストが高く見えたりする画像があってはいけません。 - アクセサリーは参照画像に合わせます — 参照画像にアクセサリーがあり、かつトリミング範囲に含まれる場合は、そのまま残します。参照画像にアクセサリーがない場合は、決して追加しません。トリミング範囲に含まれない場合は、
where possibleまたはNo accessories — frame doesn't reach themと注記します。 - スタイル選択のために一時停止します — ユーザーがスタイルを指定しておらず、スタイル参照画像もアップロードしていない場合は、
<suggestion>チップで3種類のプリセットを提示します(デフォルトを自動選択しないでください)。 - デフォルトでは一括生成します — ユーザーが段階的な確認を明示的に求めない限り、9枚すべてを1回のバッチで生成します(呼び出しごとにモデルの出力が変動するのを防ぐためです)。
- ユーザーの言語に合わせます — ユーザーが使用する言語で応答します。求められていない限り、言語を切り替えないでください。
実行手順
generate_multi_angle_series(user_request) → 9_images
# Step 0 — Pin hard constraints (MUST, before any decision)
load references/hard-constraints.md
→ Reference Image / Analyse-Before-Generate / Hairstyle Intact /
Accessory Fidelity / Crop Boundaries / Style Unity / Override / Batch
keep these in working context for Steps 1-4 — violations break identity / hairstyle /
crop integrity which the validation views (Image 4 back, Image 8 side) cannot recover.
# Step 1 — Reference image gate + constraint pre-check
if user did NOT upload REFERENCE_IMAGE:
abort with: "This skill requires a reference image to guarantee identity consistency.
Please upload a photo and retry."
# NEVER fall back to text-only description.
# Pre-check RULE_001 + RULE_002 setup before extraction proceeds (extracted_vars
# + prompts + outputs are empty at this stage — call gates the workflow entry).
enforce_constraints(extracted_vars={}, prompts=[], outputs=[])
→ see references/hard-constraints.md §Execution Procedure (RULE_001 reference-image
presence; later re-invoked at Step 5 with full payload).
# Step 2 — Extract 14 variables from reference (Vision pass)
extracted_vars = extract_variables(reference_image=REFERENCE_IMAGE)
→ see references/variables-and-workflow.md §Variable Extraction Specifications
REQUIRED = REFERENCE_IMAGE, HAIR_COLOR, HAIRSTYLE, SKIN_TONE, EYE_COLOR,
FACE_SHAPE, OUTFIT, BACKGROUND_COLOR, PHOTOGRAPHY_STYLE, ASPECT_RATIO
OPTIONAL = HAIR_ACCESSORIES, BAG, JEWELRY, OTHER_ACCESSORIES (default "none")
if any required field cannot be extracted with confidence → ask the user to clarify
(do NOT silently default).
# Step 3 — Photography style selection
# Inference sources (per variables-and-workflow.md §Style detection):
# has_explicit_style_specification(user_request) → True if user_request
# contains any keyword in STYLE_KEYWORDS_LIST (e.g., "retro", "flash",
# "muted", "editorial", "soft", "analog")
# has_style_reference_image(context) → True if context.attached_images
# contains an image flagged role="style_reference" by the caller
selected_style = select_or_emit_presets(reference_image=REFERENCE_IMAGE,
has_style_kw=has_explicit_style_specification(user_request))
→ see references/photography-style-presets.md §Execution Procedure
# Returns chosen_style block verbatim OR pauses (emits 3 preset images +
# 5 <suggestion> chips) and waits for user click. Never auto-picks a default.
# Step 4 — Fill 9 task-prompt templates (single batch)
image_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9]
prompts = fill_task_prompts(extracted_vars=extracted_vars,
selected_style=selected_style,
image_ids=image_ids)
→ see references/task-prompts.md §Execution Procedure
+ references/task-prompts-6-9.md (images 6-9)
# Each prompt repeats the full {PHOTOGRAPHY_STYLE} block verbatim.
# Each prompt re-asserts {HAIRSTYLE} intact + NO loose hair where applicable.
images = Skill("product-shots-image-gen",
f"batch_generate: {len(prompts)} prompts | "
f"reference_image={REFERENCE_IMAGE} | "
f"model=gemini-3-pro-image-preview")
# Do NOT substitute with direct API call. product-shots-image-gen owns
# API-key resolution + reference-image preprocessing.
assert images.delivered and len(images) == 9
# Step 5 — Self-check gate (re-validate against hard-constraints)
enforce_constraints(extracted_vars=extracted_vars, prompts=prompts, outputs=images)
→ see references/hard-constraints.md §Execution Procedure (full 8-rule sweep)
critical checks (subset of RULE_003 / RULE_005 / RULE_006):
- Image 4 (back view) — hairstyle structure visible from behind, no loose hair
- Image 8 (side profile) — hairstyle structure visible from side, no loose hair
- Image 5 (extreme close-up) — only eyes/nose/lips visible, no forehead/chin/shoulders
- All 9 — same {PHOTOGRAPHY_STYLE} signature (lighting / shadow direction / grain)
if any check fails → regenerate the affected image(s)
# Step 6 — User overrides (re-render selectively)
on user override of any extracted variable:
extracted_vars = apply_user_overrides(extracted_vars, user_overrides)
→ see references/variables-and-workflow.md §Variable Override Logic
# Internally calls mark_affected_images_for_regeneration(variable_key):
HAIRSTYLE / HAIR_COLOR / HAIR_ACCESSORIES → re-render images 1-9
OUTFIT → re-render 1, 2, 3, 4, 6, 7, 8, 9 (skip 5)
BAG / JEWELRY → re-render 1, 2, 3, 6, 9 (in-frame ones)
PHOTOGRAPHY_STYLE → re-render images 1-9
モジュールファイル目次
references/hard-constraints.md— 参照画像、分析優先、ヘアスタイルの維持、アクセサリーの忠実性、トリミング範囲、スタイルの統一、上書き処理、一括生成を対象とする8つのルール(RULE_001-008)。EPのステップ0で読み込み、EPのステップ5で再検証します。references/variables-and-workflow.md— セクション1(14個の入力変数と、HAIRSTYLE / OUTFIT / SKIN_TONEの抽出仕様)およびセクション3(ワークフロー)と、変数の上書き時の再レンダリング処理。references/photography-style-presets.md— セクション2:3種類のプリセット(Retro Analog Flash / Soft Muted Film / Hard Flash Editorial)。照明、影、フィルム、色、素材の仕様を一字一句そのまま記載したものと、スタイル選択時の出力形式(プリセット画像3枚と<suggestion>チップ5個)。references/task-prompts.md— セクション4.1-4.5:画像1「Three-Quarter Fashion Portrait」から画像5「Extreme Facial Close-Up」まで。各プロンプトテンプレートでは{VARIABLE}プレースホルダーを使用します。references/task-prompts-6-9.md— セクション4.6-4.9:画像6「Over-Right-Shoulder Glance」から画像9「Opposing Torso Twist」まで。両方のファイルを300行以内に保つため、task-prompts.mdから分割されています。
セクション一覧
1. Variables → references/variables-and-workflow.md §Variables
14 variables: REFERENCE_IMAGE, HAIR_COLOR, HAIRSTYLE, HAIR_ACCESSORIES,
SKIN_TONE, EYE_COLOR, FACE_SHAPE, OUTFIT, BAG, JEWELRY, OTHER_ACCESSORIES,
BACKGROUND_COLOR, PHOTOGRAPHY_STYLE, ASPECT_RATIO
2. Photography Style Presets → references/photography-style-presets.md
2.1 Preset A — Retro Analog Flash
2.2 Preset B — Soft Muted Film
2.3 Preset C — Hard Flash Editorial
3. Workflow → references/variables-and-workflow.md §Workflow
4. Task Prompts → references/task-prompts.md (images 1-5)
+ references/task-prompts-6-9.md (images 6-9)
4.1 Image 1 — Three-Quarter Fashion Portrait → task-prompts.md
4.2 Image 2 — High-Angle Bird's-Eye View → task-prompts.md
4.3 Image 3 — Over-the-Shoulder Close-Up → task-prompts.md
4.4 Image 4 — Back View with Hairstyle Visible → task-prompts.md
4.5 Image 5 — Extreme Facial Close-Up → task-prompts.md
4.6 Image 6 — Over-Right-Shoulder Glance → task-prompts-6-9.md
4.7 Image 7 — Low-Angle Upward Gaze, Contrapposto → task-prompts-6-9.md
4.8 Image 8 — Side Profile, Chest Crop → task-prompts-6-9.md
4.9 Image 9 — Medium Portrait, Opposing Torso Twist → task-prompts-6-9.md
5. Rules → references/hard-constraints.md
8 rules: Identity / Workflow / Hair / Accessories / Crop / Style / Override / Batch
スキル間の補足
- このスキルは、ユーザーが複数アングル/9アングル/モデルの一貫性を保ったポートレートを明示的にリクエストした場合にのみ呼び出されます。通常はアパレル、履物、アクセサリーの出品向けです。
asset_type ∈ {multi-angle, lookbook, model-series}の場合にproduct-shotsからルーティングされます。 REFERENCE_IMAGEを基準にしたアイデンティティの固定は、概念的にはproduct-shots-main-imageおよびproduct-shots-detail-page(モデルのリファレンスではなく、メインの商品画像を基準にします)と共通するパターンですが、この3つのスキルが互いを呼び出すことはありません。- 撮影スタイルのプリセット画像(ハードコードされたCDN URL 3件)は、このスキルが管理します。
- 画像生成は
product-shots-image-gen(product-shots の画像生成エンジン)に委任されます。このスキルはプロンプトとreference_image入力を生成し、実際のAPI呼び出しはproduct-shots-image-genが行います。
ツール
このスキルは、プロンプトとリファレンス画像の紐付けを生成します。実際の画像生成は、product-shots-image-gen(product-shots の画像生成エンジン)を通じて、またはホストプラットフォームが提供する画像から画像への変換に対応した任意のツールを通じて実行されます。ビジョンベースの変数抽出(Step 2)は、ここで生成されたルールとプロンプトテンプレートを使用して、親エージェント(Planner)が実行します。9枚の画像のバッチは、REFERENCE_IMAGE を画像生成モデルへのリファレンス入力として渡し、入力を埋めたタスクテンプレートをテキストプロンプトとして渡すことでレンダリングされます。