Generate Ugc Tool
generate_ugcGenerate a short (~7-12s) vertical UGC-style video clip from a creative brief. The service builds a start frame, renders an image-to-video clip, and returns it.
Account-gated. Free accounts (no subscription) get ONE generation per day (a teaser); subscribe to generate more, metered by the seconds you render. Paid accounts are credit-metered: a render is charged from your credit balance based on the seconds of video produced, settled when it finishes.
Provide the identity EITHER by a creator slug (discover them with list_ugc_creators;
a saved spokesperson that bakes the brief, voice, locked seed, and start frame) OR a
brief_name (a server-side brief preset) OR an inline brief object. Inline fields
override a creator's baked values. A brief is NOT a prose prompt: it is a small set of creative fields the
service composes into the start-frame image and the spoken delivery. Use these fields
(all strings, all optional but more is better):
character: who is on camera (age, look, build, vibe; describe real texture, not model-polished)wardrobe: what they wearsetting: where they are + the lighting/moodframing: shot + camera placement (e.g. "phone propped on a table, medium-close")vibe: energy and how they address the viewerdelivery: pacing of the line (e.g. "fast exasperated hook, then relaxed")accent: spoken accent (e.g. "natural American accent")sound: ambience under the voicescript: the spoken line (~24-30 words, ONE hook in the first 2s). This drives BOTH the audio AND the caption text, so write the exact words you want said + shown.
Example brief: {"character":"a woman in her late 20s, natural skin, tired but sharp", "wardrobe":"plain dark crewneck","setting":"a bright cafe, soft window light", "framing":"phone propped on the table, medium-close","vibe":"candid, talking to a mate","delivery":"fast hook then relaxed","accent":"natural American accent", "script":"i run a company and have no time to edit. now i drop one video in and get a week of clips back, captions and all. i just post."}
The clip length follows the script: it is sized to the words at a natural speaking
pace, up to ~20 seconds (one LTX pass), so keep a script to roughly one clip. Optionally
set top-level script, seed for reproducibility, ref (hashid of an uploaded image
from create_upload to use as the start frame; omit to have one generated), and
caption_preset to auto-caption the finished clip (one-shot).
Processing is ASYNCHRONOUS: this returns a ugc_job hashid and status: "queued".
Poll get_ugc_job_status with that ugc_job until it reports completed. It then
returns the downloadable video_url; once captioning is ready it also returns video
viral_momentids you can pass to render_clip with a caption_preset. Thenudgefield is an optional suggestion.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Optional hashid of an uploaded image (from create_upload) to use as the start frame. | |
| seed | No | Optional seed for a reproducible render. | |
| brief | No | An inline brief object. Use this OR `brief_name`. | |
| voice | No | Optional voice as {accent, tone}, folded into the brief the worker speaks (overrides a creator default). | |
| script | No | The spoken script. The clip length is sized to this at a natural pace (up to ~20 seconds), so keep it to roughly one clip. | |
| creator | No | Optional creator slug from list_ugc_creators. Supplies a baked identity (brief, voice, locked seed, canonical start frame); inline fields override it. | |
| brief_name | No | A server-side brief preset name (briefs/<name>.json). Use this OR inline `brief`. | |
| start_frame | No | Optional curated start-frame scene id (the identity anchor to open on); discover ids with list_ugc_creators / the studio. | |
| caption_preset | No | Optional caption preset key. When set, the finished clip is automatically captioned + rendered (one-shot); omit to get the raw clip and caption later via render_clip. |