> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# Carousel & Multi-Asset Formats

このガイドでは、複数のアイテムを連続表示するカルーセル系フォーマット（プロダクトカルーセル、画像スライドショー、ストーリーシーケンス、動画プレイリスト）を AdCP でどのように表現するかを説明します。

## カルーセルフォーマットの特徴

カルーセルフォーマットは繰り返し可能なアセットグループを使って次を表現します。

* **プロダクトカルーセル** - 画像、タイトル、価格を持つ複数商品
* **画像スライドショー** - 必要に応じてキャプションを付けた画像の連なり
* **ストーリーシーケンス** - 連続したストーリーフレーム（モバイルストーリー）
* **動画プレイリスト** - 複数の動画クリップを順番に再生

すべてのカルーセルフォーマットは、`item_type: "repeatable_group"` の `asset_group_id` と `min_count` / `max_count` で構造を定義します。

カードのメディアは画像でも動画でもかまいません。カードが動画を運ぶ場合、プラットフォームは `card_video_max_file_size_kb`（`card_image_max_file_size_kb` の動画版）を介してカードごとの動画ファイルサイズを制限でき、これはカードごとの `card_video_max_duration_ms` のデュレーション制限と併用します。カードごとの権威あるフィールドリストは `image_carousel` スキーマにあります。

## 繰り返し可能なアセットグループ

### 基本構造

カルーセルフォーマットでは、各アイテムに必要なアセットをまとめた繰り返しグループを定義します。

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "product_carousel_3_to_10"
  },
  "type": "display",
  "dimensions": "300x250",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "product",
      "min_count": 3,
      "max_count": 10,
      "assets": [
        {
          "asset_id": "image",
          "asset_type": "image",
          "asset_role": "product_image",
          "requirements": {
            "width": 300,
            "height": 300,
            "aspect_ratio": "1:1"
          }
        },
        {
          "asset_id": "title",
          "asset_type": "text",
          "requirements": {"max_length": 50}
        },
        {
          "asset_id": "price",
          "asset_type": "text",
          "requirements": {"max_length": 20}
        }
      ]
    },
    {
      "item_type": "individual",
      "asset_id": "brand_logo",
      "asset_type": "image",
      "requirements": {"width": 80, "height": 80}
    }
  ]
}
```

## 標準カルーセルフォーマット

### Product Carousel (Display)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "product_carousel_display"
  },
  "type": "display",
  "dimensions": "300x600",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "product",
      "min_count": 2,
      "max_count": 5,
      "assets": [
        {
          "asset_id": "image",
          "asset_type": "image",
          "asset_role": "product_image",
          "requirements": {"width": 300, "height": 250}
        },
        {
          "asset_id": "title",
          "asset_type": "text",
          "requirements": {"max_length": 40}
        },
        {
          "asset_id": "description",
          "asset_type": "text",
          "requirements": {"max_length": 100}
        },
        {
          "asset_id": "cta_text",
          "asset_type": "text",
          "requirements": {"max_length": 15}
        }
      ]
    }
  ]
}
```

### Image Slideshow

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "image_slideshow_5s_each"
  },
  "type": "display",
  "dimensions": "728x90",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "slide",
      "min_count": 3,
      "max_count": 8,
      "assets": [
        {
          "asset_id": "image",
          "asset_type": "image",
          "requirements": {"width": 728, "height": 90}
        },
        {
          "asset_id": "caption",
          "asset_type": "text",
          "required": false,
          "requirements": {"max_length": 60}
        }
      ]
    }
  ]
}
```

### Story Sequence (Mobile)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "mobile_story_vertical"
  },
  "type": "display",
  "dimensions": "1080x1920",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "frame",
      "min_count": 3,
      "max_count": 7,
      "assets": [
        {
          "asset_id": "background",
          "asset_type": "image",
          "asset_role": "background_image",
          "requirements": {
            "width": 1080,
            "height": 1920,
            "aspect_ratio": "9:16"
          }
        },
        {
          "asset_id": "headline",
          "asset_type": "text",
          "requirements": {"max_length": 30}
        },
        {
          "asset_id": "body",
          "asset_type": "text",
          "requirements": {"max_length": 100}
        }
      ]
    },
    {
      "item_type": "individual",
      "asset_id": "brand_logo",
      "asset_type": "image",
      "requirements": {"width": 100, "height": 100}
    }
  ]
}
```

