OpenSource-Hub

presenton

アプリケーション

presenton/presenton

オープンソースのAIスライドジェネレーター。セルフホストとAPIに対応。

概要

Presenton は、OpenAI、Gemini、Ollama など複数のAIプロバイダーをサポートするオープンソースのAIスライド生成ツールです。Dockerによるセルフホストまたはデスクトップアプリとして利用でき、プロンプトやドキュメントからプレゼンテーションを生成し、PPTXまたはPDFとしてエクスポート可能で、データとモデルを完全にコントロールできます。

README プレビュー

\n  \n\n\n\n  Quickstart ·\n  Docs ·\n  Youtube ·\n  Discord\n\n\n\n  \n  \n  \n\n\n# Open-Source AI Presentation Generator and API (Gamma, Beautiful AI, Decktopus Alternative)\n\n\n\n### ✨ Why Presenton\n\nNo SaaS lock-in · No forced subscriptions · Full control over models and data\n\nWhat makes Presenton different?\n\n- Use Fully **self-hosted** in Web through [Docker Package](https://docs.presenton.ai/v3/get-started/quickstart)\n- Or Download [Desktop App](https://presenton.ai/download) (Mac, Windows & Linux)\n- Works with OpenAI, Gemini, Vertex AI, Azure OpenAI, Amazon Bedrock, Fireworks, Together AI, Anthropic, LM Studio, Ollama, or custom models\n- Comes with AI Presentation Generation API\n- Fully open-source (Apache 2.0)\n- Works with your own design/templates\n- **Fully editable PPTX export**\n\n> [!TIP]\n> **Star us!** A ⭐ shows your support and encourages us to keep building! 😇\n\n\n  \n\n\n#\n\n### 🎛 Features\n\n\n  \n\n\n#\n\n### 💻 Presenton Desktop\n\nCreate AI-powered presentations using your own model provider (BYOK) or run everything locally on your own machine for full control and data privacy.\n\n\n  \n    \n  \n\n\n**Available Platforms**\n\n\n\nPlatform\nArchitecture\nPackage\nDownload\n\n\n\nmacOS\nApple Silicon / Intel\n.dmg\nDownload ↗\n\n\n\nWindows\nx64\n.exe\nDownload ↗\n\n\n\nLinux\nx64\n .deb\nDownload ↗\n\n\n\n\n\n**Deploy to Cloud Providers**\n\n\n  \n    \n  \n  \n    \n  \n\n\n#\n\nPresenton gives you complete control over your AI presentation workflow. Choose your models, customize your experience, and keep your data private.\n\n- Custom Templates & Themes — Create unlimited presentation designs with HTML and Tailwind CSS\n- AI Template Generation — Create presentation templates from existing Powerpoint documents.\n- Flexible Generation — Build presentations from prompts or uploaded documents\n- Export Ready — Save as PowerPoint (PPTX) and PDF with professional formatting\n- Built-In MCP Server — Generate pr

FAQ (5)

トラブル対応
Presenton で slides_markdown を生成すると、常に 'to_string() got unexpected keyword argument with_schema' という 500 エラーが返されるのはなぜですか?

エラーは、get_messages_for_slides_markdown() が PresentationLayoutModel.to_string() に with_schema=True を渡しているために発生しますが、このメソッドはその引数を受け付けません。即時的な回避策は、servers/fastapi/templates/presentation_layout.py を編集し、メソッドシグネチャを def to_string(self, with_schema: bool = False) -> str: に変更することです。これによりクラッシュが抑制され、スライド生成が可能になります。あるいは、generate_presentation_structure.py の129行目にある呼び出しから with_schema=True を削除する方法もあります。恒久的な修正としては、スキーマ出力を実装するか、呼び出し側を合わせる必要があります。

参照 Issue #637
トラブル対応
AI agentがプレゼンテーションを編集する際のreal-time UI updatesの取得方法

