Felo Slides
Generate PPT/slides from prompts, local images, PDFs, and other files with the Felo PPT Task API. Use when users ask to create, make, generate, or export presentations or slide decks; turn an attached/local file into slides; include an original image in a PPT; or explicitly invoke /felo-slides. Handles file upload, API key checks, task creation, polling, and final ppt_url output.
- Skill ID
- felo-inc/felo-skills/felo-slides
- Publisher
- felo-inc
- Repository
- felo-skills
- Installs
- 0
- Files
- 5
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
felo-inc/felo-skills/felo-slidesInstalls these files- LICENSE
- README.md
- SKILL.md
- clawhub.json
- scripts/run_ppt_task.mjs
What this skill tells the agent
Felo Slides Skill
When to Use
Trigger this skill for requests about creating presentation files:
- Create/generate slides from a topic or outline
- Turn notes into a PPT deck
- Build slides from a local image, PDF, or document
- Put an uploaded original image into the generated PPT
- Build a presentation with a page count requirement
- Export presentation content into a shareable slide link
Trigger keywords:
- Chinese prompts about making slides or presentations
- English: slides, PPT, presentation deck, generate presentation
- Explicit commands:
/felo-slides, "use felo slides"
Do NOT use this skill for:
- Real-time information lookup (use
felo-search) - Questions about local codebase files
- Pure text tasks that do not require slide generation
Setup
1. Get API key
- Visit felo.ai
- Open Settings -> API Keys
- Create and copy your API key
2. Configure environment variable
Linux/macOS:
export FELO_API_KEY="your-api-key-here"Windows PowerShell:
$env:FELO_API_KEY="your-api-key-here"How to Execute
Use Bash tool commands and follow this workflow exactly.
Step 1: Precheck API key
if [ -z "$FELO_API_KEY" ]; then
echo "ERROR: FELO_API_KEY not set"
exit 1
fiIf key is missing, stop and return setup instructions.
Step 2: Run Node Script (create + poll)
Use the bundled script (no jq dependency):
node felo-slides/scripts/run_ppt_task.mjs \
--query "USER_PROMPT_HERE" \
--interval 10 \
--max-wait 1800 \
--timeout 60When the user provides a local image or file, pass its absolute path with --file. Include the desired use of the original asset in the prompt. For example:
node felo-slides/scripts/run_ppt_task.mjs \
--query "Create exactly 2 slides and place the uploaded original image directly in the PPT" \
--file "/absolute/path/to/source.jpg" \
--interval 10 \
--max-wait 1800 \
--timeout 60Do not replace --file with a textual description when the user explicitly wants the original file or image used in the PPT.
To apply a specific theme, first list available themes with felo ppt-themes, then pass the theme ID:
node felo-slides/scripts/run_ppt_task.mjs \
--query "USER_PROMPT_HERE" \
--theme "THEME_ID_HERE" \
--interval 10 \
--max-wait 1800 \
--timeout 60Script behavior:
- Creates task via
POST https://openapi.felo.ai/v2/ppts - Supports optional
--file <path>to upload one local file withmultipart/form-data - Supports optional
--theme <id>to apply a PPT theme (sendsppt_config.ai_theme_id) - Supports optional
--livedoc-id <id>to reuse an existing LiveDoc instead of auto-creating a new one - Supports optional
--task-id <id>to resume polling an existing task (skips creation) - Polls via
GET https://openapi.felo.ai/v2/tasks/{task_id}/historical - Treats
COMPLETED/SUCCESSas success terminal (case-insensitive) - Treats
FAILED/ERRORas failure terminal - Stops polling immediately on terminal status
- Prints
ppt_urlon success (fallback:live_doc_url)
Optional debug output:
node felo-slides/scripts/run_ppt_task.mjs \
--query "USER_PROMPT_HERE" \
--interval 10 \
--max-wait 1800 \
--json \
--verboseThis outputs structured JSON including:
task_idtask_statusppt_urllive_doc_urllivedoc_short_idppt_business_iderror_message
Step 3: Confirm terminal status
The script polls the historical endpoint automatically. Wait for it to exit before responding:
- Success: terminal status is
COMPLETEDorSUCCESS, and the script printsppt_url(fallback:live_doc_url) - Failure: terminal status is
FAILEDorERROR; return the error format below - Timeout: include the
task_idand tell the user to resume with--task-idinstead of creating a duplicate PPT task
Step 4: Return structured result
On success, return:
ppt_urlimmediately (script default output, fallbacklive_doc_url)- if
--jsonis used, also includetask_id, terminal status, and optional metadata
Output Format
Use this response structure:
## PPT Generation Result
- Task ID: <task_id>
- Status: <status>
- PPT URL: <ppt_url>
- Live Doc URL: <live_doc_url or N/A>
## Notes
- livedoc_short_id: <value or N/A>
- ppt_business_id: <value or N/A>Error format:
## PPT Generation Failed
- Error Type: <error code or category>
- Message: <readable message>
- Suggested Action: <next step>Error Handling
Known API error codes:
INVALID_API_KEY(401): key invalid or revokedPPT_TASK_CREATE_FAILED(502): create task downstream failedPPT_TASK_QUERY_FAILED(502): query task downstream failed
Timeout handling:
- If timeout reached, return last known status and instruct user to retry later
- Include
task_idso user can query again - IMPORTANT: To resume a timed-out task, use
--task-idinstead of--queryto avoid creating a duplicate PPT:
node felo-slides/scripts/run_ppt_task.mjs \
--task-id "TASK_ID_HERE" \
--interval 10 \
--max-wait 1800Important Notes
- Always execute this skill when user intent is slide generation.
- Always return
task_idso follow-up queries can continue from the same task. - Do not claim completion without a terminal status.
- Keep API calls minimal: create once, then poll.
References
Use this skill in a project
Open any RiverX project, search the Skills panel for felo-inc/felo-skills/felo-slides, and install it in one click.
