UGC video, made by your agent.
Clipwright turns your script into a talking actor who says it. The clip comes back with no watermark. Vertical 1080 by 1920 by default, and other resolutions on request. Call it from MCP, the CLI, or REST.
Confirm your email and your account opens right away, with no credits on it: buy a pack of credits to render.
$ clipwright make --script "This clip began as a few lines of text…" --voice george
state: scripting
state: tts
state: avatar
…
state: uploading
…
state: succeeded
warning: voice track was recovered from an earlier paid generation of the same
script, not synthesized again
warning: vendor returned 14.8s where 14.7428s was expected
https://…/runs/run_e9a37554646047709048236602c214a9/final.mp4?…This is the run that produced the clip. Where you see an ellipsis, output was cut; nothing was added.
From a still photo to a clip
The pipeline goes from script to voice, then to a talking actor, then to a rendered clip.


Three ways to call it
A run that finishes reports succeeded or failed: those are the only two terminal states we recognise.
Add the Clipwright MCP server to your client, then ask the agent to call make_ugc.
@clipwright/mcp-servernpx -y -p @clipwright/cli clipwright make --script "Hello from Clipwright."curl -X POST https://api.clipwright.io/v1/skills/make_ugc/run -H "Authorization: Bearer cw_..." -H "Idempotency-Key: quickstart-1" -H "Content-Type: application/json" -d '{"script": "Hello from Clipwright."}'The beta answers at https://api.clipwright.io. The clients we publish ship with the same address.
Script limits by speech model: eleven_v3: 5000 characters; eleven_flash_v2_5: 10000 characters; eleven_turbo_v2_5: 10000 characters. Count includes spaces, audio tags and stress marks; emoji may count as two characters. There is no word-count limit. Duration and price are estimates until measured.
What we do differently
Three decisions that make the service predictable for something that isn't watching.
No publishing
Never a post
There is no platform vendor in the code, and every public surface is pinned by name: commands, SDK methods, dashboard actions. Adding one is a decision, not an accident.
Unmet params
Nothing you asked for is dropped in silence.
A parameter we accept but cannot honor comes back in the warnings list, on the same run.
Refusals
Requests we cannot serve are refused at the door.
Before a paid vendor call, so a refusal never costs you credits.
What a run costs you
Four outcomes, and two of them cost you nothing.
The run finished
You pay for the length of the finished video, rounded up to the next whole second.
It failed before the video was ordered
You pay nothing. Work we bought along the way, like the voice track, is ours to cover.
It failed after the vendor took on the video
You pay for the run. We charge the measured length when we have it, and an estimate from your script when the failure took the measurement with it.
We stopped it, lost the paid file, or owed the vendor
You pay nothing, even if the vendor billed us.
Actors, voices, and your clips
Your agent chooses the face and the voice before a run starts, and finished clips stay on a page of their own.
- The actor
- Your agent lists the actor library and passes an actor_id to the run. It can send a photo of its own instead, or call create_actor, which builds an actor for the account from a written description; later runs use it by actor_id like any other.
- The voice
- The catalog holds 303 voices across 31 languages, filtered by language, gender, age and use case. Each one links to a sample of itself, so your agent can hear it before spending a credit.
- Your clips
- Finished videos of your account live on one page as a still frame from the delivered file, with the length of the clip and the day it finished. A tile with a frame plays the video itself.
Not supported in this beta
Two lists. The first is refused outright, before any paid vendor is called, so it never costs you anything. The second is accepted and comes back named in the warnings list, so you know exactly what we changed.
Refused before anything is charged
- saved characters
- b-roll
- webhooks
Accepted, then reported back as not honored
- person field on make_ugc
- actor name
- look
- captions
- caption style
Clipwright does not publish anywhere. The run carries a file link once it is ready.
How long it takes
Rendering is asynchronous. You get a run id right away and poll it until the run succeeds or fails. The run carries the video link once the file is ready.
01
An identifier comes back
Creating a run answers with an identifier.
02
Succeeded or failed
A run that finishes reports succeeded or failed. Those two are the whole terminal vocabulary.
03
The link arrives with the run, once the file is ready
The run response includes the video link when it is ready. The link is signed and expires; the quickstart names the window.
Confirm your email and your account opens right away, with no credits on it: buy a pack of credits to render.
Create an account