mallit

image-01

Markdown · JSON

image-01

MiniMax image-01 luo kuvia yksityiskohtaisen tekstikuvauksen perusteella ja tukee neliömäisiä, pystysuuntaisia ja leveitä sommitelmia.

Tietoa mallista

Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.

Kuva kuvauksen perusteella

MiniMax image-01 luo uuden kuvan tekstikuvauksen perusteella. Kuvauksessa voi määrittää hahmon tai esineen, ympäristön ja kuvan tyylin. Tämä Ailoot-kortti vastaanottaa tekstiä ja palauttaa kuvan; kuvaus määrittää tulevan näkymän sisällön ja sommittelun.

Hahmon ulkonäön käsittely

Valmistajan ilmoittamiin mallin kykyihin kuuluu myös generointi hahmon visuaalisen näytteen perusteella. Yksi lähtökuva, jossa pääkohde erottuu hyvin, auttaa siirtämään kohteen ominaispiirteet uuteen näkymään yhdessä tekstikuvauksen kanssa. Valmistaja suosittelee yhden henkilön edestä kuvattua muotokuvaa; yhtä viitekuvaa pyyntöä kohden tuetaan.

Tällaiselle lähtökuvalle ilmoitetaan JPG-, JPEG- ja PNG-muodot sekä alle 10 Mt:n tiedostokoko. Tässä kortissa käytettävissä oleva generointitapa on tekstipohjainen; viitekuvamahdollisuus koskee image-01-mallia eikä laajenna pyynnön syötettä automaattisesti.

Kuvasuhteet ja koot

image-01 tukee kahdeksaa kuvasuhdetta: 1:1, 16:9, 4:3, 3:2, 2:3, 3:4, 9:16 ja 21:9. Ne kattavat neliömäiset, vaaka-, pysty- ja leveät sommitelmat. Vastaavat vakiokoot ovat 1024×1024, 1280×720, 1152×864, 1248×832, 832×1248, 864×1152, 720×1280 ja 1344×576 pikseliä.

Valmistaja mahdollistaa myös leveyden ja korkeuden yhteismäärittelyn: kumpikin 512–2048 pikseliä, 8:n monikertojen askelin. Jos kuvasuhde ja erilliset mitat määritetään samanaikaisesti, kuvasuhde on ensisijainen.

Vaihtoehtojen määrä ja generointiparametrit

Mallin ominaisuuksiin kuuluu 1–9 kuvaa pyyntöä kohden; oletuksena luodaan yksi. Tekstikuvaus on rajattu 1500 merkkiin. Kuvauksen automaattinen optimointi on mahdollinen mutta oletuksena pois käytöstä, ja satunnaissiementä voi käyttää: sama siemenarvo yhdessä samojen parametrien kanssa tukee tuloksen toistettavuutta.

Generoinnin tulos on kuva tai kuvajoukko. Valmistaja mahdollistaa itse datan lähettämisen ja tiedoston saamisen; jos osa vaihtoehdoista jää muodostumatta, onnistuneiden tulosten määrä huomioidaan erikseen. Luetellut koot ja asetukset kuvaavat mallin kykyjä; yksittäisen pyynnön käytettävissä olevat parametrit määrittää Ailoot-kortti.

Ailoot · Kuvat POST /v1/images/generations image-01

image-01

MiniMax /image-01
Mallin ID
  • image-01
  • minimax-image
  • minimax-image-latest
  • minimax/image-01

Aloitus

MiniMax image-01 luo kuvia yksityiskohtaisen tekstikuvauksen perusteella ja tukee neliömäisiä, pystysuuntaisia ja leveitä sommitelmia.

Hyväksytyt syötteet
Teksti
Tulokset
Kuvat

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Kuvat POST /v1/images/generations
Syötetyypit
text
Tulostyypit
image
Tulosteen muoto
Kuvatiedosto
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
image-01
Oletus—
KenttäpromptTyyppistringVaatimusPakollinenArvot & rajat
Vähimmäispituus: 1
Oletus—
KenttänTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Oletus1
Kenttäresponse_formatTyyppistringVaatimusValinnainenArvot & rajat
url, b64_json
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
KenttäsizeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäqualityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäbackgroundTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_formatTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_compressionTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämoderationTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäinput_fidelityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttästyleTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäpartial_imagesTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Syöteaineistojen yhdistelmät

Tekstistä kuvaksi · Pakollinen: prompt

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext
ParametrirequiredSopimusmodel, prompt
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json

