

セールスデッキ向け製品カタログからプレゼンテーション自動生成(2026年版)
製品カタログからプレゼンテーション自動生成とは、Shopifyのエクスポート、PIM、またはCSVから各SKUを読み取り、2Slides APIを2回呼び出すスクリプトのことです。POST /api/v1/slides/generate は固定ブランドテンプレートから編集可能なPPTXのセールシートを作成し、POST /api/v1/slides/create-like-this はキャンペーンのキービジュアルに合わせた画像デザインのローンチデッキを作成します。6ページのセールシートは60クレジット(約0.15ドル)、8ページの2Kローンチデッキは810クレジット(約2.03ドル)です。これはeコマース運営、プロダクトマーケター、小売ブランドを支援する代理店向けに設計されています。
主なポイント
- 1つのカタログ行が2つのデッキに変わります:Fast PPTのセールシートは1ページあたり10クレジット、画像デザインのローンチデッキはジョブごとに10クレジット+2Kページごとに100クレジット。
- すべての生成エンドポイントはキーごとに1分あたり6リクエストに制限されているため、ランナーは10秒ごとに1ジョブを送信し、SKUの横に
jobIdを保存します。 - ブランドのキービジュアルを
referenceImageUrlとして渡すことで、すべてのローンチデッキが同じキャンペーンの見た目を維持し、aspectRatioはバイヤー向けに"16:9"、ソーシャル向けに"4:5"を指定します。 - 同じリクエストに
responseLanguage: "German"または"Japanese"を指定すると、別途翻訳ステップなしで越境マーケット向けの小売店対応デッキが生成されます。 - 月20SKU(セールシート+ローンチデッキ)で約17,400クレジット、42.50ドルのクレジットパック1つで収まります。
対象ユーザー
あなたはブランド、マーケットプレイス、代理店のeコマース運営またはプロダクトマーケティング担当者で、新SKUや季節商品のたびに同じセールシート、ラインレビュー用デッキ、ローンチデッキを手作業で作り直しています。カタログにはすでに名前、特徴、仕様、価格、ヒーロー画像が含まれています。このレシピはそれを真実の情報源にし、スクリプトがCSV行からスケジュールまたはShopifyイベントで製品デッキを生成できるようにします。
四半期に1回だけ特注デッキが必要な場合は、このレシピは適しません。同じ構造が数十または数百SKUで繰り返される場合にAPIの効果が発揮されます。
ワークフロー概要
| ステップ | ツール | 処理内容 | 2Slidesエンドポイント / クレジット |
|---|---|---|---|
| 1 | Shopifyエクスポート、PIM、またはCSV | 各SKU行をプレーンテキストのブリーフ(名前、特徴、仕様、価格、小売店、画像URL)に正規化 | なし |
| 2 | Node.jsスクリプト | ブランドテンプレートから編集可能なPPTXの小売店向けセールシートを生成 | POST /api/v1/slides/generate、10クレジット/ページ |
| 3 | Node.jsスクリプト | キャンペーンキービジュアルに合わせた画像デザインのローンチデッキを16:9と4:5で生成 | POST /api/v1/slides/create-like-this、10 + 100クレジット/2Kページ |
| 4 | Node.jsスクリプト | 送信を10秒間隔で分散、jobIdをSKUに紐づけて保存、ポーリング、S3にアップロード | GET /api/v1/jobs/{jobId}、無料 |
| 5 | 同じスクリプト、追加行 | 越境小売店向けにドイツ語・日本語バリアントを生成 | 同じエンドポイント、responseLanguageを市場ごとに設定 |
| 6 | Shopify + Make | 商品作成イベントでHTTPリクエストを発火し、新SKUのデッキを数分以内に生成 | 同じエンドポイント、同じクレジット |
ステップ1:カタログをSKUごとのブリーフに正規化
ソースが何であれ、各SKUを同じ列構成の行に平坦化します。Shopifyの製品CSVにはすでにTitle、Body (HTML)、Variant Price、Image Srcがあります。PIMエクスポートは通常構造化属性を持ちます。独自に2列追加してください:target_retailer(どのバイヤーがこのセールシートを見るか)とmarket(小売店が読む言語)。
sku,name,features,specs,price,hero_image_url,target_retailer,market
NB-TRAIL-042,Northbound Trail Runner 2,"Vibram outsole; 8 mm drop; recycled mesh upper","Weight 265 g; Sizes EU 39-47; Colors: Moss, Slate",139.00,https://cdn.example-brand.com/nb-trail-042.jpg,Decathlon DE,de
NB-TRAIL-042,Northbound Trail Runner 2,"Vibram outsole; 8 mm drop; recycled mesh upper","Weight 265 g; Sizes EU 39-47; Colors: Moss, Slate",139.00,https://cdn.example-brand.com/nb-trail-042.jpg,Xebio JP,ja
NB-PACK-018,Northbound Daypack 22L,"Roll-top closure; laptop sleeve; 420D ripstop","Volume 22 L; Weight 610 g; Colors: Sand, Black",89.00,https://cdn.example-brand.com/nb-pack-018.jpg,REI US,enプロンプトビルダーは行をuserInputに変換します。数百語以内に収め、Fast PPTがブリーフからデッキを計画するため、対象読者とスライド枚数をテキストに明記してください。
function sellSheetPrompt(row) {
return [
`Retailer sell sheet for ${row.name} (SKU ${row.sku}), prepared for the buying team at ${row.target_retailer}.`,
`6 slides: cover with product name and one-line positioning; key features; technical specs; pricing and margin talking points (retail price ${row.price} EUR); merchandising and launch timing; contact and next steps.`,
`Features: ${row.features}. Specs: ${row.specs}.`,
`Tone: factual, buyer-facing, no marketing superlatives.`,
].join("\n");
}
function launchPrompt(row) {
return [
`Product launch deck for ${row.name} (SKU ${row.sku}).`,
`Audience: retail buyers and category managers.`,
`Cover the hero story, the three headline features (${row.features}), the spec sheet (${row.specs}), retail price ${row.price} EUR, and the seasonal campaign window.`,
`Use the product hero image at ${row.hero_image_url} as the visual anchor where appropriate.`,
].join("\n");
}ステップ2:Fast PPTで小売店向けセールシートを生成
アカウントマネージャーはPPTXを開いて価格を編集し、転送できる必要があります。これがFast PPTのパスです:POST /api/v1/slides/generateは1,500以上のデザイン済みテンプレートのいずれかを埋め込み、約30秒でネイティブPowerPointファイルを返します。ブランドごとに1つのthemeIdを選び、すべてのセールシートが同じレイアウトシステムを共有するようにハードコードしてください。すでに承認済みテンプレートがある場合は、On-brand AI slides with template fillで標準化方法を解説しています。

