Product UGC
The Product UGC recipe generates vertical, user-generated-content–style promo videos. Provide a reference image of the on-camera creator and a reference image of the product, and the recipe produces an authentic, social-ready clip of the creator promoting the product.
How it works
Section titled “How it works”Submit a character image (the person presenting) and a product image, plus optional productInfo and userConcept to steer the script and tone. The recipe generates a UGC-style video in the casual, handheld aesthetic that performs well on social channels. It returns a task id you poll for the finished output.
Inputs
Section titled “Inputs”| Input | Required | Description |
|---|---|---|
version | Yes | Workflow version. Use a dated version like 2026-06 to pin behavior, or unsafe-latest to track the newest stable version. |
characterImage | Yes | Image of the creator who appears on camera, as { uri }. Aspect ratio (width / height) must be between 0.4 and 4. |
productImage | Yes | Image of the product being promoted, as { uri }. Aspect ratio (width / height) must be between 0.4 and 4. |
productInfo | No | Product details and creative brief — what the product is, key benefits, and anything the script should reference (max 2500 characters). |
userConcept | No | Creative direction — tone, voice register, a specific message, or an entire dialog script (max 3500 characters). |
duration | No | Output length in seconds (4–15). Defaults to 15. |
ratio | No | Output aspect ratio: 720:1280 or 1080:1920. |
audio | No | Whether to generate audio. Defaults to true. |
uri accepts an HTTPS URL, a Runway upload URI, or a data URI.
Example
Section titled “Example”import RunwayML from '@runwayml/sdk';
const client = new RunwayML();
const task = await client.recipes.productUgc({ version: '2026-06', characterImage: { uri: 'https://example.com/creator.jpg' }, productImage: { uri: 'https://example.com/product.jpg' }, productInfo: 'Wireless game controller with haptic feedback triggers', userConcept: 'Enthusiastic creator tone, demonstrate the product in hand', duration: 15,});
console.log(task);from runwayml import RunwayML
client = RunwayML()
task = client.recipes.product_ugc( version='2026-06', character_image={'uri': 'https://example.com/creator.jpg'}, product_image={'uri': 'https://example.com/product.jpg'}, product_info='Wireless game controller with haptic feedback triggers', user_concept='Enthusiastic creator tone, demonstrate the product in hand', duration=15,)
print(task)curl -X POST https://api.dev.runwayml.com/v1/recipes/product_ugc \ -d '{ "version": "2026-06", "characterImage": { "uri": "https://example.com/creator.jpg" }, "productImage": { "uri": "https://example.com/product.jpg" }, "productInfo": "Wireless game controller with haptic feedback triggers", "userConcept": "Enthusiastic creator tone, demonstrate the product in hand", "duration": 15 }' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $RUNWAYML_API_SECRET" \ -H "X-Runway-Version: 2024-11-06"The recipe returns a task id. Poll GET /v1/tasks/{id} for status and the output video URL — see Using the API for the task workflow.
Tips for best results
Section titled “Tips for best results”- Use a clear, well-lit reference of the creator with the face visible and unobstructed.
- Provide a clean product image so the product reads clearly when the creator presents it.
- Use
userConceptto set the tone or supply a full script when you need specific messaging. - Make sure you have the rights and consent to use any person’s likeness as a reference.
- See Reference media guidelines for more.
Reference
Section titled “Reference”Related
Section titled “Related”- Product Ad — product shot videos without a creator
- Multi-Shot Video