crl <command> <subcommand>.
The three-line version
Commands
generate aliases gen, creators aliases accounts, clips aliases posts.
Global flags
Both spellings of every flag work.
--aspect-ratio and --aspect_ratio are the
same flag. Model parameters are snake_case and CLI convention is kebab-case; guessing
wrong should not be a failure mode.The model’s flags are the model’s schema
crl gen create fetches the model’s schema first, then interprets the remaining flags
against it. The CLI hardcodes no model parameters, so a new model works the day it ships:
crl models get <id> prints the whole schema: each input’s modality and cap, each
parameter’s allowed values or numeric bounds, what opaque values like caption styles
mean, whether a prompt is required, and the model’s take length.
Media flags take a path or an id
--image ./face.png uploads the file and uses it. --image <asset-id> reuses an existing
asset. --image https://… passes the URL through. No separate upload step — though
crl upload <file> exists when you want to pin an id.
Prompts can come from stdin:
Run flags that are not model parameters
Price a source-billed run with its media.
lipsync, motion-control, scene-video,
change-voice and short-clip are billed per second of the source. crl gen cost
passes along any asset id, URL or --source-url you give it and prints the length it
billed, so the quote matches the charge.Pick a creator once
gen create and posts create runs as that creator. --account-id overrides
it for one command.
Post flags
crl posts create builds a post; --publish now|schedule|queue chains the send. The
format follows the media — one video is a video, two or more stills are a carousel — so
most posts need only --asset and --caption.
--draft, --made-with-ai, --device and --device-only are switches. The bare flag
turns one on, and --device true and --device=true say the same thing. Leaving a switch
off sends nothing at all rather than an explicit false.
Phone posting is enabled per workspace, on request, and the creator has to be bound to a
device in the studio. Without both,
--device and --device-only come back as an error
saying which one is missing. --device cannot be combined with --draft: the phone
posts directly and has no draft inbox. See Publishing for the detail.crl posts publish asks for confirmation on a terminal when it would go live; a draft
handoff says so instead of warning about a public post. Pass --yes in scripts.
Scripting and agents
Results go to stdout, progress and errors to stderr, so pipes stay clean:--wait, crl gen create prints the media URL. Without it, the generation id.
Parallel fan-out is just shell job control — --wait blocks per process:
0 success · 1 usage or runtime error · 2 not authenticated · 3 out of
credits.
Configuration
Precedence: flags → environment → config file.
CI wants the environment variable — there is no interactive login there.