Elinkaari: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · todellisuudessa palautettu task_id tai mediakirjaston tietue

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot KuvatPOST /v1/images/generations
Tuloste
0,0035 $ 1K-kuvaa kohden
Tuloste
0,0035 $ 2K-kuvaa kohden

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot · Kuvat

curlPython SDKNode.js SDK
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");

Vastaanota ja tallenna tulokset

Ailoot · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Tallenna jokainen data-alkio. Pura jokainen b64_json-arvo tai lataa jokaisen palautetun allekirjoitetun URL-osoitteen sisältö. Valitse tiedostopääte todellisen MIME-tyypin tai tavusisällön perusteella.

Jos alkuperäinen vastaus on tarkistettava

Jos kuvan generoinnin tai muokkauksen tulos edellyttää tarkistusta, säilytä alkuperäinen operation_id/X-Client-Request-ID ja palautetut tulostiedot. Hae olemassa olevat omistamasi tulokset mediakirjastosta käyttämällä todellisia task_id- tai asset_id-arvoja. Älä lähetä generointi- tai muokkauspyyntöä uudelleen äläkä muodosta tilakyselyn URL-osoitetta operation_id-arvosta.

Vastauksen kentät
KenttäTyyppi
KenttäcreatedTyyppiinteger
Kenttädata[].urlTyyppistring
Kenttädata[].b64_jsonTyyppibase64 string
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.
Vastausserver_errorEhtoPalautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistustaSeuraava vaiheSäilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.

Aliakset

Mallin aliakset

Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01

Menetelmäpolkujen aliakset

Käytä yllä näytettyjä menetelmäpolkuja.

Liittyvät kutsujan ID:t

image-01, minimax-image, minimax-image-latest, minimax/image-01

Ailoot · Kuvat POST /v1/images/generations minimax-image

minimax-image

MiniMax /minimax-image
Mallin ID
  • image-01
  • minimax-image
  • minimax-image-latest
  • minimax/image-01

Aloitus

MiniMax image-01 luo kuvia yksityiskohtaisen tekstikuvauksen perusteella ja tukee neliömäisiä, pystysuuntaisia ja leveitä sommitelmia.

Hyväksytyt syötteet
Teksti
Tulokset
Kuvat

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Kuvat POST /v1/images/generations
Syötetyypit
text
Tulostyypit
image
Tulosteen muoto
Kuvatiedosto
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
minimax-image
Oletus—
KenttäpromptTyyppistringVaatimusPakollinenArvot & rajat
Vähimmäispituus: 1
Oletus—
KenttänTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Oletus1
Kenttäresponse_formatTyyppistringVaatimusValinnainenArvot & rajat
url, b64_json
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
KenttäsizeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäqualityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäbackgroundTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_formatTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_compressionTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämoderationTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäinput_fidelityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttästyleTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäpartial_imagesTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Syöteaineistojen yhdistelmät

Tekstistä kuvaksi · Pakollinen: prompt

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext
ParametrirequiredSopimusmodel, prompt
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json

Elinkaari: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · todellisuudessa palautettu task_id tai mediakirjaston tietue

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot KuvatPOST /v1/images/generations
Tuloste
0,0035 $ 1K-kuvaa kohden
Tuloste
0,0035 $ 2K-kuvaa kohden

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot · Kuvat

curlPython SDKNode.js SDK
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");

Vastaanota ja tallenna tulokset

Ailoot · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Tallenna jokainen data-alkio. Pura jokainen b64_json-arvo tai lataa jokaisen palautetun allekirjoitetun URL-osoitteen sisältö. Valitse tiedostopääte todellisen MIME-tyypin tai tavusisällön perusteella.

Jos alkuperäinen vastaus on tarkistettava

Jos kuvan generoinnin tai muokkauksen tulos edellyttää tarkistusta, säilytä alkuperäinen operation_id/X-Client-Request-ID ja palautetut tulostiedot. Hae olemassa olevat omistamasi tulokset mediakirjastosta käyttämällä todellisia task_id- tai asset_id-arvoja. Älä lähetä generointi- tai muokkauspyyntöä uudelleen äläkä muodosta tilakyselyn URL-osoitetta operation_id-arvosta.

Vastauksen kentät
KenttäTyyppi
KenttäcreatedTyyppiinteger
Kenttädata[].urlTyyppistring
Kenttädata[].b64_jsonTyyppibase64 string
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.
Vastausserver_errorEhtoPalautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistustaSeuraava vaiheSäilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.

Aliakset

Mallin aliakset

Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01

Menetelmäpolkujen aliakset

