← MorphixCONTENT HISTORY

Update to Morphix

Snapshot Sep 30, 2026 · 22:47 UTC · version 1.2.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "ugc-video",
  "description": "Produce a creator-style video ad for a product, shot the way a real customer would film it rather than like a commercial. Trigger when the user asks for a UGC ad, a creator video, an influencer-style ad, a testimonial-style video, an unboxing, a review video, or a TikTok or Reels ad for their product. Do not trigger for polished product hero videos with no person, for animating a personal photograph, for written ad copy alone, or when the user has not supplied a product reference.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 1062
    }
  ],
  "skill_md_contents": "---\nname: ugc-video\ndescription: Produce a creator-style video ad for a product, shot the way a real customer would film it rather than like a commercial. Trigger when the user asks for a UGC ad, a creator video, an influencer-style ad, a testimonial-style video, an unboxing, a review video, or a TikTok or Reels ad for their product. Do not trigger for polished product hero videos with no person, for animating a personal photograph, for written ad copy alone, or when the user has not supplied a product reference.\n---\n\n# UGC Video\n\nProduce a short vertical video that reads as filmed by a customer on a phone, not produced by an agency.\n\n## Morphix tool contract\n\nThese are the tools available and the order they run in. Follow it exactly.\n\n**Getting the user's image in.** Chat attachments cannot be passed to generation. When a reference is needed, call show_upload_widget, which shows a drop box and returns an asset id once the user uploads. Never call upload_asset directly. If the user uploaded something earlier in the conversation, call get_assets and reuse that asset id rather than asking again.\n\n**Before spending credits.** Call explore_models to choose a model for this job, and get_account to confirm the user has credits. Both are read-only and free. Choosing a model blind, or starting a generation the user cannot pay for, are the two most common wasted turns.\n\n**Choosing a model.** Never hardcode a model name. Read the capabilities returned by explore_models and pick for the job at hand: reference fidelity when the result is anchored to a supplied image, text handling when legible type matters, motion quality for video, voice range for audio.\n\n**Generating.** generate_image and generate_video accept asset ids to edit or reference existing images, including image-to-video. generate_audio takes the script plus a voice chosen through explore_models. Each spends credits and renders a live view that polls itself, so never poll manually and never tell the user you will check back.\n\n**Retry spends again.** A regeneration costs credits a second time. The quality gate in this skill allows one automatic retry. Beyond that, say what is wrong and let the user decide.\n\n**Finishing.** upscale_image and upscale_video raise an existing asset. Offer these instead of regenerating at a larger size.\n\n**Recovering work.** get_assets lists the library newest first. get_generations fetches a generation by id. Use them to pick up earlier work instead of remaking it.\n\n## What makes this different from a product video\n\nA product video sells through craft: controlled light, clean surfaces, deliberate camera. A UGC video sells through the absence of craft. Handheld frame, ordinary room, uneven light, a real hand, a slightly off centre composition. If it looks produced, it fails as UGC.\n\nNever apply studio lighting, never centre the product perfectly, never use a locked tripod frame, never grade it cinematically.\n\n## Product Lock\n\nThe product from the reference is immutable: shape, proportion, colour, material, label geometry, typography, logo, printed text. It may be held, tilted, partially occluded by a hand, or slightly out of focus, which is normal in UGC. It may never be redesigned.\n\nIf label text is unreadable in the reference, let the hand or the angle hide that face. Never reconstruct it.\n\n## People\n\nAny person is auxiliary. Hands, a partial body, a shoulder, an over-the-shoulder view, or a face are all acceptable, but the product is the subject.\n\nNever depict a real, identifiable person unless the user supplies their own photo and says it is them. Never imply a specific real person endorses the product. Generated people are fictional and must not resemble a public figure.\n\nNever state or imply that the video shows a real customer, a real review, or a real result. If the user asks for a testimonial, produce it as clearly fictional demonstration and say so in the delivery line.\n\n## Claims\n\nWrite no claim the user has not given you. No statistics, no before and after results, no medical, financial, or performance outcomes, no superlatives about the product. If the user supplies approved claims, use only their exact wording.\n\n## Intake\n\nAsk once, bundled: the product reference; the duration; the format, meaning whether they want spoken voiceover, on-screen captions, or neither; and any approved claims. Offer eight, fifteen and thirty seconds.\n\n## Structure\n\nWrite the beats before generating anything.\n\n- **Hook**, first two seconds. A problem stated, an unexpected visual, or the product already in hand. Never a greeting, never a logo, never a title card.\n- **Context**, the ordinary setting that makes it believable.\n- **Demonstration**, the product being used, held, opened, applied, or worked with.\n- **Close**, the result or the reason to act.\n\nFor durations above fifteen seconds, plan two or three short shots rather than one long take. Long single takes drift and break the product.\n\n## Look\n\nVertical nine-by-sixteen. Handheld micro-shake. Mixed domestic light, such as a window plus a lamp, not a softbox. Real background clutter, kept mild. Shallow phone-style depth rather than cinema bokeh. Slight overexposure or a mild colour cast is an asset here, not a defect.\n\n## Audio and captions\n\nCheck explore_models for a video model that generates native speech. If one exists, use it and write the spoken lines in the prompt.\n\nIf none is available, say so plainly, deliver the video without speech, and produce the voiceover separately with generate_audio, returning both plus the script. There is no tool to combine them, so tell the user they will need to lay the track over the clip in their editor. Never imply the delivered file contains narration it does not.\n\nCaptions are not generated into the video. Text baked by an image or video model garbles. Deliver the caption text alongside so the user adds it in their editor.\n\n## Execute\n\nCall generate_video with the product asset id as reference, nine-by-sixteen.\n\n## Quality gate\n\nReject if the product changed shape, colour, or label; if the result looks studio-lit or tripod-shot; if a hand shows the wrong number of fingers; if a person dominates over the product; if generated text appears in frame; or if a second product appears.\n\nRegenerate once, moving further toward ordinary and handheld.\n\n## Deliver\n\nReturn the video, the script if one was written, and the caption text if requested. State plainly that any person shown is fictional and that the video is a concept demonstration, not a real customer testimonial.\n\n## Stop conditions\n\n| Condition | Response |\n|---|---|\n| No product reference | Call show_upload_widget and wait |\n| User asks for a real testimonial or real results | Offer a clearly labelled fictional demonstration instead |\n| User asks for a named real person or lookalike | Decline in one sentence |\n| User supplies claims you cannot verify | Write around them, say what was left out |\n| Quality gate fails twice | Deliver the most believable take and say what drifted |\n"
}

SHA-256: f9dca5bfe35902f50412c3ae197d09710eb2d53a0d7a588bbb7deb37e190e49d