

マーケティングレポートプレゼンテーションの自動化:Deck to Video API(2026年版)
マーケティングレポートプレゼンテーションを自動化するには、月曜日のcronジョブを実行してキャンペーン指標を取得し、LLMに8スライドのナラティブを依頼し、3つの2Slidesエンドポイントを呼び出します。create-pdf-slidesは画像デザインの16:9リキャップデッキを作成し、generate-narrationはmultiモードで2音声トラックを生成、download-slides-pages-voicesはページごとのPNGとWAVファイルを取得し、ffmpegでMP4に結合します。8ページの2Kデッキは810クレジット(約2ドル)、ナレーションは1,680クレジット(約4.20ドル)で、ナレーション付きの週次リキャップはクライアント1件あたり約6ドルです。マーケティングオペレーション、グロースエンジニア、代理店向けに構築されています。
主なポイント
- 1つのスケジュールジョブで月曜のルーチン(指標エクスポート、8スライドのリキャップデッキ、2人のスピーカーによるボイスオーバー、1920×1080のMP4)を置き換えます。
- 3つの2Slidesエンドポイントが作業を担当:
create-pdf-slides(2Kで1ページあたり10+100クレジット)、generate-narration(1ページあたり210クレジット)、download-slides-pages-voices(無料)。 - ナレーション付き8スライドのリキャップは2,490クレジットで、クレジットパックにより約5〜6.25ドル。デッキ単体は810クレジット。
- すべての書き込みエンドポイントは1キーあたり1分間に6リクエストの制限があるため、50クライアントの実行は並列ではなくキュー処理が必要。
- Fast PPT(
generate)はナレーション不可。動画化はcreate-pdf-slidesまたはcreate-like-thisから開始。
対象ユーザー
毎週月曜に同じリキャップデッキを作り直すマーケティングオペレーションリーダー、すでに指標をデータウェアハウスに持つグロースエンジニア、20件、50件以上のクライアントに週次アップデートを提供する代理店。課題は共通で、数字は朝6時までに揃い、デッキは昼までに完成するが、関係者の半数は開封しない。
PowerPointでスライドを後から編集する必要がある場合はこのレシピは適しません。画像デザインのパイプラインは完成したPDFとページ画像を生成し、ネイティブPPTXは生成しません。編集可能な週次デッキにはZapierと2Slidesで週次レポートを自動化するのFast PPTパスが適しています。
ワークフロー概要
| ステップ | ツール | 内容 | 2Slidesエンドポイント / クレジット |
|---|---|---|---|
| 1. トリガー | Cron(GitHub Actions、Cloud Scheduler、VMのcron) | クライアントのタイムゾーンで月曜06:00に起動 | なし |
| 2. 指標取得 | Google Ads、Meta、GA4エクスポート、またはウェアハウスのSQLクエリ | クライアントごとに1つのJSONオブジェクト:支出、計画、コンバージョン、CPA、トップチャネル、トップクリエイティブ | なし |
| 3. ナラティブ作成 | お好みのLLM | 8つのタイトル付きセクションを返す:ヘッドライン結果、支出対計画、トップチャネル、クリエイティブ勝者、オーディエンスメモ、テスト、リスク、翌週計画 | なし |
| 4. デッキ生成 | 2Slides | ブランドのdesignStyleで画像デザインされた16:9の2Kデッキ | POST /api/v1/slides/create-pdf-slides、8ページで810クレジット |
| 5. ナレーション追加 | 2Slides | 2人のスピーカーが交互にデッキを読み上げる | POST /api/v1/slides/generate-narration、8ページで1,680クレジット |
| 6. アセット取得 | 2Slides | pages/page_01.png、voices/page_01.wav、transcript.txtを含むZIP | POST /api/v1/slides/download-slides-pages-voices、無料 |
| 7. 組み立てと配信 | ffmpeg(自社ワーカー)またはWorkspace Export | H.264 MP4をSlack、メール、クライアントポータルに投稿 | ffmpeg:無料、Workspace Generate Video:1ページあたり20クレジット |
すべての2Slides呼び出しは同じAuthorization: Bearer $SLIDES_API_KEYヘッダーを使い、非同期ジョブはGET /api/v1/jobs/{jobId}でポーリングします。
ステップ1:APIキーを取得しスケジューラを設定
2slides.com/apiのAPI Keysタブでキーを作成。新規アカウントはサブスクリプションなしで500クレジット無料付与。パック購入前にこのパイプラインを1回通せます。キーはスケジューラのシークレットストアにSLIDES_API_KEYとして保存し、ブラウザや共有ノートには絶対に置かず、スケジューリング前にechoエンドポイントで確認してください。
curl -s https://2slides.com/api/v1/echo \
-H "Authorization: Bearer $SLIDES_API_KEY"
トリガーはGitHub Actionsのon: schedule: - cron: "0 6 * * 1"で少数クライアントなら十分。50件以上ならクライアントをキューに入れ、1つのワーカーが順次処理して1分6リクエスト制限内に収め、リトライ余地を確保します。
ステップ2:指標を取得しLLMに8スライドのナラティブを書かせる
2Slides APIは良い週次リキャップの内容を知らないため、そこはあなたの役割であり、デッキの品質を左右します。広告プラットフォームやウェアハウスから先週の数字をクライアントごとに1つのフラットなJSONオブジェクトにまとめ、LLMに以下の8つのタイトル付きセクションを正確に返すよう促します。
- ヘッドライン結果:1つの数字と1文(例:「CPAは支出横ばいで週次18%減」)。
- 支出対計画:実績、計画、差異、月間ペース。
- トップチャネル:3チャネルの支出、コンバージョン、CPA、変化。
- クリエイティブ勝者:最も成果の良かった2〜3広告と理由。
- オーディエンスと地域メモ:変化点。
- 実施中のテスト:仮説、状況、読了日。
- リスクと障害:予算上限、トラッキングの穴、季節性。
- 翌週計画:3つの箇条書きと担当者。
数字は文中に含め、1セクション60語以内の平易な文章で。create-pdf-slidesはテキストをコピーとレイアウトの真実の源とみなすため、400〜500語の簡潔なナラティブが3,000語のメトリクスダンプよりも引き締まったデッキになります。
// narrative.mjs: 2Slidesに渡す前にLLM出力を整形
export function toUserInput(client, sections) {
const header = `Weekly paid media recap for ${client.name}, week of ${client.week}. ` +
`Audience: ${client.stakeholders}. Tone: direct, numbers first.`;
const body = sections
.map((s, i) => `Slide ${i + 1}: ${s.title}\n${s.body}`)
.join("\n\n");
return `${header}\n\n${body}`;
}ステップ3:create-pdf-slidesでキャンペーンレポートデッキを自動化
ナラティブをcreate-pdf-slidesに送信。スライド数を8に合わせるためpage: 8、画面用の16:9比率aspectRatio: "16:9"、PNGが1920×1080で劣化しない2K解像度resolution: "2K"を指定。designStyleはブランドの色、書体感、レイアウトルール、禁止事項を表します。
curl -s https://2slides.com/api/v1/slides/create-pdf-slides \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Weekly paid media recap for Northwind Outdoor, week of 2026-09-01 to 2026-09-07. Audience: CMO and ecommerce lead. Tone: direct, numbers first.\n\nSlide 1: Headline result\nCPA fell 18% to $31.40 at flat spend of $48,200; 1,535 purchases vs. 1,301 the prior week.\n\nSlide 2: Spend vs. plan\nPlanned $50,000, spent $48,200 (-3.6%). Month pacing at 97% of plan.\n\nSlide 3: Top channels\nMeta $22,100 spend, 812 purchases, $27.20 CPA (-22%). Google Search $18,400, 571 purchases, $32.20 CPA (-9%). YouTube $7,700, 152 purchases, $50.66 CPA (+4%).\n\nSlide 4: Creative winners\n\"Trail-ready in 3 layers\" UGC video: 334 purchases, 3.1% CTR. \"Fall sale, free returns\" static: 218 purchases.\n\nSlide 5: Audience and geo notes\nPacific Northwest DMAs up 31% on purchases; 25-34 women now 41% of Meta conversions.\n\nSlide 6: Tests running\nBroad vs. interest targeting on Meta, day 9 of 14, read on Sept 12. Search brand exclusion test paused for tracking fix.\n\nSlide 7: Risks and blockers\nGA4 and Meta purchase counts diverge by 11%; YouTube CPA trending up two weeks straight.\n\nSlide 8: Next week plan\nShift $3,000 from YouTube to Meta UGC (owner: Priya). Launch two new UGC variants (owner: Sam). Close the GA4 tagging gap by Wednesday (owner: Dev).",
"designStyle": "Northwind Outdoor brand: deep forest green #1F3D2B, sand #E8DCC4, white; bold geometric sans-serif headlines; one large number per slide; clean data cards and simple bar comparisons; generous margins; no stock photography, no gradients",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "concise",
"imageModel": "gemini-3-pro-image",
"responseLanguage": "English",
"mode": "async"
}'レスポンスは{ "jobId": "..." }。GET https://2slides.com/api/v1/jobs/{jobId}を5〜10秒ごとにポーリングし、statusがsuccess(PDFはdownloadUrlにあり)かfailedになるまで待つ。8ページの2Kデッキは数分かかる。コストは計画10クレジット+ページごと100クレジットで、8ページで810クレジット。

