Hypernatural

TechniqueBy HypernaturalVersion 2, Oct 29, 2026

h3-max-dialogue

Render a dialogue shot with MiniMax H3 Max reference-to-video plus a voice track: the shot's still as first frame, the cast's reference pictures, the shot's window of the dialogue track as Audio 1, and optionally a pinned end frame. Better lip sync on large faces, stronger blocking and excellent identity, but it pushes in, may cut to new angles on long lines, and can duplicate a person. The only model that takes an end frame together with audio, for exits and transitions. Up to 15 s of audio and 9 references; for locked framing and voiceover, use seedance-2-5-dialogue.

SKILL.md

H3 Max: dialogue shot from a still and a voice track

Give it the shot's still, a reference picture or two per person on screen, and the shot's piece of the recorded dialogue; get a clip that opens on the still with the people in it speaking the lines. Next to seedance-2-5-dialogue it acts bigger (stands, exits, gestures with more presence), lip-syncs better, especially close up, and holds identity best. It also takes liberties: it pushes in by default, on long lines it can cut to new angles, and it sometimes duplicates a person. It is the only model that pins an end frame with audio attached. For a scene, render both models per shot and pick (guide-lipsync-video); the picks split about evenly, with H3 taking the transitions and most to-camera close-ups.

Inputs

  • The still, matched to its script shot by what it shows, never by file name.
  • The cast: only the people physically in frame. A face on a TV or a video call gets no picture: with a person's sheet attached for her TV thumbnail, H3 Max morphed the presenter in the room into her.
  • Reference pictures: single views from each sheet (python-split-character-sheet). At most 9 in all; every subject keeps its first, the rest are dealt round-robin. Each 256 to 2,048 px a side, aspect 0.4 to 2.5, or fal rejects the request: pad, never crop.
  • The audio: the shot's window of the track as mono WAV, cut at pauses (ffmpeg-cut-audio-window), 2 to 15 s. Pad a window under 2 s with silence to 3 s; never widen it. A shot over 15 s is split at a pause into sub-shots (18a, 18b): shots longer than about 15 s aren't advisable on any video model.
  • An end frame (optional): for an exit or transition, the next shot's still. Plan silence into the track after the last line for the action first (a walk-out needed 2.4 s; python-assemble-dialogue-track), so the window holds it.
  • One seed for the whole job, so a one-line change is a true A/B.

Run it

Call describe("fal/minimax/h3-max/reference-to-video") before the first run in a job.

run("fal/minimax/h3-max/reference-to-video", {
  "image_url": "<job>/stills/shot18.jpg",
  "end_image_url": "<job>/stills/shot19.jpg",
  "prompt": "<H3 prompt, see below>",
  "reference_image_urls": ["<job>/refs/dana_1.jpg", "<job>/refs/dana_2.jpg"],
  "reference_audio_urls": ["<job>/audio/shot18.wav"],
  "duration": 7.4,
  "resolution": "768P",
  "prompt_expansion_mode": "disabled",
  "seed": 1234
}, into="<job>/runs/run04", unit="shot18_h3", tag="shot18")
  • duration: the audio's length in seconds (a float). Clips come back 0.3 to 0.6 s longer than asked.
  • resolution: 768P for runs, 1080P when final; uppercase P.
  • reference_image_urls in the order of the prompt's <Picture N> labels.
  • prompt_expansion_mode: "disabled" is required; "balanced" adds a soundtrack.
  • target_audio_url is a different mode (image-to-video lip sync, h3-max-lipsync-a-still); don't send it here.

Prompt

Load h3-prompt-format first and use the reference-to-video shape: subject definitions, (Sn) speakers before <d> blocks, and the Audio 1 sentence appended to the summary (its references/dialogue.md is this mode worked through). Write the direction with these clauses:

  • Camera: "Static shot: the camera stays locked on the opening framing for the whole clip, with no zoom, push-in, pull-back, pan or cut." It won't stop a cut on a long line, but without it one take jumped to two copies of the presenter on a sofa outside a house. The push-in is H3's default, not something the prompt caused.
  • Positions at every line in a two-hander: "the woman on the RIGHT", "the man on the LEFT". Names alone swapped lines between people.
  • Screens as a fixed state ("switched off, solid black"; "a paused still"; nothing on it plays or speaks). Wording that implies playback makes H3 animate the screen, and an unreferenced screen woke up with an invented man on it.
  • Action time-cued to the transcript.
  • Voiceover: "Nobody on screen speaks: every mouth in frame stays closed." H3 obeys when faces are small, and opens the mouth anyway when a face fills the frame; give those shots to Seedance.
  • End frame: "The clip ends exactly on the provided last frame: by the final moment the picture has become that frame."
  • Never name a removed accessory, even to forbid it ("no pin or badge" grew a pin by 1 s); describe the clean state, and edit it out of the reference pictures too, or H3 puts it back.

The Audio 1 binding inside this format has been smoke-tested, not run over a whole scene: watch whether long two-handers keep each voice on the right face.

What you get

An MP4 at 24 fps that opens on the still, with H3's own performance of the lines: it re-voices the reference audio and the mouth follows its version, not the track. The words come back verbatim; the timing drifts.

Tips and traps

  • Keep the clip's own audio. Never lay the original track under it; cut each pick in with its own sound.
  • Duplicates and cuts on long lines don't go away with more "no cuts" wording; take the Seedance render of that shot, or another take.
  • To-camera talking heads: keep gestures minimal unless asked, and ban finger counting outright ("never counts on her fingers or holds up a number of fingers, even on first, second, finally"): asked for fingers on "First / Second / Finally", H3 held up three on a line with no third item.
  • A prop clause invites the prop. A rule added to every shot of a cartoon scene ("there is exactly one ball; it rolls only along the grass") made all four takes of a shot whose still had no ball roll one in from the frame edge. Where a prop is absent, say so: "There is NO ball anywhere in this shot" (0 of 4 after).
  • Repeated lines. H3 sometimes fills the clip's tail by saying the last line again (2 of 24 clips in a cartoon scene). Transcribe every clip and check its words against the shot's lines before cutting it in.
  • Cartoon characters open on the still every time (0.994–0.997) and keep the drawn style from the first frame plus the sheet views; Seedance opened 0.95–0.98 on the same shots, once 0.60.

Check it

  • First frames after every run: still, frame 0 and last frame side by side, with frame_alignment (python-check-pinned-frames); under 0.95 is not opening on the still. With an end frame, check the last frame against it too.
  • Every 0.75 s of every clip by eye for duplicated people, a cut, a screen that woke up, or an accessory that came back.
  • Lip sync over time: hn4a-lipsync-check.
  • Review unmuted, beside the Seedance take of the same shot.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy