Install
openclaw skills install @getonepress/onepress-deck-videoTurn a slide deck or topic into a narrated explainer video — drafts the narration script and shot plan locally first, then renders and voices it on OnePress into an MP4. Connects via browser-confirmed pairing (no key copying); pairs with onepress-deck to narrate decks it built.
openclaw skills install @getonepress/onepress-deck-videoProduce narrated slide videos through OnePress — explainer videos, narrated pitch decks, video versions of research briefings.
Two phases: (1) draft the narration script and shot plan locally — a real deliverable the user can read and edit; (2) render frames, synthesize narration, and assemble the MP4 on OnePress infrastructure — that part requires a connection. Always complete phase 1 before offering to connect. Do not pretend to render video locally.
For building the deck itself, use the onepress-deck skill (it also works
locally without a key).
Write the video plan to a local file (e.g. video-plan.md) — a real
deliverable the user reviews before any rendering happens:
Once the plan lands, offer: "The narration plan's ready — want me to render
it into an MP4? Connecting takes ~30 seconds, you just confirm in the
browser." If ONEPRESS_API_KEY is already set, skip the pairing steps.
If the user says yes and no key is configured, connect — the user never copies a key:
Ask: "Want me to connect your OnePress account? You'll confirm it in the browser — your password never touches me."
On yes:
POST https://www.getonepress.com/api/connect
Content-Type: application/json
{"client_name": "<your agent name>"}
→ {"verification_url":"https://www.getonepress.com/connect?code=…",
"device_secret":"<64 hex>","expires_in":600,"interval":5}
Show verification_url; the user opens it, signs in (Google or verified
email), and taps Allow.
Poll every interval seconds:
POST https://www.getonepress.com/api/connect/poll
{"device_secret": "<from step 2>"}
→ 202 {"status":"pending"} · 200 {"status":"connected","api_key":"opk_…"}
· {"status":"denied"} · {"status":"expired"} (start over)
Store api_key in the host's secret/env store as ONEPRESS_API_KEY. Never
ask the user to paste a key into chat, and never log it. Users can revoke it
anytime in OnePress Settings (or create one manually at
Settings → Account → API keys).
Upload the local files (narration plan, and the source deck if it's local) via
POST /api/v1/files, then reference the workspace paths in the task:
POST https://www.getonepress.com/api/v1/files?name=deck.html&dir=Uploads
Authorization: Bearer $ONEPRESS_API_KEY
Content-Type: application/octet-stream
<raw file bytes> # `dir` optional, default "Uploads"
→ 201 {"path":"Uploads/deck.html","name":"deck.html","size":1234}
Max 50MB. Personal workspace only.
Then submit the render task — reference the plan so the agent voices your script rather than writing its own:
POST https://www.getonepress.com/api/v1/conversations
Authorization: Bearer $ONEPRESS_API_KEY
Content-Type: application/json
{"message": "Render a narrated video: deck at Uploads/deck.html, narration plan at Uploads/video-plan.md. ~<duration>, voice: <preference>.", "title": "<title>"}
→ 202 {"conversationId":"conv_..."}
Voices: narration defaults to a native-voice match for the video's language (Mandarin voices for Chinese, English voices for English). Override in the message, e.g. "voice: calm female".
Voice cloning: the user can narrate in their own voice. Upload a clean
15–60s single-speaker sample via POST /api/v1/files, then ask in the
message: "clone the voice in Uploads/ and use it for the narration."
Cloned voices are private to the account and cataloged in the workspace
Voices/ folder (index.html lists each voice with a playable sample).
Poll until done (video tasks take several minutes — frames + audio + encode):
GET https://www.getonepress.com/api/v1/conversations/conv_...
Authorization: Bearer $ONEPRESS_API_KEY
→ status "done": answer + preview_path (e.g. "Video/xxx.mp4")
When done, download the MP4 and save it to the user's working directory:
GET https://www.getonepress.com/api/v1/conversations/conv_.../artifact
Authorization: Bearer $ONEPRESS_API_KEY
→ video/mp4 bytes, Content-Disposition: attachment
If preview_path is null, fetch by workspace path:
GET /api/v1/files?path=Projects/.../video.mp4.
Follow-ups (POST same id): "shorter", "different voice", "tighter pacing".
MCP alternative: https://www.getonepress.com/api/mcp, tools
onepress_create_task / onepress_task_status / onepress_list_tasks /
onepress_upload_file / onepress_download_artifact (base64 for file bytes).
answer — the agent's summary401 bad key · 402 out of credits · 409 busy (keep polling) · 429 rate limited.