### Video Playlist

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "video_playlist_6s_bumpers"
  },
  "type": "video",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "clip",
      "min_count": 2,
      "max_count": 5,
      "assets": [
        {
          "asset_id": "video",
          "asset_type": "video",
          "requirements": {
            "duration": "6s",
            "format": "MP4 H.264",
            "resolution": ["1920x1080"]
          }
        }
      ]
    }
  ]
}
```

## クリエイティブマニフェスト

### 命名規則

マニフェスト内のアセットは `{group_id}_{index}_{asset_id}` というパターンを使います。

インデックスは **0 始まり** です: `product_0_image`, `product_1_image`, `product_2_image`

**例**: `asset_group_id: "product"` と `asset_id: "image"` の場合、マニフェストは以下を提供します。

* 1 つ目: `product_0_image`
* 2 つ目: `product_1_image`
* 3 つ目: `product_2_image`

同じインデックスに属するアセットはまとめて提供する必要があります（タイトルが必須の場合、`product_0_image` だけを渡して `product_0_title` を欠落させることはできません）。

### Product Carousel マニフェスト

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "product_carousel_3_to_10"
  },
  "assets": {
    "product_0_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/shoes_red.jpg",
      "width": 300,
      "height": 300
    },
    "product_0_title": {
      "asset_type": "text",
      "content": "Red Running Shoes"
    },
    "product_0_price": {
      "asset_type": "text",
      "content": "$89.99"
    },
    "product_1_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/shoes_blue.jpg",
      "width": 300,
      "height": 300
    },
    "product_1_title": {
      "asset_type": "text",
      "content": "Blue Trail Shoes"
    },
    "product_1_price": {
      "asset_type": "text",
      "content": "$79.99"
    },
    "product_2_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/shoes_black.jpg",
      "width": 300,
      "height": 300
    },
    "product_2_title": {
      "asset_type": "text",
      "content": "Black Casual Shoes"
    },
    "product_2_price": {
      "asset_type": "text",
      "content": "$69.99"
    },
    "brand_logo": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/logo.png",
      "width": 80,
      "height": 80
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/shoes?campaign={MEDIA_BUY_ID}"
    }
  }
}
```

### Story Sequence マニフェスト

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "mobile_story_vertical"
  },
  "assets": {
    "frame_0_background": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/story_frame1.jpg",
      "width": 1080,
      "height": 1920
    },
    "frame_0_headline": {
      "asset_type": "text",
      "content": "New Collection"
    },
    "frame_0_body": {
      "asset_type": "text",
      "content": "Discover our latest summer styles"
    },
    "frame_1_background": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/story_frame2.jpg",
      "width": 1080,
      "height": 1920
    },
    "frame_1_headline": {
      "asset_type": "text",
      "content": "50% Off"
    },
    "frame_1_body": {
      "asset_type": "text",
      "content": "Limited time offer on all items"
    },
    "frame_2_background": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/story_frame3.jpg",
      "width": 1080,
      "height": 1920
    },
    "frame_2_headline": {
      "asset_type": "text",
      "content": "Shop Now"
    },
    "frame_2_body": {
      "asset_type": "text",
      "content": "Tap to explore the collection"
    },
    "brand_logo": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/logo.png",
      "width": 100,
      "height": 100
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/summer-sale?device={DEVICE_ID}&campaign={MEDIA_BUY_ID}"
    }
  }
}
```

## マニフェスト検証ルール

### グループは完全なセットで提供

各グループのインスタンスには、フォーマットで定義された必須アセットをすべて含める必要があります。

```json theme={null}
// ❌ NG - product_1_title が欠落
{
  "product_0_image": {...},
  "product_0_title": {...},
  "product_1_image": {...}
}

// ✅ OK - 各商品に必須アセットが揃っている
{
  "product_0_image": {...},
  "product_0_title": {...},
  "product_1_image": {...},
  "product_1_title": {...}
}
```

### 件数の制約

マニフェストは `min_count` 以上 `max_count` 以下のインスタンスを提供する必要があります。

```json theme={null}
// フォーマット仕様
{
  "asset_group_id": "product",
  "min_count": 3,
  "max_count": 10
}

// ❌ NG - 2 商品のみ（最小数未満）
{
  "product_0_image": {...},
  "product_1_image": {...}
}

