Purpose
Generate a single dialogue-driven or multi-shot narrative clip with Kling 3.0 (the kling3_0 Higgsfield model). Kling 3.0's strengths are phoneme-level multi-character lip-sync, multi-shot scene reasoning, "filmed-not-rendered" physics, and the cheapest economics of the frontier engines.
Use this atom when:
- The clip has dialogue, especially with two or more speakers.
- A multi-shot beat (cut between two framings) needs to feel coherent.
- The aesthetic is character-driven, anime/stylized, or narrative-led.
- Cost matters and the clip can be 3–15 seconds.
Prefer create-video-veo3 for polished single-shot ads, create-video-seedance for product demos with reference media + camera moves, and create-video-grok for X-native meme content.
Inputs
- A clear video brief with: speakers, dialogue lines (per speaker), camera framing per shot, mood, audio direction.
- Optional
start_imageand/orend_imagepaths or URLs for first/last-frame conditioning. Note: start+end conditioning produces a morph between the two frames, not a literal camera-path interpolation. Useful for "world transforms around still subject" cuts; not useful for rotational moves (see Failure Modes). For complex camera paths, use a singlestart_imageplus a prompt describing the move. - Aspect ratio:
16:9,9:16, or1:1. - Duration: 3 to 15 seconds.
- Mode:
std(default) orpro(higher fidelity). - Sound:
on(default) oroff. - Output directory or test-run directory.
Workflow
- Read the brief and confirm dialogue lines, framing per shot, and any start/end frames are present.
- Compose the prompt. Lead with the scene framing, then character action and dialogue (quoted), then camera move, then audio direction.
- If start/end images are provided, upload via
mcp__higgsfield__media_uploadand confirm withmcp__higgsfield__media_confirm. - Call
mcp__higgsfield__generate_videowithmodel="kling3_0", prompt, aspect_ratio, duration, mode, sound, andmediasif applicable. - Poll
mcp__higgsfield__job_statusuntil complete; download the resulting MP4. - Write
manifest.jsonwithprovider: "Higgsfield",model_or_tool: "kling3_0", output paths, status, errors, warnings. - Run the verifier in
tests/verifier.md.
Output
- Primary: one MP4 clip at the requested aspect ratio and duration.
manifest.jsonmatching the standard schema inTESTING_RULES.md.verification.mdnaming the checks performed.
Quality Checks
- File exists, plays end-to-end, duration within ±0.5s of requested.
- Aspect ratio matches the request.
- When dialogue was specified: lip-sync is plausible, audio matches the script.
- For multi-shot prompts: cuts are coherent, character identity persists across shots.
- No severe artifacts.
- Manifest paths resolve to real files.
Failure Modes
- Higgsfield credentials missing or invalid — return manifest with
status: "blocked". - 4+ speakers — Kling lip-sync degrades sharply; warn and recommend splitting into multiple clips.
- Long-clip identity drift — facial likeness can drift past ~10s; for >10s clips add a warning and consider chaining shorter clips with start/end frames.
- China data jurisdiction — flag in the manifest
warningsfor any client with data residency constraints. - Vague dialogue prompt — if the brief lacks quoted lines, fail with a warning rather than letting Kling hallucinate dialogue.
- Aspect ratio not in
[16:9, 9:16, 1:1]— reject with a clear error. - start_image + end_image asked to render a camera rotation / barrel roll — Kling does NOT render a rotational camera path between two anchor frames. It crossfade-morphs: the visual content interpolates (environment dissolves, subject morphs) but the camera itself never rotates. This is useful for "world morphs around still subject" transformations but cannot deliver a literal roll. For true rotation: use
create-video-veo3withquality: high(better motion-prompt adherence) or generate a hard cut and apply FFmpegrotatepost-fx. Confirmed empirically — see LEARNINGS.md #19. - FAL
403 Forbiddenonrest.fal.ai/storage/auth/token(FAL path) — the start-image upload is being denied. After a burst of successful calls, a403here that persists through cooldown retries is an exhausted FAL balance, not a rate limit (429is the rate limit; this 403 is not — cooldowns won't clear it). Top up atfal.ai/dashboard/billingand re-run; a transient "User is locked. Exhausted balance" can also self-recover on retry right after a top-up. Make multi-clip render scripts idempotent (skip already-rendered clips) so the re-run only regenerates what's missing.
FAL fallback
When the Higgsfield path fails, the orchestrator's generate_with_fallback.py router calls the sibling FAL script:
python3 skills/atoms/video-generation/create-video-kling/scripts/generate-fal.py \
--prompt "..." \
--output /path/to/clip.mp4 \
--start-image /path/to/keyframe.png \
[--end-image /path/to/end-frame.png] \
--aspect-ratio 9:16 \
--duration 5 \
--mode std
⚠️ Version delta: Higgsfield ships Kling 3.0; FAL's latest as of 2026-05 is Kling 2.1. Outputs will differ — lip-sync quality and physics realism on Kling 2.1 are noticeably weaker. The fallback's meta.json includes a version_caveat field; the orchestrator surfaces this to the operator when fallback fires on a Kling scene.
Model mapping:
- Higgsfield
kling3_0mode=std →fal-ai/kling-video/v2.1/standard/image-to-video - Higgsfield
kling3_0mode=pro →fal-ai/kling-video/v2.1/pro/image-to-video
If the version downgrade is unacceptable for a specific scene, the operator should pin <provider_override>=higgsfield and retry rather than accept the FAL Kling output.