## Basic tool info Model name: openai/gpt-image-2-custom Model description: Create or edit images with OpenAI GPT Image 2 using custom pixel sizes, quality tiers, and format controls. Add optional masks to target specific edits. Model cover: https://cdn.wiro.ai/uploads/models/openai-gpt-image-2-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-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. type: combinefileinput default: openai-gpt-image-2-custom-input-1.jpg - name: prompt label: Prompt help: Required. Text description of the desired image or image edit. Maximum 32,000 characters. type: textarea default: Restyle this image as a 1940s film noir cinema still — dramatic black-and-white photography, deep chiaroscuro lighting with hard cast shadows, venetian-blind shadow patterns falling across her trench coat, atmospheric fog drifting through the street, glistening wet pavement, anamorphic widescreen aesthetic, vintage cinema grain, mysterious atmosphere. Keep her pose, outfit silhouette, and composition recognizable. - name: inputImageMask label: Mask Image (Edit) help: Optional. Requires input image(1). Mask image to define specific areas to edit. type: combinefileinput default: - name: width label: Width help: Required. Output width in pixels (480–3840). Combined limits: long:short ratio at most 3:1, total pixels 655,360–8,294,400. Non-16-aligned values are snapped and resized to your exact request. Falls back to 1024×1024 if no valid size can be found. type: number default: 1024 - name: height label: Height help: Required. Output height in pixels (480–3840). Combined limits: long:short ratio at most 3:1, total pixels 655,360–8,294,400. Non-16-aligned values are snapped and resized to your exact request. Falls back to 1024×1024 if no valid size can be found. 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 - name: background label: Background help: Optional. Background setting. type: select default: auto options: - value: "auto" label: Auto - value: "opaque" label: Opaque - name: outputFormat label: Output Format help: Optional. Output image format. Defaults to png. type: select default: png options: - value: "png" label: PNG - value: "jpeg" label: JPEG - value: "webp" label: WEBP - name: outputCompression label: Output Compression help: Optional. Compression level (0-100) for jpeg or webp output only. Defaults to 100. type: number default: 100 - name: samples label: Number of Images help: Required. Number of images to generate (1-10). type: number default: 1 - name: moderation label: Moderation Level help: Optional. Content moderation level. type: select default: low options: - value: "auto" label: Auto - value: "low" label: Low ## Model Parameter Inspires: - prompt: Restyle this image as a 1940s film noir cinema still — dramatic black-and-white photography, deep chiaroscuro lighting with hard cast shadows, venetian-blind shadow patterns falling across her trench coat, atmospheric fog drifting through the street, glistening wet pavement, anamorphic widescreen aesthetic, vintage cinema grain, mysterious atmosphere. Keep her pose, outfit silhouette, and composition recognizable. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-custom-input-1.jpg - prompt: Replace the studio background with a sunset view of Santorini, Greece — white-washed buildings cascading down to the Aegean Sea, a blue-domed church visible, warm orange-pink sky. Adjust the lighting on her face and clothing to match the new environment. Keep her pose, outfit, and identity completely unchanged - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-custom-input-2.jpg - prompt: Convert the scene to deep winter — snow blanketing the bench, ground, and tree branches; gentle snowflakes falling; overcast pale sky; a single set of footprints leading away from the bench. Keep the bench, tree, and overall composition exactly identical. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-custom-input-3.jpg - prompt: Same woman, same beach, same outfit — but now she is standing up and laughing, the book held loosely in one hand at her side, her other hand pushing her windblown hair back from her face. Keep her exact appearance, the beach setting, and the golden-hour light fully consistent. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/openai-gpt-image-2-custom-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/openai/gpt-image-2-custom" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "openai-gpt-image-2-custom-input-1.jpg", "prompt": "Restyle this image as a 1940s film noir cinema still — dramatic black-and-white photography, deep chiaroscuro lighting with hard cast shadows, venetian-blind shadow patterns falling across her trench coat, atmospheric fog drifting through the street, glistening wet pavement, anamorphic widescreen aesthetic, vintage cinema grain, mysterious atmosphere. Keep her pose, outfit silhouette, and composition recognizable.", "inputImageMask": "", "width": 1024, "height": 1024, "quality": "low", "background": "auto", "outputFormat": "png", "outputCompression": 100, "samples": 1, "moderation": "low", "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.