Skip to main content
Zero runtime dependencies, Node 20+. Grammar is always 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:
A wrong flag tells you the fix:

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:

Pick a creator once

Every later gen create and posts create runs as that creator. --account-id overrides it for one command.

Scripting and agents

Results go to stdout, progress and errors to stderr, so pipes stay clean:
With --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:
Exit codes: 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.