能力标签
presenton Agent工作流
⚙️
Agent工作流

presenton Agent工作流

基于 JavaScript · 无代码搭建完整 AI 自动化流程
英文名:presenton
⭐ 5.0k Stars 🍴 975 Forks 💻 JavaScript 📄 Apache-2.0 🏷 AI 8.2分
8.2AI 综合评分
AI演示生成工作流自动化PowerPoint自动化API接口开源工具
✦ AI Skill Hub 推荐

presenton Agent工作流 是 AI Skill Hub 本期精选Agent工作流之一。已获得 5.0k 颗 GitHub Star,综合评分 8.2 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。

📚 深度解析

presenton Agent工作流 是一套完整的 AI Agent 自动化工作流方案。随着 AI 能力的不断提升,基于 Agent 的自动化工作流正在成为提升个人和团队效率的核心方式。区别于传统的 RPA 自动化(模拟鼠标键盘操作),AI Agent 工作流通过理解任务意图、动态规划执行路径,能够处理更复杂的非结构化任务。

presenton Agent工作流 工作流的设计遵循"最小配置,最大复用"原则:核心逻辑已经封装好,用户只需配置自己的 API Key 和业务参数即可快速上手。工作流内置错误处理和重试机制,在网络波动或 API 限速等情况下仍能稳定运行,适合作为生产环境的自动化基础设施。

在实际部署时,建议先在测试环境中运行 3-5 次,验证各个环节的输出结果符合预期,再部署到生产环境。AI Skill Hub 评分 8.2 分,是同类 Agent 工作流中的精选推荐。

📋 工具概览

presenton Agent工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。

GitHub Stars
⭐ 5.0k
开发语言
JavaScript
支持平台
Windows / macOS / Linux
维护状态
持续维护,定期更新
开源协议
Apache-2.0
AI 综合评分
8.2 分
工具类型
Agent工作流
Forks
975

📖 中文文档

以下内容由 AI Skill Hub 根据项目信息自动整理,如需查看完整原始文档请访问底部「原始来源」。

presenton Agent工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。

📌 核心特色
  • 可视化 Agent 工作流编排,无需编写复杂代码
  • 支持多步骤自动化任务链,实现全流程无人值守
  • 与外部 API、数据库和第三方服务无缝集成
  • 内置错误处理与自动重试机制,保障稳定运行
  • 提供可复用的自动化模板,快速在同类场景部署
🎯 主要使用场景
  • 自动化日常重复性工作,将精力集中于创造性任务
  • 构建数据采集 → 处理 → 输出的完整自动化管线
  • 实现跨平台、跨系统的数据流转和业务协同
以下安装命令基于项目开发语言和类型自动生成,实际以官方 README 为准。
安装命令
# 方式一:npm 全局安装
npm install -g presenton

# 方式二:npx 直接运行(无需安装)
npx presenton --help

# 方式三:项目依赖安装
npm install presenton

# 方式四:从源码运行
git clone https://github.com/presenton/presenton
cd presenton
npm install
npm start
📋 安装步骤说明
  1. 访问 GitHub 仓库获取工作流文件
  2. 在对应平台(Dify / Flowise / Make 等)中找到「导入工作流」功能
  3. 上传工作流文件
  4. 按照提示配置必要的环境变量和 API Key
  5. 运行测试确认流程正常后投入使用
以下用法示例由 AI Skill Hub 整理,涵盖最常见的使用场景。
常用命令 / 代码示例
# 命令行使用
presenton --help

# 基本用法
presenton [options] <input>

# Node.js 代码中使用
const presenton = require('presenton');

const result = await presenton.run(options);
console.log(result);
以下配置示例基于典型使用场景生成,具体参数请参照官方文档调整。
配置示例
# presenton 配置说明
# 查看配置选项
presenton --config-example > config.yml

# 常见配置项
# output_dir: ./output
# log_level: info
# workers: 4

# 环境变量(覆盖配置文件)
export PRESENTON_CONFIG="/path/to/config.yml"
📑 README 深度解析 真实文档 完整度 49/100 查看 GitHub 原文 →
以下内容由系统直接从 GitHub README 解析整理,保留代码块、表格与列表结构。

简介

<p align="center"> <img src="./readme_assets/images/logo.png" alt="Presenton" /> </p>

<p align="center"> <a href="https://presenton.ai/download"><strong>Quickstart</strong></a> &middot; <a href="https://presenton.ai/explore"><strong>Templates</strong></a> &middot; <a href="https://docs.presenton.ai/"><strong>Docs</strong></a> &middot; <a href="https://www.youtube.com/@presentonai"><strong>Youtube</strong></a> &middot; <a href="https://discord.gg/9ZsKKxudNE"><strong>Discord</strong></a> </p>

<p align="center"> <a href="https://github.com/presenton/presenton/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat" alt="Apache2.0" /></a> <a href="https://github.com/presenton/presenton"><img src="https://img.shields.io/github/stars/presenton/presenton?style=flat" alt="Stars" /></a> <a href="https://presenton.ai/"><img src="https://img.shields.io/badge/Platform-Docker%20%7C%20Windows%20%7C%20macOS%20%7C%20Linux-lightgrey?style=flat" alt="Platform" /></a> </p>

