Update to Higgsfield
Snapshot Sep 30, 2026 · 23:18 UTC · version 2.1.0
Collection source: not recorded for this historical snapshot. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Supporting file metadata differs
Newly listed paths: agents/openai.yaml. This compares saved file lists, not package contents; a different collection source can change the list.
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Supporting files
[{"relative_path":"references/product-intake.md","size_in_bytes":6573},{"relative_path":"references/subtitles.md","size_in_bytes":5461},{"relative_path":"references/ugc-product-boards.md","size_in_bytes":61112},{"relative_path":"referenc...
[{"relative_path":"agents/openai.yaml","size_in_bytes":207},{"relative_path":"references/product-intake.md","size_in_bytes":6573},{"relative_path":"references/subtitles.md","size_in_bytes":5461},{"relative_path":"references/ugc-product-b...
Compare saved observations
Download comparison JSONFull technical diff · 1 changed fields
changed /included_files
[
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6573
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5461
},
{
"relative_path": "references/ugc-product-boards.md",
"size_in_bytes": 61112
},
{
"relative_path": "references/ugc-product-clip-prompt.md",
"size_in_bytes": 57621
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 207
},
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6573
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5461
},
{
"relative_path": "references/ugc-product-boards.md",
"size_in_bytes": 61112
},
{
"relative_path": "references/ugc-product-clip-prompt.md",
"size_in_bytes": 57621
}
]Full snapshot data
{
"description": "Produce a finished product-only UGC video with off-screen voiceover; a person may appear only as auxiliary hands, cropped body, or POV. Require UGC or casual creator-style intent together with product-only, no creator on camera, no talking head, or product-as-hero framing. Product-only or faceless framing alone does not qualify a generic commercial. Exclude silent or no-narration requests even when labeled UGC; use ordinary video generation instead. Its off-screen voice is native Seedance audio: do not activate narrator or call separate audio-generation tools. Missing product or duration is an intake gap. Do not use for creator-led reviews, unboxings, tutorials, try-ons, SaaS or website walkthroughs, generic ads, scripts, or footage edits.\n",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 207
},
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6573
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5461
},
{
"relative_path": "references/ugc-product-boards.md",
"size_in_bytes": 61112
},
{
"relative_path": "references/ugc-product-clip-prompt.md",
"size_in_bytes": 57621
}
],
"name": "ugc-product-video",
"skill_md_contents": "---\nname: ugc-product-video\ndescription: >\n Produce a finished product-only UGC video with off-screen voiceover; a person\n may appear only as auxiliary hands, cropped body, or POV. Require UGC or casual\n creator-style intent together with product-only, no creator on camera,\n no talking head, or product-as-hero framing. Product-only or faceless framing\n alone does not qualify a generic commercial. Exclude silent or no-narration\n requests even when labeled UGC; use ordinary video generation instead. Its\n off-screen voice is native Seedance audio: do not\n activate narrator or call separate audio-generation tools. Missing product or\n duration is an intake gap. Do not\n use for creator-led reviews, unboxings, tutorials, try-ons, SaaS or website\n walkthroughs, generic ads, scripts, or footage edits.\n---\n\n## Activation analytics\n\nWhen using this skill for a new user request, call `track_skill_activation` once with `{\"skill_name\":\"ugc-product-video\"}` at the earliest opportunity that preserves widget-first and exclusive-tool turns; defer to a later turn when required. Do not repeat for polling, retries, references, or continuation of the same request. If tracking is unavailable or fails, continue the task without retrying. Send only the skill name.\n\n# UGC product video\n\nProduce one hosted 9:16 MP4. The product is the hero; any visible person stays\nauxiliary and silent. Each board is a 21:9 sheet of four vertical 9:16 slots;\none Seedance clip turns those slots into four internal hard cuts.\n\n## Runtime contract\n\n- Use only tools exposed by the current OpenAI host and Higgsfield MCP.\n- Use `ask_user_input` when exposed, `ask_user_input_v3` only when that exact\n variant is exposed, otherwise one concise normal-chat question. Never use\n legacy elicitation names.\n- Import each ChatGPT attachment once with `media_upload_and_confirm` and keep\n the returned `media_id`; do not call `media_confirm` afterward.\n- Authorized HTTPS images may seed image generation directly. Before video\n generation, convert an HTTPS product image once into a confirmed Higgsfield\n image UUID: reserve with `media_upload`, download and PUT it inside\n `sandbox_exec`, then call `media_confirm`.\n- Run downloads, ffmpeg, Python, probing, transcription, assembly, and uploads\n only through `sandbox_exec`, never through a client-local shell.\n- For a sandbox-created output, reserve its upload with `media_upload` before\n the producing command, PUT it in that same command, and call `media_confirm`\n only after HTTP 200. Never give a sandbox path to\n `media_upload_and_confirm`.\n- Workflow scripts are preinstalled at\n `$HF_WORKFLOWS/ugc-product-video/scripts/` inside the sandbox.\n- Use `generate_image_batch` and `generate_video_batch`. Each request is\n `{index, params}`, `params.count` is `1`, and each call contains at most six\n requests. Keep indices stable across retries.\n- Wait with `jobs_wait` in groups of at most eight and\n `timeout_seconds:15`. Poll only active or retryable lookup-failed jobs; never\n use a legacy singleton status tool.\n- Never pass `submission_failed` entries without job IDs to `jobs_wait`.\n Retry only rejected or failed indices.\n- An `unlim_choice` result submitted nothing. Ask its message and resubmit the\n unchanged request with the user's `use_unlim` choice.\n- Never replace a locked model because it is unavailable. Report the\n incompatible slug and stop that phase.\n\n## Hard rules\n\n- Off-screen speech is part of this workflow's scope. For a silent/no-narration\n ad, route to ordinary video generation rather than adapting this workflow.\n- A real product reference is required. Never invent or substitute one.\n- Product is the hero in every slot. A person may be absent, hands-only,\n cropped, or POV, but never identity-locked or the focal subject.\n- Voiceover only: no on-camera dialogue, lip-sync, greeting, or speaking mouth.\n- Native Seedance speech only. Do not load or activate `narrator`; never call\n `generate_audio` or `generate_audio_batch`, and never assemble a separate TTS\n track over these clips.\n- Generate boards sequentially; submit ready clips in grouped batch calls only\n after every clip prompt is written.\n- Run the de-slop pass on every board. Never send a raw board to video unless\n both permitted Seedream attempts fail.\n- Never bake text into generation. Add optional hook/subtitles only after the\n final video exists.\n- Default to English voiceover with an American accent unless explicitly\n changed.\n- Hide models, job IDs, internal phases, and intermediate mechanics.\n\n## Duration and arc\n\n| Total duration | Boards | Clip durations |\n| --- | ---: | --- |\n| 4–15s | 1 | total duration |\n| 16–19s | 2 | balance both to at least 4s; e.g. 18 → 14+4 |\n| 20–30s | 2 | 15, remainder |\n| 31–45s | 3 | 15, 15, remainder |\n| 46–60s | 4 | 15, 15, 15, remainder |\n| >60s | ceil(D/15) | 15 each, final clip at least 4s |\n\nBoard 1 always uses `PRODUCT-INTRO → PRODUCT-DEMO-A → PRODUCT-DEMO-B →\nPRODUCT-RESULT`. Later boards continue with materially different product-demo\nangles, conditioned on the cleaned previous board.\n\n## Phase 0 — Intake\n\nParse the product photo or product-page URL, duration, requested language and\naccent, approved claims, music request, and explicit setting or demo overrides.\nAsk only for missing product and duration, bundled once. Offer 10s, 15s, 30s,\nand 45s for duration. Never ask about models, aspect ratios, resolution, boards,\naudio, batching, identity, or transitions.\n\nDo not start paid generation until product and duration are resolved. The later\ntext/post-package choice is the only sanctioned second ask.\n\n## Phase 1 — Normalize the product\n\nRead `references/product-intake.md` and follow it exactly. Resolve once:\n\n- `product_reference`: confirmed attachment ID or authorized HTTPS hero image\n for image stages;\n- `product_video_reference`: confirmed Higgsfield image UUID for Seedance;\n- canonical `product_description`, including mechanics, hand-relative scale,\n visible side, absent features, label treatment, and one imperfection;\n- `tier`, `category`, and `voice_gender`.\n\nReuse these values verbatim. Never infer price, invent claims, or replace a\nblocked product page with stock or generated imagery.\n\n## Phase 2 — Write the voiceover\n\nWrite off-screen voiceover only. Use roughly 12–20 words for ≤10s, 20–28 for\n11–12s, and 28–35 for 13–15s. Split the total into one segment per board and\nfour beat-sized phrases per segment. Use sensory or mechanical specifics, not\ngeneric praise. Remove greetings, repeated ideas, AI-tell phrases, and\nunsupported claims. When an approved-claims list exists, preserve only exact\nallowlisted strings.\n\nSave the exact script as `output/script.txt` in the later assembly command.\n\n## Phase 3 — Generate boards sequentially\n\nRead `references/ugc-product-boards.md`. For K=1..N, write the complete prompt\nand submit one stable-index request:\n\n```json\n{\"requests\":[{\"index\":1,\"params\":{\"model\":\"gpt_image_2\",\"prompt\":\"<board prompt>\",\"count\":1,\"aspect_ratio\":\"21:9\",\"resolution\":\"2k\",\"quality\":\"high\",\"medias\":[{\"value\":\"<product_reference>\",\"role\":\"image\"}]}}]}\n```\n\nFor K>1 append the cleaned previous-board job ID as the final `image` media and\nmatch every `@ImageN` declaration to media order. Wait until terminal before\ncontinuing.\n\n### Mandatory de-slop pass\n\nFor every raw board, take the completed `result_url` returned by `jobs_wait` and\nsubmit one `generate_image_batch` request using `seedream_v5_pro`, that HTTPS\nresult URL with canonical role `image`, `aspect_ratio:\"21:9\"`, `resolution:\"2k\"`,\nand this exact prompt:\n\n> KEEP EXACTLY the framing, composition, slot layout, camera distances, poses,\n> subjects and product of this horizontal storyboard sheet and every one of its\n> side-by-side vertical slots — no reframe, no zoom, no crop, no re-layout, no\n> change to the scene, to any person's face / hair / body, or to the product\n> design. CHANGE ONLY micro-realism, applied identically in every slot:\n> true-to-life pore-level skin with natural texture and fine vellus hair, real\n> material detail, even natural daytime light with gentle highlight roll-off and\n> faint true sensor noise, a flat authentic iPhone photo, deep focus. PRESERVE\n> each face's exact shape / width / proportions 1:1 — do NOT squeeze / narrow /\n> slim / stretch any face. AVOID AI-slop: waxy plastic skin, airbrushed poreless\n> skin, beauty-filter smoothing, over-saturation, HDR glow / bloom / halos,\n> oversharpening, teal-orange grade, shallow depth of field, bokeh, cinematic /\n> DSLR look. Keep the product blank / unbranded, no added text, no watermark, no\n> baked slot labels.\n\nThe OpenAI generation route imports that URL as a concrete `media_input` and\nnormalizes the generic image role to Seedream's `image_references` wire field.\nNever pass the raw board job ID to this i2i call.\n\nReplace the board pair with the cleaned job ID and URL. On moderation failure,\nretry once with `seedream_v5_lite`; then retain the raw board rather than stall.\n\n## Phase 4 — Write and submit clips\n\nRead `references/ugc-product-clip-prompt.md`. Write every clip prompt before\nsubmitting video. Carry K, N, duration, arc role, voiceover segment,\n`voice_gender`, product description, board reference, and approved claims.\n\nRequire `product_video_reference` to be a confirmed UUID. Submit clips with\n`generate_video_batch`, stable K indices, at most six per call:\n\nBefore the first submission, assert all three native-audio locks together:\n`model:\"seedance_2_5\"`, `mode:\"omni_reference\"`, and\n`generate_audio:true`. If any is absent, fix the video request; do not route to\n`narrator` or compensate with a separate audio call.\n\n```json\n{\"requests\":[{\"index\":1,\"params\":{\"model\":\"seedance_2_5\",\"prompt\":\"<clip prompt>\",\"count\":1,\"aspect_ratio\":\"9:16\",\"resolution\":\"1080p\",\"duration\":15,\"mode\":\"omni_reference\",\"generate_audio\":true,\"medias\":[{\"value\":\"<clean_board_job_id>\",\"role\":\"image\"},{\"value\":\"<product_video_reference>\",\"role\":\"image\"}]}}]}\n```\n\nSeedance 2.5 renders native voiceover with `mode:\"omni_reference\"` and\n`generate_audio:true`; never call `generate_audio`. Wait for all\nclips. Retry only failed indices and replace their prior job IDs.\n\n## Phase 5 — Frozen-frame QA\n\nBefore assembly, inspect evenly spaced frames and every product close-up.\nRequire exactly one hero product; at most two hands per person; consistent\nmechanism, scale, cap/button/prop state, and absent features; no gibberish,\nmirrored, or unrelated branding; no baked text. Fix and rerun only the failed\nclip.\n\n## Phase 6 — Assemble and export\n\nFor N=1, the accepted clip URL is final. For N≥2, reserve `final.mp4`, then use\none `sandbox_exec` command to download clips in stable K order, create an\nexplicit concat manifest, concatenate with hard cuts and stream copy, verify\nwith `ffprobe`, and PUT to the reserved upload URL:\n\n```bash\nffmpeg -f concat -safe 0 -i clips.txt -c copy output/final.mp4\n```\n\nAfter HTTP 200, call `media_confirm` with `type:\"video\"`. For a detached-command\ndeadline, use bounded foreground calls that each finish within the current\nlimit; never use `nohup`.\n\n## Phase 7 — Optional text and delivery\n\nIf unanswered, ask once for `Subtitles`, `Hook`, `Both`, or `No text` (default),\nplus whether a post package is wanted. Read `references/subtitles.md` for text.\nUse word-level timing from final audio, never planned beats.\n\nReturn exactly one confirmed hosted video URL and total duration. If requested,\nadd a chat-only post package: caption, 3–5 hashtags, pinned first comment, and\nloop note. Never burn the post package into video.\n\n## References\n\n- `references/product-intake.md`: product normalization\n- `references/ugc-product-boards.md`: four-slot 21:9 board prompt\n- `references/ugc-product-clip-prompt.md`: four-cut Seedance prompt\n- `references/subtitles.md`: optional transcript-timed text burn\n\nNever load sibling UGC references; their creator, unboxing, tutorial, try-on,\nand website contracts conflict with this product-only skill.\n"
}SHA-256 of public snapshot: d63f2cdbdcf82372b03928b4750e561668978094838be81e733f277ad033c861