themeIdを使います。
テーマを一度検索してIDを環境変数に保存:
curl "https://2slides.com/api/v1/themes/search?query=retail%20product%20catalog&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"生成は以下の通り。デフォルトのmodeはsyncで、1回の呼び出しでdownloadUrlを返します。バッチ処理ではmode: "async"を使い、リクエストは即座にjobIdを返し、スクリプトは送信を続けます。
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Retailer sell sheet for Northbound Trail Runner 2 (SKU NB-TRAIL-042), prepared for the buying team at REI US. 6 slides: cover; key features (Vibram outsole, 8 mm drop, recycled mesh upper); technical specs (265 g, EU 39-47, Moss and Slate); pricing and margin talking points (retail 139.00); merchandising and launch timing; contact and next steps. Tone: factual, buyer-facing.",
"themeId": "YOUR_BRAND_THEME_ID",
"responseLanguage": "English",
"mode": "async"
}'6ページのセールシートは60クレジット、5ドルパック単価で約0.15ドルです。
ステップ3:create-like-thisでキャンペーンローンチデッキを生成
ローンチデッキは異なります。バイヤーやソーシャルチャネルはキャンペーンの見た目を期待し、テンプレート風ではなく、スライドごとに編集しません。これが画像デザインのパスです:POST /api/v1/slides/create-like-thisはreferenceImageUrlを受け取り、その画像からデザインシステム(パレット、フォント、構図)を導出し、すべてのページをPDF内の画像としてレンダリングします。シーズンのキービジュアルを指定すれば、すべてのSKUデッキがキャンペーンの見た目を継承します。Create Slides Like Thisの製品ページでは同じパイプラインをウェブワークスペースで確認できます。

