image-01
MiniMax image-01 skapar bilder utifrån detaljerade textbeskrivningar och stöder kvadratiska, stående och breda kompositioner.
- Ailoot · Bilder
POST /v1/images/generationsimage-01 - Ailoot · Bilder
POST /v1/images/generationsminimax-image - Ailoot · Bilder
POST /v1/images/generationsminimax-image-latest - Ailoot · Bilder
POST /v1/images/generationsminimax/image-01
Om modellen
Den här beskrivningen omfattar modellens förmågor. Tillgängliga indata, utdata och alternativ i Ailoot anges nedan för den valda metoden.
Bild från beskrivning
MiniMax image-01 skapar en ny bild utifrån en textbeskrivning. Där går det att ange en karaktär eller ett föremål, omgivningen och bildstilen. Detta Ailoot-modellkort tar emot text och returnerar en bild. Beskrivningen anger den framtida scenens innehåll och komposition.
Arbete med karaktärens utseende
Tillverkarens modellmöjligheter omfattar också generering med en visuell karaktärsreferens. En ursprungsbild med ett tydligt huvudobjekt hjälper till att överföra dess typiska drag till en ny scen tillsammans med textbeskrivningen. Tillverkaren rekommenderar ett enskilt porträtt framifrån. En referens per anrop stöds.
För denna ursprungsbild anges JPG, JPEG och PNG med en storlek under 10 MB. Modellkortets tillgängliga genereringssätt är textbaserat. Referensmöjligheten gäller modellen image-01 och utökar inte anropets indata automatiskt.
Proportioner och storlekar
För image-01 finns åtta bildförhållanden: 1:1, 16:9, 4:3, 3:2, 2:3, 3:4, 9:16 och 21:9. De omfattar kvadratiska, liggande, stående och breda kompositioner. Standardmåtten är i samma ordning 1024×1024, 1280×720, 1152×864, 1248×832, 832×1248, 864×1152, 720×1280 och 1344×576 pixlar.
Tillverkaren tillåter även att bredd och höjd anges tillsammans, vardera från 512 till 2048 pixlar i steg som är multiplar av 8. Om både proportioner och separata mått anges har bildförhållandet företräde.
Antal varianter och genereringsparametrar
Modellmöjligheterna omfattar från 1 till 9 bilder per anrop. En bild skapas som standard. Textbeskrivningen är begränsad till 1500 tecken. Automatisk optimering av beskrivningen finns och är inledningsvis avstängd. Ett slumpfrö finns också: samma frö tillsammans med samma parametrar används för ett upprepningsbart resultat.
Genereringsresultatet är en bild eller en uppsättning bilder. Tillverkaren erbjuder överföring av själva data och hämtning av filer. Om vissa varianter inte har skapats räknas antalet lyckade resultat separat. De angivna måtten och inställningarna beskriver modellens möjligheter. Ailoot-modellkortet bestämmer tillgängliga parametrar för det specifika anropet.
Ailoot · Bilder POST /v1/images/generations image-01
image-01image-01minimax-imageminimax-image-latestminimax/image-01
Start
MiniMax image-01 skapar bilder utifrån detaljerade textbeskrivningar och stöder kvadratiska, stående och breda kompositioner.
- Godkända indata
- Text
- Resultat
- Bilder
Tillgängligt i Ailoot · indata & metoder
Ailoot · Bilder POST /v1/images/generations
- Indatatyper
text- Utdatatyper
image- Utdataformat
- Bildfil
| Fält | Typ | Krav | Värden & gränser | Standard |
|---|---|---|---|---|
Fältmodel | Typstring | KravObligatoriskt | Värden & gränser image-01 | Standard— |
Fältprompt | Typstring | KravObligatoriskt | Värden & gränser Minsta längd: 1 | Standard— |
Fältn | Typinteger | KravValfritt | Värden & gränser Minimum: 1 | Standard1 |
Fältresponse_format | Typstring | KravValfritt | Värden & gränser url, b64_json | Standard— |
Fältstream | Typboolean | KravValfritt | Värden & gränser | Standardfalse |
Fältsize | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältquality | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältbackground | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_format | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_compression | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältmoderation | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältinput_fidelity | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältstyle | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältpartial_images | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Kombinationer av indatamaterial
Text till bild · Krävs: prompt
Metodparametrar och livscykel
| Parameter | Avtal |
|---|---|
Parametermaterial_types | Avtaltext |
Parameterrequired | Avtalmodel, prompt |
Parameteroptional_controls | Avtalnull |
Parametercontent_type | Avtalapplication/json |
Livscykel: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Det task_id som faktiskt returnerades eller en post i mediebiblioteket
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Metodernas strukturer och ID:n är exakta; leverantörens funktioner är åtskilda från att begäran tillåts.
Priser
Priser för Ailoot-metoder
POST /v1/images/generations- Utdata
- 0,0035 US$ per bild i 1K
- Utdata
- 0,0035 US$ per bild i 2K
Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. Så fungerar reservation och slutreglering →
Exempelbegäranden
Ailoot · Bilder
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "image-01", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'image-01', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "image-01", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Ta emot och spara resultat
Ailoot · Bilder
Ladda ned varje returnerad bild eller spara dess Base64-innehåll
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Behåll alla färdiga resultat
Spara varje färdig bild; hämta varje returnerad URL eller avkoda dess Base64-innehåll.
Spara varje dataobjekt. Avkoda varje b64_json-värde eller hämta innehållet via varje returnerad signerad URL. Välj filändelse utifrån den faktiska MIME-typen och filens byteinnehåll.
Om det ursprungliga svaret behöver kontrolleras
Om resultatet av en bildgenerering eller bildredigering behöver kontrolleras ska du behålla de ursprungliga värdena för operation_id/X-Client-Request-ID och den returnerade resultatinformationen. Hämta befintliga resultat som tillhör dig genom mediebiblioteket med de faktiska task_id- eller asset_id-värdena. Skicka inte genererings- eller redigeringsförfrågan igen och bygg inte en URL för statusavläsning från operation_id.
Svarsfält
| Fält | Typ |
|---|---|
Fältcreated | Typinteger |
Fältdata[].url | Typstring |
Fältdata[].b64_json | Typbase64 string |
Fältusage | Typobject |
Fel och nästa steg
| Svar | Villkor | Nästa steg |
|---|---|---|
Svar400 · invalid_request_error | VillkorOgiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde | Nästa stegKorrigera de angivna fälten före en ny begäran om att skapa. |
Svarserver_error | VillkorDet returnerade svaret anger att operationen eller resultatet behöver kontrolleras | Nästa stegSpara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen. |
Alias
Modellalias
Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01
Alias för metodsökvägar
Använd metodsökvägarna som visas ovan.
Relaterade anropar-ID:n
image-01, minimax-image, minimax-image-latest, minimax/image-01
Ailoot · Bilder POST /v1/images/generations minimax-image
minimax-imageimage-01minimax-imageminimax-image-latestminimax/image-01
Start
MiniMax image-01 skapar bilder utifrån detaljerade textbeskrivningar och stöder kvadratiska, stående och breda kompositioner.
- Godkända indata
- Text
- Resultat
- Bilder
Tillgängligt i Ailoot · indata & metoder
Ailoot · Bilder POST /v1/images/generations
- Indatatyper
text- Utdatatyper
image- Utdataformat
- Bildfil
| Fält | Typ | Krav | Värden & gränser | Standard |
|---|---|---|---|---|
Fältmodel | Typstring | KravObligatoriskt | Värden & gränser minimax-image | Standard— |
Fältprompt | Typstring | KravObligatoriskt | Värden & gränser Minsta längd: 1 | Standard— |
Fältn | Typinteger | KravValfritt | Värden & gränser Minimum: 1 | Standard1 |
Fältresponse_format | Typstring | KravValfritt | Värden & gränser url, b64_json | Standard— |
Fältstream | Typboolean | KravValfritt | Värden & gränser | Standardfalse |
Fältsize | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältquality | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältbackground | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_format | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_compression | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältmoderation | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältinput_fidelity | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältstyle | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältpartial_images | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Kombinationer av indatamaterial
Text till bild · Krävs: prompt
Metodparametrar och livscykel
| Parameter | Avtal |
|---|---|
Parametermaterial_types | Avtaltext |
Parameterrequired | Avtalmodel, prompt |
Parameteroptional_controls | Avtalnull |
Parametercontent_type | Avtalapplication/json |
Livscykel: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Det task_id som faktiskt returnerades eller en post i mediebiblioteket
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Metodernas strukturer och ID:n är exakta; leverantörens funktioner är åtskilda från att begäran tillåts.
Priser
Priser för Ailoot-metoder
POST /v1/images/generations- Utdata
- 0,0035 US$ per bild i 1K
- Utdata
- 0,0035 US$ per bild i 2K
Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. Så fungerar reservation och slutreglering →
Exempelbegäranden
Ailoot · Bilder
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'minimax-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "minimax-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Ta emot och spara resultat
Ailoot · Bilder
Ladda ned varje returnerad bild eller spara dess Base64-innehåll
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Behåll alla färdiga resultat
Spara varje färdig bild; hämta varje returnerad URL eller avkoda dess Base64-innehåll.
Spara varje dataobjekt. Avkoda varje b64_json-värde eller hämta innehållet via varje returnerad signerad URL. Välj filändelse utifrån den faktiska MIME-typen och filens byteinnehåll.
Om det ursprungliga svaret behöver kontrolleras
Om resultatet av en bildgenerering eller bildredigering behöver kontrolleras ska du behålla de ursprungliga värdena för operation_id/X-Client-Request-ID och den returnerade resultatinformationen. Hämta befintliga resultat som tillhör dig genom mediebiblioteket med de faktiska task_id- eller asset_id-värdena. Skicka inte genererings- eller redigeringsförfrågan igen och bygg inte en URL för statusavläsning från operation_id.
Svarsfält
| Fält | Typ |
|---|---|
Fältcreated | Typinteger |
Fältdata[].url | Typstring |
Fältdata[].b64_json | Typbase64 string |
Fältusage | Typobject |
Fel och nästa steg
| Svar | Villkor | Nästa steg |
|---|---|---|
Svar400 · invalid_request_error | VillkorOgiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde | Nästa stegKorrigera de angivna fälten före en ny begäran om att skapa. |
Svarserver_error | VillkorDet returnerade svaret anger att operationen eller resultatet behöver kontrolleras | Nästa stegSpara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen. |
Alias
Modellalias
Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01
Alias för metodsökvägar
Använd metodsökvägarna som visas ovan.
Relaterade anropar-ID:n
image-01, minimax-image, minimax-image-latest, minimax/image-01
Ailoot · Bilder POST /v1/images/generations minimax-image-latest
minimax-image-latestimage-01minimax-imageminimax-image-latestminimax/image-01
Start
MiniMax image-01 skapar bilder utifrån detaljerade textbeskrivningar och stöder kvadratiska, stående och breda kompositioner.
- Godkända indata
- Text
- Resultat
- Bilder
Tillgängligt i Ailoot · indata & metoder
Ailoot · Bilder POST /v1/images/generations
- Indatatyper
text- Utdatatyper
image- Utdataformat
- Bildfil
| Fält | Typ | Krav | Värden & gränser | Standard |
|---|---|---|---|---|
Fältmodel | Typstring | KravObligatoriskt | Värden & gränser minimax-image-latest | Standard— |
Fältprompt | Typstring | KravObligatoriskt | Värden & gränser Minsta längd: 1 | Standard— |
Fältn | Typinteger | KravValfritt | Värden & gränser Minimum: 1 | Standard1 |
Fältresponse_format | Typstring | KravValfritt | Värden & gränser url, b64_json | Standard— |
Fältstream | Typboolean | KravValfritt | Värden & gränser | Standardfalse |
Fältsize | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältquality | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältbackground | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_format | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_compression | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältmoderation | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältinput_fidelity | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältstyle | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältpartial_images | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Kombinationer av indatamaterial
Text till bild · Krävs: prompt
Metodparametrar och livscykel
| Parameter | Avtal |
|---|---|
Parametermaterial_types | Avtaltext |
Parameterrequired | Avtalmodel, prompt |
Parameteroptional_controls | Avtalnull |
Parametercontent_type | Avtalapplication/json |
Livscykel: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Det task_id som faktiskt returnerades eller en post i mediebiblioteket
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Metodernas strukturer och ID:n är exakta; leverantörens funktioner är åtskilda från att begäran tillåts.
Priser
Priser för Ailoot-metoder
POST /v1/images/generations- Utdata
- 0,0035 US$ per bild i 1K
- Utdata
- 0,0035 US$ per bild i 2K
Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. Så fungerar reservation och slutreglering →
Exempelbegäranden
Ailoot · Bilder
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax-image-latest", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'minimax-image-latest', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "minimax-image-latest", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Ta emot och spara resultat
Ailoot · Bilder
Ladda ned varje returnerad bild eller spara dess Base64-innehåll
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Behåll alla färdiga resultat
Spara varje färdig bild; hämta varje returnerad URL eller avkoda dess Base64-innehåll.
Spara varje dataobjekt. Avkoda varje b64_json-värde eller hämta innehållet via varje returnerad signerad URL. Välj filändelse utifrån den faktiska MIME-typen och filens byteinnehåll.
Om det ursprungliga svaret behöver kontrolleras
Om resultatet av en bildgenerering eller bildredigering behöver kontrolleras ska du behålla de ursprungliga värdena för operation_id/X-Client-Request-ID och den returnerade resultatinformationen. Hämta befintliga resultat som tillhör dig genom mediebiblioteket med de faktiska task_id- eller asset_id-värdena. Skicka inte genererings- eller redigeringsförfrågan igen och bygg inte en URL för statusavläsning från operation_id.
Svarsfält
| Fält | Typ |
|---|---|
Fältcreated | Typinteger |
Fältdata[].url | Typstring |
Fältdata[].b64_json | Typbase64 string |
Fältusage | Typobject |
Fel och nästa steg
| Svar | Villkor | Nästa steg |
|---|---|---|
Svar400 · invalid_request_error | VillkorOgiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde | Nästa stegKorrigera de angivna fälten före en ny begäran om att skapa. |
Svarserver_error | VillkorDet returnerade svaret anger att operationen eller resultatet behöver kontrolleras | Nästa stegSpara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen. |
Alias
Modellalias
Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01
Alias för metodsökvägar
Använd metodsökvägarna som visas ovan.
Relaterade anropar-ID:n
image-01, minimax-image, minimax-image-latest, minimax/image-01
Ailoot · Bilder POST /v1/images/generations minimax/image-01
minimax/image-01image-01minimax-imageminimax-image-latestminimax/image-01
Start
MiniMax image-01 skapar bilder utifrån detaljerade textbeskrivningar och stöder kvadratiska, stående och breda kompositioner.
- Godkända indata
- Text
- Resultat
- Bilder
Tillgängligt i Ailoot · indata & metoder
Ailoot · Bilder POST /v1/images/generations
- Indatatyper
text- Utdatatyper
image- Utdataformat
- Bildfil
| Fält | Typ | Krav | Värden & gränser | Standard |
|---|---|---|---|---|
Fältmodel | Typstring | KravObligatoriskt | Värden & gränser minimax/image-01 | Standard— |
Fältprompt | Typstring | KravObligatoriskt | Värden & gränser Minsta längd: 1 | Standard— |
Fältn | Typinteger | KravValfritt | Värden & gränser Minimum: 1 | Standard1 |
Fältresponse_format | Typstring | KravValfritt | Värden & gränser url, b64_json | Standard— |
Fältstream | Typboolean | KravValfritt | Värden & gränser | Standardfalse |
Fältsize | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältquality | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältbackground | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_format | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältoutput_compression | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältmoderation | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältinput_fidelity | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältstyle | Typstring | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Fältpartial_images | Typinteger | KravValfritt | Värden & gränser Beror på modellen | Standard— |
Kombinationer av indatamaterial
Text till bild · Krävs: prompt
Metodparametrar och livscykel
| Parameter | Avtal |
|---|---|
Parametermaterial_types | Avtaltext |
Parameterrequired | Avtalmodel, prompt |
Parameteroptional_controls | Avtalnull |
Parametercontent_type | Avtalapplication/json |
Livscykel: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Det task_id som faktiskt returnerades eller en post i mediebiblioteket
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Metodernas strukturer och ID:n är exakta; leverantörens funktioner är åtskilda från att begäran tillåts.
Priser
Priser för Ailoot-metoder
POST /v1/images/generations- Utdata
- 0,0035 US$ per bild i 1K
- Utdata
- 0,0035 US$ per bild i 2K
Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. Så fungerar reservation och slutreglering →
Exempelbegäranden
Ailoot · Bilder
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "minimax/image-01", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'minimax/image-01', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "minimax/image-01", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Ta emot och spara resultat
Ailoot · Bilder
Ladda ned varje returnerad bild eller spara dess Base64-innehåll
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Behåll alla färdiga resultat
Spara varje färdig bild; hämta varje returnerad URL eller avkoda dess Base64-innehåll.
Spara varje dataobjekt. Avkoda varje b64_json-värde eller hämta innehållet via varje returnerad signerad URL. Välj filändelse utifrån den faktiska MIME-typen och filens byteinnehåll.
Om det ursprungliga svaret behöver kontrolleras
Om resultatet av en bildgenerering eller bildredigering behöver kontrolleras ska du behålla de ursprungliga värdena för operation_id/X-Client-Request-ID och den returnerade resultatinformationen. Hämta befintliga resultat som tillhör dig genom mediebiblioteket med de faktiska task_id- eller asset_id-värdena. Skicka inte genererings- eller redigeringsförfrågan igen och bygg inte en URL för statusavläsning från operation_id.
Svarsfält
| Fält | Typ |
|---|---|
Fältcreated | Typinteger |
Fältdata[].url | Typstring |
Fältdata[].b64_json | Typbase64 string |
Fältusage | Typobject |
Fel och nästa steg
| Svar | Villkor | Nästa steg |
|---|---|---|
Svar400 · invalid_request_error | VillkorOgiltiga obligatoriska fält, ogiltig representation av underlaget eller ogiltigt parametervärde | Nästa stegKorrigera de angivna fälten före en ny begäran om att skapa. |
Svarserver_error | VillkorDet returnerade svaret anger att operationen eller resultatet behöver kontrolleras | Nästa stegSpara det ursprungliga operations- eller uppgifts-ID som returnerades, förfrågans headers och svaret. Fortsätt att läsa den ursprungliga operationen med de läsmetoder som stöds. Skicka inte skapandeförfrågan igen. |
Alias
Modellalias
Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01
Alias för metodsökvägar
Använd metodsökvägarna som visas ovan.
Relaterade anropar-ID:n
image-01, minimax-image, minimax-image-latest, minimax/image-01
FAQ · image-01
- Vilka indata och resultat finns?
POST /v1/images/generations·image-01:text→imagePOST /v1/images/generations·minimax-image:text→imagePOST /v1/images/generations·minimax-image-latest:text→imagePOST /v1/images/generations·minimax/image-01:text→image- Vilka fält använder begäran?
POST /v1/images/generations·image-01:model,prompt,n,response_format,streamPOST /v1/images/generations·minimax-image:model,prompt,n,response_format,streamPOST /v1/images/generations·minimax-image-latest:model,prompt,n,response_format,streamPOST /v1/images/generations·minimax/image-01:model,prompt,n,response_format,stream- Vilka gränser gäller?
POST /v1/images/generations·image-01:n.minimum:1POST /v1/images/generations·minimax-image:n.minimum:1POST /v1/images/generations·minimax-image-latest:n.minimum:1POST /v1/images/generations·minimax/image-01:n.minimum:1