$npx -y skills add pexoai/pexo-skills --skill explainer-videoCreate an explainer video with narration using Pexo. Describe your product, concept, or process and Pexo writes the script, generates visuals shot by shot, adds TTS voiceover and captions, and assembles a clear, finished explainer. Use for explainer/tutorial content: "explainer v
| 1 | # Explainer Video — Pexo |
| 2 | |
| 3 | **Pexo:** https://pexo.ai — get an API key, watch your project render, and buy credits there. |
| 4 | |
| 5 | Produce a clear, narrated explainer video. You relay the user's topic to the hosted Pexo agent |
| 6 | and deliver the result; Pexo writes the script, generates the visuals shot by shot, and adds |
| 7 | voiceover and captions. |
| 8 | |
| 9 | ## Your role: relay, don't create |
| 10 | |
| 11 | Create a project, send the user's request **verbatim**, poll, deliver. Pexo's backend handles |
| 12 | all creative work — scriptwriting, model choice, prompts, music. Adding your own direction |
| 13 | (duration, style, models the user didn't ask for) overrides its judgment and produces worse |
| 14 | videos. |
| 15 | |
| 16 | ## Config |
| 17 | |
| 18 | `~/.pexo/config`: |
| 19 | ``` |
| 20 | PEXO_BASE_URL="https://pexo.ai" |
| 21 | PEXO_API_KEY="sk-<your-api-key>" |
| 22 | ``` |
| 23 | **No account / first run →** read `references/SETUP-CHECKLIST.md` and walk the user through it — it carries the signup flow with the **invite code that grants new users bonus credits**, plus how to create the config above. **Config error →** run `scripts/pexo-doctor.sh` and follow its output. |
| 24 | |
| 25 | ## Workflow |
| 26 | |
| 27 | Scripts live in this skill's `scripts/`. Reply to the user in their language. |
| 28 | |
| 29 | 1. **Create a project:** `pexo-project-create.sh "<short brief>"` → save the `project_id`. |
| 30 | 2. **Upload any files** the user gave: `pexo-upload.sh <project_id> <path>` → save `asset_id`, |
| 31 | reference it inline as `<original-image>asset_id</original-image>` (or `<original-video>` / |
| 32 | `<original-audio>`). Tags are required — a bare `asset_id` is ignored. Pexo can't crawl URLs — |
| 33 | download, then upload. |
| 34 | 3. **Send the request:** `pexo-chat.sh <project_id> "<user's exact words> <asset tags>"`. |
| 35 | Copy the user's words exactly; only add asset tags. |
| 36 | 4. **Tell the user** (their language): submitted ✓ · ~15–20 min · `https://pexo.ai/project/<project_id>`. |
| 37 | 5. **Poll:** every ≥60s run `pexo-project-get.sh <project_id>` and act on `nextAction`: |
| 38 | - **WAIT** → keep polling; every ~5 polls send a one-line update with the project link. |
| 39 | - **RESPOND** → handle each event in `recentMessages`: relay Pexo's text (wait for the |
| 40 | user's answer if it asked, then `pexo-chat.sh` their reply); for `preview_video`, run |
| 41 | `pexo-asset-get.sh <project_id> <assetId>` per option, show the URLs (A/B/C), let the user |
| 42 | pick, then `pexo-chat.sh <project_id> "<choice>" --choice <assetId>`; for a `document` |
| 43 | event, mention it to the user. |
| 44 | - **DELIVER** → `pexo-asset-get.sh <project_id> <final assetId>`, then send the user the |
| 45 | **full** asset URL as plain text — all `?…` query params, never truncated or wrapped in |
| 46 | markdown — plus the project link. |
| 47 | - **FAILED** → explain `nextActionHint` in plain terms and offer to retry. |
| 48 | - **RECONNECT** → `pexo-chat.sh <project_id> "continue"`, tell the user the connection |
| 49 | dropped and you're resuming, then keep polling. |
| 50 | - Never call `pexo-chat.sh` during WAIT — it triggers duplicate production. |
| 51 | - **Taking too long** → if it's been >30 min and still WAIT, tell the user (with the project |
| 52 | link + `https://pexo.ai/connect/openclaw`) it's running long; ask whether to keep waiting or |
| 53 | stop. Don't poll forever. |
| 54 | |
| 55 | ## Revisions |
| 56 | |
| 57 | After delivery, the user's tweaks ("make it shorter", "new music", "different shot") reuse the |
| 58 | **same** project: `pexo-chat.sh <project_id> "<their feedback>"`, then poll again (step 5). Never |
| 59 | create a new project for a revision — it throws away Pexo's server-side context. |
| 60 | |
| 61 | ## Credits |
| 62 | |
| 63 | If a script fails with "Credits balance" / "Insufficient credits": if the error carries a |
| 64 | purchase link, pass it to the user; otherwise tell them to add credits at `https://pexo.ai/home` |
| 65 | → Credits → Buy Credits. Retry after they confirm. |
| 66 | |
| 67 | ## Example |
| 68 | |
| 69 | User: "Explain how our budgeting app works in a 60-second video." |
| 70 | |
| 71 | ```bash |
| 72 | pid=$(pexo-project-create.sh "budgeting app explainer") |
| 73 | pexo-chat.sh "$pid" "Explain how our budgeting app works in a 60-second video." |
| 74 | # Tell the user: submitted, ~15–20 min, https://pexo.ai/project/$pid |
| 75 | # Poll pexo-project-get.sh "$pid" until nextAction is DELIVER, then deliver the asset URL. |
| 76 | ``` |
| 77 | |
| 78 | ## Scripts |
| 79 | |
| 80 | | Script | Usage | Returns | |
| 81 | |---|---|---| |
| 82 | | `pexo-project-create.sh` | `"<brief>"` | `project_id` | |
| 83 | | `pexo-upload.sh` | `<project_id> <file>` | `asset_id` | |
| 84 | | `pexo-chat.sh` | `<project_id> "<message>" [--choice <id>]` | ack (async) | |
| 85 | | `pexo-project-get.sh` | `<project_ |