create-like-thisがAPIの入口で、参照画像が文章プロンプトの代わりになります。
SKUごとに2回実行し、異なるaspectRatioを指定します:バイヤーデッキは"16:9"、ソーシャルカルーセルは"4:5"。画像パイプラインはデフォルトでmode: "async"です。
curl -X POST https://2slides.com/api/v1/slides/create-like-this \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Product launch deck for Northbound Trail Runner 2 (SKU NB-TRAIL-042). Audience: retail buyers and category managers. Cover the hero story, three headline features (Vibram outsole, 8 mm drop, recycled mesh upper), the spec sheet (265 g, EU 39-47), retail price 139.00, and the FW26 campaign window.",
"referenceImageUrl": "https://cdn.example-brand.com/campaigns/fw26/key-visual.jpg",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "standard",
"imageModel": "gemini-3-pro-image",
"responseLanguage": "English",
"mode": "async"
}'ソーシャル版はaspectRatioを"4:5"、pageを6に変え、ブリーフはヒーローストーリーと3つの特徴に短縮します。8ページ2Kデッキは10 + 800 = 810クレジット(約2.03ドル)、6ページ4:5版は610クレジット(約1.53ドル)。page: 0はプランナーが枚数を選べますが、固定数のほうがカタログコストを予測しやすいです。
ステップ4:1分あたり6リクエストの制限内でバッチ処理
レート制限はAPIキーごとに1分あたり6リクエスト、GET /api/v1/jobs/{jobId}は1分あたり10リクエストです。両方を守るランナーは短いです:10秒ごとに1ジョブ送信し、進行中のjobIdをSKUに紐づけてディスクに保存し、6秒ごとにラウンドロビンで保留ジョブをポーリングします。完了したファイルはジョブ成功次第クラウドストレージにアップロードします。
// catalog-to-decks.mjs (Node 20, サーバー側で実行; SLIDES_API_KEYはブラウザに送らない)
import { readFile, writeFile } from "node:fs/promises";
import { parse } from "csv-parse/sync";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const API = "https://2slides.com/api/v1";
const headers = {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.SLIDES_API_KEY}`,
};
const THEME_ID = process.env.BRAND_THEME_ID;
const KEY_VISUAL = "https://cdn.example-brand.com/campaigns/fw26/key-visual.jpg";
const s3 = new S3Client({ region: "eu-central-1" });
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const LANGUAGE = { en: "English", de: "German", ja: "Japanese" };
async function submit(path, body) {
const res = await fetch(`${API}${path}`, { method: "POST", headers, body: JSON.stringify(body) });
if (!res.ok) throw new Error(`${path} -> ${res.status} ${await res.text()}`);
return res.json(); // asyncモードは{ jobId, ... }を返す
}
// 1. 送信:10秒ごとに1リクエストで1分6リクエスト制限内
const rows = parse(await readFile("catalog.csv", "utf8"), { columns: true });
const jobs = []; // { sku, market, kind, jobId }
for (const row of rows) {
const responseLanguage = LANGUAGE[row.market] ?? "Auto";
const sheet = await submit("/slides/generate", {
userInput: sellSheetPrompt(row),
themeId: THEME_ID,
responseLanguage,
mode: "async",
});
jobs.push({ sku: row.sku, market: row.market, kind: "sell-sheet", jobId: sheet.jobId });
await sleep(10_000);
for (const [aspectRatio, page, kind] of [["16:9", 8, "launch-16x9"], ["4:5", 6, "social-4x5"]]) {
const deck = await submit("/slides/create-like-this", {
userInput: launchPrompt(row),
referenceImageUrl: KEY_VISUAL,
aspectRatio,
resolution: "2K",
page,
contentDetail: "standard",
responseLanguage,
mode: "async",
});
jobs.push({ sku: row.sku, market: row.market, kind, jobId: deck.jobId });
await sleep(10_000);
}
// jobId <-> SKUマップをディスクに保存。途中クラッシュしても支払い済みジョブを失わない
await writeFile("jobs.json", JSON.stringify(jobs, null, 2));
}
// 2. ポーリング:jobs/{id}は1分10リクエスト制限。6秒ごとに1ジョブをラウンドロビンでチェック
const pending = new Set(jobs.map((j) => j.jobId));
while (pending.size > 0) {
for (const job of jobs.filter((j) => pending.has(j.jobId))) {
const res = await fetch(`${API}/jobs/${job.jobId}`, { headers });
const state = await res.json(); // { status, progress, downloadUrl }
if (state.status === "success") {
pending.delete(job.jobId);
const file = await fetch(state.downloadUrl);
const ext = job.kind === "sell-sheet" ? "pptx" : "pdf";
await s3.send(new PutObjectCommand({
Bucket: "brand-sales-assets",
Key: `decks/${job.sku}/${job.market}/${job.kind}.${ext}`,
Body: Buffer.from(await file.arrayBuffer()),
}));
console.log(`uploaded ${job.sku} ${job.market} ${job.kind}`);
} else if (state.status === "failed") {
pending.delete(job.jobId);
console.error(`failed ${job.sku} ${job.kind}`, state);
}
await sleep(6_000);
}
}SKUあたり3ジョブを10秒間隔で送信すると、100SKUは約50分で送信完了。300ジョブを6秒ごとにポーリングすると1パス約30分かかります。Python版はAutomate presentation generation with Python and the 2Slides APIにあり、一般的なキューイングパターンはHow to batch-generate presentations with an AI APIで解説しています。
ステップ5:越境小売店向け多言語バリアントを追加
越境は自動化の真価が発揮される場です。ドイツのバイヤーと日本のバイヤーは、それぞれの言語で同じ仕様・同じブランドテンプレートのセールシートを受け取るべきです。翻訳サービスは不要です:responseLanguageに言語名を渡すだけで、同じ英語ブリーフからその言語でデッキが作成されます。

generateエンドポイントのパラメータと対応言語。言語名(例:"German")を渡し、コード(例:"de")は使いません。
上記スクリプトはすでにmarketを言語名にマッピングしています(de→"German"、ja→"Japanese")。対応言語は20以上あり、スペイン語、フランス語、イタリア語、ポルトガル語、ポーランド語、韓国語、簡体字中国語、繁体字中国語、アラビア語、トルコ語などが含まれます。価格は市場通貨(EUR、JPY)で書き、小売店名もブリーフに入れて数字や文脈もローカライズしてください。
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Retailer sell sheet for Northbound Trail Runner 2 (SKU NB-TRAIL-042), prepared for the buying team at Xebio. 6 slides: cover; key features (Vibram outsole, 8 mm drop, recycled mesh upper); technical specs (265 g, sizes 25-30 cm, Moss and Slate); pricing and margin talking points (retail JPY 21,900); merchandising and launch timing; contact and next steps.",
"themeId": "YOUR_BRAND_THEME_ID",
"responseLanguage": "Japanese",
"mode": "async"
}'言語バリアントはそれぞれ別ジョブで同じ価格なので、3市場で販売するSKUは3倍のセールシート、180クレジット(約0.45ドル)になります。
ステップ6:Shopifyの「商品作成」イベントでMakeをトリガー
バッチランナーは季節商品の一括処理に適しています。新SKUが少しずつ出る場合は、ストアをAPIに接続し、商品作成後数分でデッキが生成されるようにします。Make(Makeヘルプセンター参照)はShopify商品イベントを直接扱え、Zapierやn8nでも同様の形で動作します。
- トリガー:Shopifyの「Watch products」商品作成イベント、またはShopifyの
products/createWebhookを受けるWebhookトリガー。 - 変換:Codeノードで商品本文のHTMLを除去し、
variants[0].priceとimages[0].srcを取得し、sellSheetPromptのようにuserInputを組み立てる。 - HTTPリクエストノード(1):
POST https://2slides.com/api/v1/slides/create-like-thisにステップ3のボディを送信。Authorization: Bearer <key>ヘッダーはシナリオ変数から取得し、商品データからは渡さない。 - Delay/Waitノード:60秒待機。
- HTTPリクエストノード(2):
GET https://2slides.com/api/v1/jobs/{{jobId}}。Routerでstatusを判定し、successは続行、pendingまたはprocessingはDelayに戻り、failedはSlack通知。 - 配信:
downloadUrlをHTTP GETし、Google Drive、Dropbox、S3などのSKUフォルダにアップロード、sku、jobId、status、保存パスをシートに記録。
Shopifyは大量インポートやアプリ同期時に複数の商品イベントを連続発火することがあります。ここでも10秒間隔を設けるか、イベントをキューに入れてステップ4のランナーで処理してください。さもないと7件目のリクエストで失敗します。
参照スタイルの選び方
create-like-thisは参照画像が必要です。キャンペーンの一貫性が目的なら自社のキャンペーンキービジュアルが最適です。小売業界向けデッキの見た目をまだ決めかねている場合は、2Slidesギャラリーに実際の参照デッキがあり、学習やreferenceImageUrlとしてデザインシステムを借用できます。これらは参照用デッキであり、API出力ではありません。


referenceImageUrlに渡すと、モデルはグリッド、パレット、チャート処理を再利用します。
キャンペーンごと、アスペクト比ごとに1枚の参照画像を使ってください。SKUごとに変えると、40デッキがそれぞれ見た目は良いものの統一感のないファミリーになります。
費用
クレジットは従量課金制:5ドルで2,000クレジット(1クレジット0.0025ドル)、80ドルで40,000クレジット(1クレジット0.002ドル)。新規アカウントは500クレジットの無料枠があり、数枚のセールシートのテストに十分です。
| ボリューム | SKUあたり | 月間クレジット | おおよそのUSD |
|---|---|---|---|
| 月20SKU:6ページセールシート+8ページ16:9ローンチデッキ | 60 + 810 = 870 | 17,400 | 42.50ドル(20,000クレジットパック1つ分) |
| 月20SKU:6ページ4:5ソーシャルデッキ追加 | 870 + 610 = 1,480 | 29,600 | パックサイズにより60~74ドル |
| 月500SKU:セールシート+16:9ローンチデッキ | 870 | 435,000 | 約870ドル(1クレジット0.002ドル換算) |
| 月500SKU:3デッキすべて | 1,480 | 740,000 | 約1,480ドル(同上) |
セールシート単体は安価です:500枚の6ページPPTXセールシートは30,000クレジット、約60ドル。予算は画像デザインデッキにかかるため、ローンチデッキはSKUごとに1回、セールシートは市場ごとに1回生成してください。
比較として、GammaのAPI(developers.gamma.app参照)は同様の自動化を提供しますが、APIキーにはProプランが必要です。2Slidesキーはどのアカウントでも使えます。2Slidesは当社製品なので、比較時にご留意ください。
このユースケースにおけるFast PPTと画像デザインスライドの使い分け
| ニーズ | 使用 | 理由 |
|---|---|---|
| アカウントマネージャーが価格を編集し、スライドを差し替え、バイヤーに転送したい | Fast PPT generate | ネイティブPPTX、10クレジット/ページ、ブランドごとに固定themeId |
| デッキがキャンペーンキービジュアルと完全に一致する必要がある | create-like-this | referenceImageUrlからデザインシステムを導出 |
| ソーシャルカルーセルや縦型フォーマット | create-like-thisでaspectRatioを"4:5"または"9:16"に指定 | PDF+ページごとの画像で投稿準備済み |
| ナレーション付き製品紹介やマーケットプレイス掲載用MP4 | まずcreate-like-thisで生成し、次にgenerate-narration(210クレジット/ページ) | Fast PPTジョブはナレーション不可 |
よくある落とし穴
- 大量インポートでレート制限に引っかかる。 生成エンドポイントはすべてキーごとに1分6リクエスト。送信は10秒間隔かキューイングで対応し、
Promise.allで一斉送信しない。 - ShopifyテーマやストアフロントスクリプトにAPIキーを埋め込む。 キーは必ずサーバー側(ランナー、Make接続、サーバーレス関数)に置く。ブラウザに送ると誰でも読める。
- Fast PPTセールシートをナレーションしようとする。
generate-narrationはcreate-pdf-slidesまたはcreate-like-thisのジョブのみ対応。ナレーション付き動画が目的なら画像デザインデッキから始める。 responseLanguage: "de"のようにコードを渡す。 パラメータは言語名("German"、"Japanese"、"Spanish")を受け付け、コードは認識しない。- PIMの全属性を
userInputに投げる。 長すぎる属性リストはスライドを散らかす。まずバイヤーに関連する特徴と仕様に要約し、ステップ1のCSV列がフィルターになる。 - カタログ処理でプランナーにページ数を選ばせる。
page: 0は単発なら良いが、固定ページ数にするとSKUごとのクレジットコストが予測可能。
よくある質問
ShopifyのCSVエクスポートから直接製品デッキを生成できますか?
はい。Shopifyの製品CSVにはタイトル、本文、バリアント価格、画像URLが含まれており、ステップ1のビルダーがそれらをuserInputにマッピングします。target_retailerとmarket列を追加するかタグから派生させてください。ランナーは1行ずつgenerateでPPTXセールシートを、create-like-thisでローンチデッキを呼び出します。
数百のローンチデッキをブランドに沿った見た目に保つには?
すべてのcreate-like-this呼び出しで同じキャンペーンキービジュアルをreferenceImageUrlに渡し、アスペクト比ごとに1つの参照画像を使います。画像からデザインシステムが導出され、パレット、フォント、構図が共有されます。編集可能なセールシートはブランドごとに1つのthemeIdをハードコードし、すべて同じテンプレートから生成します。
100SKUの処理にどれくらい時間がかかりますか?
送信がボトルネックです:1分6リクエストでSKUあたり3デッキなので、1SKUあたり30秒、100SKUは約50分で送信完了。Fast PPTジョブは約30秒で完了し、画像デザインデッキはバックグラウンドで処理されます。1分10リクエストのポーリングは1パス約30分かかります。
1SKUあたりのクレジットコストは?
6ページFast PPTセールシートは60クレジット(約0.15ドル)。8ページ2K画像デザインローンチデッキは10クレジットの計画費+800クレジットのページ費で合計810クレジット(約2.03ドル)。6ページ4:5ソーシャルデッキは610クレジット。3つ合わせて1,480クレジットで、80ドルパック単価で約2.96ドルです。
同じスクリプトでドイツ語と日本語のデッキも作れますか?
はい。同じリクエストボディでresponseLanguageを"German"または"Japanese"に設定すると、英語ブリーフからその言語でデッキが作成されます。言語バリアントは別ジョブで同じクレジットコストです。市場ごとの価格や小売店名もブリーフに入れて、数字や文脈もローカライズしてください。
次のステップ
- 2slides.com/apiでAPIキーを取得。新規アカウントは500クレジットの無料枠付きで、テンプレートとプロンプトのテストに十分です。
- ハブ投稿AI presentation API use cases by teamで他チームの同じエンドポイント活用例を確認。
- How marketing teams produce AI presentation decks at scaleを読んで、製品カタログからプレゼン自動化のキャンペーン側視点を理解し、最初の本格カタログ処理前に5SKUのパイロットを実施。
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free