DeckForge
API-first presentation generation for humans and AI agents
______________________________________________________________________
执行准备幻灯片,只需一个API调用。发送JSON中间表示(IR)或自然语言提示,并返回 .pptx 文件、谷歌幻灯片或缩略图PNG——具有专业布局、一致的品牌和经过验证的质量。
特性
- 32种滑盖类型 --标题、议程、要点、比较、时间线、流程图、组织结构图、统计标注、表格、图表、矩阵、漏斗图、地图等
- 9张财务幻灯片 --DCF摘要、计算表、瀑布图、交易概述、回报分析、资本结构、市场格局、风险矩阵、投资理论
- 24种图表类型 --条、线、区域、饼、甜甜圈、散射、气泡、组合、瀑布、漏斗、树状图、雷达、龙卷风、足球场、敏感度表、热图、桑基、甘特、日爆等
- 15个内置主题 --公司蓝、高管黑、金融专业、现代渐变、极简光、科技霓虹灯和其他9种(加上定制品牌套件)
- 本机PPTX输出 --带有元素级控制、转换和图表嵌入的python-pptx渲染
- 谷歌幻灯片输出 --通过Google Slides API直接导出(包括OAuth流)
- AI内容生成 --通过Claude、OpenAI、Gemini或Ollama(4阶段流程:意图、大纲、扩展、细化)将自然语言转换为幻灯片
- 5级QA管道 --使用自动修复引擎进行自动质量检查,以进行对比度、溢出、对齐等
- 基于约束的布局 --kiwisolver约束求解器,12列网格,自适应溢出(字体缩小、回流、拆分)
- MCP服务器 --6个AI代理集成工具(渲染、生成、主题、幻灯片类型、估计、预览)
- x402机器付款 --Base L2上自主AI代理的每次通话USDC定价
- 条纹计费 --订阅级别(入门免费,专业版每月79美元,企业定制),带信用系统
- TypeScript SDK --
@deckforge/sdk具有流畅的构建器模式、全类型安全、SSE流式传输
快速开始
在5分钟内从零到第一个渲染甲板。
先决条件
步骤
# 1. Clone the repo
git clone https://github.com/Whatsonyourmind/deckforge && cd deckforge
# 2. Copy environment config (works out of the box for local dev)
cp .env.example .env
# 3. Start all services (API, workers, PostgreSQL, Redis, MinIO)
docker compose up -d
# 4. Initialize the database (runs migrations, seeds test user + API key)
bash scripts/bootstrap-db.sh
# 5. Verify the API is running
curl http://localhost:8000/v1/health
# => {"status":"healthy"}引导程序脚本输出测试API密钥(dk_test_...).请将其保存为以下示例。
API示例
从IR渲染甲板
curl -X POST http://localhost:8000/v1/render \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"title": "Q4 Board Update",
"theme": "corporate-blue",
"slides": [
{
"slide_type": "title_slide",
"elements": [
{"type": "title", "content": "Q4 2026 Board Update"},
{"type": "subtitle", "content": "Acme Corp -- Confidential"}
]
},
{
"slide_type": "stats_callout",
"elements": [
{"type": "title", "content": "Key Metrics"},
{"type": "metric", "content": "$4.2M", "label": "ARR"},
{"type": "metric", "content": "142%", "label": "YoY Growth"},
{"type": "metric", "content": "94%", "label": "Retention"}
]
}
]
}' \
--output board-update.pptx从自然语言生成套牌
curl -X POST http://localhost:8000/v1/generate \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Create a 10-slide pitch deck for a B2B SaaS startup in the cybersecurity space, Series A, $2M ARR",
"theme": "executive-dark",
"output_format": "pptx"
}' \
--output pitch-deck.pptx注: 这/v1/generate终结点需要在中配置至少一个LLM API密钥.env(Anthropic、OpenAI、Gemini或Ollama)。
检查可用的主题和幻灯片类型
# List all 15 themes
curl http://localhost:8000/v1/themes
# List all 32 slide types with example IR
curl http://localhost:8000/v1/slide-types
# Estimate credit cost before rendering
curl -X POST http://localhost:8000/v1/estimate \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"slides": [{"slide_type": "title_slide"}, {"slide_type": "chart_slide"}]}'TypeScript SDK
从npm安装:
npm install @deckforge/sdk具有全类型安全性的流畅构建器:
import { DeckForge, Presentation, Slides } from "@deckforge/sdk";
const client = new DeckForge({ apiKey: "dk_test_YOUR_KEY_HERE" });
const deck = Presentation.create("Q4 Board Update", "corporate-blue")
.addSlide(
Slides.titleSlide({
title: "Q4 2026 Board Update",
subtitle: "Acme Corp -- Confidential",
})
)
.addSlide(
Slides.statsCallout({
title: "Key Metrics",
metrics: [
{ value: "$4.2M", label: "ARR" },
{ value: "142%", label: "YoY Growth" },
{ value: "94%", label: "Retention" },
],
})
);
const pptx = await client.render(deck);
// => Buffer containing .pptx file通过SSE流式传输从提示生成:
const stream = client.generate({
prompt: "Create a PE deal memo for a $500M LBO of a healthcare platform",
theme: "finance-pro",
});
for await (const event of stream) {
console.log(`${event.stage}: ${event.message}`);
}
// intent: Analyzing prompt for presentation structure...
// outline: Creating 12-slide deal memo outline...
// expand: Generating slide content...
// refine: Running QA pipeline (5 passes)...
// complete: Deck ready for download建筑
+------------------+
| Clients |
| (curl/SDK/MCP) |
+--------+---------+
|
+--------v---------+
| FastAPI (uvicorn)|
| /v1/* routes |
| Auth + Rate Limit|
| Credit Billing |
+--+-----+------+--+
| | |
+-----------+ | +----------+
| | |
+--------v------+ +------v--------+ +------v--------+
| Content Worker | | Render Worker | | Sync Path |
| (ARQ + Redis) | | (ARQ + Redis) | | ( IR | | IR -> PPTX | | Direct return |
+--------+------+ +------+--------+ +------+--------+
| | |
v v v
+--------+------+ +------+---------+ +-----+--------+
| LLM Adapters | | PPTX Renderer | | Google Slides|
| Claude/GPT/ | | Layout Engine | | Renderer |
| Gemini/Ollama | | Theme Resolver | | (OAuth) |
+---------------+ | Chart Renderer | +--------------+
| QA Pipeline |
+------+---------+
|
+------v---------+
| Storage |
| MinIO (dev) |
| R2/S3 (prod) |
+----------------+
+----------------+ +----------------+
| PostgreSQL | | Redis |
| Users, Keys | | Queue, Cache |
| Jobs, Decks | | Rate Limits |
| Billing | | SSE Pub/Sub |
+----------------+ +----------------+API路线
所有路线都安装在 /v1 前缀。互动文档 http://localhost:8000/docs.
| 端点 | 方法 | 身份验证 | 描述 |
|---|---|---|---|
/v1/health | GET | 否 | 健康检查 |
/v1/render | POST | API键 | 将IR渲染到PPTX/Google幻灯片 |
/v1/generate | POST | neneneba API键 | 从自然语言生成幻灯片 |
/v1/preview | POST | API键 | 生成缩略图PNG |
/v1/estimate | POST | API密钥 | 估计信贷成本 |
/v1/jobs/{id} | GET | API键 | 检查异步作业状态 |
/v1/themes | GET | 否 | 列出可用主题 |
/v1/slide-types | GET | 否 | 列出幻灯片类型及其示例 |
/v1/decks | GET/POST/DELETE | neneneba API键 | 甲板CRUD操作 |
/v1/batch | POST | neneneba API键 | 批量渲染多组 |
/v1/webhooks | GET/POST/DELETE | API密钥 | 管理webhook订阅 |
/v1/billing/* | 各种 | API密钥 | 条带订阅管理 |
/v1/pricing | GET | 否 | 当前定价和等级信息 |
/v1/onboard/signup | POST | 否 | 创建帐户和API密钥 |
/v1/analytics/* | GET | 管理 | 使用分析和指标 |
/v1/auth/google/* | 获取 | API密钥 | 幻灯片的Google OAuth流 |
环境变量
所有变量都以前缀 DECKFORGE_。参见 .env.example 以获取带有注释和示例值的完整参考。
| 变量 | 默认值 | 描述 |
|---|---|---|
DECKFORGE_DATABASE_URL | postgresql+psycopg://...localhost | PostgreSQL连接字符串 |
DECKFORGE_REDIS_URL | redis://localhost:6379/0 | Redis连接(队列、缓存、发布/订阅) |
DECKFORGE_S3_ENDPOINT_URL | http://localhost:9000 | S3兼容存储端点 |
DECKFORGE_S3_ACCESS_KEY | minioadmin | S3访问密钥(开发默认为MinIO) |
DECKFORGE_S3_SECRET_KEY | minioadmin | S3密钥 |
DECKFORGE_S3_BUCKET | deckforge | S3存储桶名称 |
DECKFORGE_API_HOST | 0.0.0.0 | API绑定地址 |
DECKFORGE_API_PORT | 8000 | API端口 |
DECKFORGE_DEBUG | true | 调试模式(生产中禁用) |
DECKFORGE_ENVIRONMENT | development | development / staging / production |
DECKFORGE_LLM_DEFAULT_PROVIDER | claude | 内容生成的默认LLM |
DECKFORGE_LLM_FALLBACK_CHAIN | claude,openai,gemini | LLM回退顺序 |
DECKFORGE_ANTHROPIC_API_KEY | -- | Claude的Anthropic API密钥 |
DECKFORGE_OPENAI_API_KEY | -- | OpenAI API密钥 |
DECKFORGE_GEMINI_API_KEY | -- | Google Gemini API密钥 |
DECKFORGE_OLLAMA_BASE_URL | http://localhost:11434 | Ollama本地服务器URL |
DECKFORGE_STRIPE_SECRET_KEY | -- | 条纹密钥 |
DECKFORGE_STRIPE_WEBHOOK_SECRET | -- | 条纹式webhook签名密钥 |
DECKFORGE_STRIPE_STARTER_PRICE_ID | -- | 初学者层的条纹价格ID |
DECKFORGE_STRIPE_PRO_PRICE_ID | -- | 专业版条纹价格ID |
DECKFORGE_GOOGLE_CLIENT_ID | -- | 谷歌OAuth客户端ID(用于幻灯片) |
DECKFORGE_GOOGLE_CLIENT_SECRET | -- | 谷歌OAuth客户端机密 |
DECKFORGE_GOOGLE_REDIRECT_URI | http://localhost:8000/v1/auth/google/callback | OAuth重定向URI |
DECKFORGE_UNKEY_ROOT_KEY | -- | 取消密钥根密钥(生产身份验证) |
DECKFORGE_UNKEY_API_ID | -- | 未密钥API ID |
DECKFORGE_X402_ENABLED | false | 启用x402 USDC支付 |
DECKFORGE_X402_WALLET_ADDRESS | -- | USDC在Base上接收钱包 |
DECKFORGE_X402_FACILITATOR_URL | https://x402.org/facilitator | x402主持人端点 |
DECKFORGE_X402_NETWORK | eip155:8453 | 基础主网链ID |
部署
Fly.io(推荐)
DeckForge发货时已准备好生产 fly.toml 多阶段 Dockerfile.
# 1. Install Fly CLI
curl -L https://fly.io/install.sh | sh
# 2. Login and launch
fly auth login
fly launch --name deckforge-api --region iad
# 3. Provision PostgreSQL
fly postgres create --name deckforge-db --region iad
fly postgres attach deckforge-db
# 4. Provision Redis (via Upstash or Fly Redis)
fly redis create --name deckforge-redis
# Copy the REDIS_URL from output
# 5. Set production secrets
fly secrets set \
DECKFORGE_ENVIRONMENT=production \
DECKFORGE_DEBUG=false \
DECKFORGE_DATABASE_URL="postgres://..." \
DECKFORGE_REDIS_URL="redis://..." \
DECKFORGE_S3_ENDPOINT_URL="https://..." \
DECKFORGE_S3_ACCESS_KEY="..." \
DECKFORGE_S3_SECRET_KEY="..." \
DECKFORGE_S3_BUCKET="deckforge" \
DECKFORGE_STRIPE_SECRET_KEY="sk_live_..." \
DECKFORGE_STRIPE_WEBHOOK_SECRET="whsec_..." \
DECKFORGE_ANTHROPIC_API_KEY="sk-ant-..."
# 6. Deploy
fly deploy
# 7. Run database migrations
fly ssh console -C "alembic upgrade head"
# 8. Verify
curl https://deckforge-api.fly.dev/v1/healthFly.io配置亮点:
- 2个共享CPU,每个虚拟机1 GB RAM
- 自动停止/启动以提高成本效益(至少1台机器运行)
- 具有并发限制的强制HTTPS(200软/250硬)
- 多流程:
api(玉米)+worker(ARQ)
Docker Compose(本地开发)
# Start all 6 services
docker compose up -d
# Services:
# api - FastAPI + uvicorn (port 8000)
# content-worker - ARQ worker for NL-to-IR generation
# render-worker - ARQ worker for IR-to-PPTX rendering
# postgres - PostgreSQL 16 (port 5432)
# redis - Redis 7 (port 6379)
# minio - MinIO S3-compatible storage (port 9000, console 9001)
# Check service health
docker compose ps
# View API logs
docker compose logs -f api
# Tear down (preserves data volumes)
docker compose down
# Full reset (removes data)
docker compose down -vS3存储选项
| 环境 | 提供程序 | 配置 |
|---|---|---|
| 本地开发 | MinIO(通过Docker Compose) | 默认值 .env.example 价值观 |
| 生产 | Cloudflare R2 | 设置 S3_ENDPOINT_URL, S3_ACCESS_KEY, S3_SECRET_KEY |
| 生产 | AWS S3 | 套件 S3_ENDPOINT_URL 到AWS端点 |
| Fly.io | 飞虎 | fly storage create,自动配置 |
定价
订阅级别
| 级别 | 价格 | 积分/月 | 利率限制 | 最适合 |
|---|---|---|---|---|
| 启动器 | 免费 | 50 | 10个要求/分钟 | 评估、爱好项目 |
| 专业版 | 79美元/月 | 500 | 60个要求/分钟 | 团队、生产应用程序 |
| 企业 | 自定义 | 10000+ | 300需求/分钟 | 大容量,允许超龄 |
信用成本
每个API调用都会根据复杂度消耗信用:
- 简单渲染 (\DeckForge -- Executive-ready slides, one API call away.
