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/monologue-craft.md","size_in_bytes":13340},{"relative_path":"references/product-intake.md","size_in_bytes":6391},{"relative_path":"references/subtitles.md","size_in_bytes":5521},{"relative_path":"references/...
[{"relative_path":"agents/openai.yaml","size_in_bytes":262},{"relative_path":"references/monologue-craft.md","size_in_bytes":13340},{"relative_path":"references/product-intake.md","size_in_bytes":6391},{"relative_path":"references/subtit...
Compare saved observations
Download comparison JSONFull technical diff · 1 changed fields
changed /included_files
[
{
"relative_path": "references/monologue-craft.md",
"size_in_bytes": 13340
},
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6391
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5521
},
{
"relative_path": "references/ugc-board.md",
"size_in_bytes": 57628
},
{
"relative_path": "references/ugc-character.md",
"size_in_bytes": 64252
},
{
"relative_path": "references/ugc-clip.md",
"size_in_bytes": 61971
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 262
},
{
"relative_path": "references/monologue-craft.md",
"size_in_bytes": 13340
},
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6391
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5521
},
{
"relative_path": "references/ugc-board.md",
"size_in_bytes": 57628
},
{
"relative_path": "references/ugc-character.md",
"size_in_bytes": 64252
},
{
"relative_path": "references/ugc-clip.md",
"size_in_bytes": 61971
}
]Full snapshot data
{
"name": "ugc-review-video",
"description": "Produce a finished brand-authorized UGC-style talking-head video in which one consenting adult or generated adult creator demonstrates a product or delivers user-supplied copy. Use for explicit UGC, creator-video, TikTok-style product showcase, or review-style requests that can be rendered without fabricated experience or endorsement; a product is optional, while a missing duration is an intake gap. Do not use for testimonials, impersonation, product-only ads without an on-camera speaker, off-screen voiceover, unboxing-led videos, step-by-step tutorials, try-ons, SaaS or website walkthroughs, generic ads, script-only requests, or edits of existing footage.\n",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 262
},
{
"relative_path": "references/monologue-craft.md",
"size_in_bytes": 13340
},
{
"relative_path": "references/product-intake.md",
"size_in_bytes": 6391
},
{
"relative_path": "references/subtitles.md",
"size_in_bytes": 5521
},
{
"relative_path": "references/ugc-board.md",
"size_in_bytes": 57628
},
{
"relative_path": "references/ugc-character.md",
"size_in_bytes": 64252
},
{
"relative_path": "references/ugc-clip.md",
"size_in_bytes": 61971
}
],
"skill_md_contents": "---\nname: ugc-review-video\ndescription: >\n Produce a finished brand-authorized UGC-style talking-head video in which one\n consenting adult or generated adult creator demonstrates a product or delivers\n user-supplied copy. Use for explicit UGC, creator-video, TikTok-style product\n showcase, or review-style requests that can be rendered without fabricated\n experience or endorsement; a product is optional, while a missing duration is\n an intake gap. Do not use for testimonials, impersonation, product-only ads\n without an on-camera speaker, off-screen voiceover, unboxing-led videos,\n step-by-step tutorials, try-ons, SaaS or website walkthroughs, generic ads,\n script-only requests, or edits of existing footage.\n---\n\n## Activation analytics\n\nWhen using this skill for a new user request, call `track_skill_activation` once with `{\"skill_name\":\"ugc-review-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 review video\n\nProduce one hosted 9:16 MP4. Keep one creator identity through every board and\nclip. Each board is a 21:9 sheet of eight vertical 9:16 slots; one video clip\nturns those slots into eight internal hard cuts.\n\n## Runtime contract\n\n- Use only tools exposed by the current OpenAI host and Higgsfield MCP surface.\n- Use `ask_user_input` when the host exposes that exact callable. Use\n `ask_user_input_v3` only when that exact variant is exposed. Otherwise ask one\n concise normal-chat question. Never use a legacy elicitation name or Codex's\n plan-only question mechanism as a ChatGPT substitute.\n- For each ChatGPT attachment, call `media_upload_and_confirm` once with the\n supplied file object. Keep its returned `media_id`; do not call\n `media_confirm` afterward.\n- Authorized HTTPS image URLs may be passed directly in `medias[].value`; the\n OpenAI generation tools import and confirm them automatically. Reuse the\n exact URL or returned confirmed ID. Do not invent a separate import tool.\n- Run ffmpeg, Python, downloads, probes, transcription, assembly, and uploads\n only through `sandbox_exec`, never a client-local shell.\n- For a sandbox-created output, call `media_upload` before the producing\n `sandbox_exec`, PUT the file to its `upload_url` in that same sandbox command,\n and call `media_confirm` only after HTTP 200. Never pass a sandbox path to\n `media_upload_and_confirm`.\n- Workflow scripts are preinstalled at `$HF_WORKFLOWS/ugc-review-video/scripts/` inside\n the sandbox. Run them from there; do not expect plugin-local scripts.\n- Use `generate_image_batch` and `generate_video_batch` for headless workflow\n stages. Each request is `{index, params}`, `params.count` is `1`, and one call\n contains at most six requests. Keep stable indices across retries.\n- Wait on returned `{index, job_id}` pairs with `jobs_wait` in groups of at most\n eight and `timeout_seconds:15`. If `all_terminal:false`, wait the returned\n `poll_after_seconds` and poll only active or retryable lookup-failed jobs.\n Freeze completed indices. Never poll jobs through a legacy singleton status\n tool.\n- Never pass a batch `submission_failed` entry without a `job_id` to\n `jobs_wait`. Retry only rejected or failed indices, never the whole stage.\n- `unlim_choice` means no job was submitted. Ask its message and resubmit the\n unchanged request with the user's `use_unlim` choice; never choose for them.\n- Do not substitute a different model when a locked model is unavailable.\n Report the incompatible slug and stop that phase.\n\n## Hard rules\n\n- Use one `character_media_id` for every board and clip. Never regenerate it\n mid-run or replace it with an inline description.\n- Generate boards sequentially; generate ready clips through grouped batch\n calls only after every clip prompt is written.\n- Never bake text into generation. Burn text only after render and only when\n the user opted in.\n- Run the de-slop pass on every board. Never send a raw `gpt_image_2` board to\n video unless both allowed Seedream attempts fail.\n- Default to English speech with an American accent unless explicitly changed.\n- When a product is present, never greet or reintroduce it after board 1; later\n segments continue mid-thought.\n- Hide model names, job IDs, internal phases, and intermediate mechanics from\n the user.\n\n## Safety and truth gate — before intake or generation\n\nIf any item below fails, do not generate and do not route around the gate:\n\n- **Creator authorization:** use only a generated adult age 21+ or a consenting\n adult non-public person whose image the user is authorized to use. A supplied\n photo is not permission to impersonate its subject. If third-party consent is\n unclear, ask once; decline public figures, celebrities, minors, and deceptive\n identity use. Never clone or imitate a supplied person's voice.\n- **Allowed promotion:** decline political persuasion and promotion of prohibited\n or age-restricted goods or services, including adult sexual content, products,\n or services; gambling; illegal or regulated drugs, drug paraphernalia, and\n prescription medication; tobacco or nicotine; weapons, explosives, or harmful\n materials; counterfeit or illicit goods; extremist goods; deceptive or\n high-risk financial services; malware or spyware; fraud; and covert\n surveillance. A neutral educational mention is not a product promotion and\n belongs outside this workflow.\n- **Truthful claims:** `approved_claims` is the complete allowlist of product\n claims supplied by the user. Preserve each allowed claim verbatim; never\n strengthen, combine, infer, or derive another claim. With no allowlist, create\n claim-free copy about visible materials, controls, application, packaging, and\n other directly observable mechanics.\n- **No synthetic testimonials:** a generated creator is a host or demonstrator,\n never a real customer. Do not invent purchase, ownership, use, results,\n before/after outcomes, ratings, reviews, social proof, relationships, or lived\n experience. First-person experience is allowed only when a consenting user\n supplies the exact script and confirms it describes their own experience.\n- **Transparent framing:** describe product-present output as a brand demo,\n creator concept, or sponsored creative—not an organic customer review. When a\n post package is requested, include an appropriate ad/sponsorship disclosure.\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\nAssign board roles as follows:\n\n- N=1: `FULL_ARC` (HOOK → MAIN → CLOSER).\n- N=2: `HOOK+SETUP`, then `APPLY+CLOSER`.\n- N=3: `HOOK`, `MAIN`, `CLOSER`.\n- N=4: `HOOK`, `REVEAL`, `APPLY`, `CLOSER`.\n- N>4: `HOOK` first, `CLOSER` last, `REVEAL`/`APPLY` between.\n\n## Phase 0 — Intake\n\nAfter the safety and truth gate passes, parse an optional product photo or URL,\nduration, creator photo or requested gender, and\nexplicit overrides for location, hair, ethnicity, outfit register, mood, props,\nlanguage, accent, music, `approved_claims`, and on-video text.\n\nClassify specificity:\n\n- `auto`: 1–5 words with no scenario; choose the complete treatment.\n- `guided`: 1–3 sentences of tone or rough flow; preserve that direction.\n- `director`: 4+ sentences, scenario, shot list, or location sequence; map the\n supplied beats one-to-one to slots.\n\nAsk only for real gaps, bundled into one question: duration (offer 10s, 15s,\n30s, 45s) and creator photo/gender when absent. Never ask for a product merely\nbecause none was supplied; lock `product_reference:null` and\n`product_description:null` and continue with creator-led, scenario-driven UGC. Include\nan accent or physical quirk option only when the brief already signals origin or\ndeliberately unusual character energy. Never ask about locked models, aspect\nratios, boards, resolution, audio, batching, or identity training.\n\nDo not start paid generation until the required creator input and duration are\nresolved. The later text/post-package choice is the only sanctioned second ask.\n\n## Phase 1 — Normalize the optional product\n\nIf a product photo or URL was supplied, read `references/product-intake.md` and\nfollow it exactly. Resolve once:\n\n- `product_reference`: confirmed attachment `media_id` or authorized HTTPS hero\n image URL;\n- canonical `product_description`;\n- `tier`: `luxury`, `premium`, or `drugstore` from visual packaging cues only;\n- `category` and exact usage/opening mechanic.\n- `approved_claims`: exact user-supplied strings, or an empty list.\n\nReuse those values verbatim downstream. Never infer price, invent claims or\ncreator experience, or\nreplace a blocked/thin product page with a stock or generated product. If no\nproduct was supplied, skip the reference, keep both product fields null, and\nuse the no-product branches in `ugc-board.md`, `ugc-clip.md`, and monologue craft.\n\n## Phase 2 — Lock the creator\n\nIf the safety gate established that the user is authorized to use an attached\ncreator photo, call `media_upload_and_confirm` with `type:\"image\"`, save its\n`media_id` as `character_media_id`, and do not ask for confirmation again.\n\nOtherwise read `references/ugc-character.md`, resolve the required variety rolls\nand creator prompt, then submit one headless image request:\n\n```json\n{\"requests\":[{\"index\":0,\"params\":{\"model\":\"soul_2\",\"prompt\":\"<creator prompt>\",\"count\":1,\"aspect_ratio\":\"3:4\",\"quality\":\"2k\"}}]}\n```\n\nWait with `jobs_wait` until terminal. On success save the returned `job_id` and\n`result_url` as `character_media_id` and `character_url`. This identity is a\nmandatory board input. Keep wardrobe fixed unless the story explicitly changes\ncontext.\n\n## Phase 3 — Write the monologue\n\nRead `references/monologue-craft.md`. Preserve only allowlisted user-supplied\nclaims and the requested tone; never invent the creator's history or experience.\napply its density, hook, persona, story-shape, accent, and anti-slop rules. Split\nthe final monologue into N board segments. Save the exact full text to\n`output/script.txt` in the later sandbox assembly command; if a hook plate may be\nburned, also save its headline to `output/hook.txt`.\n\n## Phase 4 — Generate boards sequentially\n\nRead `references/ugc-board.md`. For K=1..N, build the complete board prompt and\nsubmit exactly one `generate_image_batch` request with stable index K:\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\"},{\"value\":\"<character_media_id>\",\"role\":\"image\"}]}}]}\n```\n\nFor K>1 append the cleaned previous board job ID as the final `image` media. If\nthere is no product reference, remove it and renumber every `@ImageN` declaration\nto match the remaining media order. Wait until terminal before continuing.\n\n### Mandatory de-slop pass\n\nFor each completed raw board, take the completed `result_url` returned by\n`jobs_wait` and submit one `generate_image_batch` request using model\n`seedream_v5_pro`, that HTTPS result URL as canonical role `image`,\n`aspect_ratio:\"21:9\"`, `resolution:\"2k\"`, and this prompt:\n\nWhen the run is productless, replace every product-preservation clause in the prompt\nwith `do not introduce any product, package, brand, or sales prop`.\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. Wait until terminal and replace\nthe board pair with the cleaned job ID and URL.\nOn moderation failure retry once with `seedream_v5_lite`; if that also fails,\nretain the raw board and report the degraded fallback internally.\n\n## Phase 5 — Write and submit clips\n\nRead `references/ugc-clip.md`. Write every clip prompt before submitting any\nvideo. Carry K, N, duration, board role, monologue segment verbatim, specificity,\npersona, and board/character/product references.\n\nSubmit clips with `generate_video_batch`, stable index K, and groups of at most\nsix. For N>6, finish one group before submitting the next because the current\nOpenAI surface cannot accept a larger batch. Each request uses:\n\n```json\n{\"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\":\"<character_media_id>\",\"role\":\"image\"},{\"value\":\"<product_reference>\",\"role\":\"image\"}]}}\n```\n\nDrop the product media when absent. Seedance 2.5 produces native speech with\n`mode:\"omni_reference\"` and `generate_audio:true`; never call\n`generate_audio`. Wait for all clips to become terminal. Retry only failed\nindices with the corrected prompt; a successful retry replaces the old job ID at\nthat index.\n\n## Phase 6 — Frozen-frame QA\n\nBefore stitching or displaying clips, inspect evenly spaced frames, every\nproduct close-up when a product is present, and 2–3 mid-word frames. Require:\n\n- when a product is present, exactly one hero product and no clones;\n- at most two hands per person, including mirrors and frame edges;\n- absent features remain absent; cap/button/prop state stays consistent;\n- labels are not gibberish, mirrored, or a different real brand;\n- when a product is present, its scale matches the holding hand;\n- no doubled lip edges, face drift, baked text, or subtitles.\n\nFor a staging failure, correct and rerun only that clip. For lip artifacts, cut\nspoken words first. For baked text, rerun once, then remove it in post. Freeze\nevery accepted index.\n\n## Phase 7 — Assemble and export\n\nFor N=1, the accepted clip URL is the final video URL; do not run a sandbox.\n\nFor N>=2, call `media_upload` first for `final.mp4`. Then run one\n`sandbox_exec` command that downloads accepted clips in stable board order,\nwrites an explicit concat manifest, concatenates with stream copy and hard cuts\nonly, verifies the output with `ffprobe`, and PUTs it to the reserved upload URL:\n\n```bash\nffmpeg -f concat -safe 0 -i clips.txt -c copy output/final.mp4\n```\n\nUse `background:true` for long assembly and poll its `log_path` at least every\n60 seconds without starting a duplicate process. After HTTP 200 call\n`media_confirm` with `type:\"video\"`. If detached execution returns\n`deadline_exceeded`, use bounded foreground calls that each finish within the\ncurrent 120-second maximum; never use `nohup` as a fallback.\n\n## Phase 8 — Optional text and post package\n\nIf the brief did not answer it, ask one bundled delivery question: `Subtitles`,\n`Hook`, `Both`, or `No text` (default), plus whether a post package is wanted.\n\nFor text, read `references/subtitles.md`. Timings must come from a word-level\ntranscript of the final audio, never planned beats. Run the preinstalled scripts\nfrom `$HF_WORKFLOWS/ugc-review-video/scripts/` inside `sandbox_exec`; reserve and upload\n`final_captioned.mp4` through the sandbox-output flow. If no speech is detected,\nburn nothing and keep `final.mp4`.\n\nIf requested, return a chat-only post package: one comment-bait caption with an\nunanswered open loop, 3–5 hashtags, one pinned comment that answers or adds\nobservable detail, an appropriate ad/sponsorship disclosure for product-present\nmarketing, and a one-line loop note. Never burn it into the video.\n\n## Delivery\n\nReturn exactly one confirmed hosted video URL and total duration. When captions\nwere requested, return `final_captioned.mp4` and retain `final.mp4` as the clean\nmaster. Do not expose job IDs or intermediate assets.\n\n## References\n\n- `references/product-intake.md`: product normalization and staging contract\n- `references/ugc-character.md`: Soul creator prompt and continuity rules\n- `references/monologue-craft.md`: speech density, voice, hooks, and story shapes\n- `references/ugc-board.md`: eight-slot GPT Image board prompt\n- `references/ugc-clip.md`: eight-cut Seedance prompt\n- `references/subtitles.md`: optional transcript-timed text burn\n\nDo not load sibling UGC workflow references; their product-only, unboxing,\ntutorial, try-on, and SaaS contracts conflict with this skill.\n"
}SHA-256: 428d787e458688c7b035c5629e8baef2a0dd1ca895617fd3a77f8e24b993ef05