## Basic tool info Model name: pruna/p-video-avatar Model description: Generate a lip-synced talking avatar video from a single portrait image plus a script or uploaded audio. Pick a voice, language, and 720p or 1080p output. Model cover: https://cdn.wiro.ai/uploads/models/pruna-p-video-avatar-cover.mp4 Model categories: - tool - use-agent - quick-showcase - partner - pruna - fast-inference - image-to-video - nogpu-pipeline Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/pruna/p-video-avatar Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: Input Image help: Required: Portrait image (jpg, jpeg, png, webp) type: combinefileinput default: pruna-p-videoavatar-input-1.jpg - name: voiceScript label: Voice Script help: Script for the person to say. Required if no audio is provided. Ignored when audio is provided type: textarea default: We all know how frustrating it can be when you're dealing with flat tire. It wastes your time, drains your energy, and gets in the way of your day. That is exactly why this product was created. By combining smart design with intuitive features, it completely eliminates the hassle and lets you get back to what matters most. It's fast, it's reliable, and it's incredibly easy to use. Click the link below to see exactly how it works. - name: voice label: Voice help: Voice for generated speech. Ignored when audio is provided type: select default: Zephyr (Female) options: - value: "Zephyr (Female)" label: Zephyr (Female) - value: "Puck (Male)" label: Puck (Male) - value: "Charon (Male)" label: Charon (Male) - value: "Kore (Female)" label: Kore (Female) - value: "Fenrir (Male)" label: Fenrir (Male) - value: "Leda (Female)" label: Leda (Female) - value: "Orus (Male)" label: Orus (Male) - value: "Aoede (Female)" label: Aoede (Female) - value: "Callirrhoe (Female)" label: Callirrhoe (Female) - value: "Autonoe (Female)" label: Autonoe (Female) - value: "Enceladus (Male)" label: Enceladus (Male) - value: "Iapetus (Male)" label: Iapetus (Male) - value: "Umbriel (Male)" label: Umbriel (Male) - value: "Algenib (Male)" label: Algenib (Male) - value: "Despina (Female)" label: Despina (Female) - value: "Erinome (Female)" label: Erinome (Female) - value: "Laomedeia (Female)" label: Laomedeia (Female) - value: "Achernar (Female)" label: Achernar (Female) - value: "Algieba (Male)" label: Algieba (Male) - value: "Schedar (Male)" label: Schedar (Male) - value: "Gacrux (Female)" label: Gacrux (Female) - value: "Pulcherrima (Female)" label: Pulcherrima (Female) - value: "Achird (Male)" label: Achird (Male) - value: "Zubenelgenubi (Male)" label: Zubenelgenubi (Male) - value: "Vindemiatrix (Female)" label: Vindemiatrix (Female) - value: "Sadachbia (Male)" label: Sadachbia (Male) - value: "Sadaltager (Male)" label: Sadaltager (Male) - value: "Sulafat (Female)" label: Sulafat (Female) - value: "Alnilam (Male)" label: Alnilam (Male) - value: "Rasalgethi (Male)" label: Rasalgethi (Male) - name: voiceLanguage label: Voice Language help: Output language. Ignored when audio is provided type: select default: English (US) options: - value: "English (US)" label: English (US) - value: "English (UK)" label: English (UK) - value: "Spanish" label: Spanish - value: "French" label: French - value: "German" label: German - value: "Italian" label: Italian - value: "Portuguese (Brazil)" label: Portuguese (Brazil) - value: "Japanese" label: Japanese - value: "Korean" label: Korean - value: "Hindi" label: Hindi - name: inputAudio label: Input Audio help: Optional: Audio (flac, mp3, wav). Takes priority over Voice Script if both provided type: combinefileinput default: - name: resolution label: Resolution help: Required. 720p ($0.025/sec) or 1080p ($0.045/sec) type: select default: 720p options: - value: "720p" label: 720p - value: "1080p" label: 1080p - name: videoPrompt label: Video Prompt help: Optional prompt describing the video type: textarea default: The person is talking. - name: voicePrompt label: Voice Prompt help: Optional speaking style, tone, pacing or emotion instructions type: textarea default: Say the following. - name: seed label: Seed help: Random seed. Leave zero to randomize the seed type: text default: 0 - name: disableSafetyFilter label: Disable Safety Filter help: When disabled, prompts and image are not checked for unsafe content before generation type: select default: true options: - value: "true" label: True - value: "false" label: False - name: disablePromptUpsampling label: Disable Prompt Upsampling help: When true, skip the multimodal prompt upsampler and pass the raw user prompt to the video model type: select default: false options: - value: "true" label: True - value: "false" label: False ## Model Parameter Inspires: - voiceScript: We all know how frustrating it can be when you're dealing with flat tire. It wastes your time, drains your energy, and gets in the way of your day. That is exactly why this product was created. By combining smart design with intuitive features, it completely eliminates the hassle and lets you get back to what matters most. It's fast, it's reliable, and it's incredibly easy to use. Click the link below to see exactly how it works. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/pruna-p-videoavatar-input-1.jpg - voiceScript: Good morning. Here is your daily community update. The annual city library fair will officially begin this Friday and run through the weekend. Organizers expect a record number of attendees this year, with dozens of local authors scheduled to speak. Please be aware that several roads near the civic center will be closed to accommodate the event. Commuters are advised to check the city website and plan alternative routes. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/pruna-p-videoavatar-input-2.jpg - voiceScript: In a future where people can securely backup their memories to a cloud server, a detective is hired to investigate a murder. The catch? The victim is still alive, but their backup from the last 48 hours was deliberately deleted—and they have no idea who tried to kill them or why. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/pruna-p-videoavatar-input-3.jpg - voiceScript: Greetings. Today, I'd like to share a brief thought on the importance of clear communication. Taking just a few moments to organize our thoughts before we speak or write can greatly reduce daily misunderstandings. It is a simple habit, but one that makes our interactions much smoother and more effective. Thanks for listening. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/pruna-p-videoavatar-input-4.jpg ## Integration Header Prepare ```bash # Sign up Wiro dashboard and create project export YOUR_API_KEY="{{useSelectedProjectAPIKey}}"; export YOUR_API_SECRET="XXXXXXXXX"; # unix time or any random integer value export NONCE=$(date +%s); # hmac-SHA256 (YOUR_API_SECRET+Nonce) with YOUR_API_KEY export SIGNATURE="$(echo -n "${YOUR_API_SECRET}${NONCE}" | openssl dgst -sha256 -hmac "${YOUR_API_KEY}")"; ``` ## Run Command - Make HTTP Post Request ```bash curl -X POST "https://api.wiro.ai/v1/Run/pruna/p-video-avatar" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "pruna-p-videoavatar-input-1.jpg", "voiceScript": "We all know how frustrating it can be when you're dealing with flat tire. It wastes your time, drains your energy, and gets in the way of your day. That is exactly why this product was created. By combining smart design with intuitive features, it completely eliminates the hassle and lets you get back to what matters most. It's fast, it's reliable, and it's incredibly easy to use. Click the link below to see exactly how it works.", "voice": "Zephyr (Female)", "voiceLanguage": "English (US)", "inputAudio": "", "resolution": "720p", "videoPrompt": "The person is talking.", "voicePrompt": "Say the following.", "seed": "0", "disableSafetyFilter": "true", "disablePromptUpsampling": "false", "callbackUrl": "You can provide a callback URL; Wiro will send a POST request to it when the task is completed." }'; ``` ## Run Command - Response ```json { "errors": [], "taskid": "2221", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "result": true } ``` ## Get Task Detail - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "2221" }'; ``` ## Get Task Detail - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "tasktoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt" }'; ``` ## Get Task Detail - Response ```json { "total": "1", "errors": [], "tasklist": [ { "id": "2221", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "parameters": {}, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_postprocess_end", "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Kill Task - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "534574" }'; ``` ## Kill Task - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE" }'; ``` ## Kill Task - Response ```json { "errors": [], "tasklist": [ { "id": "534574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Cancel Task - Make HTTP Post Request (For tasks on queue) ```bash curl -X POST "https://api.wiro.ai/v1/Task/Cancel" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "634574" }'; ``` ## Cancel Task - Response ```json { "errors": [], "tasklist": [ { "id": "634574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Task Status Information This section defines the possible task status values returned by the API when polling for task completion. ### Completed Task Statuses (Polling can stop) These indicate that the task has reached a terminal state — either success or failure. Once any of these is received, polling should stop. - task_postprocess_end : Task completed successfully and post-processing is done. - task_cancel : Task was cancelled by the user or system. ### Running Task Statuses (Continue polling) These statuses indicate that the task is still in progress. Polling should continue if one of these is returned. - task_queue : Task is waiting in the queue. - task_accept : Task has been accepted for processing. - task_assign : Task is being assigned to a worker. - task_preprocess_start : Preprocessing is starting. - task_preprocess_end : Preprocessing is complete. - task_start : Task execution has started. - task_output : Output is being generated.