| name | video-factory-higgsfield-prompt |
| description | Turn a directed storyboard into a ready-to-run Higgsfield prompt package and (when asked) execute the generations via the Higgsfield MCP. Owns model routing (seedance 2.0 / kling 3.0 default for video; nano banana pro / chatgpt image 2 for keyframes), the image-to-video prompt structure (motion, camera, atmosphere, sound over a start frame), parameter selection (resolution, duration, aspect, sound on/off, genre, end-frame for loops), negatives, retries, and web encoding handoff. Use this skill any time the task is "write the Higgsfield prompt," "generate this in Higgsfield," "what model and settings," "make the background loop," or turning shots into clips. Final craft stage of the Video Factory chain; reads concept + storyboard + direction and produces 40_Prompts.md plus generated keyframes and clips. Keyframe-first, loop- seam-aware, credit-disciplined.
|
| type | skill |
| project | skills-library |
| plugin | video-factory |
| aliases | ["higgsfield-prompt","video-prompt","higgsfield-video","generate-video"] |
| tags | ["type/skill","plugin/video-factory","scope/specialty","topic/video","topic/higgsfield","topic/prompting"] |
| status | active |
Video Factory — Higgsfield Prompt
This is the engine. It converts a directed storyboard into exact model choices, parameters, and prompt text, then drives the Higgsfield MCP to produce clips. Everything upstream (concept, storyboard, direction) exists so this stage can be mechanical and on-target.
Load both references: ../../references/higgsfield-models.md (model catalog, routing, constraints, MCP tools) and ../../references/video-factory-foundations.md (output types, web delivery, anti-clichés). Verify the model list against the live MCP (models_explore) before a production batch — the catalog drifts.
The two-step that everyone gets wrong
Higgsfield video is image-to-video. You do not write one prompt and get a video. You:
- Generate the keyframe still from the storyboard's keyframe prompt (
generate_image, nano banana pro default / chatgpt image 2 for text). This frame is the look — the direction spec's light, palette, and grain must be in it.
- Animate that still with a motion prompt (
generate_video) that describes only what changes — camera, subject motion, atmosphere, and sound — never the composition, which the keyframe already fixed.
Writing the video prompt as if it were text-to-video (re-describing the whole scene) is the most common failure. Describe the motion over the frame, not the frame.
Model routing
Default to seedance 2.0 (seedance_2_0) for product/atmospheric/background and kling 3.0 (kling3_0) for multi-shot/motion-heavy cinematic. Escalate to cinematic_studio_3_0 or veo3_1 only for a marquee hero shot. Full decision table and per-model constraints live in higgsfield-models.md — consult it, don't reinvent it. Key reflexes:
- Background loop: seedance 2.0 or kling 3.0,
sound: off, matched start/end frame, 4–8s, 16:9 (+ a 9:16 via reframe).
- Need a clean loop seam: use a model with
end_image (seedance 2.0, kling 3.0) and pass the keyframe as both start and end.
- Exploration pass: budget model at 720p (veo3_1_lite or seedance
mode: fast) to pick the motion before spending hero credits.
- Audio matters: only then turn sound on (kling/veo/wan render audio); otherwise off to save credits.
The motion-prompt structure
For each shot's video prompt:
CAMERA: the one move, slow and singular (locked / slow push 10% / slow orbit / rack-focus). Match the direction spec's camera language.
SUBJECT MOTION: what physically changes in frame, and how fast. For loops: cyclical, returns to start.
ATMOSPHERE: air, particles, light behavior, water/fabric movement — the life in the shot.
PACING: real-time / slight slow-motion. Hold the register's tempo.
SOUND: off for background/silent; else describe the bed (only on audio models).
NEGATIVES: the direction spec's NOT list verbatim + motion clichés (no whip-pans, no speed-ramps, no glowing-AI particles, no drone reveal, no morphing artifacts, no warping text/hands).
Keep it tight. Over-described motion prompts fight the keyframe. One clear move beats five.
Parameters checklist (per generate_video call)
model_id — from routing.
medias — the keyframe start_image (and end_image for loops), by media_id/job_id. For local files use the upload widget/flow per higgsfield-models.md; never pass raw URLs.
aspect_ratio — 16:9 web default, 21:9 cinematic band, 9:16 mobile.
duration — within the model's range; short for loops.
resolution / mode / quality — 720p to explore, full for the keeper.
sound — off unless the deliverable plays with audio.
genre — only on models that expose it, only if it helps.
Producing the prompt package (and optionally generating)
Write 40_Prompts.md in the run's WIP folder — for each shot, the keyframe prompt (with image model), the motion prompt, the exact model + every parameter, and the negatives. This package alone lets anyone regenerate or extend the piece later, which is half its value.
If the user wants the clips made now (and direction is signed off):
- Confirm credits with
show_plans_and_credits before a batch.
- Generate all keyframes first (
generate_image); review the stills against the direction spec; regenerate any that drift before spending video credits.
- Generate clips (
generate_video) keyframe-by-keyframe. Poll with job_display / show_generations.
- Save: keyframes →
assets/keyframes/, clips → assets/clips/, named shot-NN-label.{ext}.
- Log every generation in
run_log.md: model, params, credits.
Web encoding handoff (background loops)
After the final clip is picked, the deliverable for the web is not the raw mp4. Per video-factory-foundations.md:
- Encode
.webm (VP9/AV1) + .mp4 (H.264) fallback; strip the audio track.
- Export a poster frame (frame one) as
.webp/.jpg.
- Target < ~3 MB for a hero loop; trim duration / drop to 720p / raise compression before sacrificing the look.
- Hand over the
<video muted autoplay loop playsinline poster="…"> snippet with both sources, and a note to respect prefers-reduced-motion (poster as fallback). This is where it meets the vercel / contentful delivery skills.
Encoding can run via ffmpeg in the sandbox; if it isn't available, deliver the raw clip + explicit encode instructions.
Examples
Example 1 — silent background loop (seedance 2.0).
Keyframe (nano banana pro): macro liquid-metal surface, single cool sidelight, shallow focus, navy-to-steel, NOT glowing-AI-blue. → start_image.
Video prompt: CAMERA: locked. SUBJECT MOTION: the metal surface slowly undulates, one full gentle cycle returning to rest. ATMOSPHERE: a single highlight travels across the surface and back. PACING: real-time, calm. SOUND: off. NEGATIVES: no circuit motifs, no rainbow refraction, no drift away from frame, no morphing.
Params: model_id: seedance_2_0, start_image+end_image = same keyframe, aspect_ratio: 16:9, duration: 6, resolution: 1080p, mode: std, no audio. Then reframe → 9:16. Encode webm+mp4, poster, <3 MB.
Example 2 — cinematic hero shot (kling 3.0).
Keyframe (nano banana pro): wide low-angle of a figure at a threshold, cool sidelight, anamorphic feel. → start_image.
Video prompt: CAMERA: slow push, 8% over the shot. SUBJECT MOTION: figure turns head toward the light. ATMOSPHERE: dust drifts through the light shaft. PACING: slight slow-motion. SOUND: low ambient room tone. NEGATIVES: no lens-flare spam, no speed-ramp, no warping face/hands.
Params: model_id: kling3_0, mode: pro, sound: on, aspect_ratio: 21:9, duration: 6.
Constraints
- Keyframe first, always. Don't write a video prompt that re-describes the scene — describe the motion over the frame.
- Don't generate before direction sign-off, and don't burn hero-model credits before an exploration pass picks the motion.
- Turn sound off for anything silent — it's cheaper and background video has no audio track anyway.
- For loops, use a model with
end_image and matched frames, or the seam will jump.
- Always write the full prompt package even when generating, so the work is reproducible.
- Honor the per-model duration/resolution/aspect constraints in
higgsfield-models.md; the server rejects out-of-range params and wastes a call.
- Carry the direction spec's NOT list into every negative. Unenforced direction doesn't survive the model.