Loading playground
Input
Additional Settings
Customize your input with more control.
Result
Idle
Customize your input with more control.
Customize your input with more control.
Hint: Drag and drop video files from your computer, video from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: mp4, mov, webm, m4v, gif
Hint: Drag and drop audio files from your computer, audio from web pages, paste from clipboard (Ctrl/Cmd+V), or provide a URL. Accepted file types: mp3, ogg, wav, m4a, aac
Customize your input with more control.
Billing is calculated per second of generated video. Video costs $0.10 per second at 480p and $0.20 per second at 768p. A 5-second video costs $0.50 at 480p and $1.00 at 768p.
Billing is calculated per second of generated video. Video costs $0.10 per second at 480p and $0.20 per second at 768p. A 5-second video costs $0.50 at 480p and $1.00 at 768p.
Provide a video and a driving audio track. The model adjusts the visible speaker's mouth movements to the supplied audio while aiming to preserve the person, scene and motion. The supplied audio replaces the original soundtrack; source audio is optional. This endpoint does not translate speech, synthesize voices or accept a user prompt.
| Field | Type | Default | Purpose |
|---|---|---|---|
video_url | string, required | — | Source video, 5–900 seconds. Display aspect ratio must be between 0.4 and 2.5. |
audio_url | string, required | — | Driving audio, 0.1–900 seconds. |
duration_mode | string | cut_off | How to handle different video and audio lengths; see below. |
resolution | 480P or 768P | 768P | Output resolution tier. |
seed | integer or null | Random | Generation seed; the resolved value is returned. |
enable_safety_checker | boolean | true | Uses the standard fal safety-check settings. |
Output video is normalized to 24 fps and uses the supported aspect ratio nearest the source. Prompt expansion runs automatically. Only the documented request fields are accepted; strength, adapter and attention settings are fixed.
The selector is named Duration mode in the frontend and duration_mode in
JSON. Its values describe timeline handling:
| Value | Behavior | Output duration |
|---|---|---|
cut_off | Trim to the shorter input. | Shorter of video and audio. |
loop | Repeat the video forward when the audio is longer; trim the video when the audio is shorter. | Audio duration. |
bounce | Alternate forward and reverse playback when the audio is longer; trim the video when the audio is shorter. | Audio duration. |
silence | Keep the video length and pad shorter audio with silence. Reject audio longer than the video. | Video duration. |
For a 5-second video and 8-second audio, cut_off produces 5 seconds,
loop and bounce produce 8 seconds, and silence returns a validation error.
For a 5-second video and 3-second audio, cut_off, loop and bounce
produce 3 seconds; silence produces 5 seconds with 2 seconds of silence.
Install fal-client and set the FAL_KEY environment variable to your API key:
pythonimport fal_client result = fal_client.subscribe( "fal-ai/minimax-h3-max-lipsync-v2v", arguments={ "video_url": "https://example.com/speaker.mp4", "audio_url": "https://example.com/new-soundtrack.wav", "duration_mode": "cut_off", "resolution": "768P", "seed": 42, "enable_safety_checker": True, }, ) print(result["video"]["url"]) print(result["duration"])
Replace the example URLs with accessible media URLs. subscribe uses fal's queue
and waits for the result. To manage polling yourself, use fal_client.submit
with the same endpoint ID and arguments.
| Field | Purpose |
|---|---|
video | Output file with url, content_type, file_name and file_size. |
seed | Resolved generation seed. |
duration | Final output duration in seconds. |
timings | Optional timing breakdown; inference time is summed over generated windows. |
| Resolution | Per billed output second | 10-second output |
|---|---|---|
| 480p | $0.10 | $1.00 |
| 768p | $0.20 | $2.00 |
silence mode produce validation errors (422).