mulerun studio is the multimodal generation surface of the CLI. It bundles
40+ image, video, speech, and music model endpoints behind a single
subcommand — all reachable with your existing MuleRun login, no extra API
key.
--json for machine-readable output. Long-running
endpoints (video, music) can be submitted with --no-wait and resumed
later via status — useful for CI, batches, or LLM-agent workflows.
Authentication
Runmulerun login once and every studio invocation picks up the cached
credential automatically. The CLI exchanges your OAuth token for a
short-lived per-call key before each request, so no manual API-key
management is required. See Configuration for
non-interactive setups (MULERUN_TOKEN).
mulerun studio --help and mulerun studio <subcommand> --help are safe
to run while logged out — they don’t touch the network.
Endpoint identifier
The<endpoint> argument used by params, run, and the catalog uses
this shape:
Examples:
alibaba/wan2.6-t2v, openai/gpt-image-2/edit,
google/nano-banana-2/generation.
Subcommands
studio list
Browse the catalog. With no flags, every registered endpoint is printed
grouped by provider; with flags, the list is narrowed.
studio params <endpoint>
Inspect every parameter an endpoint accepts — name, type, required
flag, default value, and enum choices when applicable.
status)
and the JSON key under which result URLs appear (videos, images,
audios).
Parameter naming. Parameters are documented in snake_case (matching
the wire format) and exposed as --kebab-case flags. The CLI converts
between the two automatically.
studio run <endpoint>
The workhorse. Submits a generation task, polls until it completes, and
prints the result URLs.
Model parameters are passed as flags using the kebab-case form. Both
--key value and --key=value syntax are accepted. Values are type-coerced
and enum-validated before any HTTP call is made:
Missing required parameters and empty strings for required string
parameters produce a friendly error before the request is sent.
Recipes:
--json):
videos, images, audios) matches the Result Key
field shown by studio params.
Local image inputs
Any parameter that takes an image (--image, --images, --first-frame,
--last-frame, --mask, --mask-image-url, --ref-images-url,
--reference-images, …) accepts three kinds of values:
Supported formats: PNG, JPG, JPEG, GIF, BMP, WebP, TIFF, SVG, ICO, HEIC,
HEIF, AVIF. Files are capped at 20 MB; paths inside sensitive
directories (
/etc, ~/.ssh, ~/.aws, …) are blocked.
If you pass a path that doesn’t exist, the CLI prints a yellow warning to
stderr and still attempts the request (treating the string as a URL). This
makes typos loud while still allowing intentional pass-through of
URL-shaped strings.
studio status <api-path> <task-id>
Check on an async task submitted with run --no-wait (or via the HTTP
API directly).
api-path argument is printed by run --no-wait, and also shows up
as api_path in studio list --json and as API Path in
studio params.
Status values:
Snapshot calls (without
--wait) only exit non-zero on the explicit
failed state; other statuses simply mean “not done yet.”
studio config
Print the resolved configuration (base URL, request timeout, retry
budget). No network call, no secrets revealed. Run this when you suspect
the wrong host is being contacted.
studio upgrade / studio reset
Wrapper-only commands that operate on the local install of the studio
engine:
upgrade is safe to run on a schedule; reset is the escape hatch when
a stale install is misbehaving.
Async workflow
For long jobs (video, music, high-effort image generation), submit without waiting and resume polling later:--max-wait budget, the task itself
keeps running on the server — re-run the same status --wait to resume.
Fan-out / fan-in
Submit many prompts in parallel, then wait on the whole batch:Scripting
Every studio command supports--json. Pair with jq for clean shell
pipelines:
--quiet to suppress progress while keeping real errors.
Exit codes
When scripting against the CLI, always check
$? before parsing the JSON
— a failed call may still emit JSON, but the shape will contain an
error field instead of results.
Common errors
Tips
- The first
mulerun studioinvocation downloads the studio engine into~/.mulerun/vendor/; subsequent calls reuse it. - For fast endpoints (text-to-image), shrinking
--poll-interval 5makes the experience feel snappier. - For very long videos, bump
--max-wait 1800or3600. The task does not get cancelled when the poller stops —statuscan pick it back up. --debugprints the resolved engine path and the exact arguments forwarded to it; handy when an option doesn’t seem to take effect.