// ✅ OK - 3 商品（最小数を満たす）
{
  "product_0_image": {...},
  "product_1_image": {...},
  "product_2_image": {...}
}
```

### 任意アセット

グループ内の個別アセットは `"required": false` にできます。

```json theme={null}
{
  "item_type": "repeatable_group",
  "asset_group_id": "slide",
  "min_count": 3,
  "max_count": 8,
  "assets": [
    {
      "asset_id": "image",
      "required": true
    },
    {
      "asset_id": "caption",
      "required": false  // Can be omitted
    }
  ]
}
```

任意アセットは、一部のインスタンスには提供し、他には提供しないことができます:

```json theme={null}
{
  "slide_0_image": {...},
  "slide_0_caption": {...},  // Caption provided
  "slide_1_image": {...},    // No caption
  "slide_2_image": {...},
  "slide_2_caption": {...}   // Caption provided
}
```

### ゼロ始まりのインデックス

常に 0 から始まる連続したゼロ始まりのインデックスを使います:

```
product_0_image
product_0_title
product_1_image
product_1_title
product_2_image
product_2_title
```

## クリックスルー URL のパターン

### 単一のランディング URL

すべてのカルーセルアイテムが同じ遷移先にリンクします:

```json theme={null}
{
  "landing_url": {
    "asset_type": "url",
    "url_type": "clickthrough",
    "url": "https://brand.com/products?campaign={MEDIA_BUY_ID}"
  }
}
```

### アイテムごとのランディング URL

各カルーセルアイテムは独自のクリックスルー URL を持てます（フォーマットがサポートする場合）:

```json theme={null}
{
  "product_0_landing_url": {
    "asset_type": "url",
    "url_type": "clickthrough",
    "url": "https://brand.com/product/shoes-red?campaign={MEDIA_BUY_ID}"
  },
  "product_1_landing_url": {
    "asset_type": "url",
    "url_type": "clickthrough",
    "url": "https://brand.com/product/shoes-blue?campaign={MEDIA_BUY_ID}"
  },
  "product_2_landing_url": {
    "asset_type": "url",
    "url_type": "clickthrough",
    "url": "https://brand.com/product/shoes-black?campaign={MEDIA_BUY_ID}"
  }
}
```

フォーマット定義に、アイテムごとの URL をサポートするかどうかが示されます。

## カルーセル固有のマクロ

[ユニバーサルマクロ](/docs/creative/universal-macros) に加えて、一部プラットフォームではカルーセル固有マクロをサポートします。

* `{CAROUSEL_INDEX}` - 現在のカルーセルアイテムの 0 始まりインデックス
* `{CAROUSEL_POSITION}` - ユーザー表示用の 1 始まり位置
* `{CAROUSEL_TOTAL}` - カルーセル内の総アイテム数

**トラッキング URL 例:**

```
https://track.brand.com/view?buy={MEDIA_BUY_ID}&item={CAROUSEL_INDEX}&total={CAROUSEL_TOTAL}
```

## 完全な例

### フォーマット定義

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "ecommerce_carousel_300x600"
  },
  "name": "E-commerce Product Carousel",
  "type": "display",
  "dimensions": "300x600",
  "assets": [
    {
      "item_type": "repeatable_group",
      "asset_group_id": "product",
      "min_count": 3,
      "max_count": 6,
      "assets": [
        {
          "asset_id": "image",
          "asset_type": "image",
          "asset_role": "product_image",
          "requirements": {
            "width": 300,
            "height": 300,
            "aspect_ratio": "1:1",
            "file_types": ["jpg", "png", "webp"]
          }
        },
        {
          "asset_id": "title",
          "asset_type": "text",
          "requirements": {"max_length": 50}
        },
        {
          "asset_id": "price",
          "asset_type": "text",
          "requirements": {"max_length": 20}
        },
        {
          "asset_id": "discount_badge",
          "asset_type": "text",
          "required": false,
          "requirements": {"max_length": 10}
        }
      ]
    },
    {
      "item_type": "individual",
      "asset_id": "brand_logo",
      "asset_type": "image",
      "requirements": {"width": 80, "height": 80}
    },
    {
      "item_type": "individual",
      "asset_id": "cta_text",
      "asset_type": "text",
      "requirements": {"max_length": 15}
    }
  ]
}
```

### マニフェスト

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "ecommerce_carousel_300x600"
  },
  "assets": {
    "product_0_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/watch_gold.jpg",
      "width": 300,
      "height": 300
    },
    "product_0_title": {
      "asset_type": "text",
      "content": "Gold Classic Watch"
    },
    "product_0_price": {
      "asset_type": "text",
      "content": "$299"
    },
    "product_0_discount_badge": {
      "asset_type": "text",
      "content": "25% OFF"
    },
    "product_1_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/watch_silver.jpg",
      "width": 300,
      "height": 300
    },
    "product_1_title": {
      "asset_type": "text",
      "content": "Silver Sport Watch"
    },
    "product_1_price": {
      "asset_type": "text",
      "content": "$249"
    },
    "product_2_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/products/watch_leather.jpg",
      "width": 300,
      "height": 300
    },
    "product_2_title": {
      "asset_type": "text",
      "content": "Leather Dress Watch"
    },
    "product_2_price": {
      "asset_type": "text",
      "content": "$199"
    },
    "product_2_discount_badge": {
      "asset_type": "text",
      "content": "NEW"
    },
    "brand_logo": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/logo.png",
      "width": 80,
      "height": 80
    },
    "cta_text": {
      "asset_type": "text",
      "content": "Shop Now"
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/watches?campaign={MEDIA_BUY_ID}&utm_source={DOMAIN}"
    },
    "impression_tracker": {
      "asset_type": "url",
      "url_type": "tracker_pixel",
      "url": "https://track.brand.com/imp?buy={MEDIA_BUY_ID}&cb={CACHEBUSTER}"
    }
  }
}
```

## 関連ドキュメント

* [Creative Manifests](/docs/creative/creative-manifests) - マニフェスト仕様の全体像
* [Universal Macros](/docs/creative/universal-macros) - トラッキングで使えるマクロ
* [Asset Types](/docs/creative/asset-types) - アセットタイプの仕様
* [Display Ads](/docs/creative/channels/display) - 標準的なディスプレイフォーマット
* [Video Ads](/docs/creative/channels/video) - 動画フォーマットの仕様