最新バージョンのPresentonにアップグレードしてください。最近のリリースでは、ツールアクション後にスライドを自動更新し、チャットステータスをストリームし、フォローモードで編集したスライドをハイライト表示し、スライド選択用のサムネイルパネルを搭載しています。手動リロードは不要です。

参照 Issue #448
トラブル対応
macOSで「Apple could not verify ... is free of malware」と表示されるアプリを開く方法は?

これはアプリがAppleによって公証されていないために発生します。Gatekeeperを回避するには、.dmgからアプリをインストールし(Applicationsにドラッグ)、Finder → Applicationsでアプリを右クリック(またはControlクリック)して「開く」を選択し、ダイアログで「開く」を確認してください。この操作は一度だけ必要で、以降の起動は通常通り行えます。または、システム設定 → プライバシーとセキュリティに進み、「このまま開く」をクリックしてください。

参照 Issue #617
トラブル対応
Presentonのoperation executor receiptがスライドコンテンツの更新に対して常に空のchangedSlideIdsを返すのはなぜですか?

これは _apply_operations()(services/operation_executor.py)における自己比較 diff のバグです。エグゼキューターは current_slides が参照しているのと同じ ORM SlideModel インスタンスをミューテートするため、適用後の diff は各スライドオブジェクトをそれ自身と比較してしまい、常に changedSlideIds: [] を返します — ミューテーションは正しく適用されているにもかかわらず(リビジョンはインクリメントされ、DB とスナップショットも更新されています)。構造操作(insert/duplicate/move)はスライドの ID/数を変更するため、影響を受けません。修正: 操作を適用する前にベースラインのスライド値をスナップショットし、ミューテートされた ORM オブジェクトを再読み込みする代わりに、ステージングされたスライドをそのスナップショットと diff します:

current = document_snapshot(presentation, current_slides)
baseline_slide_values = {str(slide.id): _slide_value(slide) for slide in current_slides}
# ... apply operations to staged_slides ...
changed_slide_ids = [
    slide_id for slide_id in desired_slide_ids
    if slide_id in existing_slide_ids
    and _slide_value(next(s for s in staged_slides if str(s.id) == slide_id))
    != baseline_slide_values.get(slide_id)
]

修正後、インプレースミューテーション(例: UpdateSlide による speaker_note の設定)は、操作結果と永続化されたレシートの両方で、ミューテートされたスライドの ID を正しく返します。検証済みの修正は PR #913(ブランチ audit/r0-persistence-executor)で利用可能です。

参照 Issue #912
トラブル対応
RFC3339 date-time スキーマ検証エラーで MCP クライアントが Presenton のタスクステータスのタイムスタンプを拒否する問題を修正する方法

Presenton (v0.9.11-beta) では、DateTime(timezone=True) カラムが定義されているにもかかわらず SQLite がタイムゾーン情報を保持しないため、get_job_status および template リストエンドポイントから 2026-09-25T14:02:03.123456 のような tz-naive なタイムスタンプが返されます。その結果、厳密な MCP クライアントは宣言された format: date-time スキーマに対するバリデーションに失敗します。修正方法: UTC 対応のフィールドシリアライザーを AsyncTaskModel(servers/fastapi/models/sql/async_task.py)と TemplateListItem(servers/fastapi/api/v1/ppt/endpoints/template.py)の両方に追加してください:

from datetime import datetime, timezone
from pydantic import field_serializer

@field_serializer("created_at", "updated_at")
def _serialize_timestamps(self, value: datetime | str) -> str:
    if isinstance(value, str):
        return value
    if value.tzinfo is None:
        value = value.replace(tzinfo=timezone.utc)
    return value.isoformat()

これにより、タイムスタンプが RFC3339 準拠(例: 2026-09-25T14:02:03.123456+00:00)になり、REST/OpenAPI と MCP ツール出力の両方の問題を一箇所で修正できます。

参照 Issue #957