<p align="center"> <a href="https://trendshift.io/repositories/18582?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-18582" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/18582" alt="presenton%2Fpresenton | Trendshift" width="250" height="55" /></a> </p>

🎛 Features

Create presentations from a prompt, an uploaded document, or your own PowerPoint design. Choose from built-in templates, bring your preferred AI provider and API key, polish manually with drag-edit interface and export a fully editable deck.

<p align="center"> <img src="./readme_assets/images/drag-and-edit.gif" alt="Drag-and-drop editing in the Presenton slide editor" /> </p>

<p align="center"> <img src="./readme_assets/images/features.png" alt="Presenton features: custom designs, AI generation, bring your own API key, and built-in templates" /> </p>

<p align="center"> <img src="./readme_assets/images/chatgpt-2-1.png" alt="Create presentations with your existing ChatGPT subscription: secure and private, with instant access and no API keys" /> </p>

#

⚙️ Deployment Configurations

The tables below match the environment variables forwarded in this repository’s docker-compose.yml (production, production-gpu, development, and development-gpu). Put values in a .env file next to the compose file, or export them before docker compose up. The Electron app backend can read the same names when run outside Docker.

Other optional variables exist in code (for example advanced Mem0 paths, LiteParse runners, or FAST_API_INTERNAL_URL when Next.js and FastAPI are not same-origin); they are not wired in docker-compose.yml. Supported names are discoverable from servers/fastapi/utils/get_env.py and the Next.js server utilities under servers/nextjs/.

Air-gapped deployments

The Community gallery is enabled by default and reads presentation designs from the Presenton community service. Air-gapped deployments must disable it:

PRESENTON_COMMUNITY_ENABLED=false

For Docker Compose, add the value to the .env file next to docker-compose.yml before starting Presenton. For docker run, pass -e PRESENTON_COMMUNITY_ENABLED=false. This removes Community from the UI and prevents the backend from sending Community gallery or design-reference requests.

LLM and API keys

