## Basic tool info Model name: google/nano banana 2.1 Model description: Nano Banana 2.1 by Google generates and edits images from text and reference photos. It supports multi-image fusion, sharp text rendering, and up to 4K output. Model cover: https://cdn.wiro.ai/uploads/models/google-nano-banana-2-1-cover.webp Model categories: - tool - partner - google - image-to-image - quick-showcase - text-to-image - price-list - fast-inference - image-editing - use-agent - nogpu-pipeline Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/google/nano-banana-2-1 Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: Input Image help: Optional. Default is empty (text-to-image). Nano Banana 2.1 lets you mix up to 14 reference images: up to 10 images of objects with high-fidelity to include in the final image, and up to 4 images of characters to maintain character consistency. type: combinefileinput default: nano-banana-2-1-sampleinput-1.webp - name: prompt label: prompt help: Required. The prompt to generate the image. type: textarea default: A bold sports magazine cover featuring the sprinter in exactly the same crouched position in the starting blocks. The stadium is now packed with a cheering crowd under bright floodlights at night, with camera flashes in the stands. Large masthead 'STRIDE' at the top, headline 'Built for the Final 100m' in the lower third, and a small 'Issue 47 · Track Special' tag in the corner. Clean editorial typography, high-contrast lighting. - name: resolution label: Resolution (K) help: Required. Default is 1K. Resolution of the output image. type: select default: 1K options: - value: "1K" label: 1K (Standard) - value: "2K" label: 2K (High) - value: "4K" label: 4K (Ultra High) - name: aspectRatio label: Aspect Ratio help: Optional. Default is auto. Aspect ratio of the output image; auto matches the input image, or 1:1 when there is no input image. type: select default: auto options: - value: "auto" label: auto - value: "1:1" label: 1:1 (1K)1024x1024 (2K)2048x2048 (4K)4096x4096 - value: "1:4" label: 1:4 (1K)512x2048 (2K)1024x4096 (4K)2048x8192 - value: "1:8" label: 1:8 (1K)384x3072 (2K)768x6144 (4K)1536x12288 - value: "2:3" label: 2:3 (1K)848x1264 (2K)1696x2528 (4K)3392x5056 - value: "3:2" label: 3:2 (1K)1264x848 (2K)2528x1696 (4K)5056x3392 - value: "3:4" label: 3:4 (1K)896x1200 (2K)1792x2400 (4K)3584x4800 - value: "4:1" label: 4:1 (1K)2048x512 (2K)4096x1024 (4K)8192x2048 - value: "4:3" label: 4:3 (1K)1200x896 (2K)2400x1792 (4K)4800x3584 - value: "4:5" label: 4:5 (1K)928x1152 (2K)1856x2304 (4K)3712x4608 - value: "5:4" label: 5:4 (1K)1152x928 (2K)2304x1856 (4K)4608x3712 - value: "8:1" label: 8:1 (1K)3072x384 (2K)6144x768 (4K)12288x1536 - value: "9:16" label: 9:16 (1K)768x1376 (2K)1536x2752 (4K)3072x5504 - value: "16:9" label: 16:9 (1K)1376x768 (2K)2752x1536 (4K)5504x3072 - value: "21:9" label: 21:9 (1K)1584x672 (2K)3168x1344 (4K)6336x2688 - name: seed label: Seed help: Optional. Default is empty (random). Seed for reproducible results. type: number default: - name: outputFormat label: Output Format help: Optional. Default is jpeg. File format of the output image. type: select default: jpeg options: - value: "jpeg" label: jpeg - value: "png" label: png - value: "webp" label: webp - name: safetySetting label: Safety Setting help: Optional. Default is OFF. Content safety filter threshold. type: select default: OFF options: - value: "BLOCK_LOW_AND_ABOVE" label: BLOCK_LOW_AND_ABOVE - value: "BLOCK_MEDIUM_AND_ABOVE" label: BLOCK_MEDIUM_AND_ABOVE - value: "BLOCK_ONLY_HIGH" label: BLOCK_ONLY_HIGH - value: "BLOCK_NONE" label: BLOCK_NONE - value: "OFF" label: OFF ## Model Parameter Inspires: - prompt: A bold sports magazine cover featuring the sprinter in exactly the same crouched position in the starting blocks. The stadium is now packed with a cheering crowd under bright floodlights at night, with camera flashes in the stands. Large masthead 'STRIDE' at the top, headline 'Built for the Final 100m' in the lower third, and a small 'Issue 47 · Track Special' tag in the corner. Clean editorial typography, high-contrast lighting. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/nano-banana-2-1-sampleinput-1.webp - prompt: The same LUMEN perfume bottle resting on a mossy rock in a lush tropical rainforest, surrounded by monstera leaves and orchids, with water droplets on the glass. Warm golden sunlight streams through the canopy and a soft splash of water rises behind the bottle. Luxury advertising look, label perfectly preserved. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/nano-banana-2-1-sampleinput-2.webp - prompt: The same view of Central Park in peak autumn: the elm trees in deep orange, red and golden yellow, fallen leaves covering the path and grass, and people in light coats and scarves strolling by. Soft golden-hour light with a hazy sky, colorful leaves reflected in the lake under Bow Bridge. The skyline, path and composition are unchanged. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/nano-banana-2-1-sampleinput-3.webp - prompt: The same living room fully furnished in Japandi style: a low linen sofa, a round walnut coffee table, a woven rug, ceramic vases, a tall olive tree in the corner, and paper lantern lighting. Warm evening light with the city lights glowing through the window. The room layout and window are unchanged. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/nano-banana-2-1-sampleinput-4.webp ## 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/google/nano-banana-2-1" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "nano-banana-2-1-sampleinput-1.webp", "prompt": "A bold sports magazine cover featuring the sprinter in exactly the same crouched position in the starting blocks. The stadium is now packed with a cheering crowd under bright floodlights at night, with camera flashes in the stands. Large masthead 'STRIDE' at the top, headline 'Built for the Final 100m' in the lower third, and a small 'Issue 47 · Track Special' tag in the corner. Clean editorial typography, high-contrast lighting.", "resolution": "1K", "aspectRatio": "auto", "seed": null, "outputFormat": "jpeg", "safetySetting": "OFF", "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.