PopAI PPT Skill
Create presentations programmatically via PopAI's API. The API has powerful built-in research and information gathering capabilities — it will automatically search, collect, and organize relevant content. Optionally upload files as reference material or templates. If a .pptx template is provided, the output will fully preserve the template's layout, styles, and design — 100% faithful reproduction based on your template. After initial generation, you can send follow-up modification instructions using the same channel ID.
Setup
- Ask user to sign up and obtain their Access Token at: https://www.popai.pro/popai-skill
- Once user provides the token, set it in environment:
export POPAIACCESSTOKEN=<token>
Tips: You can save the key in TOOLS.md for future reference.
Scripts
generate_ppt.py - Generate PPT via PopAI API (upload files → create channel → SSE stream → get pptx); also supports multi-round modification via --channel-id
Usage Examples
# Generate PPT from topic only
python3 generate_ppt.py --query "AI Development Trends Report"
# With reference files (max 5)
python3 generate_ppt.py --query "Tesla Earnings PPT" --file data.pdf chart.png
# With a PPT template file (applied as layout template)
python3 generate_ppt.py --query "Tesla Annual Report" --tpl template.pptx
# With both template and reference files
python3 generate_ppt.py --query "Tesla Annual Report" --tpl template.pptx --file data.pdf chart.png
# Multi-round modification: modify an existing PPT (template cannot be changed)
python3 generate_ppt.py --channel-id "CHANNEL_ID" --query "Add a competitive analysis slide and make the color scheme blue"
# With URLs as reference material (included in query)
python3 generate_ppt.py --query "Create a PPT summarizing this article: https://example.com/report.html"
# Multi-round modification with additional reference files
python3 generate_ppt.py --channel-id "CHANNEL_ID" --query "Update the financial data with this new report" --file new_data.pdf
Agent Steps
Initial Generation
- Get PPT topic from user
- If user provides reference material:
- Local files: pass as --file (max 5) and/or --tpl (PPT template for layout) - URLs: include directly in the --query text — the API will fetch and process them automatically
- Run script (timeout: 1200000):
``bash python3 generate_ppt.py --query "TOPIC" [--file FILE1 FILE2 ...] [--tpl TEMPLATE.pptx] `` Tell user: "Generating your PPT, estimated 5 minutes..."
- While the script is running, monitor stdout JSON lines and report progress to user in real time (e.g. task status updates, search actions, tool results)
- When generation completes, present final results to user:
- Show summary text (from NODEEND event) as the generation summary - Show pptxurl as the download link: "Download PPT: <pptxurl>" - Show weburl as the site link: "View/Edit online: <web_url>"
- If user requests the pptx file directly, download it from
pptx_url and deliver the file to user
- Save the
channelid from weburl (last path segment of https://www.popai.pro/agentic-pptx/<channelId>) for potential follow-up modifications
Multi-Round Modification
Use when the user wants to revise or improve an already-generated PPT (e.g. "add a slide", "change the title", "use a darker theme").
Rules:
- Required:
--channel-id (from previous generation) + --query (modification instruction)
- Optional:
--file to supply new reference files for the revision
- Not supported:
--tpl is ignored in modify mode — the original template cannot be changed
- Confirm the
channelid from the previous generation (stored from weburl)
- Get modification instruction from user
- If user provides additional reference files, pass as
--file
- Run script (timeout: 1200000):
``bash python3 generateppt.py --channel-id "CHANNELID" --query "MODIFICATION_INSTRUCTION" [--file FILE1 ...] `` Tell user: "Applying your modifications, estimated 3-5 minutes..."
- Parse and present results the same way as initial generation (new
pptxurl and weburl)
Output
Event types (stdout, one JSON per line):
{"type": "task", "id": "1", "content": "Search for Tesla latest earnings data", "status": "progressing"}
{"type": "search", "action": "Web Searching", "results": [{"title": "...", "url": "...", "snippet": "...", "date": "..."}]}
{"type": "tool_result", "event": "TOOL_CALLS-xxx", "action": "...", "result": "..."}
{"type": "summary", "text": "Tesla earnings PPT has been created..."}
{"type": "stream_end"}
Final result (is_end: true):
{
"type": "pptx_ready",
"is_end": true,
"pptx_url": "https://popai-file-boe.s3-accelerate.amazonaws.com/.../xxx.pptx",
"file_name": "xxx.pptx",
"preview_images": ["https://...0.jpeg"],
"preview_count": xx,
"web_url": "https://www.popai.pro/agentic-pptx/<channelId>"
}
pptx_url: Download link for the .pptx file
web_url: PopAI site link for online viewing and editing
preview_images: Page-by-page screenshots of the generated PPT (one image per slide)
preview_count: Total number of preview images (i.e. number of slides)
summary: Final summary text from the NODE_END event, shown to the user as a generation recap
Support
For any issues, contact [email protected]
Technical Notes
- Streaming: SSE stream;
TOOL_CALLS-pptx event contains final .pptx download URL; last:true marks stream end
- File Upload: Presigned POST to S3 via
getPresignedPost, supports any file type
- Timeout: Generation typically takes ~5 minutes;
- Channel ID: Extractable from
web_url — last path segment of https://www.popai.pro/agentic-pptx/<channelId>
- Multi-round: Calls
sendgenerate directly with existing channelid; tpl_info is never passed (template is fixed after channel creation)