## Basic tool info Model name: wiro/Scale Shift Effect Model description: Cosmic-to-micro scale-shift videos generated from a single portrait. 31 scenarios across galaxy zooms, ant scale, giant stomp and ocean trench dives. Model cover: https://cdn.wiro.ai/uploads/models/wiro-scale-shift-effect-cover.mp4 Model categories: - tool - use-agent - wiroEntertainment - fast-inference - image-to-video - wiro-app - beautykit - partner - nogpu-pipeline Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/wiro/scale-shift-effect Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: Input Image help: Required: 1–2 images depending on selected effect — see scenario note type: combinefileinput default: ai-portrait-daily-asian-woman.webp - name: effectType label: Effect Type help: Required type: selectwithcover default: earth+zoom-ocean+trench options: - value: "earth+zoom-ocean+trench" label: Ocean Trench to Surface cover: seffect/earth%2Bzoom-ocean%2Btrench.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-coastal+evolution" label: Coastal City 10,000-Year Timelapse cover: seffect/earth%2Bzoom-coastal%2Bevolution.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-megacity+construction" label: Empty Plot to Megacity cover: seffect/earth%2Bzoom-megacity%2Bconstruction.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-amazon+rainforest" label: Tropical Leaf to Earth from Space cover: seffect/earth%2Bzoom-amazon%2Brainforest.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-fpv+canyon" label: FPV Canyon Dive Through City cover: seffect/earth%2Bzoom-fpv%2Bcanyon.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-galaxy+to+eye" label: Galaxy to Human Eye cover: seffect/earth%2Bzoom-galaxy%2Bto%2Beye.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-ancient+kingdom+fpv" label: Ancient Kingdom FPV Flight cover: seffect/earth%2Bzoom-ancient%2Bkingdom%2Bfpv.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-giant+city+stomp" label: Giant City Stomp cover: seffect/shrink%2Bgrow-giant%2Bcity%2Bstomp.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-ant-scale+forest" label: Ant Scale Meadow cover: seffect/shrink%2Bgrow-ant-scale%2Bforest.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-skyscraper+giant" label: Skyscraper Giant Sunset cover: seffect/shrink%2Bgrow-skyscraper%2Bgiant.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-oneill+space+colony" label: O-Neill Space Colony Cylinder Zoom cover: seffect/earth%2Bzoom-oneill%2Bspace%2Bcolony.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-pastel+dyson+swarm" label: Pastel Dyson Swarm Retro Future Zoom cover: seffect/earth%2Bzoom-pastel%2Bdyson%2Bswarm.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-miniature+skateboard+room" label: Miniature Skateboard Child Room Shrink cover: seffect/shrink%2Bgrow-miniature%2Bskateboard%2Broom.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-pinball+god+hand" label: Pinball Machine God Hand Scale Shift cover: seffect/shrink%2Bgrow-pinball%2Bgod%2Bhand.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-sci+fi+generation+ship" label: Sci-Fi Generation Ship Impossible Camera Tour cover: seffect/earth%2Bzoom-sci%2Bfi%2Bgeneration%2Bship.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-luxury+cruise+ship+tour" label: Luxury Cruise Ship Impossible Camera Interior Exterior Tour cover: seffect/earth%2Bzoom-luxury%2Bcruise%2Bship%2Btour.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-bioluminescent+coral+city" label: Bioluminescent Coral City Underwater Scale Shift cover: seffect/earth%2Bzoom-bioluminescent%2Bcoral%2Bcity.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-david+vs+goliath+epic" label: David vs Goliath Biblical Impossible Battle Scale cover: seffect/earth%2Bzoom-david%2Bvs%2Bgoliath%2Bepic.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-sea+creatures+tanks+tiny" label: Giant Preserved Sea Creatures Tiny Scientists Scale cover: seffect/shrink%2Bgrow-sea%2Bcreatures%2Btanks%2Btiny.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-prehistoric+beast+desert" label: Prehistoric Beast Wakes Desert Scale Emergence cover: seffect/shrink%2Bgrow-prehistoric%2Bbeast%2Bdesert.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-oneill+space+colony+interior" label: O'Neill Space Colony Interior Film Still cover: seffect/earth%2Bzoom-oneill%2Bspace%2Bcolony%2Binterior.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-skytree+tower+to+railgun" label: Tower Transforming Into Railgun Sky Firing cover: seffect/earth%2Bzoom-skytree%2Btower%2Bto%2Brailgun.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-miniature+combat+models+desk" label: Miniature Fantasy Combat Models Awaken on Desk cover: seffect/earth%2Bzoom-miniature%2Bcombat%2Bmodels%2Bdesk.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-solitary+robot+mountain+peak" label: Solitary Exploration Robot on Mountain Peak Earth cover: seffect/earth%2Bzoom-solitary%2Brobot%2Bmountain%2Bpeak.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-buried+city+emerge+desert+sand" label: Buried Ancient City Slowly Emerges from Desert Sand cover: seffect/earth%2Bzoom-buried%2Bcity%2Bemerge%2Bdesert%2Bsand.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-black+hole+accretion+disk+space" label: Hyperreal Black Hole Accretion Disk Space Cinematography cover: seffect/earth%2Bzoom-black%2Bhole%2Baccretion%2Bdisk%2Bspace.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-raindrop+cloud+to+cheek+macro+journey" label: Raindrop Cloud-to-Cheek Continuous Macro Journey cover: seffect/shrink%2Bgrow-raindrop%2Bcloud%2Bto%2Bcheek%2Bmacro%2Bjourney.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "shrink+grow-ar+tiny+character+glass+cup+hand" label: AR Tiny Character In-Glass Cup Interaction cover: seffect/shrink%2Bgrow-ar%2Btiny%2Bcharacter%2Bglass%2Bcup%2Bhand.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. - value: "earth+zoom-robot+workshop+reveal" label: Earth Zoom Robot Workshop Reveal cover: seffect/earth%2Bzoom-robot%2Bworkshop%2Breveal.mp4 inputImageCount: 2 inputImageNote: Upload 1 human portrait and 1 robot-companion reference. - value: "micro+scale-arrow+micro+civilization" label: Arrow Micro-Civilization Zoom cover: seffect/micro%2Bscale-arrow%2Bmicro%2Bcivilization.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo (the archer). - value: "earth+zoom-coast+evolution+10k+year" label: Coast Evolution 10,000-Year Dolly cover: seffect/earth%2Bzoom-coast%2Bevolution%2B10k%2Byear.mp4 inputImageCount: 1 inputImageNote: Upload 1 human portrait photo. The observer is NOT visible during the coastal evolution (0:00-0:08); [Image 1] is revealed only at the final hero close-up (0:085-0:10) as a detailed face turned toward the camera, pixel-level faithful to the uploaded portrait. - name: videoMode label: Video Mode help: Required. Default Standard type: select default: std options: - value: "std" label: Standard - value: "pro" label: Pro - name: ratio label: ratio help: Required. Default 9:16 type: select default: 9:16 options: - value: "9:16" label: 9:16 - value: "16:9" label: 16:9 - value: "1:1" label: 1:1 - name: duration label: Duration help: Required. Default 5s type: select default: 5 options: - value: "5" label: 5s - value: "10" label: 10s - value: "15" label: 15s ## 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/wiro/scale-shift-effect" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "ai-portrait-daily-asian-woman.webp", "effectType": "earth+zoom-ocean+trench", "videoMode": "std", "ratio": "9:16", "duration": "5", "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.