VariableValues / defaultPurpose
**CAN_CHANGE_KEYS**true / falseSet to false to keep API keys hidden and unmodifiable.
**PRESENTON_PUBLIC_URL**Optional URLBrowser-reachable Presenton origin, such as http://localhost:5001 or https://slides.example.com. Generated download, edit, and preview links use this origin.
**PRESENTATION_GENERATION_MODE**both (default), standard, smartControls the modes available in the UI and MCP server. A single-mode value hides the selector; smart also hides template features. See the **[presentation generation modes guide](docs/presentation-generation-modes.md)**.
**PRESENTON_COMMUNITY_ENABLED**true (default), falseControls the cloud-backed Community gallery and design references. Set to false for air-gapped deployments to hide the feature and prevent community API requests.
**LLM**openai, deepseek, google, vertex, azure, bedrock, openrouter, fireworks, together, cerebras, anthropic, litellm, lmstudio, ollama, custom, codexSelects the text LLM provider.
**OPENAI_API_KEY**Required for LLM=openaiOpenAI API key.
**OPENAI_MODEL**gpt-4.1 (default)OpenAI model.
**DEEPSEEK_API_KEY**Required for LLM=deepseekDeepSeek API key.
**DEEPSEEK_MODEL**deepseek-chat (default)DeepSeek model.
**DEEPSEEK_BASE_URL**https://api.deepseek.com (default)DeepSeek base URL.
**GOOGLE_API_KEY**Required for LLM=googleGoogle API key.
**GOOGLE_MODEL**models/gemini-2.0-flash (default)Google model.
**VERTEX_MODEL**gemini-2.5-flash (default)Vertex AI model.
**VERTEX_API_KEY**OptionalVertex Express API key authentication.
**VERTEX_PROJECT** / **VERTEX_LOCATION**Optional pairGCP project credential authentication; do not combine with VERTEX_API_KEY.
**VERTEX_BASE_URL**Optional URLVertex gateway or base URL override.
**AZURE_OPENAI_MODEL**Required for LLM=azureAzure deployment or model name.
**AZURE_OPENAI_API_KEY**Required for LLM=azureAzure OpenAI API key.
**AZURE_OPENAI_API_VERSION**Required; for example 2024-10-21Azure OpenAI API version.
**AZURE_OPENAI_ENDPOINT** / **AZURE_OPENAI_BASE_URL**At least one requiredAzure OpenAI endpoint.
**AZURE_OPENAI_DEPLOYMENT**OptionalAzure deployment override.
**BEDROCK_REGION**us-east-1 (default)AWS Bedrock region.
**BEDROCK_MODEL**Required for LLM=bedrockStandard model ID or full inference-profile ARN, passed to Bedrock Converse as modelId. See the **[Amazon Bedrock guide](docs/amazon-bedrock.md)**.
**BEDROCK_API_KEY**OptionalBedrock API-key authentication; alternative to AWS keys.
**BEDROCK_AWS_ACCESS_KEY_ID** / **BEDROCK_AWS_SECRET_ACCESS_KEY**Required together when BEDROCK_API_KEY is unsetAWS credential authentication for Bedrock.
**BEDROCK_AWS_SESSION_TOKEN**OptionalAWS session token.
**BEDROCK_PROFILE_NAME**OptionalAWS profile name.
**OPENROUTER_API_KEY**Required for LLM=openrouterOpenRouter API key.
**OPENROUTER_MODEL**openai/gpt-4o (default)OpenRouter model.
**OPENROUTER_BASE_URL**https://openrouter.ai/api/v1 (default)OpenRouter base URL.
**OPENROUTER_PROVIDER_ORDER**Optional comma-separated listProvider routing order.
**OPENROUTER_ALLOW_FALLBACKS**true / falseOptional provider fallback override.
**OPENROUTER_REQUIRE_PARAMETERS**true / falseOnly route to providers supporting every request parameter.
**OPENROUTER_DATA_COLLECTION**allow / denyOptional data-collection policy.
**OPENROUTER_ZDR**true / falseOptional zero-data-retention requirement.
**FIREWORKS_API_KEY**Required for LLM=fireworksFireworks API key.
**FIREWORKS_MODEL**For example accounts/fireworks/models/llama-v3p1-8b-instructFireworks model.
**FIREWORKS_BASE_URL**https://api.fireworks.ai/inference/v1 (default)Fireworks base URL.
**TOGETHER_API_KEY**Required for LLM=togetherTogether AI API key.
**TOGETHER_MODEL**For example openai/gpt-oss-20bTogether AI model.
**TOGETHER_BASE_URL**https://api.together.ai/v1 (default)Together AI base URL.
**CEREBRAS_API_KEY**Required for LLM=cerebrasCerebras API key.
**CEREBRAS_MODEL**llama-3.3-70b (default)Cerebras model.
**CEREBRAS_BASE_URL**https://api.cerebras.ai/v1 (default)Cerebras base URL.
**ANTHROPIC_API_KEY**Required for LLM=anthropicAnthropic API key.
**ANTHROPIC_MODEL**claude-3-5-sonnet-20241022 (default)Anthropic model.
**CODEX_MODEL**Required for LLM=codexCodex model. The OAuth flow maps host port 1455 for its callback.
**CUSTOM_LLM_URL**Required for LLM=customOpenAI-compatible base URL. The server must implement POST /v1/chat/completions; a provider-specific completion endpoint is insufficient.
**CUSTOM_LLM_API_KEY**Provider-dependentCustom-provider API key.
**CUSTOM_MODEL**Required for LLM=customCustom-provider model ID.
**LITELLM_BASE_URL**Required for LLM=litellmLiteLLM proxy or gateway base URL.
**LITELLM_API_KEY**OptionalLiteLLM API key.
**LITELLM_MODEL**gpt-4.1 (default)LiteLLM model.
**LMSTUDIO_BASE_URL**http://localhost:1234/v1 (default)LM Studio base URL; /v1 is appended when omitted.
**LMSTUDIO_API_KEY**OptionalLM Studio API key.
**LMSTUDIO_MODEL**For example openai/gpt-oss-20bLM Studio model.
**DISABLE_THINKING**true / falseDisables thinking for providers that support it, including DeepSeek.
**WEB_GROUNDING**true / falseEnables web search by default.
**WEB_SEARCH_PROVIDER**auto, native, searxng, tavily, exaSelects the search mode. auto uses native search for OpenAI, Google, and Anthropic and otherwise leaves search off unless an external provider is selected.
**WEB_SEARCH_MAX_RESULTS**5 (default), maximum 10Maximum external search results added to model context.
**SEARXNG_BASE_URL**Optional URLSelf-hosted SearXNG base URL.
**TAVILY_API_KEY**, **EXA_API_KEY**OptionalCredentials for hosted search providers.
**EXTENDED_REASONING**true / falseEnables extended reasoning where supported.
**LLM_GENERATION_PROFILE**fast, balanced (default), deep, model_maxGlobal generation profile.
**LLM_MAX_OUTPUT_TOKENS**Optional positive integerOutput-token override for every text provider.
**MAX_OUTLINE_WORDS**100 (default), positive integerMaximum words in each generated, edited, or slides_markdown slide outline.
**LLM_REASONING_MODE**auto, enabled, disabledGlobal reasoning-mode override.
**LLM_REASONING_EFFORT**default, none, minimal, low, medium, high, xhigh, maxReasoning-effort override.
**LLM_REASONING_BUDGET_TOKENS**Optional non-negative integerReasoning token budget.

All advanced text-provider settings are optional. Use Reset advanced settings in Settings or onboarding to remove overrides and inherit application/provider defaults.

Ollama

Use when LLM is ollama:

VariableValues / defaultPurpose
**OLLAMA_URL**For example http://host.docker.internal:11434 from DockerOllama HTTP API base URL.
**OLLAMA_MODEL**For example llama3.2:3bOllama model name.
**START_OLLAMA**false (default), trueAllows the container entrypoint (start.js) to install Ollama and run ollama serve.

