product-ugc — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited product-ugc (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Concept-driven one-shot pipeline. You take a short brief from the user, generate a Seedance 2.0 multi-shot prompt using the Prompt Construction Framework below, write it to the spec, and the Python script dispatches it directly to bytedance/seedance-2.0/reference-to-video with the model headshot, styled body (if any), and product image as references.
Defaults: 720p / 15s / 9:16. All three overridable.
Prerequisite: The user must have already created a model (/model) and have product images set up (/brand). For styled wardrobe, also /style first.
Output saved to ./brands/[brand-name]/product-ugc/[output-name]/.
Scan ./brands/ for subfolders that contain a brand-identity/visual-guidelines.md.
/brand firstAsk: "Use a styled model (outfit applied) or unstyled model (plain casting)?"
Styled: list ./brands/[brand]/styled/ and read style-spec.json for model_dir. The latest styled body image becomes @Image2.
Unstyled: list ./brands/[brand]/models/. Only the headshot is used as identity (@Image1); outfit goes in the prompt text.
If neither folder has outputs: "No models found. Use /model first. For outfit styling, also /style."
Ask: "Which product should the video feature?"
Check ./brands/[brand]/brand-identity/product-images/. If not found, check products.json, try to download from the brand site, or ask the user to drop/paste the image.
Ask the user a single open question:
"Describe the concept in one or two lines — what kind of UGC video do you want? Examples: - 'sofia unboxes the magnesium on her desk' - 'gym selfie review while warming up' - 'ASMR top-down try-on of the running socks' - 'kitchen demo of the bottle' - 'walking down the street showing off the cap'"
If the brief matches one of these common patterns we've tuned for, use it as the scaffold. Otherwise use custom and build the prompt from the Prompt Construction Framework directly — the framework is format-agnostic and handles any concept.
| Format | When | Structure |
|---|---|---|
selfie-review | Model talks to camera about the product. | iPhone front/back camera mix, 3–4 dialogue beats, casual show-a-friend energy. |
unboxing | "unbox", "reveal", "opens the package", desk shot. | Overhead top-down, hands only, ASMR cardboard/tissue/reveal beats, minimal or no dialogue. |
try-on | Clothing, accessories, "try-on haul", "GRWM". | Full-length mirror, jump cuts between outfit stages, confident poses. |
lifestyle-demo | "gym", "court", "kitchen", "while running" — using product in an environment. | Mix of selfie + action shots, props phone, demonstrates use. |
asmr-product | "ASMR", "tactile", "satisfying", no model dialogue. | Close-up tactile, slow deliberate movements, amplified sound. |
custom | Anything that doesn't fit the above — mukbang, driving vlog, get-ready-with-me variants, dual-creator skits, anything. | Author the prompt directly from the Prompt Construction Framework — pick camera approach, beat structure, and dialogue style based on the concept itself. |
If the brief clearly matches one of the first 5, confirm it. If it doesn't, use custom — don't force-fit.
Ask:
"Three options for the script: 1. Paste your own 2. I'll write one based on the concept 3. I'll write one grounded in the product's landing page (paste the URL)"
For dialogue-free formats (unboxing, asmr-product, or any custom concept where the model isn't speaking): script is optional. Many of the best examples have zero dialogue.
Ask in one message with defaults:
"Defaults: 15s / 720p / 9:16. Override any of: - Duration (4–15s) - Resolution (480p / 720p / 1080p) - Aspect ratio (9:16 / 16:9 / 1:1 / 4:3 / 3:4 / 21:9 / auto)"
Slug from model + product + 1–2 word concept hint:
model-product-desk-asmrmarcus-cap-urban-walkjade-bottle-kitchen-reviewUsing the Prompt Construction Framework (below), author the full Seedance 2.0 prompt. Show it to the user inline, then write it verbatim to the spec.
Spec format — brands/[brand]/product-ugc/[output-name]/product-ugc-spec.json:
{
"output_name": "model-product-desk-asmr",
"brand": "puresport",
"model_type": "styled",
"model_dir": "brands/puresport/models/sofia",
"styled_dir": "brands/puresport/styled/sofia-allblack-athletic",
"product_image": "brands/puresport/brand-identity/product-images/ultra-magnesium.jpg",
"concept": "ASMR top-down unboxing of the magnesium sachets on a wooden desk",
"format": "unboxing",
"script": "",
"prompt": "<the full prompt you authored>",
"duration": 15,
"resolution": "720p",
"aspect_ratio": "9:16"
}The format field is freeform — use one of the archetype names if it fits, or any short descriptor (custom, mukbang-review, driving-vlog, etc.). It's descriptive metadata; nothing downstream validates it.
For unstyled, set styled_dir: null and put the outfit description directly in the prompt text.
python3 skills/references/generate-product-ugc.py brands/[brand]/product-ugc/[output-name]Reference upload order is positional (the script enforces this — drives @Image1/@Image2/@Image3):
Cost: ~$0.30/sec at 720p, ~$0.50/sec at 1080p (standard tier). Audio included.
Tell the user the path: brands/[brand]/product-ugc/[output-name]/[output-name]_v1.mp4
Offer:
_v2.mp4concept, script, prompt, duration, etc.) and regenerateEach run auto-increments — previous outputs are never overwritten.
Every prompt you author follows this structure. Distilled from working Seedance 2.0 UGC examples and the official Seedance + Higgsfield prompting guides.
Vertical [aspect_ratio] [format] UGC [product category] [activity], shot on iPhone [camera type], [lighting], [energy], casual "[one-line vibe quote]" vibe, real skin tones, no filters, no color grading.
Examples:
Vertical 9:16 selfie-style UGC running-socks review, shot on iPhone front and back camera mix, bright natural daylight, casual "showing a friend my new socks" vibe, real skin tones, no filters.Vertical 9:16 ASMR unboxing of the magnesium sachets, top-down overhead camera, warm soft natural light from a window on the left, slow deliberate hands-only movements, no filters.Specific location, lighting source/direction, surfaces, props in frame. Avoid abstract descriptors. Ground it in a real place.
Good: A bright living room with warm window light from the left, clean wooden floor, a folded exercise mat behind her, a half-drunk water bottle on the side table.
Bad: A nice indoor space with good lighting.
@Image1 is the model — match face, hair, identity exactly.@Image2 shows the outfit — match clothing, fabric, fit exactly.Do NOT describe the product's visual appearance — no colors, no packaging details, no branding text, no finish descriptions. The reference image is the ground truth; adding visual descriptors will conflict with what Seedance sees in the image and produce an off-brand product render.
Break duration into 3–5 timecoded beats. For 15s: 0–3s / 3–7s / 7–11s / 11–15s. For 8s: 0–2s / 2–5s / 5–8s. For 4s: 0–2s / 2–4s.
Each beat must include:
Use the working format:
0–3s — Hook: [camera] [action]. "[dialogue]"
3–7s — Detail: [camera switch] [action] [product moment]. "[dialogue]"
7–11s — Demo / Demonstration: [camera change] [action]. "[dialogue]"
11–15s — Final: [camera] [pose] [smile/look]. "[closing line]"Aesthetic line: Authentic UGC / TikTok aesthetic, real skin tones, natural iPhone HDR, slight handheld micro-shake, natural lens distortion, slight exposure shifts.
Sound:
Natural voice and room tone, no music, no sound effects beyond ambient.Crisp amplified ASMR sounds — cardboard tap, sticker peel, tissue rustle, vinyl figure lifted from foam, [other specific sounds]. No music. Pure ASMR sounds only.Negatives (always include): No text overlays, no filters, no studio lighting, no over-processed look. The phone, camera, and any mirror reflection of a phone or hands holding a phone must never be visible.
Place @Image1 / @Image2 / @Image3 inline where they're referenced. Seedance binds references by position (the first uploaded image is @Image1, etc.) — so the tags only need to be consistent throughout the prompt. The Python script handles the upload order automatically based on model_type.
Vertical 9:16 selfie-style UGC review of the puresport running socks, shot on iPhone front and back camera mix, bright natural daylight from a window, casual "showing a friend my new socks" vibe, real skin tones, no filters, no color grading.
A bright living room — warm light from the left, clean wooden floor, an exercise mat folded against the wall behind her, a water bottle on the side table.
@Image1 is the model — match her face, hair, and identity exactly. @Image2 shows the outfit she's wearing — match the clothing, fabric, fit, and styling exactly. She is holding @Image3, the running socks shown in @Image3.
0–3s — Hook: She holds @Image3 up to the front camera with one hand, the socks filling the vertical frame, her sleeve visible at the edge. She tilts them slowly so the daylight catches the fabric: "Okay, these just arrived and I am obsessed with the colour."
3–7s — Detail: Switches to the back camera. Brings @Image3 close to the lens — the neon pink and the puresport wordmark fill the frame, the cushioning texture visible. "Look at the cushion on these — it feels insane."
7–11s — Demo: Props the phone against her bag, steps back. Pulls on one sock, flexes her foot, looks up at the camera with a small laugh: "These are actually so comfortable."
11–15s — Final: Picks the phone back up. Holds @Image3 up beside her face on the front camera, smiles directly into the lens: "Yeah. Yeah these are the ones."
Authentic UGC / TikTok aesthetic, real skin tones, natural iPhone HDR, slight handheld micro-shake, natural lens distortion. Natural voice and room tone, no music, no sound effects beyond ambient. No text overlays, no filters, no studio lighting, no over-processed look. The phone, camera, and any mirror reflection of a phone or hands holding a phone must never be visible.Vertical 9:16 ASMR unboxing of the puresport magnesium sachets, top-down overhead camera looking straight down at a light wooden desk surface, warm soft natural light from a window on the left, slow deliberate hands-only movements, no filters, no color grading.
The desk is light wood. Only hands are visible — female hands, short natural nails, sleeves of a soft sage-green knit sweater. A small ceramic plate and a folded white linen napkin sit to the upper right of the frame.
@Image1 is the model — only her hands and forearms in the sage sweater sleeves appear in frame, no face. The product is @Image2, the magnesium sachet pack shown in @Image2.
0–4s — Box reveal: The sealed magnesium box sits centered on the wooden desk. Fingers tap the lid three times — satisfying hollow cardboard thuds. Both hands grip the lid and lift it straight up slowly, revealing the foil sachets nestled inside.
4–9s — Sachet pull: One hand reaches in and slowly draws out a single magnesium sachet, holds it at center frame, rotates it gently so the foil catches the warm light. The puresport wordmark and the magnesium product name face the lens.
9–13s — Pour ritual: The sachet is torn open at the corner (satisfying crisp tear sound), tipped gently over the ceramic plate so a small mound of magnesium powder pours out, then placed beside it.
13–15s — Final: Hands withdraw. Hold the final composition — open box at top of frame, single sachet, small powder mound on the plate, warm light catching the wood grain.
Cozy ASMR unboxing aesthetic for Xiaohongshu / TikTok. Crisp amplified ASMR sounds — cardboard tap, lid lift, foil sachet handled, sachet tear, powder pour, sachet placed on wood. No music. Pure ASMR sounds only. Warm natural daylight. Slow, satisfying, tactile. No text overlays, no filters, no studio lighting. The phone, camera, and any mirror reflection of a phone or hands holding a phone must never be visible.@Image1 always = headshot. For styled: @Image2 = styled body, @Image3 = product. For unstyled: @Image2 = product.product-ugc/ subfolder — multiple brands run independently.product-ugc-spec.json (including prompt) and re-run the script directly.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.