## Basic tool info Model name: openai/gpt image 2.6 sunburst custom Model description: OpenAI’s GPT Image 2.6 Sunburst Custom generates images, performs precise edits with masks or markup, and can create short animated GIF loops. Model cover: https://cdn.wiro.ai/uploads/models/openai-gpt-image-2-6-sunburst-custom-cover.webp Model categories: - tool - partner - openai - text-to-image - image-to-image - image-editing - nogpu-pipeline Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/openai/gpt-image-2-6-sunburst-custom Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: Input Images help: Optional. Input images to edit, up to 16. GIF output is only for new images, so it is not available with input images. type: combinefileinput default: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-6-sunburst-custom-sampleinput-1.webp - name: prompt label: Prompt help: Required. Text description of the desired image, image edit or GIF animation. Maximum 32,000 characters. type: textarea default: Type a short letter onto the sheet of paper in the typewriter, in slightly uneven black typewriter ink: "Dear Margot," on the first line, then "The rain finally stopped this morning." and "I finished the last chapter at dawn." and "Yours always, Theo". Keep the typewriter, the desk, the coffee cup, the glasses and the lamp light exactly the same. - name: width label: Width help: Required. Output width in pixels, at most 3840. Images: long:short ratio at most 3:1 and 655,360–8,294,400 total pixels; non-16-aligned values are snapped and resized to your exact request. GIF: the width of each frame, snapped to a multiple of 16; frames that would not fit together are shrunk. type: number default: 1024 - name: height label: Height help: Required. Output height in pixels, at most 3840. Images: long:short ratio at most 3:1 and 655,360–8,294,400 total pixels; non-16-aligned values are snapped and resized to your exact request. GIF: the height of each frame, snapped to a multiple of 16; frames that would not fit together are shrunk. type: number default: 1024 - name: quality label: Quality help: Required. Output image quality. type: select default: low options: - value: "low" label: Low - value: "medium" label: Medium - value: "high" label: High - value: "xhigh" label: Extra High - value: "max" label: Max - name: samples label: Number of Images help: Required. Number of images to generate (1-10). type: number default: 1 - name: outputFormat label: Output Format help: Optional. Default jpeg. Output format. gif makes an animated GIF from the prompt; it only works without input images. type: select default: jpeg options: - value: "png" label: png - value: "jpeg" label: jpeg - value: "webp" label: webp - value: "gif" label: gif - name: frameCount label: Frame Count (GIF) help: Optional. Default 9. Number of frames in the GIF (2-64). GIF output only. type: number default: 9 - name: frameDurationMs label: Frame Duration (GIF) help: Optional. Default 200. How long each frame shows, in milliseconds (20-2000, rounded to 10). GIF output only. type: number default: 200 - name: inputImageMask label: Mask Image (Edit) help: Optional. Requires an input image. Mask image that defines the areas to edit. type: combinefileinput default: - name: inputImageMarkup label: Markup Image (Edit) help: Optional. Requires an input image. A transparent overlay with marks (a circle, an arrow) showing where the prompt's change should go. type: combinefileinput default: - name: complexity label: Complexity help: Optional. Default high. How much the model plans before rendering: lower suits focused edits, higher helps dense text and complex layouts. It does not change the price. type: select default: high options: - value: "low" label: Low - value: "medium" label: Medium - value: "high" label: High - name: background label: Background help: Optional. Default auto. Background setting. Transparent needs png or webp output; with jpeg it switches to png. type: select default: auto options: - value: "auto" label: Auto - value: "transparent" label: Transparent - value: "opaque" label: Opaque - name: outputCompression label: Output Compression help: Optional. Default 100. Compression level (0-100) for jpeg or webp output only. type: number default: 100 - name: moderation label: Moderation Level help: Optional. Default low. Content moderation level. type: select default: low options: - value: "auto" label: Auto - value: "low" label: Low ## Model Parameter Inspires: - inputImage: - prompt: A tall candle on a wooden table, its flame flickering gently while a thin ribbon of smoke curls upward, then returning to its starting state, looping - outputFormat: gif - inputImage: - prompt: Green and violet northern lights rippling and dancing slowly across a starry night sky above a snowy pine forest and a frozen lake that reflects them, the curtains of light swaying and returning to their starting shape, looping - outputFormat: gif - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-6-sunburst-custom-sampleinput-1.webp - prompt: Type a short letter onto the sheet of paper in the typewriter, in slightly uneven black typewriter ink: "Dear Margot," on the first line, then "The rain finally stopped this morning." and "I finished the last chapter at dawn." and "Yours always, Theo". Keep the typewriter, the desk, the coffee cup, the glasses and the lamp light exactly the same. - outputFormat: jpeg - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-6-sunburst-custom-sampleinput-2.webp - prompt: Paint a vibrant street-art mural across the whole brick wall at the end of the alley: a giant blue whale swimming upward through a sky of orange and pink clouds, with small birds flying around it, painted in bold spray-paint style so the brick texture still shows through. Keep the alley, the side walls, the drainpipes, the bicycle and the puddles exactly the same, with the mural reflected in the puddles. - outputFormat: jpeg ## Integration Header Prepare ```bash # Sign up Wiro dashboard and create project export YOUR_API_KEY="YOUR_WIRO_API_KEY"; 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/openai/gpt-image-2-6-sunburst-custom" \ -H "Content-Type: application/json" \ -H "x-api-key: ${YOUR_API_KEY}" \ -H "x-nonce: ${NONCE}" \ -H "x-signature: ${SIGNATURE}" \ --data-binary @- <<'JSON' { "inputImage": [ "https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-6-sunburst-custom-sampleinput-1.webp" ], "prompt": "Type a short letter onto the sheet of paper in the typewriter, in slightly uneven black typewriter ink: \"Dear Margot,\" on the first line, then \"The rain finally stopped this morning.\" and \"I finished the last chapter at dawn.\" and \"Yours always, Theo\". Keep the typewriter, the desk, the coffee cup, the glasses and the lamp light exactly the same.", "width": 1024, "height": 1024, "quality": "low", "samples": 1, "outputFormat": "jpeg", "frameCount": 9, "frameDurationMs": 200, "inputImageMask": "", "inputImageMarkup": "", "complexity": "high", "background": "auto", "outputCompression": 100, "moderation": "low", "callbackUrl": "You can provide a callback URL; Wiro will send a POST request to it when the task is completed." } JSON ``` ## 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: application/json" \ -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: application/json" \ -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: application/json" \ -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: application/json" \ -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: application/json" \ -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.