Presentation memory (Mem0 OSS)

Mem0 uses local Qdrant + SQLite (OSS); memory is scoped per presentation.

By default the Docker runtime now points Mem0 at a local Ollama-compatible LLM endpoint, so it no longer needs an OpenAI key just to initialize. If you want to use OpenAI instead, set MEM0_LLM_BASE_URL/MEM0_LLM_API_KEY to your OpenAI-compatible endpoint and key. Docker images install the default spaCy model (en_core_web_sm) during build so Mem0 can start without extra setup on each run.

VariablePurpose
**MEM0_ENABLED****true**/false (compose default **true**).
**MEM0_LLM_MODEL**Mem0 LLM model name (compose default **llama3.1:latest** or OLLAMA_MODEL).
**MEM0_LLM_API_KEY**Mem0 LLM API key placeholder for OpenAI-compatible clients (compose default **ollama**).
**MEM0_LLM_BASE_URL**Mem0 LLM base URL (compose default **OLLAMA_URL** or http://host.docker.internal:11434).
**MEM0_DIR**Root directory (compose default **/app_data/mem0**).
**MEM0_EMBEDDER_PROVIDER**Embedder backend (compose default **fastembed**).
**MEM0_EMBEDDER_MODEL**Model id (compose default **BAAI/bge-small-en-v1.5**).
**MEM0_EMBEDDING_DIMS**Vector size (compose default **384**).
**MEM0_SPACY_MODEL**Optional spaCy model override (default **en_core_web_sm**).
**MEM0_REQUIRE_SPACY_MODEL**Keep as **true** (default). Set to false only if you intentionally want Mem0 to run without spaCy lemmatization.

Document parsing (LiteParse)

VariablePurpose
**LITEPARSE_DPI**OCR render DPI (compose default **120**).
**LITEPARSE_NUM_WORKERS**Worker count (compose default **1**).

Database

VariableValues / defaultPurpose
**DATABASE_URL**Optional SQLAlchemy URLConfigures the database; when unset, the app uses SQLite under app data.
**MIGRATE_DATABASE_ON_STARTUP**true (default), falseRuns database migrations during startup. Set to false only when migrations are managed externally.

Image generation

These variables match docker-compose.yml. IMAGE_PROVIDER selects the backend (pexels, pixabay, gemini_flash, nanobanana_pro, gpt-image-2, gpt-image-1.5, comfyui, open_webui). Use OPENAI_API_KEY for OpenAI image modes and GOOGLE_API_KEY for Gemini image modes (same keys as the LLM section).

VariableValues / defaultPurpose
**DISABLE_IMAGE_GENERATION**true / falseDisables slide image generation.
**ENABLE_PARALLEL_IMAGE_GENERATION**true (default), falseAllows concurrent image-provider requests. Set to false for providers with strict rate limits.
**IMAGE_PROVIDER**pexels, pixabay, gemini_flash, nanobanana_pro, gpt-image-2, gpt-image-1.5, comfyui, open_webui, openai_compatibleSelects the image backend.
**PEXELS_API_KEY**Required for IMAGE_PROVIDER=pexelsPexels stock-image API key.
**PIXABAY_API_KEY**Required for IMAGE_PROVIDER=pixabayPixabay stock-image API key.
**GPT_IMAGE_2_QUALITY**low, medium (default), highGPT Image 2 image quality.
**GPT_IMAGE_1_5_QUALITY**low, medium (default), highGPT Image 1.5 image quality.
**COMFYUI_URL** / **COMFYUI_WORKFLOW**Required for IMAGE_PROVIDER=comfyuiSelf-hosted ComfyUI endpoint and workflow JSON.
**OPEN_WEBUI_IMAGE_URL** / **OPEN_WEBUI_IMAGE_API_KEY**Required for IMAGE_PROVIDER=open_webuiOpen WebUI API root (http://host:8080/api/v1; a bare origin gets /api/v1 appended) and API key.
**OPENAI_COMPAT_IMAGE_BASE_URL** / **OPENAI_COMPAT_IMAGE_API_KEY** / **OPENAI_COMPAT_IMAGE_MODEL**Required for IMAGE_PROVIDER=openai_compatibleSends image requests to an OpenAI-compatible /v1/images/* endpoint such as LiteLLM, Azure, or a vLLM gateway.

Existing IMAGE_PROVIDER=dall-e-3 configurations automatically migrate to gpt-image-2. Legacy standard quality maps to medium, and hd maps to high. Set GPT_IMAGE_2_QUALITY to choose a different quality.

The parallel image generation option applies everywhere images are generated: initial presentation generation, slide editing and regeneration, direct image requests, and assistant image tools.

Telemetry

VariableValues / defaultPurpose
**DISABLE_ANONYMOUS_TRACKING**true / falseSet to true to disable anonymous telemetry.

Multi-user authentication

Presenton supports multiple accounts with a private workspace for each user. The first account becomes the primary administrator and can create, reset, or remove other accounts from Admin → Users.

Existing single-user installations are upgraded automatically: the current account becomes the primary administrator, while its presentations, templates, tasks, and other owned data stay attached to the same account.

Set up the primary administrator

On a new installation, open Presenton and follow the account setup screen. For an unattended Docker deployment, you can create the primary administrator on first boot with environment variables:

docker run -it --name presenton \
  -p 5001:80 \
  -e AUTH_USERNAME=admin \
  -e AUTH_PASSWORD=change-this-password \
  -v "./app_data:/app_data" \
  ghcr.io/presenton/presenton:latest

Usernames must contain at least 3 characters, and new passwords must contain at least 8 characters. Older six- or seven-character passwords remain valid after an upgrade.

Authentication environment variables
VariablePurpose
**AUTH_USERNAME**Username used to create the primary administrator on first boot. It can also change the username during a rotation or recovery.
**AUTH_PASSWORD**Password used for first-time setup, rotation, or recovery. Required when using either flag below.
**AUTH_OVERRIDE_FROM_ENV**=[true/false]Replace the primary administrator's credentials from the environment on the next startup. Use this for a deployment-managed credential rotation.
**RESET_AUTH**=[true/false]Recover access to the existing primary administrator without replacing the account or its data.
Presenton Cloud provider

Presenton Cloud is an optional, installation-wide generation provider. It is not an authentication method for the self-hosted instance. Create or sign in to the local administrator account first, then connect Presenton from provider onboarding.

Only the local administrator can connect, replace, or disconnect the provider. The browser displays a short device code and opens the hosted Presenton approval page. After approval, the delegated access and rotating refresh tokens are encrypted at rest and stored as one global provider credential; they are never returned to the browser or stored per local user.

Selecting Presenton as the text provider saves LLM=presenton. Presentation generation and document uploads then use the Presenton Cloud API and its token. Connecting the provider alone does not change generation: when another provider is selected, the existing local generation pipeline remains unchanged. Disconnecting revokes and removes the global credentials and deselects Presenton.

No OAuth client registration, client secret, or environment configuration is required. Official builds contain the cloud URL and first-party public device-flow client ID.

To rotate credentials from the environment:

docker stop presenton
docker rm presenton
docker run -it --name presenton \
  -p 5001:80 \
  -e AUTH_USERNAME=admin \
  -e AUTH_PASSWORD=new-secure-password \
  -e AUTH_OVERRIDE_FROM_ENV=true \
  -v "./app_data:/app_data" \
  ghcr.io/presenton/presenton:latest

For account recovery, use the same command with RESET_AUTH=true instead of AUTH_OVERRIDE_FROM_ENV=true. Both operations preserve the administrator's user ID and owned data, and invalidate existing browser sessions and API keys. Remove the one-time flag after the successful startup.

[!IMPORTANT] Do not remove authentication fields from app_data/userConfig.json to reset access. Presenton stores a hashed recovery copy of the primary administrator credentials and the session-signing secret there. Use the recovery variables above to preserve the database account and its ownership links.

To sign out, open Settings → Other → Sign out.

API and MCP authentication

Presenton exposes a client-neutral MCP 2025-11-25 Streamable HTTP endpoint at /mcp. When authentication is enabled, REST API and MCP clients use the same administrator-provisioned, user-scoped API key. Browser JWT cookies are not accepted as MCP credentials.

1. An administrator creates the target Presenton user, then calls POST /api/v1/admin/api-keys from an authenticated admin session with {"user_id":"...","label":"My API client","expiry_days":90}. The response contains the new key. Listing and revocation use GET /api/v1/admin/api-keys and POST /api/v1/admin/api-keys/{api_key_id}/revoke. An administrator can securely reveal a key again with GET /api/v1/admin/api-keys/{api_key_id}/token.

2. Configure any Streamable HTTP MCP client to send the generated sk-presenton-... key on every request:

{
  "servers": {
    "presenton": {
      "url": "http://localhost:5001/mcp",
      "type": "http",
      "headers": {
        "Authorization": "Bearer sk-presenton-0123456789abcdef.REPLACE_WITH_SECRET"
      }
    }
  },
  "inputs": []
}

Notes:

- This example uses VS Code's .vscode/mcp.json format. Use the equivalent Streamable HTTP and bearer-header configuration in Open WebUI or any other conforming MCP client. - API keys retain an Argon2 authentication hash and an encrypted, admin-only recoverable copy. They expire by default after 90 days and represent exactly the selected Presenton user. The same key authenticates general REST endpoints and MCP, but cannot sign in to the browser or change admin/provider settings. - The API key is exchanged inside the MCP process for a short-lived internal user session. The long-lived key is never forwarded to presentation APIs. - Revoking the key through the admin API takes effect immediately. - Standard, Smart Mode, and template generation tools return an async task ID. Poll get_job_status until completed or error; template listing is immediate. - MCP exposes only the polling Smart workflow (start_smart_presentation followed by get_job_status) so Standard and Smart generation use the same job model. - upload_template_assets accepts one PPTX and its replacement fonts in a single call, then returns the data needed by start_template_generation. - upload_files accepts reference documents and images as base64 and returns user-scoped paths that can be passed unchanged to Standard or Smart generation. - External REST API and MCP access are not available in the Electron desktop app (PRESENTON_ELECTRON=true). Its local HTTP servers are internal application services. Electron runs without account login by default and supplies a private credential generated at each launch to its own app and export requests; anonymous local clients cannot access those services. The MCP server remains disabled there. - Only asset subdirectories are served under /app_data; configuration, databases and logs are never web assets. Document preview readers accept .txt document files within the allowed asset/temp directories and reject export task JSON and private application files.

Note: LLM and image variables above are forwarded from docker-compose.yml when set in .env.

<br> <br>

Docker Run Examples by Provider

Same variables as compose; use -e instead of .env when running docker run directly.

- Using OpenAI <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="openai" -e OPENAI_API_KEY="******" -e IMAGE_PROVIDER="gpt-image-2" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Google <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="google" -e GOOGLE_API_KEY="******" -e IMAGE_PROVIDER="gemini_flash" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Vertex AI (API key mode) <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="vertex" -e VERTEX_API_KEY="******" -e VERTEX_MODEL="gemini-2.5-flash" -e IMAGE_PROVIDER="gemini_flash" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Azure OpenAI <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="azure" -e AZURE_OPENAI_API_KEY="****" -e AZURE_OPENAI_MODEL="gpt-4.1" -e AZURE_OPENAI_API_VERSION="2024-10-21" -e AZURE_OPENAI_ENDPOINT="https://YOUR-RESOURCE.openai.azure.com" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Amazon Bedrock (on-demand model ID) — see docs/amazon-bedrock.md for inference profiles, IAM, and troubleshooting. <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="bedrock" -e BEDROCK_REGION="us-east-1" -e BEDROCK_AWS_ACCESS_KEY_ID="****" -e BEDROCK_AWS_SECRET_ACCESS_KEY="**" -e BEDROCK_MODEL="us.anthropic.claude-3-5-haiku-20241022-v1:0" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Amazon Bedrock (inference profile ARN, e.g. Claude Sonnet 4.6) <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="bedrock" -e BEDROCK_REGION="us-east-1" -e BEDROCK_AWS_ACCESS_KEY_ID="****" -e BEDROCK_AWS_SECRET_ACCESS_KEY="**" -e BEDROCK_MODEL="arn:aws:bedrock:us-east-1:YOUR_ACCOUNT_ID:inference-profile/us.anthropic.claude-sonnet-4-6" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Fireworks <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="fireworks" -e FIREWORKS_API_KEY="****" -e FIREWORKS_MODEL="accounts/fireworks/models/llama-v3p1-8b-instruct" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Together AI <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="together" -e TOGETHER_API_KEY="****" -e TOGETHER_MODEL="openai/gpt-oss-20b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Ollama <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="ollama" -e OLLAMA_MODEL="llama3.2:3b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="*******" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using Anthropic <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="anthropic" -e ANTHROPIC_API_KEY="****" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="****" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using LM Studio (local) <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e LLM="lmstudio" -e LMSTUDIO_BASE_URL="http://host.docker.internal:1234" -e LMSTUDIO_MODEL="openai/gpt-oss-20b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="******" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Using OpenAI Compatible LLM API <pre><code class="language-bash">docker run -it -p 5001:80 -e CAN_CHANGE_KEYS="false" -e LLM="custom" -e CUSTOM_LLM_URL="http://***" -e CUSTOM_LLM_API_KEY="" -e CUSTOM_MODEL="llama3.2:3b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="*****" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

- Running Presenton with GPU Support To use GPU acceleration with Ollama models, you need to install and configure the NVIDIA Container Toolkit. This allows Docker containers to access your NVIDIA GPU. Once the NVIDIA Container Toolkit is installed and configured, you can run Presenton with GPU support by adding the --gpus=all flag: <pre><code class="language-bash">docker run -it --name presenton --gpus=all -p 5001:80 -e LLM="ollama" -e OLLAMA_MODEL="llama3.2:3b" -e IMAGE_PROVIDER="pexels" -e PEXELS_API_KEY="*******" -e CAN_CHANGE_KEYS="false" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

  • Using an OpenAI-Compatible Image Provider

This routes all slide image requests through your OpenAI-compatible gateway (LiteLLM, Azure, vLLM, etc.) while keeping the text LLM configuration independent: <pre><code class="language-bash">docker run -it --name presenton -p 5001:80 -e IMAGE_PROVIDER="openai_compatible" -e OPENAI_COMPAT_IMAGE_BASE_URL="https://proxy.example.com/v1" -e OPENAI_COMPAT_IMAGE_API_KEY="******" -e OPENAI_COMPAT_IMAGE_MODEL="gpt-image-1" -v "./app_data:/app_data" ghcr.io/presenton/presenton:latest</code></pre>

#

✨ Generate Presentation via API

Generate Presentation

<p> <strong>Endpoint:</strong> <code>/api/v1/ppt/presentation/generate</code><br> <strong>Method:</strong> <code>POST</code><br> <strong>Content-Type:</strong> <code>application/json</code> </p>

<p> <strong>Authentication (API key):</strong><br> All <code>/api/v1/</code> routes except the public authentication endpoints require authentication. An administrator creates an access key under <strong>Admin → API keys</strong>. Send that <code>sk-presenton-...</code> key as <code>Authorization: Bearer YOUR_KEY</code>. API keys act as their owning user and cannot call browser-session-only administrator endpoints. </p>

Request Body

<tr> <td><code>content</code></td> <td>string</td> <td>Yes</td> <td>Main content used to generate the presentation. When using <code>slides_markdown</code> without an additional overall prompt, pass an empty string.</td> </tr>

<tr> <td><code>slides_markdown</code></td> <td>string[] | null</td> <td>No</td> <td>Provide one Markdown string per slide instead of asking Presenton to generate the slide outlines. The array length determines the number of slides.</td> </tr>

<tr> <td><code>instructions</code></td> <td>string | null</td> <td>No</td> <td>Additional generation instructions.</td> </tr>

<tr> <td><code>tone</code></td> <td>string</td> <td>No</td> <td> Text tone (default: <code>"default"</code>). Options: <code>default</code>, <code>casual</code>, <code>professional</code>, <code>funny</code>, <code>educational</code>, <code>sales_pitch</code> </td> </tr>

<tr> <td><code>verbosity</code></td> <td>string</td> <td>No</td> <td> Content density (default: <code>"standard"</code>). Options: <code>concise</code>, <code>standard</code>, <code>text-heavy</code> </td> </tr>

<tr> <td><code>web_search</code></td> <td>boolean</td> <td>No</td> <td>Enable web search grounding (default: <code>false</code>).</td> </tr>

<tr> <td><code>n_slides</code></td> <td>integer</td> <td>No</td> <td>Number of slides to generate. When omitted, the count is auto-detected. When using <code>slides_markdown</code>, its array length is used and <code>n_slides</code> can be omitted.</td> </tr>

<tr> <td><code>language</code></td> <td>string</td> <td>No</td> <td>Presentation language (default: <code>"English"</code>).</td> </tr>

<tr> <td><code>template</code></td> <td>string</td> <td>No</td> <td>Template name (default: <code>"general"</code>).</td> </tr>

<tr> <td><code>include_table_of_contents</code></td> <td>boolean</td> <td>No</td> <td>Include table of contents slide (default: <code>false</code>).</td> </tr>

<tr> <td><code>include_title_slide</code></td> <td>boolean</td> <td>No</td> <td>Include title slide (default: <code>true</code>).</td> </tr>

<tr> <td><code>files</code></td> <td>string[] | null</td> <td>No</td> <td> Files to use in generation. Upload first via <code>/api/v1/ppt/files/upload</code>. </td> </tr>

<tr> <td><code>export_as</code></td> <td>string</td> <td>No</td> <td> Export format (default: <code>"pptx"</code>). Options: <code>pptx</code>, <code>pdf</code> </td> </tr>

</tbody> </table>

Response

{
  "presentation_id": "string",
  "path": "string",
  "edit_path": "string"
}

Example (curl + API key)

curl \
  -X POST http://localhost:5001/api/v1/ppt/presentation/generate \
  -H "Authorization: Bearer sk-presenton-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
   "content": "Introduction to Machine Learning",
    "n_slides": 5,
    "language": "English",
    "template": "general",
    "export_as": "pptx"
  }'

Example: provide the content for every slide with slides_markdown

Each array item becomes one slide. Use ordinary Markdown headings, lists, emphasis, and tables to describe the audience-facing content. The <code>content</code> field is currently required by the API schema, so set it to an empty string when you do not want to provide an additional overall prompt.

curl \
  -X POST http://localhost:5001/api/v1/ppt/presentation/generate \
  -H "Authorization: Bearer sk-presenton-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "",
    "slides_markdown": [
      "# Acme Q2 Review\n\nRevenue grew **18% year over year** while customer retention reached 94%.",
      "# What changed\n\n- Enterprise revenue increased 24%\n- Support response time fell to 42 minutes\n- Expansion revenue offset slower new-logo growth",
      "# Next quarter\n\n1. Launch the self-service onboarding flow\n2. Expand the enterprise pilot program\n3. Reduce infrastructure cost per account by 10%"
    ],
    "template": "general",
    "language": "English",
    "export_as": "pdf"
  }'

Example: provide numeric data for a chart or table layout

Markdown tables with numeric columns help Presenton select a compatible chart or table layout. You can use <code>instructions</code> for presentation-level visual direction without adding those directions to the visible slide text.

curl \
  -X POST http://localhost:5001/api/v1/ppt/presentation/generate \
  -H "Authorization: Bearer sk-presenton-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "",
    "slides_markdown": [
      "# Regional revenue\n\n| Region | Q1 | Q2 |\n| --- | ---: | ---: |\n| North America | 2.4 | 2.9 |\n| Europe | 1.7 | 2.1 |\n| Asia Pacific | 1.1 | 1.6 |",
      "# Key takeaway\n\nAsia Pacific grew fastest at **45%**, while North America remained the largest market."
    ],
    "instructions": "Use a bar chart for slide 1 and an emphasis layout for slide 2.",
    "template": "general",
    "export_as": "pptx"
  }'

<blockquote> <strong>How <code>slides_markdown</code> works:</strong> It skips AI outline generation, but it is not a deterministic Markdown-to-slide renderer. Presenton still uses the configured text LLM to select suitable layouts and map each Markdown item into the template's structured fields, so text may be rephrased to fit. Provide at most 50 array items. Each item is limited to 100 words by default; longer items are truncated. Self-hosted deployments can change the per-slide limit with <code>MAX_OUTLINE_WORDS</code>. </blockquote>

Example Response

{
  "presentation_id": "d3000f96-096c-4768-b67b-e99aed029b57",
  "path": "/app_data/d3000f96-096c-4768-b67b-e99aed029b57/Introduction_to_Machine_Learning.pptx",
  "edit_path": "/presentation?id=d3000f96-096c-4768-b67b-e99aed029b57"
}

<blockquote> <strong>Note:</strong> Prepend your server’s root URL to <code>path</code> and <code>edit_path</code> to construct valid links. </blockquote>

Documentation & Tutorials

#

Open-Source AI Presentation Generator and API (Gamma, Canva, Beautiful AI, Decktopus, Presentations AI Alternative)

Discover what Presenton can do from AI-powered presentation generation to editing, exporting, and flexible model providers.

▶ Watch Presenton in Action

🎯 aiskill88 AI 点评 A 级 2026-05-20

成熟的开源演示自动化方案,5k+星标认可度高。整合多平台能力、提供API接口,JavaScript技术栈便于集成。适合自动化演示制作需求。

📚 实用指南(长尾问题)
适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 需要从图片、PDF 提取文字的文档自动化场景
最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • 本地部署优先选 GGUF 量化模型,节省显存并保持响应速度
常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
  • 显存不足直接 OOM — 优先降低 context 或换更小的量化模型
部署方案
  • Docker:presenton 提供官方镜像,docker compose up 一键启动
  • 本地部署:CPU 8GB 起,GPU 推荐 16GB+ 显存
  • 云端托管:可放在 Vercel / Railway / Fly.io 等 PaaS 平台

⚡ 核心功能

  • 可视化 Agent 工作流编排,无需编写复杂代码
  • 支持多步骤自动化任务链,实现全流程无人值守
  • 与外部 API、数据库和第三方服务无缝集成
  • 内置错误处理与自动重试机制,保障稳定运行
  • 提供可复用的自动化模板,快速在同类场景部署
👥 适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 需要从图片、PDF 提取文字的文档自动化场景
⭐ 最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • 本地部署优先选 GGUF 量化模型,节省显存并保持响应速度
⚠️ 常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
  • 显存不足直接 OOM — 优先降低 context 或换更小的量化模型

👥 适合人群

自动化工程师和运维人员项目经理和业务分析师希望减少重复性工作的专业人士数字化转型团队

🎯 使用场景

  • 自动化日常重复性工作,将精力集中于创造性任务
  • 构建数据采集 → 处理 → 输出的完整自动化管线
  • 实现跨平台、跨系统的数据流转和业务协同

⚖️ 优点与不足

✅ 优点
  • +GitHub 5.0k Star,社区高度认可
  • +Apache-2.0 协议,可免费商用
  • +大幅减少重复性人工操作
  • +可视化流程,清晰直观
  • +可扩展性强,支持复杂场景
⚠️ 不足
  • −初始配置和调试需投入一定时间
  • −强依赖外部服务的稳定性
  • −复杂场景需具备一定技术基础
⚠️ 使用须知

AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。

建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。

📄 License 说明

✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。

❓ 常见问题 FAQ

支持Gamma、Beautiful AI、Decktopus等主流AI演示工具及PowerPoint格式导出。
💡 AI Skill Hub 点评

经综合评估,presenton Agent工作流 在Agent工作流赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。

⬇️ 获取与下载
⬇ 下载源码 ZIP

✅ Apache-2.0 协议 · 可免费商用 · 直接从 aiskill88 服务器下载,无需跳转 GitHub

📚 深入学习 presenton Agent工作流
查看分步骤安装教程和完整使用指南,快速上手这款工具
🌐 原始信息
Parameter Type Required Description
原始名称 presenton
原始描述 开源AI工作流:Open-Source AI Presentation Generator and API (Gamma, Beautiful AI, Decktopus Al。⭐5.0k · JavaScript
Topics AI演示生成工作流自动化PowerPoint自动化API接口开源工具
GitHub https://github.com/presenton/presenton
License Apache-2.0
语言 JavaScript
🔗 原始来源
🐙 GitHub 仓库  https://github.com/presenton/presenton 🌐 官方网站  https://presenton.ai

收录时间:2026-05-16 · 更新时间:2026-05-19 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。

📺 订阅 AI Skill Hub Daily Telegram 频道
每天 8 条精选 AI Skill、MCP、Agent 与自动化工具推送
加入频道 →