{"version":"1","model":{"id":"fal-ai/latentsync","name":"LatentSync","kind":"video","availability":"available","available":true,"restricted":false,"api_key_only":false,"description":"LatentSync is a fast open-source lipsync model trained on large-scale video data. Upload a portrait video and audio for natural-looking lipsync.","pricing_note":"$0.20 up to 40s, $0.005/s beyond — billed by output length: source video, or looped-to-audio length when loop mode is on.","categories":["lipsync"],"prompt_required":false,"prompt_supported":true,"supports":{"referenceVideo":true,"referenceAudio":true},"requires":{"referenceAudio":true,"referenceVideo":true},"aspect_ratios":[],"resolutions":[],"durations":[],"base_credits":25,"api_gross_margin_percent":20,"added_at":"2026-05-05","popularity_rank":381,"example_prompt":"Upload a portrait video and audio — LatentSync is a fast open-source lipsync model trained on large-scale video data","preview":{"video":"https://cdn.artemotion.ai/file/artemotion-ai-bckt/model-previews/lipsync-latentsync.mp4"},"schema_url":"/api/v1/models?id=fal-ai%2Flatentsync","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://www.artemotion.ai/api/v1/models?id=fal-ai%2Flatentsync","title":"LatentSync generation request","description":"Request body accepted by POST /api/v1/generate for fal-ai/latentsync.","type":"object","properties":{"model_id":{"type":"string","const":"fal-ai/latentsync","description":"ArtEmotion model identifier."},"extra":{"type":"object","additionalProperties":true,"description":"Model-specific settings may also be nested here."},"max_credits":{"type":"number","minimum":1,"description":"Reject before submission if the estimated list price exceeds this cap."},"webhook_url":{"type":"string","format":"uri","maxLength":2048},"webhook_secret":{"type":"string","maxLength":512},"folder_id":{"type":"string"},"prompt":{"type":"string"},"loop_mode":{"title":"Loop Mode","description":"How to fill video when audio is longer than the source clip. None = no extension; Pingpong = bounce; Loop = repeat.","default":"","type":"string","enum":["","pingpong","loop"]},"guidance_scale":{"title":"Guidance Scale","description":"Guidance scale for inference (1–2). Higher values follow the audio more strictly.","default":1,"type":"number","minimum":1,"maximum":2,"multipleOf":0.1},"seed":{"title":"Seed","description":"Random seed. Leave blank for a random result.","type":"integer"},"video_url":{"type":"string","format":"uri"},"audio_url":{"type":"string","format":"uri"}},"required":["model_id","video_url","audio_url"],"additionalProperties":false},"parameters":[{"key":"loop_mode","label":"Loop Mode","type":"select","default":"","options":["","pingpong","loop"],"description":"How to fill video when audio is longer than the source clip. None = no extension; Pingpong = bounce; Loop = repeat."},{"key":"guidance_scale","label":"Guidance Scale","type":"number","default":1,"min":1,"max":2,"step":0.1,"description":"Guidance scale for inference (1–2). Higher values follow the audio more strictly."},{"key":"seed","label":"Seed","type":"seed","description":"Random seed. Leave blank for a random result."}]}}