[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-nav-en":3,"docs-en-models\u002Fvideo\u002Fomni-human":180},[4,26,43,105,155,172,176],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Getting Started","\u002Fgetting-started","1.getting-started",[9,13,17,21],{"title":10,"path":11,"stem":12},"Your First SilvaMux API Call","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F1.quick-start",{"title":14,"path":15,"stem":16},"Model Selection","\u002Fgetting-started\u002Fmodel-selection","1.getting-started\u002F2.model-selection",{"title":18,"path":19,"stem":20},"Rate Limits","\u002Fgetting-started\u002Frate-limits","1.getting-started\u002F3.rate-limits",{"title":22,"path":23,"stem":24},"FAQ","\u002Fgetting-started\u002Ffaq","1.getting-started\u002F4.faq",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"Billing","\u002Fbilling","2.billing",[31,35,39],{"title":32,"path":33,"stem":34},"Billing Overview","\u002Fbilling\u002Foverview","2.billing\u002F1.overview",{"title":36,"path":37,"stem":38},"Online Top-up","\u002Fbilling\u002Frecharge","2.billing\u002F2.recharge",{"title":40,"path":41,"stem":42},"Bills, Usage & Exports","\u002Fbilling\u002Fusage-export","2.billing\u002F3.usage-export",{"title":44,"path":45,"stem":46,"children":47,"page":25},"Coding Plan","\u002Fcoding-plan","3.coding-plan",[48,52,56,60,67,102],{"title":49,"path":50,"stem":51},"Coding Plan Overview","\u002Fcoding-plan\u002Foverview","3.coding-plan\u002F1.overview",{"title":53,"path":54,"stem":55},"Quick Start","\u002Fcoding-plan\u002Fquick-start","3.coding-plan\u002F2.quick-start",{"title":57,"path":58,"stem":59},"Usage Notes","\u002Fcoding-plan\u002Fusage-notes","3.coding-plan\u002F3.usage-notes",{"title":61,"path":62,"stem":63,"children":64},"Personal","\u002Fcoding-plan\u002Fpersonal","3.coding-plan\u002F4.personal\u002Findex",[65],{"title":66,"path":62,"stem":63},"Pricing & Benefits",{"title":68,"path":69,"stem":70,"children":71,"page":-1},"Developer Guide","\u002Fcoding-plan\u002Fguide","3.coding-plan\u002F5.guide\u002Findex",[72,74,78,82,86,90,94,98],{"title":73,"path":69,"stem":70},"Endpoints & Protocols",{"title":75,"path":76,"stem":77},"Claude Code","\u002Fcoding-plan\u002Fguide\u002Fclaude-code","3.coding-plan\u002F5.guide\u002F1.claude-code",{"title":79,"path":80,"stem":81},"OpenCode","\u002Fcoding-plan\u002Fguide\u002Fopencode","3.coding-plan\u002F5.guide\u002F2.opencode",{"title":83,"path":84,"stem":85},"Cursor","\u002Fcoding-plan\u002Fguide\u002Fcursor","3.coding-plan\u002F5.guide\u002F3.cursor",{"title":87,"path":88,"stem":89},"Codex","\u002Fcoding-plan\u002Fguide\u002Fcodex","3.coding-plan\u002F5.guide\u002F4.codex",{"title":91,"path":92,"stem":93},"ZCode","\u002Fcoding-plan\u002Fguide\u002Fzcode","3.coding-plan\u002F5.guide\u002F5.zcode",{"title":95,"path":96,"stem":97},"TRAE","\u002Fcoding-plan\u002Fguide\u002Ftrae","3.coding-plan\u002F5.guide\u002F6.trae",{"title":99,"path":100,"stem":101},"CodeBuddy","\u002Fcoding-plan\u002Fguide\u002Fcodebuddy","3.coding-plan\u002F5.guide\u002F7.codebuddy",{"title":22,"path":103,"stem":104},"\u002Fcoding-plan\u002Ffaq","3.coding-plan\u002F6.faq",{"title":106,"path":107,"stem":108,"children":109,"page":25},"Model APIs","\u002Fmodels","4.models",[110,143],{"title":111,"path":112,"stem":113,"children":114,"page":25},"Text Generation Model API","\u002Fmodels\u002Fchat","4.models\u002F1.chat",[115,119,123,127,131,135,139],{"title":116,"path":117,"stem":118},"Overview","\u002Fmodels\u002Fchat\u002Foverview","4.models\u002F1.chat\u002F1.overview",{"title":120,"path":121,"stem":122},"OpenAI Compatible API","\u002Fmodels\u002Fchat\u002Fopenai","4.models\u002F1.chat\u002F2.openai",{"title":124,"path":125,"stem":126},"Anthropic Compatible","\u002Fmodels\u002Fchat\u002Fanthropic","4.models\u002F1.chat\u002F3.anthropic",{"title":128,"path":129,"stem":130},"Volcengine Compatible","\u002Fmodels\u002Fchat\u002Fvolcengine","4.models\u002F1.chat\u002F4.volcengine",{"title":132,"path":133,"stem":134},"Zhipu Compatible","\u002Fmodels\u002Fchat\u002Fzhipu","4.models\u002F1.chat\u002F5.zhipu",{"title":136,"path":137,"stem":138},"SilvaMux Unified Entry","\u002Fmodels\u002Fchat\u002Funified","4.models\u002F1.chat\u002F6.unified",{"title":140,"path":141,"stem":142},"Multimodal Input","\u002Fmodels\u002Fchat\u002Fmultimodal","4.models\u002F1.chat\u002F7.multimodal",{"title":144,"path":145,"stem":146,"children":147,"page":25},"Image Generation Model API","\u002Fmodels\u002Fimages","4.models\u002F2.images",[148,151],{"title":116,"path":149,"stem":150},"\u002Fmodels\u002Fimages\u002Foverview","4.models\u002F2.images\u002F1.overview",{"title":152,"path":153,"stem":154},"Image Generation API","\u002Fmodels\u002Fimages\u002Fgeneration","4.models\u002F2.images\u002F2.generation",{"title":156,"path":157,"stem":158,"children":159,"page":25},"Usage & Balance","\u002Fusage-and-balance","5.usage-and-balance",[160,164,168],{"title":161,"path":162,"stem":163},"Query Balance","\u002Fusage-and-balance\u002Fbalance","5.usage-and-balance\u002F1.balance",{"title":165,"path":166,"stem":167},"Query Usage","\u002Fusage-and-balance\u002Fusage","5.usage-and-balance\u002F2.usage",{"title":169,"path":170,"stem":171},"Query Request Usage","\u002Fusage-and-balance\u002Frequest-usage","5.usage-and-balance\u002F3.request-usage",{"title":173,"path":174,"stem":175},"Error Codes","\u002Ferrors","6.errors",{"title":177,"path":178,"stem":179},"Getting Started with SilvaMux","\u002F","index",{"id":181,"title":182,"body":183,"description":879,"extension":880,"meta":881,"navigation":25,"path":882,"rawbody":883,"requiredFlags":884,"seo":885,"stem":886,"__hash__":887},"docs_en\u002F4.models\u002F3.video\u002F5.omni-human.md","OmniHuman 1.5",{"type":184,"value":185,"toc":876},"minimark",[186,191,195,198,209,214,217,230,237,844,847,872],[187,188,190],"h1",{"id":189},"jimeng-omnihuman-15","Jimeng OmniHuman 1.5",[192,193,194],"p",{},"OmniHuman 1.5 (the Jimeng-sourced digital-human model) generates video from a single uploaded image plus audio that corresponds to the image. It accepts images of people or other subjects (pets, anime characters, etc.) in any aspect ratio and combines them with audio to produce high-quality video.",[192,196,197],{},"The subject's emotion and motion are strongly tied to the audio, and prompts can adjust the scene, actions, and camera work. OmniHuman 1.5 also handles anime and pet subjects well and lets you designate the speaker\u002Fsubject, making it useful for storytelling, duets, product interaction, comic drama, and more. Compared to the previous generation, OmniHuman 1.5 improves motion naturalness and structural stability noticeably, with stronger expressiveness in subject motion and overall picture quality.",[192,199,200,201,208],{},"For detailed model documentation, see the ",[202,203,207],"a",{"href":204,"rel":205},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1834143?lang=zh",[206],"nofollow","Volcengine docs",".",[210,211,213],"h2",{"id":212},"call-examples","Call Examples",[192,215,216],{},"SilvaMux provides the same Jimeng OmniHuman 1.5 API as Volcengine; you can use the Volcengine SDK or integrate through your own API client.",[192,218,219,220,224,225,229],{},"Integration goes through the Volcengine-compatible CV API: ",[221,222,223],"code",{},"POST \u002Fapi\u002Fark?Action=CVSubmitTask|CVProcess|CVGetResult&Version=2022-08-31","; AK\u002FSK authentication and signing are described in the Volcengine-compatible section of ",[202,226,228],{"href":227},"\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Fassets","Asset Management",". The Volcengine links below are for looking up OmniHuman-specific input fields; the access address and credentials still come from SilvaMux.",[192,231,232,233,236],{},"Using the Volcengine Python SDK as an example — install the SDK with ",[221,234,235],{},"pip install volcengine",", then run the sample script:",[238,239,244],"pre",{"className":240,"code":241,"language":242,"meta":243,"style":243},"language-python shiki shiki-themes github-light github-dark","# coding:utf-8\nimport json\nimport threading\nfrom time import sleep\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.visual.VisualService import VisualService\n\nclass SilvaMuxVisualService(VisualService):\n    def __new__(cls, *args, **kwargs):\n        return object.__new__(cls, *args, **kwargs)\n\n    def __init__(self):\n        self.service_info = SilvaMuxVisualService.get_service_info()\n        self.api_info = SilvaMuxVisualService.get_api_info()\n        super(VisualService, self).__init__(self.service_info, self.api_info)\n\n    def get_service_info():\n        # Use www.silvamux.com for the CN site; replace with www.silvamux.io for the global site\n        service_info = ServiceInfo(\"www.silvamux.com\",\n                                   {}, Credentials('', '', 'cv', 'cn-north-1'), 30, 30, 'https')\n        return service_info\n\n    def get_api_info():\n        api_info = {\n            \"CVGetResult\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVGetResult\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVSubmitTask\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVSubmitTask\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVProcess\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVProcess\", \"Version\": \"2022-08-31\"}, {}, {}),\n        }\n        return api_info\n\n\ndef get_result(req_key, task_id):\n    i = 0\n    while True:\n        i += 1\n        result_resp = visual_service.cv_get_result({\n            \"req_key\": req_key,\n            \"task_id\": task_id\n        })\n        result_status = result_resp['data']['status']\n        print(f\"  Query #{i}, status: {result_status}\")\n        if result_status == \"in_queue\" or result_status == \"generating\":\n            sleep(3)\n            continue\n        if result_status == \"done\":\n            if 'data' in result_resp and 'resp_data' in result_resp['data']:\n                return json.loads(result_resp['data']['resp_data'])\n            elif 'data' in result_resp and 'video_url' in result_resp['data']:\n                return result_resp['data']['video_url']\n            else:\n                print(f\"  Failed to parse: {result_resp}\")\n                raise Exception(\"result parse failed\")\n        raise Exception(f\"task {result_status}\")\n\nif __name__ == '__main__':\n    image_url = \"https:\u002F\u002Fportal.volccdn.com\u002Fobj\u002Fvolcfe\u002Fcloud-universal-doc\u002Fupload_7297f5f099cee6b48f5417e47ac8291b.png\"\n    audio_url = \"https:\u002F\u002Fp9-arcosite.byteimg.com\u002Fobj\u002Ftos-cn-i-goo7wpa0wc\u002F64c66c987973400491c0b487d832537c\"\n    mask_urls = []\n\n    visual_service = SilvaMuxVisualService()\n\n    # Use the \"Volcengine compatible (AK\u002FSK)\" credentials created in the console to call the Volcengine-compatible API\n    visual_service.set_ak('AKexampleReplaceWithRealAK')\n    visual_service.set_sk('SKexampleReplaceWithRealSK')\n\n    print(\"Step 1: subject detection — skip if you are sure the image contains a human subject\")\n    step1_resp = visual_service.cv_submit_task({\n        \"req_key\": \"jimeng_realman_avatar_picture_create_role_omni_v15\",\n        \"image_url\": image_url\n    })\n    step1_resp_task_id = step1_resp['data']['task_id']\n    print(f\"  Task ID: {step1_resp_task_id}\")\n\n    step1_result = get_result(\"jimeng_realman_avatar_picture_create_role_omni_v15\", step1_resp_task_id)\n    if step1_result['status'] != 1:\n        raise Exception(\"No subject detected; the task failed. Try a different image.\")\n\n    print(\"Step 2: subject segmentation — skip if you don't need to designate the speaking subject in the video\")\n    step2_resp = visual_service.cv_process({\n        \"req_key\": \"jimeng_realman_avatar_object_detection\",\n        \"image_url\": image_url\n    })\n    step2_data = json.loads(step2_resp['data']['resp_data'])\n    mask_urls = step2_data['object_detection_result']['mask']['url']\n    print(f\"  Mask list: {mask_urls}\")\n\n    print(\"Step 3: video generation\")\n    step3_resp = visual_service.cv_submit_task({\n        \"req_key\": \"jimeng_realman_avatar_picture_omni_v15\",\n        \"image_url\": image_url,\n        \"mask_url\": mask_urls,\n        \"audio_url\": audio_url,\n    })\n    step3_resp_task_id = step3_resp['data']['task_id']\n    print(f\"  Task ID: {step3_resp_task_id}\")\n\n    step3_result = get_result(\"jimeng_realman_avatar_picture_omni_v15\", step3_resp_task_id)\n    print(f\"  Result: {step3_result}\")\n","python","",[221,245,246,254,260,266,272,279,285,291,297,303,309,314,320,326,332,337,343,349,355,361,366,372,378,384,390,396,401,407,413,419,425,431,437,443,448,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549,555,561,567,573,579,585,590,596,602,608,614,619,625,630,636,642,648,653,659,665,671,677,683,689,695,700,706,712,718,723,729,735,741,746,751,757,763,769,774,780,786,792,798,804,810,815,821,827,832,838],{"__ignoreMap":243},[247,248,251],"span",{"class":249,"line":250},"line",1,[247,252,253],{},"# coding:utf-8\n",[247,255,257],{"class":249,"line":256},2,[247,258,259],{},"import json\n",[247,261,263],{"class":249,"line":262},3,[247,264,265],{},"import threading\n",[247,267,269],{"class":249,"line":268},4,[247,270,271],{},"from time import sleep\n",[247,273,275],{"class":249,"line":274},5,[247,276,278],{"emptyLinePlaceholder":277},true,"\n",[247,280,282],{"class":249,"line":281},6,[247,283,284],{},"from volcengine.ApiInfo import ApiInfo\n",[247,286,288],{"class":249,"line":287},7,[247,289,290],{},"from volcengine.Credentials import Credentials\n",[247,292,294],{"class":249,"line":293},8,[247,295,296],{},"from volcengine.base.Service import Service\n",[247,298,300],{"class":249,"line":299},9,[247,301,302],{},"from volcengine.ServiceInfo import ServiceInfo\n",[247,304,306],{"class":249,"line":305},10,[247,307,308],{},"from volcengine.visual.VisualService import VisualService\n",[247,310,312],{"class":249,"line":311},11,[247,313,278],{"emptyLinePlaceholder":277},[247,315,317],{"class":249,"line":316},12,[247,318,319],{},"class SilvaMuxVisualService(VisualService):\n",[247,321,323],{"class":249,"line":322},13,[247,324,325],{},"    def __new__(cls, *args, **kwargs):\n",[247,327,329],{"class":249,"line":328},14,[247,330,331],{},"        return object.__new__(cls, *args, **kwargs)\n",[247,333,335],{"class":249,"line":334},15,[247,336,278],{"emptyLinePlaceholder":277},[247,338,340],{"class":249,"line":339},16,[247,341,342],{},"    def __init__(self):\n",[247,344,346],{"class":249,"line":345},17,[247,347,348],{},"        self.service_info = SilvaMuxVisualService.get_service_info()\n",[247,350,352],{"class":249,"line":351},18,[247,353,354],{},"        self.api_info = SilvaMuxVisualService.get_api_info()\n",[247,356,358],{"class":249,"line":357},19,[247,359,360],{},"        super(VisualService, self).__init__(self.service_info, self.api_info)\n",[247,362,364],{"class":249,"line":363},20,[247,365,278],{"emptyLinePlaceholder":277},[247,367,369],{"class":249,"line":368},21,[247,370,371],{},"    def get_service_info():\n",[247,373,375],{"class":249,"line":374},22,[247,376,377],{},"        # Use www.silvamux.com for the CN site; replace with www.silvamux.io for the global site\n",[247,379,381],{"class":249,"line":380},23,[247,382,383],{},"        service_info = ServiceInfo(\"www.silvamux.com\",\n",[247,385,387],{"class":249,"line":386},24,[247,388,389],{},"                                   {}, Credentials('', '', 'cv', 'cn-north-1'), 30, 30, 'https')\n",[247,391,393],{"class":249,"line":392},25,[247,394,395],{},"        return service_info\n",[247,397,399],{"class":249,"line":398},26,[247,400,278],{"emptyLinePlaceholder":277},[247,402,404],{"class":249,"line":403},27,[247,405,406],{},"    def get_api_info():\n",[247,408,410],{"class":249,"line":409},28,[247,411,412],{},"        api_info = {\n",[247,414,416],{"class":249,"line":415},29,[247,417,418],{},"            \"CVGetResult\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVGetResult\", \"Version\": \"2022-08-31\"}, {}, {}),\n",[247,420,422],{"class":249,"line":421},30,[247,423,424],{},"            \"CVSubmitTask\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVSubmitTask\", \"Version\": \"2022-08-31\"}, {}, {}),\n",[247,426,428],{"class":249,"line":427},31,[247,429,430],{},"            \"CVProcess\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVProcess\", \"Version\": \"2022-08-31\"}, {}, {}),\n",[247,432,434],{"class":249,"line":433},32,[247,435,436],{},"        }\n",[247,438,440],{"class":249,"line":439},33,[247,441,442],{},"        return api_info\n",[247,444,446],{"class":249,"line":445},34,[247,447,278],{"emptyLinePlaceholder":277},[247,449,451],{"class":249,"line":450},35,[247,452,278],{"emptyLinePlaceholder":277},[247,454,456],{"class":249,"line":455},36,[247,457,458],{},"def get_result(req_key, task_id):\n",[247,460,462],{"class":249,"line":461},37,[247,463,464],{},"    i = 0\n",[247,466,468],{"class":249,"line":467},38,[247,469,470],{},"    while True:\n",[247,472,474],{"class":249,"line":473},39,[247,475,476],{},"        i += 1\n",[247,478,480],{"class":249,"line":479},40,[247,481,482],{},"        result_resp = visual_service.cv_get_result({\n",[247,484,486],{"class":249,"line":485},41,[247,487,488],{},"            \"req_key\": req_key,\n",[247,490,492],{"class":249,"line":491},42,[247,493,494],{},"            \"task_id\": task_id\n",[247,496,498],{"class":249,"line":497},43,[247,499,500],{},"        })\n",[247,502,504],{"class":249,"line":503},44,[247,505,506],{},"        result_status = result_resp['data']['status']\n",[247,508,510],{"class":249,"line":509},45,[247,511,512],{},"        print(f\"  Query #{i}, status: {result_status}\")\n",[247,514,516],{"class":249,"line":515},46,[247,517,518],{},"        if result_status == \"in_queue\" or result_status == \"generating\":\n",[247,520,522],{"class":249,"line":521},47,[247,523,524],{},"            sleep(3)\n",[247,526,528],{"class":249,"line":527},48,[247,529,530],{},"            continue\n",[247,532,534],{"class":249,"line":533},49,[247,535,536],{},"        if result_status == \"done\":\n",[247,538,540],{"class":249,"line":539},50,[247,541,542],{},"            if 'data' in result_resp and 'resp_data' in result_resp['data']:\n",[247,544,546],{"class":249,"line":545},51,[247,547,548],{},"                return json.loads(result_resp['data']['resp_data'])\n",[247,550,552],{"class":249,"line":551},52,[247,553,554],{},"            elif 'data' in result_resp and 'video_url' in result_resp['data']:\n",[247,556,558],{"class":249,"line":557},53,[247,559,560],{},"                return result_resp['data']['video_url']\n",[247,562,564],{"class":249,"line":563},54,[247,565,566],{},"            else:\n",[247,568,570],{"class":249,"line":569},55,[247,571,572],{},"                print(f\"  Failed to parse: {result_resp}\")\n",[247,574,576],{"class":249,"line":575},56,[247,577,578],{},"                raise Exception(\"result parse failed\")\n",[247,580,582],{"class":249,"line":581},57,[247,583,584],{},"        raise Exception(f\"task {result_status}\")\n",[247,586,588],{"class":249,"line":587},58,[247,589,278],{"emptyLinePlaceholder":277},[247,591,593],{"class":249,"line":592},59,[247,594,595],{},"if __name__ == '__main__':\n",[247,597,599],{"class":249,"line":598},60,[247,600,601],{},"    image_url = \"https:\u002F\u002Fportal.volccdn.com\u002Fobj\u002Fvolcfe\u002Fcloud-universal-doc\u002Fupload_7297f5f099cee6b48f5417e47ac8291b.png\"\n",[247,603,605],{"class":249,"line":604},61,[247,606,607],{},"    audio_url = \"https:\u002F\u002Fp9-arcosite.byteimg.com\u002Fobj\u002Ftos-cn-i-goo7wpa0wc\u002F64c66c987973400491c0b487d832537c\"\n",[247,609,611],{"class":249,"line":610},62,[247,612,613],{},"    mask_urls = []\n",[247,615,617],{"class":249,"line":616},63,[247,618,278],{"emptyLinePlaceholder":277},[247,620,622],{"class":249,"line":621},64,[247,623,624],{},"    visual_service = SilvaMuxVisualService()\n",[247,626,628],{"class":249,"line":627},65,[247,629,278],{"emptyLinePlaceholder":277},[247,631,633],{"class":249,"line":632},66,[247,634,635],{},"    # Use the \"Volcengine compatible (AK\u002FSK)\" credentials created in the console to call the Volcengine-compatible API\n",[247,637,639],{"class":249,"line":638},67,[247,640,641],{},"    visual_service.set_ak('AKexampleReplaceWithRealAK')\n",[247,643,645],{"class":249,"line":644},68,[247,646,647],{},"    visual_service.set_sk('SKexampleReplaceWithRealSK')\n",[247,649,651],{"class":249,"line":650},69,[247,652,278],{"emptyLinePlaceholder":277},[247,654,656],{"class":249,"line":655},70,[247,657,658],{},"    print(\"Step 1: subject detection — skip if you are sure the image contains a human subject\")\n",[247,660,662],{"class":249,"line":661},71,[247,663,664],{},"    step1_resp = visual_service.cv_submit_task({\n",[247,666,668],{"class":249,"line":667},72,[247,669,670],{},"        \"req_key\": \"jimeng_realman_avatar_picture_create_role_omni_v15\",\n",[247,672,674],{"class":249,"line":673},73,[247,675,676],{},"        \"image_url\": image_url\n",[247,678,680],{"class":249,"line":679},74,[247,681,682],{},"    })\n",[247,684,686],{"class":249,"line":685},75,[247,687,688],{},"    step1_resp_task_id = step1_resp['data']['task_id']\n",[247,690,692],{"class":249,"line":691},76,[247,693,694],{},"    print(f\"  Task ID: {step1_resp_task_id}\")\n",[247,696,698],{"class":249,"line":697},77,[247,699,278],{"emptyLinePlaceholder":277},[247,701,703],{"class":249,"line":702},78,[247,704,705],{},"    step1_result = get_result(\"jimeng_realman_avatar_picture_create_role_omni_v15\", step1_resp_task_id)\n",[247,707,709],{"class":249,"line":708},79,[247,710,711],{},"    if step1_result['status'] != 1:\n",[247,713,715],{"class":249,"line":714},80,[247,716,717],{},"        raise Exception(\"No subject detected; the task failed. Try a different image.\")\n",[247,719,721],{"class":249,"line":720},81,[247,722,278],{"emptyLinePlaceholder":277},[247,724,726],{"class":249,"line":725},82,[247,727,728],{},"    print(\"Step 2: subject segmentation — skip if you don't need to designate the speaking subject in the video\")\n",[247,730,732],{"class":249,"line":731},83,[247,733,734],{},"    step2_resp = visual_service.cv_process({\n",[247,736,738],{"class":249,"line":737},84,[247,739,740],{},"        \"req_key\": \"jimeng_realman_avatar_object_detection\",\n",[247,742,744],{"class":249,"line":743},85,[247,745,676],{},[247,747,749],{"class":249,"line":748},86,[247,750,682],{},[247,752,754],{"class":249,"line":753},87,[247,755,756],{},"    step2_data = json.loads(step2_resp['data']['resp_data'])\n",[247,758,760],{"class":249,"line":759},88,[247,761,762],{},"    mask_urls = step2_data['object_detection_result']['mask']['url']\n",[247,764,766],{"class":249,"line":765},89,[247,767,768],{},"    print(f\"  Mask list: {mask_urls}\")\n",[247,770,772],{"class":249,"line":771},90,[247,773,278],{"emptyLinePlaceholder":277},[247,775,777],{"class":249,"line":776},91,[247,778,779],{},"    print(\"Step 3: video generation\")\n",[247,781,783],{"class":249,"line":782},92,[247,784,785],{},"    step3_resp = visual_service.cv_submit_task({\n",[247,787,789],{"class":249,"line":788},93,[247,790,791],{},"        \"req_key\": \"jimeng_realman_avatar_picture_omni_v15\",\n",[247,793,795],{"class":249,"line":794},94,[247,796,797],{},"        \"image_url\": image_url,\n",[247,799,801],{"class":249,"line":800},95,[247,802,803],{},"        \"mask_url\": mask_urls,\n",[247,805,807],{"class":249,"line":806},96,[247,808,809],{},"        \"audio_url\": audio_url,\n",[247,811,813],{"class":249,"line":812},97,[247,814,682],{},[247,816,818],{"class":249,"line":817},98,[247,819,820],{},"    step3_resp_task_id = step3_resp['data']['task_id']\n",[247,822,824],{"class":249,"line":823},99,[247,825,826],{},"    print(f\"  Task ID: {step3_resp_task_id}\")\n",[247,828,830],{"class":249,"line":829},100,[247,831,278],{"emptyLinePlaceholder":277},[247,833,835],{"class":249,"line":834},101,[247,836,837],{},"    step3_result = get_result(\"jimeng_realman_avatar_picture_omni_v15\", step3_resp_task_id)\n",[247,839,841],{"class":249,"line":840},102,[247,842,843],{},"    print(f\"  Result: {step3_result}\")\n",[192,845,846],{},"Detailed API documentation:",[848,849,850,858,865],"ul",{},[851,852,853],"li",{},[202,854,857],{"href":855,"rel":856},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1828975?lang=zh",[206],"Step 1: subject detection",[851,859,860],{},[202,861,864],{"href":862,"rel":863},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1829011?lang=zh",[206],"Step 2: subject segmentation",[851,866,867],{},[202,868,871],{"href":869,"rel":870},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1829013?lang=zh",[206],"Step 3: video generation",[873,874,875],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":243,"searchDepth":256,"depth":256,"links":877},[878],{"id":212,"depth":256,"text":213},"Generate OmniHuman digital-human videos from an image and audio.","md",{},"\u002Fmodels\u002Fvideo\u002Fomni-human","---\ntitle: OmniHuman 1.5\ndescription: Generate OmniHuman digital-human videos from an image and audio.\nnavigation: false\n---\n\n# Jimeng OmniHuman 1.5\n\nOmniHuman 1.5 (the Jimeng-sourced digital-human model) generates video from a single uploaded image plus audio that corresponds to the image. It accepts images of people or other subjects (pets, anime characters, etc.) in any aspect ratio and combines them with audio to produce high-quality video.\n\nThe subject's emotion and motion are strongly tied to the audio, and prompts can adjust the scene, actions, and camera work. OmniHuman 1.5 also handles anime and pet subjects well and lets you designate the speaker\u002Fsubject, making it useful for storytelling, duets, product interaction, comic drama, and more. Compared to the previous generation, OmniHuman 1.5 improves motion naturalness and structural stability noticeably, with stronger expressiveness in subject motion and overall picture quality.\n\nFor detailed model documentation, see the [Volcengine docs](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1834143?lang=zh).\n\n## Call Examples\n\nSilvaMux provides the same Jimeng OmniHuman 1.5 API as Volcengine; you can use the Volcengine SDK or integrate through your own API client.\n\nIntegration goes through the Volcengine-compatible CV API: `POST \u002Fapi\u002Fark?Action=CVSubmitTask|CVProcess|CVGetResult&Version=2022-08-31`; AK\u002FSK authentication and signing are described in the Volcengine-compatible section of [Asset Management](\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Fassets). The Volcengine links below are for looking up OmniHuman-specific input fields; the access address and credentials still come from SilvaMux.\n\nUsing the Volcengine Python SDK as an example — install the SDK with `pip install volcengine`, then run the sample script:\n\n```python\n# coding:utf-8\nimport json\nimport threading\nfrom time import sleep\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.visual.VisualService import VisualService\n\nclass SilvaMuxVisualService(VisualService):\n    def __new__(cls, *args, **kwargs):\n        return object.__new__(cls, *args, **kwargs)\n\n    def __init__(self):\n        self.service_info = SilvaMuxVisualService.get_service_info()\n        self.api_info = SilvaMuxVisualService.get_api_info()\n        super(VisualService, self).__init__(self.service_info, self.api_info)\n\n    def get_service_info():\n        # Use www.silvamux.com for the CN site; replace with www.silvamux.io for the global site\n        service_info = ServiceInfo(\"www.silvamux.com\",\n                                   {}, Credentials('', '', 'cv', 'cn-north-1'), 30, 30, 'https')\n        return service_info\n\n    def get_api_info():\n        api_info = {\n            \"CVGetResult\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVGetResult\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVSubmitTask\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVSubmitTask\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVProcess\": ApiInfo(\"POST\", \"\u002Fapi\u002Fark\", {\"Action\": \"CVProcess\", \"Version\": \"2022-08-31\"}, {}, {}),\n        }\n        return api_info\n\n\ndef get_result(req_key, task_id):\n    i = 0\n    while True:\n        i += 1\n        result_resp = visual_service.cv_get_result({\n            \"req_key\": req_key,\n            \"task_id\": task_id\n        })\n        result_status = result_resp['data']['status']\n        print(f\"  Query #{i}, status: {result_status}\")\n        if result_status == \"in_queue\" or result_status == \"generating\":\n            sleep(3)\n            continue\n        if result_status == \"done\":\n            if 'data' in result_resp and 'resp_data' in result_resp['data']:\n                return json.loads(result_resp['data']['resp_data'])\n            elif 'data' in result_resp and 'video_url' in result_resp['data']:\n                return result_resp['data']['video_url']\n            else:\n                print(f\"  Failed to parse: {result_resp}\")\n                raise Exception(\"result parse failed\")\n        raise Exception(f\"task {result_status}\")\n\nif __name__ == '__main__':\n    image_url = \"https:\u002F\u002Fportal.volccdn.com\u002Fobj\u002Fvolcfe\u002Fcloud-universal-doc\u002Fupload_7297f5f099cee6b48f5417e47ac8291b.png\"\n    audio_url = \"https:\u002F\u002Fp9-arcosite.byteimg.com\u002Fobj\u002Ftos-cn-i-goo7wpa0wc\u002F64c66c987973400491c0b487d832537c\"\n    mask_urls = []\n\n    visual_service = SilvaMuxVisualService()\n\n    # Use the \"Volcengine compatible (AK\u002FSK)\" credentials created in the console to call the Volcengine-compatible API\n    visual_service.set_ak('AKexampleReplaceWithRealAK')\n    visual_service.set_sk('SKexampleReplaceWithRealSK')\n\n    print(\"Step 1: subject detection — skip if you are sure the image contains a human subject\")\n    step1_resp = visual_service.cv_submit_task({\n        \"req_key\": \"jimeng_realman_avatar_picture_create_role_omni_v15\",\n        \"image_url\": image_url\n    })\n    step1_resp_task_id = step1_resp['data']['task_id']\n    print(f\"  Task ID: {step1_resp_task_id}\")\n\n    step1_result = get_result(\"jimeng_realman_avatar_picture_create_role_omni_v15\", step1_resp_task_id)\n    if step1_result['status'] != 1:\n        raise Exception(\"No subject detected; the task failed. Try a different image.\")\n\n    print(\"Step 2: subject segmentation — skip if you don't need to designate the speaking subject in the video\")\n    step2_resp = visual_service.cv_process({\n        \"req_key\": \"jimeng_realman_avatar_object_detection\",\n        \"image_url\": image_url\n    })\n    step2_data = json.loads(step2_resp['data']['resp_data'])\n    mask_urls = step2_data['object_detection_result']['mask']['url']\n    print(f\"  Mask list: {mask_urls}\")\n\n    print(\"Step 3: video generation\")\n    step3_resp = visual_service.cv_submit_task({\n        \"req_key\": \"jimeng_realman_avatar_picture_omni_v15\",\n        \"image_url\": image_url,\n        \"mask_url\": mask_urls,\n        \"audio_url\": audio_url,\n    })\n    step3_resp_task_id = step3_resp['data']['task_id']\n    print(f\"  Task ID: {step3_resp_task_id}\")\n\n    step3_result = get_result(\"jimeng_realman_avatar_picture_omni_v15\", step3_resp_task_id)\n    print(f\"  Result: {step3_result}\")\n```\n\nDetailed API documentation:\n\n- [Step 1: subject detection](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1828975?lang=zh)\n- [Step 2: subject segmentation](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1829011?lang=zh)\n- [Step 3: video generation](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F85621\u002F1829013?lang=zh)\n",[],{"title":182,"description":879},"4.models\u002F3.video\u002F5.omni-human","Ix2J1WM2qwbFWuxQ5R7Gv2nkjYzetvyCXiVr3uNedXM"]