Käytä yllä näytettyjä menetelmäpolkuja.

Liittyvät kutsujan ID:t

image-01, minimax-image, minimax-image-latest, minimax/image-01

Ailoot · Kuvat POST /v1/images/generations minimax-image-latest

minimax-image-latest

MiniMax /minimax-image-latest
Mallin ID
  • image-01
  • minimax-image
  • minimax-image-latest
  • minimax/image-01

Aloitus

MiniMax image-01 luo kuvia yksityiskohtaisen tekstikuvauksen perusteella ja tukee neliömäisiä, pystysuuntaisia ja leveitä sommitelmia.

Hyväksytyt syötteet
Teksti
Tulokset
Kuvat

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Kuvat POST /v1/images/generations
Syötetyypit
text
Tulostyypit
image
Tulosteen muoto
Kuvatiedosto
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
minimax-image-latest
Oletus—
KenttäpromptTyyppistringVaatimusPakollinenArvot & rajat
Vähimmäispituus: 1
Oletus—
KenttänTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Oletus1
Kenttäresponse_formatTyyppistringVaatimusValinnainenArvot & rajat
url, b64_json
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
KenttäsizeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäqualityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäbackgroundTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_formatTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_compressionTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämoderationTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäinput_fidelityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttästyleTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäpartial_imagesTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Syöteaineistojen yhdistelmät

Tekstistä kuvaksi · Pakollinen: prompt

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext
ParametrirequiredSopimusmodel, prompt
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json

Elinkaari: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · todellisuudessa palautettu task_id tai mediakirjaston tietue

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot KuvatPOST /v1/images/generations
Tuloste
0,0035 $ 1K-kuvaa kohden
Tuloste
0,0035 $ 2K-kuvaa kohden

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot · Kuvat

curlPython SDKNode.js SDK
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");

Vastaanota ja tallenna tulokset

Ailoot · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Tallenna jokainen data-alkio. Pura jokainen b64_json-arvo tai lataa jokaisen palautetun allekirjoitetun URL-osoitteen sisältö. Valitse tiedostopääte todellisen MIME-tyypin tai tavusisällön perusteella.

Jos alkuperäinen vastaus on tarkistettava

Jos kuvan generoinnin tai muokkauksen tulos edellyttää tarkistusta, säilytä alkuperäinen operation_id/X-Client-Request-ID ja palautetut tulostiedot. Hae olemassa olevat omistamasi tulokset mediakirjastosta käyttämällä todellisia task_id- tai asset_id-arvoja. Älä lähetä generointi- tai muokkauspyyntöä uudelleen äläkä muodosta tilakyselyn URL-osoitetta operation_id-arvosta.

Vastauksen kentät
KenttäTyyppi
KenttäcreatedTyyppiinteger
Kenttädata[].urlTyyppistring
Kenttädata[].b64_jsonTyyppibase64 string
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.
Vastausserver_errorEhtoPalautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistustaSeuraava vaiheSäilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.

Aliakset

Mallin aliakset

Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01

Menetelmäpolkujen aliakset

Käytä yllä näytettyjä menetelmäpolkuja.

Liittyvät kutsujan ID:t

image-01, minimax-image, minimax-image-latest, minimax/image-01

Ailoot · Kuvat POST /v1/images/generations minimax/image-01

minimax/image-01

MiniMax /minimax/image-01
Mallin ID
  • image-01
  • minimax-image
  • minimax-image-latest
  • minimax/image-01

Aloitus

MiniMax image-01 luo kuvia yksityiskohtaisen tekstikuvauksen perusteella ja tukee neliömäisiä, pystysuuntaisia ja leveitä sommitelmia.

Hyväksytyt syötteet
Teksti
Tulokset
Kuvat

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Kuvat POST /v1/images/generations
Syötetyypit
text
Tulostyypit
image
Tulosteen muoto
Kuvatiedosto
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
minimax/image-01
Oletus—
KenttäpromptTyyppistringVaatimusPakollinenArvot & rajat
Vähimmäispituus: 1
Oletus—
KenttänTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Oletus1
Kenttäresponse_formatTyyppistringVaatimusValinnainenArvot & rajat
url, b64_json
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
KenttäsizeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäqualityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäbackgroundTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_formatTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_compressionTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämoderationTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäinput_fidelityTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttästyleTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäpartial_imagesTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Syöteaineistojen yhdistelmät

Tekstistä kuvaksi · Pakollinen: prompt

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext
ParametrirequiredSopimusmodel, prompt
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json