create-pdf-slidesのAPIとして公開されています。
既存ブランドスライドの画像を参照したい場合は、create-like-thisに切り替え、referenceImageUrlにブランドスライドの公開画像URLを指定。本文、コスト、制限は同じ。
ステップ4:2人のスピーカーによるナレーション付き動画プレゼンテーションAPI
デッキジョブがsuccessを返したら、同じjobIdでgenerate-narrationを呼び出す。mode: "multi"を使い、2人の名前付きスピーカーと30種類の声から2つを指定。KoreとPuckは声が十分に異なり、視覚的な手がかりなしでも話者を識別可能。includeIntro: trueでクライアント名と週を紹介する短いオープニングが追加される。
curl -s https://2slides.com/api/v1/slides/generate-narration \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobId": "<step 3で取得したdeck jobId>",
"mode": "multi",
"speaker1Name": "Maya",
"speaker2Name": "Theo",
"speaker1Voice": "Kore",
"speaker2Voice": "Puck",
"contentMode": "standard",
"includeIntro": true
}'エンドポイントは202を返し、ジョブは再びprocessingに。再度jobIdをポーリングしsuccessになるまで待つ。ナレーションは1ページ210クレジット(スクリプト10+音声200)で、8ページで1,680クレジット。スクリプト長やペースのガイドはSlides narration and video best practicesを参照。
比較として、Gammaの開発者サイト(https://developers.gamma.app)はn8n、Synthesia、ElevenLabs、独自のGenerate APIを連結したナレーション動画レシピを公開し、APIキーはProプラン必須。上記2Slidesルートは1ベンダー・1キーでどのアカウントでも動作し、組み立てはffmpegで行う。Synthesiaのようなアバタープレゼンターは生成しない。※2Slidesは当社製品です。
ステップ5:ffmpegで週次マーケティングレポートを動画化
同じjobIdでdownload-slides-pages-voicesを呼び出す。無料のZIPが返り、pages/page_01.png〜page_08.png、voices/page_01.wav〜page_08.wav、字幕やメール要約用のtranscript.txtを含む。
curl -s https://2slides.com/api/v1/slides/download-slides-pages-voices \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "jobId": "<deck jobId>" }' \
-o recap.zip && unzip -q -o recap.zip -d recap各PNGとWAVを結合し連結。以下のワンライナーは、各スライドがナレーションの長さだけ画面に表示される1920×1080のH.264 MP4を生成。
cd recap && for i in $(seq -w 1 8); do ffmpeg -y -loop 1 -i pages/page_$i.png -i voices/page_$i.wav -c:v libx264 -tune stillimage -pix_fmt yuv420p -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:a aac -b:a 192k -shortest clip_$i.mp4; done && printf "file 'clip_%s.mp4'\n" $(seq -w 1 8) > list.txt && ffmpeg -y -f concat -safe 0 -i list.txt -c copy weekly-recap.mp4concatデマルクサーはffmpegフォーマットリファレンスに記載。縦型動画にする場合は1920:1080を両方1080:1920に変え、aspectRatio: "9:16"でデッキを再生成。
ffmpegを使えるワーカーがない場合は、同じジョブを2Slides Workspaceで開き、ExportからGenerate Videoを使う。ブラウザで1920×1080または1080×1920のH.264 MP4を1ページ20クレジット(8ページで160クレジット)で生成可能。単発なら良いが、50クライアントを毎週処理するならffmpeg推奨。
ステップ6:Node.jsパイプラインでマーケティングレポートプレゼンを自動化
依存はfetchのみのNode 20スクリプト例。loadMetricsとwriteNarrativeは自社のウェアハウスクエリとLLM呼び出しに置き換えてください。
// weekly-recap.mjs: Node 20+、月曜cronから実行
import { writeFile } from "node:fs/promises";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { toUserInput } from "./narrative.mjs";
import { loadMetrics, writeNarrative } from "./your-data-layer.mjs";
const BASE = "https://2slides.com";
const headers = {
Authorization: `Bearer ${process.env.SLIDES_API_KEY}`, // サーバー側のみ
"Content-Type": "application/json",
};
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const run = promisify(execFile);
async function post(path, body) {
const res = await fetch(`${BASE}${path}`, { method: "POST", headers, body: JSON.stringify(body) });
if (!res.ok) throw new Error(`${path} -> ${res.status}: ${await res.text()}`);
return res.json();
}
async function waitForJob(jobId, everyMs = 8000) {
for (;;) {
const res = await fetch(`${BASE}/api/v1/jobs/${jobId}`, { headers });
const job = await res.json();
console.log(` job ${jobId}: ${job.status} ${job.progress ?? ""}`);
if (job.status === "success") return job;
if (job.status === "failed") throw new Error(`job ${jobId} failed: ${job.message ?? ""}`);
await sleep(everyMs); // 5〜10秒ごとにポーリング。jobs/{id}は1分10リクエスト許可
}
}
export async function buildRecap(client) {
// 1) 指標 -> 8セクションのナラティブ
const metrics = await loadMetrics(client);
const sections = await writeNarrative(client, metrics);
// 2) 画像デザインデッキ:2Kで1ページあたり10+100クレジット
const { jobId } = await post("/api/v1/slides/create-pdf-slides", {
userInput: toUserInput(client, sections),
designStyle: client.designStyle,
aspectRatio: "16:9",
resolution: "2K",
page: 8,
contentDetail: "concise",
responseLanguage: client.language ?? "English",
mode: "async",
});
const deck = await waitForJob(jobId);
console.log("deck PDF:", deck.downloadUrl);
// 3) 2人ナレーション:1ページ210クレジット
await post("/api/v1/slides/generate-narration", {
jobId,
mode: "multi",
speaker1Name: "Maya",
speaker2Name: "Theo",
speaker1Voice: "Kore",
speaker2Voice: "Puck",
contentMode: "standard",
includeIntro: true,
});
await waitForJob(jobId);
// 4) ページごとのPNG+WAV(無料)→ ffmpegでMP4化
const zipRes = await fetch(`${BASE}/api/v1/slides/download-slides-pages-voices`, {
method: "POST", headers, body: JSON.stringify({ jobId }),
});
if (!zipRes.ok) throw new Error(`download failed: ${zipRes.status}`);
const zipPath = `out/${client.slug}.zip`;
await writeFile(zipPath, Buffer.from(await zipRes.arrayBuffer()));
await run("bash", ["./stitch.sh", zipPath, `out/${client.slug}-recap.mp4`]); // ステップ5のffmpegループ
return { jobId, pdf: deck.downloadUrl, video: `out/${client.slug}-recap.mp4` };
}
// クライアントを1件ずつ処理:1クライアントあたり3回POSTで1分6リクエスト制限内
const clients = JSON.parse(process.env.CLIENTS_JSON ?? "[]");
for (const client of clients) {
try {
const out = await buildRecap(client);
console.log(`done ${client.name}`, out);
} catch (err) {
console.error(`FAILED ${client.name}:`, err.message); // アラート、無条件リトライ禁止
}
}クライアント1件あたり書き込みリクエスト3回(デッキ、ナレーション、ダウンロード)+ポーリング読み込みが別途1分10リクエスト枠。
参照スタイルの選び方
designStyleでブランドを説明しても意図が伝わらない場合は参照画像を使う。2Slides Galleryには実際のデッキがあり、方向性を探したりcreate-like-thisにreferenceImageUrlとして渡せる。以下はAdobe Creative Trends 2026のGalleryデッキで、週次リキャップに適した抑制されたデータ重視のスタイル。


referenceImageUrlとして渡すと、create-like-thisが色、書体、レイアウトを抽出。

代理店の場合、クライアントごとに1つの参照スライドURLを指標設定の隣に保存し、毎週のデッキはそのクライアントのビジュアルシステムに沿う。
コスト
8スライドリキャップあたり:2Kデッキ810クレジット、ナレーション1,680クレジット、ZIPとffmpegは無料。クレジットパックは2,000クレジット5ドル(1クレジット0.0025ドル)から40,000クレジット80ドル(1クレジット0.002ドル)まで。
| ボリューム | デッキクレジット | ナレーションクレジット | 合計クレジット | $0.0025換算 | $0.002換算(80ドルパック) |
|---|---|---|---|---|---|
| 1回のナレーション付きリキャップ | 810 | 1,680 | 2,490 | $6.23 | $4.98 |
| 月20回リキャップ(週5キャンペーン) | 16,200 | 33,600 | 49,800 | $124.50 | $99.60 |
| 月500回リキャップ(週125クライアント) | 405,000 | 840,000 | 1,245,000 | 該当なし | $2,490 |
| 月20回デッキのみ、ナレーションなし | 16,200 | 0 | 16,200 | $40.50 | $32.40 |
2点注意。resolution: "1K"に下げても節約にならない(512px、1K、2Kはページあたり100クレジット、4Kのみ倍増)。2Kのままにする。MP4をWorkspaceでレンダリングすると1回のリキャップあたり160クレジット(0.32〜0.40ドル)追加。
この用途にFast PPTと画像デザインスライドのどちらが良い?
| ニーズ | Fast PPT generate | create-pdf-slides / create-like-this |
|---|---|---|
| 関係者がPowerPointで編集したい | はい、1,500以上のテンプレートからネイティブPPTX生成 | いいえ、PDF+ページ画像出力のみ |
| 見て聞く動画+ボイスオーバー | いいえ、ナレーション不可 | はい、generate-narration+MP4生成可能 |
| 8ページのコスト | 80クレジット(約0.20ドル) | デッキ810クレジット、ナレーション込み2,490クレジット |
| 処理時間 | 約30秒、同期処理がデフォルト | 数分、非同期処理がデフォルト |
| ブランドコントロール | GET /api/v1/themes/searchからthemeId選択 | フリーテキストのdesignStyleまたはreferenceImageUrl |
多くのチームは両方を使う:アカウントマネージャー向けに注釈を入れるFast PPTデッキと、クライアントがスマホで見るナレーション付き動画。詳細はマーケティングチームがAIプレゼンテーションデッキをスケール生成する方法を参照。
よくある落とし穴
- 50クライアントを並列で一斉実行する。 書き込みエンドポイントは1キーあたり1分6リクエスト制限。キューに入れて順次処理、または1時間に分散して送信。
- Fast PPTジョブに
generate-narrationを呼ぶ。 ナレーションはcreate-pdf-slidesまたはcreate-like-thisのジョブのみ対応。generateジョブは拒否され変換不可。 - APIキーをブラウザダッシュボードに置く。
SLIDES_API_KEYはサーバーまたはスケジューラのシークレットストアに保管。クライアント向けページで動画が必要なら、すでに生成済みのMP4を配信。 - スライド数を正確に8にしたいのに
page: 0を使う。0はページ数自動検出。毎週同じ形・長さにするならpage: 8を指定。 - 言語コードを渡す。
responseLanguageは"Spanish"などの名前を使い、"es"は不可。クライアント設定に名前を保存。 - 生の指標エクスポートを送る。 3,000行のCSVを
userInputに貼ると混乱したデッキに。まず要約し、400〜500語のナラティブを渡し、CSVは添付資料に。
よくある質問
ナレーション付き動画で週次マーケティングレポートを自動化するコストは?
ナレーション付き8スライドリキャップは2,490クレジットで、クレジットパックにより4.98〜6.23ドル。内訳は2K画像デザインデッキ810クレジット(計画10+ページ100×8)、2人ナレーション1,680クレジット(210×8)。PNGとWAVのダウンロードは無料、ffmpegでの結合も自社環境なら無料。
AIボイスオーバースライドAPIで1デッキに2つの異なる声を使える?
はい。generate-narrationのmode: "multi"はspeaker1Name、speaker2Name、speaker1Voice、speaker2Voiceを受け取り、スライドごとに2人のスピーカーが交互に話します。Kore、Puck、Zephyr、Charon、Aoede、Ledaなど30種類の声から選択可能。1人ナレーターならmode: "single"でspeakerNameとvoiceを指定し、同じ210クレジット/ページ。
ナレーション付き動画プレゼンテーションAPIパイプラインに必要なエンドポイントは?
順に3つ:POST /api/v1/slides/create-pdf-slides(またはcreate-like-thisにreferenceImageUrl付き)でデッキを作成、POST /api/v1/slides/generate-narrationで音声追加、POST /api/v1/slides/download-slides-pages-voicesでPNGとWAVを取得。間はGET /api/v1/jobs/{jobId}を5〜10秒ごとにポーリング。Fast PPTのgenerateはナレーション不可のため含まれません。
同じ週次レポートを複数言語で配信できる?
はい。create-pdf-slidesのresponseLanguageに"Spanish"や"Japanese"など言語名を指定すると、その言語でスライド文が生成され、ナレーションもそれに従います。20以上の言語対応。言語ごとに別のデッキジョブとなるため、英語とスペイン語の動画を希望するクライアントは2回分の2,490クレジットがかかります。
月曜のパイプラインはクライアント1件あたりどのくらい時間がかかる?
数分見込んでください。8ページの2Kデッキ生成に数分、ナレーション追加に数分、ffmpegでの組み立ては8クリップで通常1分未満。5〜10秒ごとにポーリングし、クライアントを1件ずつ処理することで1分6リクエスト制限を守り、50クライアントの処理は06:00開始で通常最初のスタンドアップ前に完了します。
次のステップ
- 2slides.com/apiでAPIキーを取得。500クレジットの無料枠でナレーション付きリキャップを1回完全に試せ、パック購入前にパイプラインを検証可能。その後、すべてのクライアントのマーケティングレポートプレゼンを同じスケジュールで自動化。
- ハブ投稿の他のチーム別レシピ、AIプレゼンテーションAPIユースケース by チームを参照。
- 広告指標ではなく月末の財務報告書を対象にしたワークフローはAI音声ナレーションで財務報告プレゼンを自動化にあり、スクリプトとペースのルールはSlides narration and video best practicesを参照。
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free