Install
openclaw plugins install clawhub:@shellbot/openclaw-pixcli@shellbot/openclaw-pixcli
OpenClaw tool plugin for pixcli — give any OpenClaw / ShellBot agent first-class, typed tools to generate and edit images, video, voiceover, music, sound effects, and full podcasts.
It's a thin, native client over the hosted pixcli API (https://pixcli.shellbot.sh): each tool submits an async job, waits for it, and returns a shareable URL. No subprocess, no pixcli npm install at runtime. The plugin also contributes standing usage guidance to the agent (so it knows which tool to reach for) via each tool's rich description plus a memory prompt supplement.
Install
openclaw plugins install clawhub:shellbot/openclaw-pixcli
Configure
Set an API key via plugin config or the METERKEY_API_KEY environment variable.
// openclaw config
{
plugins: {
entries: {
pixcli: {
config: {
apiKey: "mk-prod-...", // or set METERKEY_API_KEY in the environment
defaultPublish: "public", // auto-publish results → shareable URLs (public | private)
// baseUrl: "https://pixcli.shellbot.sh",
// pollTimeoutMs: 600000,
},
},
},
},
}
Get a key at https://shellbot.sh.
Tools
| Tool | What it does |
|---|---|
pixcli_image | Generate an image (or image-to-image) from a prompt |
pixcli_edit | Edit an existing image (inpaint / outpaint / restyle) |
pixcli_vectorize | Vectorize a raster image → clean SVG (logos / icons) |
pixcli_video | Generate / extend video; image-to-video; start→end transition |
pixcli_voice | Text-to-speech voiceover |
pixcli_voice_clone (opt-in) | Clone a voice from samples → voice_id |
pixcli_music | Generate background music |
pixcli_sfx | Generate a sound effect |
pixcli_dialogue (opt-in) | Multi-speaker conversation audio |
pixcli_sipcast | Write + record a multi-speaker sipcast — ShellBot's AI podcast (with cover art). A sipcast is a podcast: use it for any podcast / episode / interview. ("podcast" is the alias term.) Supports multilanguage in one call (see below). |
pixcli_sipcast_learn (opt-in) | Add a bilingual learning overlay to an existing sipcast (by id) — reading view over the original audio |
pixcli_sipcast_voiceover (opt-in) | Re-narrate an existing sipcast (by id) into another language — a separate audio variant |
pixcli_tryon (opt-in) | Virtual garment try-on (FLUX Pro VTO) |
pixcli_job | Check / wait on a job; recover one that timed out |
pixcli_models | List available models (read-only) |
pixcli_publish (opt-in) | Change a result's share visibility / TTL / slug |
Sipcast multilanguage — two independent modes
A sipcast can carry languages two different ways. They are separate features — pick by intent:
learn_languages (LEARN) | voiceover_languages (LISTEN) | |
|---|---|---|
| Makes new audio? | No — keeps the original audio | Yes — re-records the audio in that language |
| The viewer… | hears the original, reads a side-by-side translation, taps words to translate | listens to the episode spoken in their language |
| Use when | "let an English speaker learn Spanish from this" | "give a French speaker the episode in French" |
| Cost | cheap (text only) | heavy (full TTS re-render per language) |
| In the result | result.podcast.learn[] → { language, page_url, ready } | result.podcast.languages[] → { language, page_url, current } |
One call can do both / many. pixcli_sipcast accepts learn_languages and/or voiceover_languages arrays, so a single tool call can produce, e.g., a Spanish episode + English & French re-narrations + an English reading overlay. To add either to an existing sipcast, use pixcli_sipcast_learn / pixcli_sipcast_voiceover with its id.
Discovery matters: the learning-overlay link is
…/sip/<id>?learn=1&native=<lang>and cannot be guessed frompage_url. Always read the overlay/variant links fromresult.podcast.learn[]andresult.podcast.languages[]and surface those to the user — don't reconstruct them by hand. (The normal player page also shows a "Read & learn" button when an overlay exists.)
Opt-in tools must be allowlisted by the host before they're offered to the model:
{ tools: { allow: ["pixcli_voice_clone", "pixcli_dialogue", "pixcli_tryon", "pixcli_publish"] } }
Notes
- Image/audio/video inputs accept a local file path, a
data:URI, or an http(s) URL — local files are read and uploaded automatically. Use them as references (logos, style/character, products) or as edit/img2img sources. - Generation is async. Tools wait up to
pollTimeoutMs(default 10 min); on timeout the job keeps running and the result includes apixcli_jobhandle to recover it. - Returned shape:
{ job_id, status, model, cost, elapsed_ms, share_url, assets[] }. Each asset has a short-lived signedurland (when published) a stablepublished_url.
Network access
This plugin contacts exactly one host: the pixcli API (default https://pixcli.shellbot.sh, overridable via the baseUrl config or PIXCLI_API_URL). It sends the user-provided METERKEY_API_KEY as an Authorization: Bearer header and calls only these endpoints:
POST /api/v1/generate,/api/v1/generate/advanced— images, virtual try-onPOST /api/v1/edit,/api/v1/edit/advanced— image editsPOST /api/v1/video,/api/v1/video/advanced,/api/v1/video/extendPOST /api/v1/audio/{voice,voice-clone,music,sfx,dialogue,podcast}GET /api/v1/models— read-only model listGET /api/v1/jobs/:id,/api/v1/jobs/:id/result— job status + resultsPOST /api/v1/publish— share-visibility control
No other hosts are contacted; there is no telemetry and no subprocess execution. The only filesystem access is reading a local media file the caller explicitly references (path or data: URI) in order to upload it to the pixcli API. (This is also shipped as clawscan-note.txt.)
Develop
npm install
npm run build # tsc → dist/
Built artifact: dist/index.js (referenced by openclaw.extensions in package.json). Keep contracts.tools in openclaw.plugin.json in sync with the tools registered in index.ts.
Built by ShellBot. Part of the pixcli project.
