muapi-ugc-video-factory
Turn a person photo + a product photo + an optional script into a vertical 9:16 UGC-style video ad.
Paste into Claude, ChatGPT or Cursor.
Read the source134 lines
| 1 | |
| 2 | slug muapi-ugc-video-factory |
| 3 | name muapi-ugc-video-factory |
| 4 | version "1.0.0" |
| 5 | description Turn a person photo + a product photo + an optional script into a vertical 9:16 UGC-style video ad. Generates a lifestyle hero image (Nano-Banana Pro Edit), then animates it with native audio using Seedance 2.0 VIP image-to-video. |
| 6 | acceptLicenseTerms true |
| 7 | |
| 8 | |
| 9 | |
| 10 | # UGC Video Factory |
| 11 | |
| 12 | **Turn a person photo + product photo (+ optional script & environment) into a vertical 9:16 UGC-style video ad with native dialogue audio.** |
| 13 | |
| 14 | A three-stage pipeline: |
| 15 | **GPT** writes a director-grade ultra-realistic lifestyle photography prompt from your inputs. |
| 16 | **Nano-Banana Pro Edit** fuses the person + product into a single hero photo (1K, 9:16). |
| 17 | **Seedance 2.0 VIP Image-to-Video** animates the hero photo into a 10s vertical UGC clip with synced spoken audio. |
| 18 | |
| 19 | ## Inputs |
| 20 | |
| 21 | | Name | Type | Required | Default | Description | |
| 22 | |:---|:---|:---|:---|:---| |
| 23 | | `person` | image_url | yes | — | Photo of the person who will appear in the ad (face + upper body works best). | |
| 24 | | `product` | image_url | yes | — | Clear photo of the product (preferably on neutral background, logo/text legible). | |
| 25 | | `script` | text | no | `Okay… first of all, ship happens. And this hat is honestly my favorite. It also comes in navy and black, so you can pick your vibe.` | The exact line the on-screen person will say (kept short — 1–2 sentences fit 10s comfortably). | |
| 26 | | `environment` | text | no | `study room, laptop in front of it` | Scene / context where the person is using the product (e.g. "bathroom mirror, morning routine", "coffee shop window seat"). | |
| 27 | |
| 28 | If `person` or `product` is missing, ask the user to upload them (`muapi upload file <path>`) or offer to generate placeholders before continuing. |
| 29 | |
| 30 | |
| 31 | ## Steps |
| 32 | |
| 33 | Run the three steps sequentially — each step's output feeds the next. |
| 34 | |
| 35 | ### Step 1 — Director Prompt (GPT) |
| 36 | |
| 37 | Use a GPT model (`gpt-5.1` or whichever chat model is available to the executing agent) with **temperature 0** and **max ~200 tokens** to produce the hero-image prompt. |
| 38 | |
| 39 | **System prompt:** `You are a helpful assistant.` |
| 40 | |
| 41 | **User prompt** (substitute `{{person}}`, `{{product}}`, `{{environment}}`): |
| 42 | |
| 43 | |
| 44 | Uploaded images are being analyzed. Ultra-realistic lifestyle photography with {{person}} and {{product}} and {{environment}}. |
| 45 | |
| 46 | If the product is wearable (e.g., hat, glasses, hooded sweatshirt), the person wears the product naturally. |
| 47 | |
| 48 | If the product is carried in the hand (e.g., cream, bottle, thermos), the person holds the product naturally. |
| 49 | |
| 50 | The product is clearly visible and is the main focus of the image. The logo or text on the product must be legible. |
| 51 | |
| 52 | The person has a natural and modern look with a minimalist style. |
| 53 | |
| 54 | The scene is consistent with the context of the product's use: {{environment}}. |
| 55 | |
| 56 | Lighting: soft natural daylight. |
| 57 | Background: clean, aesthetic, slightly blurred (shallow depth of field). |
| 58 | Style: high-end commercial lifestyle photography, realistic textures, 4K quality, vertical 9:16 composition, social-media advertising style. The background and environment should be appropriate to the product (e.g. a woman with a serum could be at home). The person's facial details and the product must remain unchanged. |
| 59 | |
| 60 | |
| 61 | Capture the GPT response as `{{step1_prompt}}`. |
| 62 | |
| 63 | ### Step 2 — Hero Image (Nano-Banana Pro Edit) |
| 64 | |
| 65 | Submit a `muapi image edit` call against the `nano-banana-pro-edit` model: |
| 66 | |
| 67 | **Reference images** (`image_urls`): `[ {{person}}, {{product}} ]` — order matters; person first. |
| 68 | **Prompt**: `{{step1_prompt}}` from Step 1. |
| 69 | **Aspect ratio**: `9:16` |
| 70 | **Num images**: `1` |
| 71 | **Resolution**: `1K` |
| 72 | **Output format**: `jpeg` |
| 73 | |
| 74 | Capture the resulting image URL as `{{hero_image}}`. Briefly show it to the user for approval before kicking off the video step. |
| 75 | |
| 76 | ### Step 3 — UGC Video (Seedance 2.0 VIP Image-to-Video) |
| 77 | |
| 78 | Submit a `muapi video from-image` call against **`seedance-2-vip-image-to-video`** (or the `-fast` variant if the executing agent wants lower latency). |
| 79 | |
| 80 | **Start image**: `{{hero_image}}` from Step 2. |
| 81 | **Aspect ratio**: `9:16` |
| 82 | **Duration**: `10` seconds. |
| 83 | **Generate audio**: `true` (native dialogue). |
| 84 | **CFG scale**: `0.5` |
| 85 | **Negative prompt**: `blur, distort, low quality` |
| 86 | **Prompt** (substitute `{{script}}`): |
| 87 | |
| 88 | |
| 89 | Create a 10-second vertical UGC-style video (9:16). |
| 90 | |
| 91 | A person is interacting naturally with their setting and product. |
| 92 | |
| 93 | The product is used naturally: |
| 94 | - If wearable → the person is wearing it. |
| 95 | - If handheld → the person is holding or applying it. |
| 96 | |
| 97 | The video is a single, uninterrupted shot. No cuts. No color changes. No text on screen. |
| 98 | |
| 99 | The person looks directly at the camera with a relaxed and natural expression. |
| 100 | They interact comfortably with the product using their hands (adjusting, holding, pointing). |
| 101 | |
| 102 | They say in a natural, conversational tone: |
| 103 | |
| 104 | "{{script}}" |
| 105 | |
| 106 | Subtle hand gestures while speaking. |
| 107 | End with a small smile or nod. |
| 108 | |
| 109 | Style: authentic UGC, handheld phone feel, light natural movement, soft daylight, shallow depth of field, TikTok/Reels aesthetic. |
| 110 | |
| 111 | |
| 112 | Poll the result with `muapi predict wait <request_id>` and download to the user's outputs directory. |
| 113 | |
| 114 | ## Notes |
| 115 | |
| 116 | VIP tier supports 9:16 and durations 4–15s; 10s is the sweet spot for a 1–2 sentence script. |
| 117 | Keep the script short — Seedance 2.0 will compress longer scripts and clip words. |
| 118 | Seedance VIP tolerates realistic human faces in references (unlike Chinese tier), making it the right choice for UGC. |
| 119 | If you want lower latency at the same quality, swap to `seedance-2-vip-image-to-video-fast`. |
| 120 | For multi-shot ads, generate several `{{hero_image}}` variations in Step 2 and animate each independently — Seedance VIP does not multi-image i2v at 9:16 + audio. |
| 121 | |
| 122 | ## Trigger Keywords |
| 123 | |
| 124 | `ugc video factory`, `ugc video ad`, `person plus product video`, `talking product ad`, `ugc reel`, `lifestyle product video`, `vertical ugc video` |
| 125 | |
| 126 | |
| 127 | |
| 128 | |
| 129 | ## Notes for the Executing Agent |
| 130 | |
| 131 | This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Run `muapi auth configure` first if `MUAPI_API_KEY` is unset. |
| 132 | For local files supplied by the user, upload them first: `muapi upload file <path> --output-json --jq '.url'`. |
| 133 | Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call. |
| 134 | If the `muapi` CLI does not yet alias `nano-banana-pro-edit` or `seedance-2-vip-image-to-video`, fall back to the raw API: `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'`, then poll with `muapi predict wait <request_id>`. |