From daida-ai
登壇プレゼン資料を自動生成するスキル(LT〜30分講演まで対応)。 テーマからアウトライン作成、PowerPoint/ODPスライド生成、 トークスクリプト(台本)の記入、音声合成、音声埋め込み、 MP4動画エクスポートまで一括対応。 使用場面: (1) 登壇テーマからプレゼンを一括作成したい, (2) 既存アウトラインからスライドを作りたい, (3) スライドにトークスクリプトを追加したい, (4) スクリプトから音声を合成してスライドに埋め込みたい, (5) プレゼンを動画としてエクスポートしたい。 トリガー: LT, ライトニングトーク, プレゼン作成, スライド作成, 代打, 登壇, presentation, slides, talk script, 音声合成, 講演, 動画, MP4, video。
How this skill is triggered — by the user, by Claude, or both
Slash command
/daida-ai:daida-aiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
テーマ入力から完成プレゼンまでの一連のパイプラインを実行する。
assets/pronunciation_dict.tsvassets/templates/casual.pptxassets/templates/formal.pptxassets/templates/tech.pptxreferences/pptx-guide.mdreferences/talk-styles.mdreferences/tts-plugins.mdscripts/convert_format.pyscripts/create_slides.pyscripts/create_templates.pyscripts/embed_audio.pyscripts/enrich_outline.pyscripts/export_tts_script.pyscripts/generate_image.pyscripts/generate_outline.pyscripts/lib/__init__.pyscripts/make_slideshow.pyscripts/make_video.pyscripts/run.shscripts/setup.shテーマ入力から完成プレゼンまでの一連のパイプラインを実行する。 Step 6(スライドショー設定)までで PPTX として完成 する。 さらに Step 7 で MP4動画としてもエクスポート可能 だが、追加の外部ツール(LibreOffice, ffmpeg)が必要。 動画が不要なユーザーも多いため、Step 6 完了後に動画も作るか確認し、不要なら Step 7 はスキップすること。
ユーザーが「ヘルプ」「使い方」「流れを教えて」等と聞いた場合、以下のパイプライン図を表示する:
╔══════════════════════════════════════════════════════════════╗
║ 代打AI パイプライン ║
╠══════════════════════════════════════════════════════════════╣
║ ║
║ Step 1 テーマ → アウトライン (Markdown) ║
║ │ ║
║ Step 1.5 アウトライン → スライド仕様 (JSON) ║
║ │ ║
║ Step 1.7 画像生成 (SVG / Gemini) ─── オプション ║
║ │ ║
║ Step 2 スライド仕様 → PPTX 生成 ║
║ │ ↕ ユーザーがPPTXを確認・修正可能 ║
║ Step 3 トークスクリプト更新 ────── オプション ║
║ │ ║
║ Step 4 読み辞書 → TTSスクリプト → 音声合成 ║
║ │ ↕ ユーザーが読みを確認・修正可能 ║
║ Step 5 音声ファイル → PPTX に埋め込み ║
║ │ ║
║ Step 6 スライドショー自動再生設定 ║
║ │ ║
║ ▼ ║
║ 完成! presentation_final.pptx ║
║ │ ║
║ Step 7 MP4 動画エクスポート ────── オプション ║
║ │ (自動バリデーション付き) ║
║ ▼ ║
║ 動画! presentation.mp4 ║
║ ║
╠══════════════════════════════════════════════════════════════╣
║ テンプレート: tech / casual / formal ║
║ TTS: edge (デフォルト) / voicevox ║
║ 出力: PPTX / ODP (変換オプション) / MP4 (動画オプション) ║
╚══════════════════════════════════════════════════════════════╝
補足説明(ヘルプ表示時にパイプライン図と合わせて伝える):
↕ マークのステップではユーザーが手動修正して戻れる初回実行時、以下でセットアップする:
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh
setup.sh は Python 依存パッケージのインストール後、動画生成ツール(LibreOffice, ffmpeg, pdftoppm)の可用性を自動チェックする。
出力に [--] のツールがある場合、ユーザーが動画出力を希望していれば インストール手順を案内すること。
動画が不要と確認済みなら、ツール未検出の警告は無視してよい。
すべてのPythonスクリプトは run.sh ラッパー経由で実行する(venvの自動解決):
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh <script_name.py> [args...]
ユーザーに以下を確認する:
出力ディレクトリはユーザーに確認する(デフォルト: ./output/)
ワークフロー開始時に、MP4動画も必要か を確認する。 AskUserQuestion ツールが利用可能な場合は、必ずそれを使って確認すること。
PPTXの完成後、MP4動画としてもエクスポートできます(Step 7)。 動画が必要な場合は LibreOffice と ffmpeg のインストールが必要です。 動画も作りますか?(不要ならスキップします)
setup.sh 実行時にツールの可用性を確認するユーザーが途中のファイル(PPTX、TTSスクリプト等)を修正した後、 指定したステップからワークフローを再開できる。
ユーザーが「Step N からやり直したい」と言った場合:
| 再開ステップ | 必要な入力 | 典型的なユースケース |
|---|---|---|
| Step 1 | テーマ(口頭) | 最初からやり直す |
| Step 1.5 | output/outline.md | アウトラインを手動修正した |
| Step 1.7 | output/slide_spec.json | JSON仕様を手動修正した |
| Step 2 | output/slide_spec.json | JSON仕様を手動修正した |
| Step 3 | output/presentation.pptx | PPTXを手動修正した |
| Step 4 | output/presentation.pptx | スクリプトを変更した / 読みを修正したい |
| Step 5 | output/presentation.pptx + output/audio/ | 音声を差し替えた |
| Step 6 | output/presentation_with_audio.pptx | 音声埋め込み済みPPTXを修正した |
| Step 7 | output/presentation_final.pptx + output/audio/ | 動画を再生成したい |
よくある割り込みパターン:
--script 付き)--engine 変更)ユーザーから以下を聞き取る:
以下の構造でMarkdownアウトラインを生成する:
# プレゼンタイトル
## 導入
- ポイント1
- ポイント2
## 本題1: セクション名
- ポイント
- ポイント
## 本題2: セクション名
- ポイント
- ポイント
## まとめ
- ポイント
原則:
生成したMarkdownをファイルに保存してからスクリプトに渡す:
# まずアウトラインMarkdownをファイルに保存(Writeツール使用)
# 次にスクリプトで所定のパスに保存
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh generate_outline.py output/outline.md --stdin < output/outline_draft.md
Step 1で生成したアウトラインを読み、以下の指針でスライド仕様JSONを生成する:
充実化の指針:
two_content レイアウトを選択title_only + コードブロックをnoteに記載title_slidesection_headerユーザーに確認する:
tech(デフォルト) / casual / formal少なめ / 普通(デフォルト) / 多めimage フィールドを持つスライドの割合を密度レベルに応じて調整する。
| 密度 | image付きスライドの割合 | 指針 |
|---|---|---|
| 少なめ | ~20% (1-2枚/10枚中) | キーとなる図のみ。テキスト・箇条書き主体 |
| 普通 | ~40% (3-4枚/10枚中) | セクションごとに1つの図解。フローチャートや比較図を適度に |
| 多め | ~60% (5-6枚/10枚中) | ほぼ毎スライドにビジュアル要素。アーキテクチャ図、チャート、イラストを積極的に |
テンプレート別デフォルト密度(Step 1.5 で決定):
| テンプレート | デフォルト密度 |
|---|---|
tech | 普通 |
casual | 普通 |
formal | 少なめ |
ユーザーが明示的に指定した場合はそちらを優先。未指定時はテンプレートのデフォルトを使用する。
参考: トークスタイルと推奨密度(Step 3 で選択):
| トークスタイル | 推奨密度 |
|---|---|
casual | 普通 |
keynote | 多め |
formal | 少なめ |
humorous | 普通 |
トークスタイルはStep 3で選択するため、Step 1.5時点ではテンプレートのデフォルトを使用する。テンプレートとトークスタイルで名前が共通するもの(casual, formal)は同じ密度に対応している。
{
"metadata": {
"title": "プレゼンタイトル",
"subtitle": "登壇者名",
"event": "イベント名",
"template": "tech"
},
"slides": [
{
"layout": "title_slide",
"title": "プレゼンタイトル",
"subtitle": "2026/03/10 @ イベント名 - 登壇者名",
"note": "みなさんこんにちは。本日は〇〇についてお話しします。"
},
{
"layout": "section_header",
"title": "セクション名",
"note": "それではまず、〇〇について見ていきましょう。"
},
{
"layout": "title_and_content",
"title": "スライドタイトル",
"body": ["ポイント1", "ポイント2", "ポイント3"],
"note": "トークスクリプト(台本)"
},
{
"layout": "two_content",
"title": "比較タイトル",
"left": {"heading": "左見出し", "body": ["項目1", "項目2"]},
"right": {"heading": "右見出し", "body": ["項目1", "項目2"]},
"note": "トークスクリプト"
},
{
"layout": "title_only",
"title": "図・コード用スライド",
"note": "このスライドの説明"
},
{
"layout": "title_only",
"title": "アーキテクチャ図",
"image": "images/architecture.png",
"note": "この図はシステム全体の構成を示しています"
},
{
"layout": "blank",
"image": "images/fullscreen_photo.jpg",
"note": "この写真はプロジェクトの成果を示しています"
}
]
}
利用可能なレイアウト: title_slide, section_header, title_and_content, two_content, title_only, blank
画像の挿入: image フィールドに画像ファイルパスを指定すると、スライドに画像が挿入される。
output/slide_spec.json なら images/foo.png → output/images/foo.png として解決)title_only(タイトル+図)、blank(フルスクリーン図)重要: 全スライドの note フィールドにトークスクリプト(台本)を必ず含めること(title_slide や section_header も含む)。ノートがないスライドは音声が生成されず、スライドショーで短時間(3秒)で切り替わってしまう。Step 3で更新可能だが、ここで初版を生成しておく。
生成したJSONをファイルに保存してからスクリプトに渡す(JSONが大きい場合、echoパイプだと失敗する可能性がある):
# まずスライド仕様JSONをファイルに保存(Writeツール使用)
# 次にスクリプトでバリデーション&保存(--durationで持ち時間を指定)
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh enrich_outline.py output/slide_spec.json --stdin --duration 5 < output/slide_spec_draft.json
15分発表の場合:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh enrich_outline.py output/slide_spec.json --stdin --duration 15 < output/slide_spec_draft.json
--duration に応じて、スライド枚数上限と推定発話時間上限が自動的に調整される。
スライドに図やイラストを含めたい場合、画像を生成する。
以下のフローチャートに従って方式を決定する:
1. GEMINI_API_KEY は設定されているか?
├─ No → 全て SVG で生成する(後述「SVG生成」セクション)
└─ Yes → 2へ
2. 画像の内容は?
├─ SVG向き(後述リスト参照) → 「SVG生成」セクションへ
└─ Nano Banana向き(後述リスト参照) → 「Nano Banana」セクションへ
以下に該当する画像は SVG を使う。APIキー不要・即時生成・編集可能。
以下に該当する画像は Nano Banana を使う。GEMINI_API_KEY が必要。
迷ったらSVG。SVGは即時生成でき、修正も容易。Nano Bananaは「SVGでは表現できないリアルさ」が必要な場合のみ使う。
16:9 / 4:3 / 1:1)、解像度 (1K / 2K / 4K)前提条件: GEMINI_API_KEY 環境変数
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh generate_image.py \
--prompt "A professional conference stage with spotlight, modern tech event atmosphere" \
--output output/images/slide1_background.png \
--aspect-ratio 16:9 \
--size 1K \
--model pro
| Alias | Model ID | 用途 |
|---|---|---|
pro | gemini-3-pro-image-preview | 高品質、複雑なプロンプト、テキスト描画 |
flash | gemini-3.1-flash-image-preview | 高速生成、大量生成 |
legacy | gemini-2.5-flash-image | 旧モデル |
生成後、Read ツールで画像をユーザーに見せ、必要に応じてプロンプトを調整する。
あなた(Claude)がSVGコードを直接生成する。
SVGファイルはスライド仕様JSONの image フィールドにそのまま指定できる(ビルド時に自動でPNGに変換される)。
前提条件: cairosvg がインストールされていること(setup.sh 実行済みなら自動インストール済み)。未インストールの場合:
pip install cairosvg
output/images/ に作成するimage フィールドに SVG パス を直接指定するcreate_slides.py 実行時に自動でPNG変換→挿入される手動変換は不要。ただし事前にプレビューしたい場合:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh svg_to_png.py input.svg output.png
| 用途 | viewBox | 説明 |
|---|---|---|
| スライド全面 | 0 0 1920 1080 | 16:9、blank レイアウト向き |
| コンテンツ領域 | 0 0 1200 900 | 4:3、title_only レイアウト向き |
| アイコン・ロゴ | 0 0 400 400 | 1:1 |
SVGの font-size はviewBox座標系のpx単位だが、PPTXに埋め込まれると画像として縮小されるため、
実際の表示サイズは以下の数式で決まる:
rendered_pt = f_svg × display_w_emu / (viewBox_w × 12700)
display_w_emu = min(max_w, max_h × viewBox_w / viewBox_h)max_w = slide_w − 2 × 457200(左右マージン)max_h = slide_h − img_top − 457200(title_only: img_top=1600200, blank: img_top=457200)12700 = 1pt あたりの EMU(OOXML標準)登壇資料の最低基準: 12pt。以下の最低SVG font-size を守ること:
| viewBox | レイアウト | 最低 font-size | 推奨 body | 推奨 heading |
|---|---|---|---|---|
1920×1080 | title_only | 35 px | 40 px | 56 px |
1920×1080 | blank | 28 px | 32 px | 48 px |
1200×900 | title_only | 29 px | 32 px | 48 px |
1200×900 | blank | 24 px | 28 px | 40 px |
注意:
create_slides.py実行時にSVG内のフォントサイズが自動検証される。 最低値を下回るテキストがある場合、警告が出力される。
| テンプレート | 背景 | アクセント1 | アクセント2 | テキスト |
|---|---|---|---|---|
| tech | #1E293B | #38BDF8 | #818CF8 | #E2E8F0 |
| casual | #FFF8F0 | #FF6B35 | #06D6A0 | #2D3748 |
| formal | #FFFFFF | #1B2D45 | #C49B66 | #1B2D45 |
注意: フォントは必ず font-family="sans-serif" を指定する。cairosvg が自動的に日本語フォントのフォールバックを注入するため、日本語テキストが豆腐(□)になることはない。font-family に Hiragino / Yu Gothic / Noto Sans CJK JP などを既に含む場合は注入をスキップする。
フローチャート(3ステップ):
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080">
<rect width="1920" height="1080" fill="#1E293B"/>
<defs>
<marker id="arr" markerWidth="10" markerHeight="7" refX="10" refY="3.5" orient="auto">
<polygon points="0 0,10 3.5,0 7" fill="#818CF8"/>
</marker>
</defs>
<!-- Step 1 -->
<rect x="160" y="420" width="400" height="160" rx="16" fill="#38BDF8"/>
<text x="360" y="510" text-anchor="middle" fill="#1E293B"
font-size="40" font-family="sans-serif" font-weight="bold">Step 1</text>
<!-- Arrow 1→2 -->
<line x1="560" y1="500" x2="720" y2="500" stroke="#818CF8" stroke-width="4" marker-end="url(#arr)"/>
<!-- Step 2 -->
<rect x="760" y="420" width="400" height="160" rx="16" fill="#38BDF8"/>
<text x="960" y="510" text-anchor="middle" fill="#1E293B"
font-size="40" font-family="sans-serif" font-weight="bold">Step 2</text>
<!-- Arrow 2→3 -->
<line x1="1160" y1="500" x2="1320" y2="500" stroke="#818CF8" stroke-width="4" marker-end="url(#arr)"/>
<!-- Step 3 -->
<rect x="1360" y="420" width="400" height="160" rx="16" fill="#38BDF8"/>
<text x="1560" y="510" text-anchor="middle" fill="#1E293B"
font-size="40" font-family="sans-serif" font-weight="bold">Step 3</text>
</svg>
比較図(Before / After):
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080">
<rect width="1920" height="1080" fill="#1E293B"/>
<!-- Before -->
<rect x="80" y="120" width="840" height="840" rx="20" fill="#334155" stroke="#475569" stroke-width="2"/>
<text x="500" y="200" text-anchor="middle" fill="#EF4444"
font-size="56" font-family="sans-serif" font-weight="bold">Before</text>
<text x="500" y="400" text-anchor="middle" fill="#94A3B8"
font-size="40" font-family="sans-serif">手動で3時間</text>
<text x="500" y="460" text-anchor="middle" fill="#94A3B8"
font-size="40" font-family="sans-serif">ミスが多い</text>
<text x="500" y="520" text-anchor="middle" fill="#94A3B8"
font-size="40" font-family="sans-serif">属人化</text>
<!-- After -->
<rect x="1000" y="120" width="840" height="840" rx="20" fill="#334155" stroke="#38BDF8" stroke-width="2"/>
<text x="1420" y="200" text-anchor="middle" fill="#38BDF8"
font-size="56" font-family="sans-serif" font-weight="bold">After</text>
<text x="1420" y="400" text-anchor="middle" fill="#E2E8F0"
font-size="40" font-family="sans-serif">自動で5分</text>
<text x="1420" y="460" text-anchor="middle" fill="#E2E8F0"
font-size="40" font-family="sans-serif">品質が安定</text>
<text x="1420" y="520" text-anchor="middle" fill="#E2E8F0"
font-size="40" font-family="sans-serif">誰でも実行可能</text>
</svg>
アーキテクチャ図(3層):
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080">
<rect width="1920" height="1080" fill="#1E293B"/>
<defs>
<marker id="arr" markerWidth="10" markerHeight="7" refX="10" refY="3.5" orient="auto">
<polygon points="0 0,10 3.5,0 7" fill="#818CF8"/>
</marker>
</defs>
<!-- Frontend -->
<rect x="660" y="80" width="600" height="140" rx="16" fill="#38BDF8"/>
<text x="960" y="160" text-anchor="middle" fill="#1E293B"
font-size="40" font-family="sans-serif" font-weight="bold">Frontend</text>
<!-- Arrow -->
<line x1="960" y1="220" x2="960" y2="360" stroke="#818CF8" stroke-width="4" marker-end="url(#arr)"/>
<!-- API -->
<rect x="660" y="380" width="600" height="140" rx="16" fill="#818CF8"/>
<text x="960" y="460" text-anchor="middle" fill="#FFFFFF"
font-size="40" font-family="sans-serif" font-weight="bold">API Server</text>
<!-- Arrow -->
<line x1="960" y1="520" x2="960" y2="660" stroke="#818CF8" stroke-width="4" marker-end="url(#arr)"/>
<!-- Database -->
<rect x="660" y="680" width="600" height="140" rx="16" fill="#334155" stroke="#38BDF8" stroke-width="2"/>
<text x="960" y="760" text-anchor="middle" fill="#38BDF8"
font-size="40" font-family="sans-serif" font-weight="bold">Database</text>
</svg>
image フィールドに出力パスを指定する
.png パスを指定.svg パスを指定(自動変換される)bash ${CLAUDE_SKILL_DIR}/scripts/run.sh create_slides.py output/slide_spec.json output/presentation.pptx
カスタムテンプレートを使う場合:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh create_slides.py output/slide_spec.json output/presentation.pptx --template path/to/template.pptx
生成後、ユーザーにPPTXの確認を依頼する。
Step 1.5でnoteが既に含まれている場合、このステップはスキップ可能。 ユーザーが文体変更やスクリプト再生成を希望する場合に実行する。
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh write_talk_script.py output/presentation.pptx --read
references/talk-styles.md を参照し、ユーザーの希望する文体で全スライドのスクリプトを再生成する
casual(デフォルト) / keynote / formal / humorousJSON配列として保存し、PPTXに書き込む:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh write_talk_script.py output/presentation.pptx --notes-json output/notes.json --output output/presentation.pptx
edge(デフォルト) / voicevoxja-JP-NanamiNeural(edge)、1=ずんだもん(voicevox)スピーカーノートを読み上げ用テキストファイルとしてエクスポートする。
読み辞書(--dict)を指定すると、頻出の誤読パターンが自動置換される。
読み辞書あり(推奨):
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh export_tts_script.py output/presentation.pptx output/tts_script.txt --dict ${CLAUDE_SKILL_DIR}/assets/pronunciation_dict.tsv
読み辞書なし:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh export_tts_script.py output/presentation.pptx output/tts_script.txt
エクスポートしたスクリプトファイルの内容をユーザーに提示する。 辞書で自動修正されなかった箇所や、プロジェクト固有の用語がないか確認を促す。
辞書で自動修正される例:
手動修正が必要な場合:
ユーザーが修正不要と判断した場合はStep 4cへ進む(--scriptなしで従来通り合成)。
辞書に追加すべきエントリがあれば pronunciation_dict.tsv を更新する。
修正済みスクリプトファイルがある場合(--script付き):
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh synthesize_audio.py output/presentation.pptx output/audio/ --engine edge --script output/tts_script.txt
修正不要の場合(従来通りPPTXノートから直接合成):
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh synthesize_audio.py output/presentation.pptx output/audio/ --engine edge
VOICEVOX使用時(事前にVOICEVOX Engineの起動が必要):
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh synthesize_audio.py output/presentation.pptx output/audio/ --engine voicevox --script output/tts_script.txt
TTS APIが一部または全スライドで失敗した場合、失敗したスライドはスキップされ、成功分のみ音声ファイルが生成される(部分成功)。
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh embed_audio.py output/presentation.pptx output/audio/ output/presentation_with_audio.pptx
音声埋め込み済みPPTXに、自動ページ送りと音声自動再生を設定する。 PowerPoint(Windows / macOS)では、スライドショーを開始するだけで最後まで完全自動で再生される。 LibreOffice Impress では自動ページ送りが動作しないため、手動でスライドを送る必要がある(詳細は「クロスプラットフォーム互換性ノート」を参照)。
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh make_slideshow.py output/presentation_with_audio.pptx output/presentation_final.pptx
表示時間を調整する場合:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh make_slideshow.py output/presentation_with_audio.pptx output/presentation_final.pptx --silent-duration 5000 --audio-buffer 2000
スライドショー設定完了後、必ず以下の注意事項をユーザーに伝えること:
スライドショー再生前の確認事項
PowerPoint(Windows / macOS)の場合: 「スライドショーの設定」で 「タイミングを使用」にチェック が入っていることを確認してください。
- Windows: 「スライドショー」タブ →「スライドショーの設定」→「タイミングを使用」にチェック
- macOS: 「スライドショー」メニュー →「スライドショーの設定...」→「オプション」→「タイミングを使用」にチェック
このチェックが外れていると、自動ページ送りと音声自動再生が動作しません。
LibreOffice Impress の場合: 自動ページ送りは動作しません。スライドショー中は手動でスライドを送ってください(クリックまたは矢印キー)。音声は各スライドで自動再生されます。
Step 6 の案内に続けて、必ず以下を確認すること:
このプレゼンをMP4動画としてもエクスポートできます。 YouTube等への投稿や、PowerPointが使えない環境での共有に便利です。 ただし追加ツール(LibreOffice, ffmpeg)のインストールが必要です。 動画が不要であればここで完了です。動画も作りますか?
ユーザーが「不要」「いらない」等と回答した場合は Step 7 をスキップ してパイプラインを終了する。
PPTXと音声ファイルからMP4動画を生成する。 スライドショーを動画として配布・共有したい場合に実行する。
Step 7 への案内でユーザーが「動画を作る」と回答した場合、以下を確認する:
動画生成には追加ツールが必要。setup.sh 実行時に可用性が表示される。
| ツール | 用途 | 必須 |
|---|---|---|
| LibreOffice | PPTX → PDF → PNG レンダリング | ✅ |
| ffmpeg | 動画クリップ生成・結合 | ✅ |
| pdftoppm (poppler-utils) | PDF → PNG 変換(高品質) | 推奨(ffmpegで代替可) |
未インストールの場合:
# Ubuntu/Debian
sudo apt install libreoffice ffmpeg poppler-utils
# macOS
brew install libreoffice ffmpeg poppler
snap版LibreOfficeの注意: 出力ディレクトリは $HOME 配下を使用すること。
/tmp 等への書き込みはサンドボックス制限で失敗する場合がある。
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh make_video.py output/presentation_final.pptx output/audio output/presentation.mp4
オプション指定:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh make_video.py output/presentation_final.pptx output/audio output/presentation.mp4 --fps 30 --silent-duration 3.0
生成後、以下のチェックが自動実行される:
| チェック項目 | 内容 |
|---|---|
| ファイル存在 | MP4ファイルが存在し、サイズ > 0 |
| ffprobe読取 | ファイルが破損していないこと |
| コーデック | 映像: H.264 / 音声: AAC |
| 解像度 | 幅・高さが偶数(libx264互換) |
| デュレーション | 正の値であること |
バリデーション失敗時はエラー詳細が表示される。--skip-validation で無効化可能。
動画生成完了後、以下を伝える:
動画出力について
presentation.mp4が生成されました- 各スライドの表示時間は音声ファイルの実尺に基づいています
- 音声なしスライドはデフォルト3秒表示です
- 一般的な動画プレイヤー(VLC、QuickTime等)で再生できます
ODP形式が必要な場合:
bash ${CLAUDE_SKILL_DIR}/scripts/run.sh convert_format.py output/presentation.pptx --outdir output/
前提: LibreOfficeがインストールされていること。
代打AIが生成するPPTXは macOS / Windows の両PowerPoint および LibreOffice Impress で動作する。 以下の技術的制約に注意すること。
| 方式 | macOS | Windows | LibreOffice |
|---|---|---|---|
p:cmd type="call" cmd="playFrom(0)" | ✅ | ✅ | ✅ |
p:audio > p:cMediaNode | ❌ 破損扱い | ✅ | ✅ |
p:audio > p:cMediaNode(OOXML メディアノード方式)を破損ファイルとして扱うp:cmd type="call" cmd="playFrom(0)" (コマンドアニメーション方式)を使用するnodeType="afterEffect" + grpId="0" で「前のアニメーション後に自動実行」を指定する| アイコン | macOS | Windows |
|---|---|---|
| 32×32 可視アイコン | ✅ 表示される | ✅ 表示される |
| 1×1 透明PNG | ❌ 非表示 | ✅ 自動でスピーカーアイコン表示 |
| 方式 | macOS | Windows | LibreOffice |
|---|---|---|---|
p:transition advTm | ✅ | ✅ | ❌ 非対応 |
advTm、mainSeq.dur)を正しく設定してもLibreOffice側で無視される既知の制限がある(Bug 101527)references/pptx-guide.md: レイアウト・プレースホルダーの詳細references/talk-styles.md: トークスクリプトの文体定義references/tts-plugins.md: TTSプラグインの追加方法npx claudepluginhub hawkymisc/daida-ai --plugin daida-aiCreates slide decks for scientific presentations in PowerPoint and LaTeX Beamer, offering structure, design templates, timing guidance, and visual validation. Use for conferences, seminars, defenses.
Orchestrates presentation outlines with per-page media decisions and runs a post-render QA loop. Use before generating PPT/HTML slides from raw material.
Guides creating scientific presentations and slide decks for conferences, seminars, and thesis defenses using PowerPoint or LaTeX Beamer. Provides structure, design templates, timing guidance, and visual validation.