Install
openclaw skills install @modellix/modellixIntegrate Modellix's unified API for AI image, video, and audio workflows. Use this skill whenever the user wants to generate or edit images, create or transform videos, synthesize speech, transcribe audio, clone a voice, do virtual try-on, or call any Modellix model API. Also trigger when the user mentions Modellix, model-as-a-service for media generation, or providers such as Qwen, Wan, Seedream, Seedance, Kling, Hailuo, MiniMax, Whisper, or CosyVoice through a unified API. Prefer modellix-cli (model run --wait, task download, doctor, model list) over hand-rolled REST polling whenever the CLI is available.
openclaw skills install @modellix/modellixModellix is a Model-as-a-Service (MaaS) platform for asynchronous image, video, and audio workflows. Prefer the official CLI (modellix-cli) so submit, wait, and download stay one coherent workflow. Persistent session guardrails also ship as Open Plugins rules under rules/*.mdc.
This plugin may expose the Modellix Docs MCP (.mcp.json → https://docs.modellix.ai/mcp). It is a read-only documentation server (search_modellix, docs filesystem query, optional feedback). It does not submit generation tasks, poll, download, or handle API keys.
When looking up product/API/install docs or request-body schema:
modellix-cli model describe <slug> --json → docs_url, or browse https://docs.modellix.ai/llms.txt and fetch the model .md.references/cli-playbook.md, the npm README, or modellix-cli --help — do not trust website CLI pages over the CLI package (docs can lag).If the Docs MCP exposes a skill resource, treat this SKILL.md as the execution policy source of truth (CLI-first, defaults, paid-submit safety).
Do not rely on the website CLI guide page for command syntax.
Choose the path in this order:
modellix-cli is available (install with npm i -g modellix-cli@latest if missing and install is allowed).--json or --quiet) for automation.Canonical single-task flow:
modellix-cli doctor --json
modellix-cli model run \
--model-slug <provider/model> \
--body '<json>' \
--wait --timeout 5m --json
modellix-cli task download <task_id> --output-dir ./outputs --json
model invoke is a compatibility alias of model run. New commands should use model run.
Do not reinvent polling loops when CLI wait is available. Do not invent deprecated flags (for example --model-type). Use --help only when behavior is unclear.
When the user does not name a model, use these defaults immediately (do not scan the catalog first):
| Task Type | Default Model Slug |
|---|---|
| Text-to-image (T2I) | google/nano-banana-2-lite |
| Text-to-video (T2V) | bytedance/seedance-2.0-mini-t2v |
| Image editing / I2I | google/nano-banana-2-lite-edit |
| Image-to-video / I2V | bytedance/seedance-2.0-fast-i2v |
| Video-to-video (V2V) | bytedance/seedance-2.0-fast-v2v |
| Text-to-speech (TTS) | alibaba/qwen-audio-3.0-tts-flash |
| Speech-to-text (STT) | openai/whisper-1 |
| Speech-to-speech (STS) | alibaba/cosyvoice-clone |
Handle credentials as: discover -> request -> use-session -> (optional) persist.
Before asking the user:
MODELLIX_API_KEYmodellix-cli auth status / doctor — key via --profile or MODELLIX_PROFILE or currentProfile)Never ask again when a usable key is already discoverable. CLI key resolution order is: --api-key → MODELLIX_API_KEY → selected saved profile.
Default: do not persist automatically.
When the user explicitly asks to persist:
modellix-cli auth login or modellix-cli init (CLI validates and stores the profile securely).MODELLIX_API_KEY only if they insist on env persistence.If the user provides a new key: update session first; if they requested persistence, replace via auth login/init (or user-level env). Re-check with modellix-cli doctor --json (or scripts/preflight.py --json) before continuing.
Preferred checks:
modellix-cli doctor --json
Bundled helpers (optional):
scripts/preflight.py — wraps doctor when CLI exists; otherwise lightweight env/which checks and recommends cli or rest.scripts/invoke_and_poll.py — CLI path uses model run --wait; REST path keeps submit+poll fallback.When preflight/doctor reports missing credentials, apply the lifecycle above.
When CLI is unavailable:
references/rest-playbook.md).npm i -g modellix-cli@latest.modellix-cli doctor --json when CLI is present.modellix-cli model list / modellix-cli model describe <slug> (describe returns docs_url).docs_url or the matching link from https://docs.modellix.ai/llms.txt) and read the OpenAPI path / model_id. Do not invent slugs from filenames (decimals often matter, e.g. bytedance/seedance-2.0-mini-t2v).llms.txt, then fetch the target model .md.Default (single task):
modellix-cli model run \
--model-slug google/nano-banana-2-lite \
--body '{"prompt":"A cinematic sunset over a futuristic city skyline"}' \
--wait --timeout 5m --json
Split flow when useful (pipelines, concurrency):
TASK_ID=$(modellix-cli model run --model-slug ... --body '...' --output task-id)
modellix-cli task wait "$TASK_ID" --timeout 10m --json
Batch (paid guard required): modellix-cli model batch tasks.jsonl --max-tasks N [--wait].
Manual REST: references/rest-playbook.md. Optional helper: scripts/invoke_and_poll.py.
modellix-cli task download <task_id> --output-dir ./outputs --json
If download fails with Resource host resolves to a private or reserved network address (common when a local proxy/VPN maps CDN hosts like file.modellix.ai into 198.18.0.0/15), retry with --allow-private-network for trusted Modellix CDN hosts, or fall back to downloading the result.resources[].url with curl/wget.
Resource URLs expire in about 7 days — persist promptly. If downloading manually (REST path), name files:
modellix-{model_slug}-{timestamp}.{ext}
(replace / in the slug with -).
Examples:
modellix-google-nano-banana-2-lite-20260430-113000.pngmodellix-bytedance-seedance-2.0-mini-t2v-20260430-113500.mp4T2I (default model) — prompt required:
modellix-cli model run \
--model-slug google/nano-banana-2-lite \
--body '{"prompt":"A cinematic sunset over a futuristic city skyline"}' \
--wait --timeout 5m --json
T2V (default model) — prompt required:
modellix-cli model run \
--model-slug bytedance/seedance-2.0-mini-t2v \
--body '{"prompt":"A cat playing in a sunny garden"}' \
--wait --timeout 10m --json
I2I — prompt + image array:
modellix-cli model run \
--model-slug google/nano-banana-2-lite-edit \
--body '{"prompt":"Convert to watercolor style","image":["https://example.com/input.jpg"]}' \
--wait --timeout 5m --json
I2V — at least one image param (first_frame_image, last_frame_image, or reference_images):
modellix-cli model run \
--model-slug bytedance/seedance-2.0-fast-i2v \
--body '{"prompt":"A cat playing in the garden","first_frame_image":"https://example.com/frame.jpg"}' \
--wait --timeout 10m --json
V2V — video_urls array:
modellix-cli model run \
--model-slug bytedance/seedance-2.0-fast-v2v \
--body '{"video_urls":["https://example.com/source.mp4"]}' \
--wait --timeout 10m --json
TTS (default model) — text + voice required (verify voice against the model doc; Flash voices only):
modellix-cli model run \
--model-slug alibaba/qwen-audio-3.0-tts-flash \
--body '{"text":"There is a large garden behind my house.","voice":"longanhuan_v3.6"}' \
--wait --timeout 5m --json
STT (default model) — public audio url required:
modellix-cli model run \
--model-slug openai/whisper-1 \
--body '{"url":"https://example.com/meeting.mp3"}' \
--wait --timeout 5m --json
STS (default model) — clone reference url + synthesis text + target CosyVoice model:
modellix-cli model run \
--model-slug alibaba/cosyvoice-clone \
--body '{"model":"cosyvoice-v3.5-plus","url":"https://example.com/reference.wav","text":"There is a large garden behind my house."}' \
--wait --timeout 5m --json
If this session used REST because CLI was missing, suggest installing the CLI afterward.
Read only what the task needs:
references/cli-playbook.md — install, auth, run/wait/download, batch, recoveryreferences/rest-playbook.md — REST submit/poll when CLI is unavailablereferences/capability-matrix.md — CLI ↔ REST mapping and fallback rulesassets/output/task-result.schema.jsonMODELLIX_API_KEY (also via CLI profiles).https://api.modellix.ai (override only with trusted --base-url / MODELLIX_BASE_URL).| Situation | Action |
|---|---|
HTTP/API 400 | Do not retry. Fix parameters or body. |
401 | Do not retry. Fix key (doctor, auth login). |
402 | Do not retry. Insufficient balance. |
404 | Do not retry. Verify task_id or model slug. |
429 / read-only 5xx | CLI already retries safe GETs within deadline; do not blindly re-POST paid submits. |
| Paid submit outcome unknown | Do not immediately re-run the same model run. Check task history, console activity, and any printed task ID first. |
Exit 124 | Local wait timeout; remote task may still run — recover with task wait / task get, then task download. |
Exit 2 | Argument or safety guard (e.g. batch cost limit) — fix flags. |
model run --wait (or task wait) instead of hand-rolled poll loopstask download or manual persist before 7-day expiry)