## Basic tool info Model name: pruna/p-video-2-pro-reference Model description: Generate 5–15s videos from a prompt plus reference images, clips, and audio. Pruna’s P-Video 2 Pro Reference outputs 480p/768p MP4 with sound. Model cover: https://cdn.wiro.ai/uploads/models/pruna-p-video-2-pro-reference-cover.mp4 Model categories: - tool - use-agent - quick-showcase - partner - pruna - nogpu-pipeline - image-to-video Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/pruna/p-video-2-pro-reference Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImageFirst label: First Frame Image help: Optional: Soft start keyframe. Counts as a reference image type: combinefileinput default: p-video-2-pro-reference-sampleinput-1.jpeg - name: inputImageReference label: Reference Images help: Optional: Up to 9 reference images (first and last frame images count toward this limit). Max 20 MB and 4096 px each. At least one reference image or video is required. type: combinefileinput default: - name: prompt label: Prompt help: Required: Describe the video to generate and how the reference images, videos and audios should be used type: textarea default: Turquoise waves from the reference image roll in one after another, curl and break into white foam that rushes up the wet sand and slowly pulls back, leaving shimmering reflections of the golden sky. Palm leaves sway gently in the breeze, the camera slowly glides forward along the shoreline, crashing waves and soft wind - name: inputImageLast label: Last Frame Image help: Optional: Soft end keyframe. Counts as a reference image type: combinefileinput default: - name: inputVideo label: Reference Videos help: Optional: Up to 3 reference videos, 2-15 seconds each and 15 seconds in total. Longer videos are trimmed. Max 100 MB, 1080p and 60 fps each. type: combinefileinput default: - name: inputAudio label: Reference Audios help: Optional: Up to 3 reference audios, 15 seconds in total. Longer audios are trimmed. Max 50 MB each. type: combinefileinput default: - name: keepAudio label: Keep Audio help: Optional: Use the reference audio as the soundtrack instead of only as a reference. Requires exactly one reference audio. Shorter audio plays first and the rest is generated, longer audio is cut to the duration type: select default: false options: - value: "false" label: Off - value: "true" label: On - name: duration label: Duration help: Required: Length of the generated video type: number default: 5 - name: resolution label: Resolution help: Required: Output resolution. The video is always 24 fps and includes generated audio type: select default: 768p options: - value: "480p" label: 480p - value: "768p" label: 768p - name: mode label: Mode help: Required: Generation recipe. Speed gives better results, cost is cheaper type: select default: speed options: - value: "speed" label: Speed - value: "cost" label: Cost - name: aspectRatio label: Aspect Ratio help: Optional: Output aspect ratio. Adaptive follows the references type: select default: adaptive options: - value: "adaptive" label: Adaptive - value: "16:9" label: 16:9 - value: "9:16" label: 9:16 - value: "4:3" label: 4:3 - value: "3:4" label: 3:4 - value: "3:2" label: 3:2 - value: "2:3" label: 2:3 - value: "1:1" label: 1:1 - name: promptUpsampler label: Prompt Upsampler help: Optional: Expand the prompt before generation. Independent of the selected mode. First and last frame images always use turbo type: select default: turbo options: - value: "off" label: Off - value: "turbo" label: Turbo - value: "max" label: Max - name: seed label: Seed help: Optional: Random seed. Set for reproducible generation type: text default: ## Model Parameter Inspires: - prompt: Turquoise waves from the reference image roll in one after another, curl and break into white foam that rushes up the wet sand and slowly pulls back, leaving shimmering reflections of the golden sky. Palm leaves sway gently in the breeze, the camera slowly glides forward along the shoreline, crashing waves and soft wind - inputImageReference: https://cdn.wiro.ai/uploads/sampleinputs/p-video-2-pro-reference-sampleinput-1.jpeg - prompt: The flamenco dancer from the reference image raises her arms, spins sharply and sweeps the ruffles of her dress, then strikes the wooden floor with rapid heel stamps. The spotlight follows her, fast Spanish guitar strumming, handclaps and the sound of her heels - inputImageReference: https://cdn.wiro.ai/uploads/sampleinputs/p-video-2-pro-reference-sampleinput-2.jpeg - prompt: The street artist from the reference image shakes a spray can, then sweeps it across the wall, adding bright orange and electric blue strokes to the tiger mural as fine paint mist drifts through the streetlight. The camera slowly arcs around him to reveal the mural, the rattle of the can, hissing spray and distant city traffic - inputImageReference: https://cdn.wiro.ai/uploads/sampleinputs/p-video-2-pro-reference-sampleinput-3.jpeg - prompt: The origami crane from the reference image slowly comes to life, flaps its paper wings with crisp folding sounds and lifts off the book, then circles the sunlit desk as the book's pages flutter in the draft. It flies toward the bright window and glides along the glass, gentle piano melody - inputImageReference: https://cdn.wiro.ai/uploads/sampleinputs/p-video-2-pro-reference-sampleinput-4.jpeg ## 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}" | awk '{print $NF}')"; ``` ## Run Command - Make HTTP Post Request ```bash curl -X POST "https://api.wiro.ai/v1/Run/pruna/p-video-2-pro-reference" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImageFirst": "p-video-2-pro-reference-sampleinput-1.jpeg", "inputImageReference": "", "prompt": "Turquoise waves from the reference image roll in one after another, curl and break into white foam that rushes up the wet sand and slowly pulls back, leaving shimmering reflections of the golden sky. Palm leaves sway gently in the breeze, the camera slowly glides forward along the shoreline, crashing waves and soft wind", "inputImageLast": "", "inputVideo": "", "inputAudio": "", "keepAudio": "false", "duration": 5, "resolution": "768p", "mode": "speed", "aspectRatio": "adaptive", "promptUpsampler": "turbo", "seed": "", "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", "totalcost": "0.003510000000", "chargedcost": "0.002808000000", "discountamount": "0.000702000000", "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 } ``` totalcost is the list price. chargedcost is the amount actually billed after any discount (a store fee is included on store runs); discountamount is the discount. chargedcost is null until the charge is recorded (shortly after task_postprocess_end) and "0" for a failed or cancelled task. ## 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.