Elinkaari: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · todellisuudessa palautettu task_id tai mediakirjaston tietue

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot KuvatPOST /v1/images/generations
Tuloste
0,0035 $ 1K-kuvaa kohden
Tuloste
0,0035 $ 2K-kuvaa kohden

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot · Kuvat

curlPython SDKNode.js SDK
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");

Vastaanota ja tallenna tulokset

Ailoot · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Tallenna jokainen data-alkio. Pura jokainen b64_json-arvo tai lataa jokaisen palautetun allekirjoitetun URL-osoitteen sisältö. Valitse tiedostopääte todellisen MIME-tyypin tai tavusisällön perusteella.

Jos alkuperäinen vastaus on tarkistettava

Jos kuvan generoinnin tai muokkauksen tulos edellyttää tarkistusta, säilytä alkuperäinen operation_id/X-Client-Request-ID ja palautetut tulostiedot. Hae olemassa olevat omistamasi tulokset mediakirjastosta käyttämällä todellisia task_id- tai asset_id-arvoja. Älä lähetä generointi- tai muokkauspyyntöä uudelleen äläkä muodosta tilakyselyn URL-osoitetta operation_id-arvosta.

Vastauksen kentät
KenttäTyyppi
KenttäcreatedTyyppiinteger
Kenttädata[].urlTyyppistring
Kenttädata[].b64_jsonTyyppibase64 string
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.
Vastausserver_errorEhtoPalautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistustaSeuraava vaiheSäilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.

Aliakset

Mallin aliakset

Ailoot image-01, minimax-image, minimax-image-latest, minimax/image-01

Menetelmäpolkujen aliakset

Käytä yllä näytettyjä menetelmäpolkuja.

Liittyvät kutsujan ID:t

image-01, minimax-image, minimax-image-latest, minimax/image-01

FAQ · image-01
Mitä syötteitä ja tuloksia on saatavilla?

POST /v1/images/generations · image-01: text → image

POST /v1/images/generations · minimax-image: text → image

POST /v1/images/generations · minimax-image-latest: text → image

POST /v1/images/generations · minimax/image-01: text → image

Mitä kenttiä pyyntö käyttää?

POST /v1/images/generations · image-01: model, prompt, n, response_format, stream

POST /v1/images/generations · minimax-image: model, prompt, n, response_format, stream

POST /v1/images/generations · minimax-image-latest: model, prompt, n, response_format, stream

POST /v1/images/generations · minimax/image-01: model, prompt, n, response_format, stream

Mitä rajoja sovelletaan?

POST /v1/images/generations · image-01: n.minimum: 1

POST /v1/images/generations · minimax-image: n.minimum: 1

POST /v1/images/generations · minimax-image-latest: n.minimum: 1

POST /v1/images/generations · minimax/image-01: n.minimum: 1

Lisätietoja

Yhdistä Ailoot Claude Codeen, OpenCodeen, Hermesiin tai omaan sovellukseesi.

Yritys ja sen projektisalkku

Yritys ja sen projektisalkku: miljoonia asiakkaita; kuukausittainen myynti miljardiluokassa.

Osta tokenit alennuksella.

Tilausalennus säännölliseen käyttöön. Kampanjakoodit — jopa 50% tokeniostoista.

Tilaus
Valitse alennushintainen paketti säännöllisiä pyyntöjäsi varten.
Kampanjakoodi jopa 50%
Syötä koodi oston yhteydessä. Hinta lasketaan uudelleen voimassa olevan kampanjan mukaan.
Kulut historiassa
Malli, tokenit ja summa tallennetaan jokaiselle pyynnölle.

Valitse tilaus · Katso mallihinnat

Yhdistä API tuotteeseen, jonka myyt.

SaaS, sovellukset ja botit Ailootin palveluehtojen ja lisenssisopimuksen mukaisesti. Pyydä edelleenmyyntiin jälleenmyyjälisenssi.

Kaupallinen sovellus
Lisää tekstin, kuvien, videoiden ja äänen luonti palvelusi maksullisiin ominaisuuksiin.
Jälleenmyyjälisenssi
Lähetä projektikuvaus ja pääsyn toteutustapa. Pyydä kirjalliset käyttö- ja jälleenmyyntiehdot.
Asiakirjat verkkosivustolla
Palveluehdot, lisenssisopimus ja tietojenkäsittelykäytäntö ovat saatavilla ennen yhdistämistä.

Pyydä jälleenmyyjälisenssi · Palveluehdot ja lisenssisopimus