skills/library/slidespeak-editor/SKILL.md
Edit existing PowerPoint presentations by replacing content in specified shapes using SlideSpeak API
npx skillsauth add malue-ai/dazee-small slidespeak-editorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
编辑现有的 PowerPoint 文件,通过替换指定形状(shape)的内容来实现批量修改和个性化定制。
API 文档: https://docs.slidespeak.co/basics/api-references/edit-presentation/
POST https://api.slidespeak.co/api/v1/presentation/edit
multipart/form-dataX-API-Key: YOUR_API_KEY{
"replacements": [
{
"shape_name": "TARGET_SHAPE_NAME",
"content": "新内容"
}
]
}
{
"url": "https://slidespeak-pptx-writer.s3.amazonaws.com/xxx.pptx"
}
在 PowerPoint 中为需要替换的形状命名:
TARGET_TITLE、TARGET_SUBTITLE、CLIENT_NAME 等)命名建议:
TARGET_, DATA_, CLIENT_TITLE, SUBTITLE, CONTENT, DATE在使用 skill 之前,需要知道模板中的 shape 名称。可以:
根据业务需求准备替换内容:
replacements = [
{
"shape_name": "CLIENT_NAME",
"content": "ABC公司"
},
{
"shape_name": "REPORT_DATE",
"content": "2024年第四季度"
},
{
"shape_name": "KEY_METRIC_1",
"content": "销售额: ¥1,234,567"
},
{
"shape_name": "SUMMARY_TEXT",
"content": "本季度业绩表现优异,同比增长35%。主要驱动因素包括:新产品线推出、市场份额扩大、客户满意度提升。"
}
]
使用 slidespeak_edit 工具:
slidespeak_edit(
pptx_file_path="/path/to/template.pptx", # 模板文件路径
config={
"replacements": [
{
"shape_name": "CLIENT_NAME",
"content": "ABC公司"
},
{
"shape_name": "REPORT_TITLE",
"content": "2024 Q4 业绩报告"
},
# ... 更多替换
]
},
save_dir="./outputs/edited_ppt" # 保存目录
)
清晰的命名规范:
# 推荐的命名模式
TITLE_SLIDE_1 # 第一页标题
SUBTITLE_SLIDE_1 # 第一页副标题
CONTENT_SLIDE_2_MAIN # 第二页主要内容
CONTENT_SLIDE_2_SUB # 第二页次要内容
DATA_CHART_TITLE # 图表标题
避免的命名:
# 不推荐(太通用)
TextBox1
Shape2
Rectangle3
文本内容:
\n数值格式:
# 推荐
"content": "销售额: ¥1,234,567"
"content": "增长率: 35.2%"
"content": "客户数: 1,234 家"
# 不推荐
"content": "1234567" # 缺少上下文
日期格式:
# 清晰的日期格式
"content": "2024年12月25日"
"content": "2024-12-25"
"content": "Q4 2024"
常见错误:
| 错误 | 原因 | 解决方案 | |------|------|---------| | Shape not found | shape_name 不存在 | 检查模板中的形状名称 | | Content too long | 文本超出形状大小 | 缩短内容或调整模板 | | Invalid file | PPT 文件损坏 | 使用有效的 .pptx 文件 | | API error | API key 或网络问题 | 检查 API 配置 |
容错策略:
# 建议:先验证 shape 是否存在
# 可以使用 helper script 提取所有 shape 名称
replacements = []
for shape_name, content in data.items():
if shape_name in valid_shape_names:
replacements.append({
"shape_name": shape_name,
"content": content
})
else:
print(f"⚠️ Warning: Shape '{shape_name}' not found in template")
# 场景:为多个客户生成个性化 PPT
clients = [
{"name": "ABC公司", "sales": "¥1M", "growth": "35%"},
{"name": "XYZ集团", "sales": "¥2M", "growth": "42%"},
# ...
]
for client in clients:
slidespeak_edit(
pptx_file_path="templates/client_report.pptx",
config={
"replacements": [
{"shape_name": "CLIENT_NAME", "content": client["name"]},
{"shape_name": "SALES_AMOUNT", "content": client["sales"]},
{"shape_name": "GROWTH_RATE", "content": client["growth"]},
]
},
save_dir=f"./outputs/clients/{client['name']}"
)
# 查看模板中所有可替换的 shape
python3 scripts/extract_shapes.py /path/to/template.pptx
# 验证 config 是否有效
python3 scripts/validate_config.py --template template.pptx --config config.json
# 从 CSV 批量生成
python3 scripts/batch_edit.py --template template.pptx --data data.csv --output ./outputs
# 基本用法
slidespeak_edit(
pptx_file_path="./templates/quarterly_report.pptx",
config={
"replacements": [
{"shape_name": "REPORT_TITLE", "content": "2024 Q4 财务报告"},
{"shape_name": "COMPANY_NAME", "content": "科技有限公司"},
{"shape_name": "QUARTER", "content": "第四季度"},
{"shape_name": "REVENUE", "content": "¥12,345,678"},
{"shape_name": "PROFIT", "content": "¥2,345,678"},
{"shape_name": "GROWTH", "content": "+35.2%"}
]
},
save_dir="./outputs/reports"
)
| 特性 | slidespeak-generator | slidespeak-editor | |------|---------------------|-------------------| | 用途 | 从头生成新的 PPT | 编辑现有的 PPT 模板 | | 输入 | 内容和布局配置 | 模板文件 + 替换内容 | | 灵活性 | 高(自由创建任意布局) | 中(受模板约束) | | 一致性 | 中(每次可能不同) | 高(基于固定模板) | | 适用场景 | 创意性、多样化内容 | 标准化、批量生成 | | 速度 | 较慢(需生成布局) | 较快(只替换内容) |
使用建议:
slidespeak-generatorslidespeak-editor✅ 正确性:
✅ 质量:
✅ 效率:
错误信息: "Shape 'XXX' not found"
解决:
1. 在 PowerPoint 中打开模板
2. 查看"选择窗格"确认 shape 名称
3. 确保名称拼写正确(区分大小写)
现象: 文本被截断或显示不全
解决:
1. 缩短替换内容
2. 调整模板中形状的大小
3. 使用自动缩放的文本框
检查清单:
- [ ] API key 是否正确
- [ ] 文件是否存在且可读
- [ ] 文件格式是否为 .pptx(不支持 .ppt)
- [ ] 网络连接是否正常
# 从数据库读取数据并填充
from database import get_quarterly_data
data = get_quarterly_data(year=2024, quarter=4)
slidespeak_edit(
pptx_file_path="templates/report.pptx",
config={
"replacements": [
{"shape_name": "REVENUE", "content": f"¥{data.revenue:,.0f}"},
{"shape_name": "PROFIT", "content": f"¥{data.profit:,.0f}"},
{"shape_name": "GROWTH", "content": f"+{data.growth:.1f}%"},
{"shape_name": "SUMMARY", "content": data.generate_summary()}
]
}
)
# 根据条件决定替换内容
if growth_rate > 30:
status_text = "🎉 表现优异"
status_color = "green"
elif growth_rate > 10:
status_text = "✓ 稳步增长"
status_color = "blue"
else:
status_text = "⚠️ 需要关注"
status_color = "yellow"
slidespeak_edit(
pptx_file_path="template.pptx",
config={
"replacements": [
{"shape_name": "STATUS_TEXT", "content": status_text}
]
}
)
# 对模板中的多个页面进行替换
slidespeak_edit(
pptx_file_path="multi_page_template.pptx",
config={
"replacements": [
# 封面页
{"shape_name": "COVER_TITLE", "content": "年度总结报告"},
{"shape_name": "COVER_SUBTITLE", "content": "2024年度"},
# 内容页
{"shape_name": "SLIDE2_TITLE", "content": "业绩概览"},
{"shape_name": "SLIDE2_CONTENT", "content": "..."},
# 总结页
{"shape_name": "CONCLUSION_TEXT", "content": "感谢观看!"}
]
}
)
resources/edit_api_schema.jsonresources/example_template.pptxscripts/batch_edit.pydevelopment
Local web search (Tavily/Exa, requires API Key). For quick searches. If no Key configured or deep research needed, use cloud_agent instead.
development
Get current weather and forecasts (no API key required).
tools
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
tools
Start voice calls via the Moltbot voice-call plugin.