@clipwright/cli
Command-line client for the Clipwright UGC video API.
export CLIPWRIGHT_API_KEY=cw_...
npx -y -p @clipwright/cli clipwright quote --script "Hello from Clipwright."
npx -y -p @clipwright/cli clipwright make --script "Hello from Clipwright."
quote --script <text> | Estimates the credit cost. Spends nothing. |
make --script <text> | Renders a clip and waits for it. Costs credits. Prints the video URL to stdout, progress and warnings to stderr. |
upload <path> | Uploads a local PNG/JPEG and prints the https url to pass as --image. Free. |
runs <id> | Prints the state of one run. |
voices | Lists the curated voice catalog for --voice. |
quote and make take the actor's photo as --image <url> or --image-file <path>
(uploaded first, then passed on), plus --aspect-ratio 9:16|1:1|16:9 and
--resolution 720p|1080p|4k. Pass --aspect-ratio explicitly with a picture:
without it a landscape photo renders vertical, with a warning.
Pick a voice with --voice <name> from that catalog, or --voice-id <id> for a
vendor voice outside it (a cloned one, for instance). Set neither and the default
voice already matched to the avatar is used. Each preset carries its speech model
(voices prints it; owner_ru_clone speaks eleven_v3); --tts-model overrides it.
make retries are explicit: --retry 2 deliberately starts a new run for the
same script. Without it a repeated call returns the run you already paid for,
because every request carries an idempotency key derived from the input and from
this installation's id. A non-numeric --retry is rejected rather than coerced:
the value ends up in that key, so a silent NaN would buy you a second render.
Set CLIPWRIGHT_CLIENT_ID to a stable per-install value, or leave ~/.clipwright/
writable so the client can create one on first use. It refuses to invent a
throwaway id, because a per-process id would disable duplicate protection
silently — and the duplicate it fails to catch is a second paid render.
CLIPWRIGHT_API_URL overrides the API base URL; the default points at
production.