moai-media| Live catalog-based video generation (core:media-higgsfield-core)
Overview
This is a skill that calls the video generation tools of Higgsfield MCP. After narrowing down family candidates based on user intent, parameters are queried from the live catalogand generated. The hardcoded model and preset tables from the previous skill have been removed — those tables diverged from the live schema and produced failing calls.
The core design is in the core skill media-higgsfield-core: the invocation contract (call-schema.md), live lookup (catalog-protocol.md), common rules R1–R5 (universal-rules.md), jobs, costs, and readback (job-lifecycle.md).
Family craft (references/prompt-craft/) — rules differ per family
Each file is based on official vendor documentation and is tagged with its source and Evidence tier.
| File | Family |
|---|---|
references/prompt-craft/veo.md |
Veo (audio grammar SFX:/Ambient noise:) |
references/prompt-craft/kling.md |
Kling (flexible framework, primary-relayed) |
references/prompt-craft/seedance.md |
Seedance (timestamps unstable — labeled shot list) |
references/prompt-craft/cinema-studio.md |
Cinema Studio (4-layer references, enum live lookup) |
references/prompt-craft/marketing-studio.md |
Marketing Studio (hook/setting↔ad_reference mutually exclusive) |
references/prompt-craft/wan.md |
Wan (Timestamp multi-shot — the exact opposite of Seedance) |
references/prompt-craft/gemini-omni.md |
Gemini Omni (editing is a simple prompt) |
references/prompt-craft/grok.md |
Grok (no audio documentation — do not make it up) |
Camera directing and Marketing Studio slug reference: references/dop-motions.md.
There is no universal video formula — per-family routing
Do not use a single universal video prompt formula. This is because conventions are the exact opposite across vendors: Wan prescribes explicit Timestamps for multi-shot, but ByteDance warns that Timestamps make Seedance unstable. Merging these two into one is a correctness regression. Therefore, the skill uses the target family's prompt-craft/ file to per-family route and applies that family's official vendor conventions.
Workflow (REQ-010 flow)
Step 1 — Understand intent → narrow candidates
Collect slots such as subject, action, scene, camera, audio, references (+ each purpose), shot count, and duration from the user request (→ core interview-schema.md) and narrow down family candidates. It only narrows candidates and does not assert parameters. If slots are insufficient, it returns a blocker report and the orchestrator confirms (the skill does not ask the user directly).
| User expression | Candidate family |
|---|---|
| "Realistic", "video with audio" | Veo |
| "People, expressions, storyboard" | Kling |
| "Dynamic motion, multi-shot" | Seedance or Wan |
| "Film look·motion transfer" | Cinema Studio |
| "UGC·DTC ad video" | Marketing Studio |
| "Image editing·simple reference" | Gemini Omni |
| "Grok video" | Grok |
Step 2 — Live lookup (models_explore)
models_explore(action:'get')After narrowing down, look up the actual constraints (aspect_ratios·durations·media role·per-model param) of the candidates. If the model is out of scope, state that there is no family craft and live lookupfetch only the constraints with and apply R1–R5. If it is a Marketing Studio family, show_marketing_studiolook up preset/hook/setting with.
Step 3 — Cost preflight (get_cost)
With the same parameters, put get_cost: truein and creditscheck (0 credits). adjustmentsIf present, it is a default value filled in by the server, so note it for readback (e.g., if you requested audio but it was generate_audio: falsesubstituted with, report it). The balance stop rule is core job-lifecycle.md.
Step 4 — Approval gate (before credits are spent)
get_costonly looks upthe cost and does not obtain approval. It is the last stop line before credits are actually spent, and it follows the core §paid generation approval gate as is — show the full prompt·model id·input media·confirmed options·length·number of generations·adjustments·estimated credits·balance and obtain approval.
- [HARD] The
adjustmentssecured in Step 3 is shown here. The example in Step 3 (requested audio but it wasgenerate_audio: falsesubstituted with) is exactly why this gate is needed — it is too late if you find out after paying video-value credits for a video without audio. - If the model corresponds to the above §risk block (
gemini_omnivideo-references·minimax_hailuocamera command), then display that warning together on the approval screen. Let the user choose whether to spend money while knowing the known risks. - This skill does not ask the user directly, so when it reaches the gate, it returns as a blocker and the orchestrator asks with
AskUserQuestion.
Step 5 — Generation (generate_video)
Call the actual generate_videoonly with approved values. Namespace is resolved at runtime. Reference media is passed only as media_id/job_id.
- [HARD] Even if it fails, do not create a new job. If it fails ambiguously, first check the returned job ID with
job_status, and if there is not even an ID, first check whether the generation history lookup tool is actually exposed — what is in the core contract is onlyjob_status·job_display. If it is not there, ask the user to check the Higgsfield dashboard. Call again only after it is confirmed to be absent. Video costs more per unit than images, so duplicate costs are large.
Step 6 — Polling·readback
job_status로 completedPoll until, and report the adjustmentsreturned along with the result URL to the user.
Risk block (must warn)
These three are risks that the family craft confirmed based on vendor evidence. The skill warns the user when using the corresponding model:
gemini_omnivideo-references는 known-broken — Google's own words: "...are not correctly processed by the model at this time." Even if the API accepts it, the model cannot handle it properly (→prompt-craft/gemini-omni.md).minimax_hailuomay silently override camera commands — MiniMax's own API'sprompt_optimizer(default true) automatically rewrites the prompt, which can mangle precise manual camera commands. Higgsfield does not expose this switch, so it cannot be turned off via MCP. Warn that precise camera directing may be ignored.- Grok's audio conventions are not documented — even if the catalog tags it as "native audio", xAI's official documentation makes no mention of audio. Do not invent Grok audio syntax (→
prompt-craft/grok.md).
out-of-scope model fallback (live lookup)
If a model not in the family craft is requested, state the fact that there is no family-specific craft and models_explorethe constraint with live lookup, then apply the common rules R1–R5.
Output format
## Higgsfield 영상 생성 결과
- 모델: [models_explore로 확인한 실제 id]
- 프롬프트: [계열 크래프트로 조립된 최종 프롬프트]
- 비율·길이: [라이브 aspect_ratios·durations 중 선택]
- 비용: [get_cost가 반환한 credits]
- Job ID / 결과 URL: [job_status completed]
- 서버 조정(adjustments): [있으면 그대로 보고]
Cautions
- Prompts follow the target family's
prompt-craft/vendor official conventions — do not use generic formulas. - image-to-video starts with motion + camera, excluding the static information contained in the starting image (R2). The starting image can first be generated with
media-higgsfield-image. - Do not guess model ids or parameters — always verify with
models_explore. - Do not generate content that may infringe nsfw, portrait rights, or copyright.
Related skills
| Skill | Viewpoint |
|---|---|
moai-media:media-higgsfield-core |
Core: invocation contract, live lookup, common rules |
moai-media:media-higgsfield-image |
Prerequisite: starting image generation |
moai-media:media-audio-gen |
Auxiliary: audio for video, BGM |
Source
- Higgsfield Skills (official agent documentation)
- Higgsfield MCP
- For the source of each family's prompt craft, refer to each
references/prompt-craft/*.md's Evidence tier and source. - Live catalog: runtime
models_explore(the snapshot is only an evidence baseline for the plan stage, not a runtime contract).