ugc — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited 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.
Two-stage workflow:
Output saved to ./brands/[brand-name]/ugc/[output-name]/.
Scan ./brands/ for subfolders that contain a brand-identity/visual-guidelines.md file.
/brand firstAsk: "Would you like to use a styled model (specific outfit applied) or an unstyled model (plain casting neutral wardrobe)?"
If styled: list available outputs from ./brands/[brand-name]/styled/:
Available styled models:
• jade-cloudmerino-tshirt
• marcus-techsilk-shortsRead brands/[brand-name]/styled/[name]/style-spec.json to get model_dir.
If unstyled: list available models from ./brands/[brand-name]/models/:
Available models:
• jade
• marcus-02If neither folder has completed outputs:
"No models found for [brand]. Use/modelto create one first. If you want a specific outfit, also run/style."
Ask for all in one message:
Variable 1 — Action: "What is the model doing? (e.g. standing, sitting at a café, walking down a street, leaning against a wall)"
Variable 2 — Location: "Where are they? Describe the environment in detail. (e.g. a busy urban high street with bokeh traffic in the background, a sunlit café terrace in Paris, a graffiti-covered alley at golden hour)"
Variable 3 — Outfit (unstyled models only): "What are they wearing? Describe the full outfit. (e.g. a black oversized hoodie, dark jeans, white sneakers)"
Skip Variable 3 for styled models — outfit is locked to the styled image.
Derive a slug from the model name and a short descriptor:
jade-paris-cafemarcus-urban-walkhero-golden-hourAsk the user to confirm or rename.
Create the output folder and write the spec:
brands/[brand-name]/ugc/[output-name]/
ugc-spec.jsonugc-spec.json — styled model:
{
"output_name": "jade-paris-cafe",
"brand": "[brand-name]",
"model_type": "styled",
"model_dir": "brands/[brand-name]/models/jade",
"styled_dir": "brands/[brand-name]/styled/jade-cloudmerino-tshirt",
"action": "sitting at an outdoor café table, leaning slightly forward",
"location": "A sunlit café terrace in Paris, warm afternoon light, blurred street and pedestrians behind",
"outfit": "must perfectly match image 2"
}ugc-spec.json — unstyled model:
{
"output_name": "marcus-urban-walk",
"brand": "[brand-name]",
"model_type": "unstyled",
"model_dir": "brands/[brand-name]/models/marcus",
"styled_dir": null,
"action": "walking down a street, mid-stride",
"location": "Busy urban high street, motion-blurred cars and shop fronts in background",
"outfit": "A black oversized hoodie, dark jeans, white sneakers"
}Run from the project root:
python3 skills/references/generate-ugc.py brands/[brand-name]/ugc/[output-name] --imageReference images passed in order:
brands/[brand-name]/models/[name]/headshot.png — identitybrands/[brand-name]/styled/[name]/[name]_v{n}.png — outfit (script auto-detects the latest version)Cost: ~$0.12
Tell the user the exact path where the file was saved, e.g.: brands/[brand-name]/ugc/[output-name]/[output-name]_v1.png
Ask: "Happy with this image? You can:
If more than one version exists when the user is ready to continue, ask which they want to use for the video.
To regenerate:
python3 skills/references/generate-ugc.py brands/[brand-name]/ugc/[output-name] --imageOnce the user is happy with the image, ask:
Script: "What should they say in the video? Paste the script."
Voice and delivery notes: "Any notes on accent, tone, pace, or energy? (e.g. 'Australian accent, upbeat and conversational', 'calm and authoritative, slight American accent')"
Duration: "How long? Options: 4s, 6s, or 8s (Veo 3.1 Fast only supports these three values)"
Before writing the final Veo prompt, read skills/references/shlabu-realism.md and apply its principles to the way you frame the script + delivery prompt. The Veo-specific suffix in that reference is paste-ready and should be appended to the delivery notes for any selfie/UGC clip aiming for "raw iPhone" realism.
Key levers for UGC video (full reference for context):
Add video fields to the existing spec:
{
...existing fields...,
"script": "I've been obsessed with this tee all summer. It's the CloudMerino 66 from Satisfy — lightweight, breathable, and it just feels incredible.",
"voice_notes": "Australian accent, relaxed and genuine, like talking to a friend. Not salesy.",
"duration": "8"
}Run from the project root:
python3 skills/references/generate-ugc.py brands/[brand-name]/ugc/[output-name] --videoUploads ugc-image.png to FAL, combines script + voice notes as the prompt, calls Veo 3.1 Fast at 9:16 1080p.
Cost: ~$0.60 for 4s · ~$0.90 for 6s · ~$1.20 for 8s at 1080p with audio.
Tell the user the exact path where the video was saved, e.g.: brands/[brand-name]/ugc/[output-name]/[output-name]-video.mp4
Ask: "Happy with the video? Or would you like to regenerate, adjust the script, or change the delivery notes?"
To regenerate video:
python3 skills/references/generate-ugc.py brands/[brand-name]/ugc/[output-name] --videoTo run image + video together:
python3 skills/references/generate-ugc.py brands/[brand-name]/ugc/[output-name] --image --videougc/ subfolder — multiple brands can run independent UGC workflows in the same projectgenerate_audio: true is set — Veo 3.1 Fast generates audio alongside the video~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.