grok-imagine-image-2.0
Grok Imagine Image 2.0 vytváří obrázky podle popisu s možností volby poměru stran, rozlišení a kvality. Samotný model podporuje také úpravy obrázků a přenos vizuálního stylu.
O modelu
Tento popis zahrnuje schopnosti modelu. Vstupy, výstupy a možnosti dostupné v Ailoot jsou uvedeny níže pro vybranou metodu.
Generování a upřesňování obrázku
Grok Imagine Image 2.0 přijímá popis scény a vytváří obrázek. Model xAI umí také pracovat s výchozím vizuálním materiálem: provádět změny podle textové instrukce a pokračovat v úpravách s využitím předchozího výsledku jako nového vstupu. V Ailoot je zveřejněna metoda generování z textu.
Vizuální styly
Pro Image 2.0 xAI popisuje realistickou fotografii, anime, olejomalbu a kresbu tužkou. Styl se zadává slovy; při práci s výchozím obrázkem instrukce určuje požadovanou estetiku. Postupné změny umožňují přidávat detaily a upřesňovat výsledek krok za krokem.
Poměry stran, rozměr a počet
nzadává 1 až 10 obrázků podle jednoho popisu; ve výchozím nastavení jeden.aspect_ratiovolí tvar obrazu;autoponechává volbu modelu.resolutionzadává 1K nebo 2K; standardní hodnotou je 1K.
K dispozici jsou čtvercové, vodorovné a svislé formáty: 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1, 1:2. Dostupné jsou formáty protáhlých obrazovek 19.5:9, 9:19.5, 20:9, 9:20 i široké 21:9 a 5:2.
Volba kvality
Image 2.0 podporuje low, medium a auto. Parametr se vztahuje právě na tuto verzi; auto se používá, pokud kvalita není zadána. K datu ověření automatický režim volí low při generování a medium při úpravách.
Režim medium podle xAI vyhrazuje více výpočtů pro podrobné zpracování obrázku. Výslovná volba low nebo medium nastavuje požadovaný režim, zatímco chování auto závisí na aktuálním nastavení výrobce.
Vstup a výsledek
Model má textový i vizuální vstup a výsledkem jsou obrázky. Ve vlastním režimu úprav xAI Image 2.0 přijímá až pět výchozích obrázků; pro aktuální metodu generování Ailoot se používá textový vstup. Výsledek lze předávat jako soubor přes odkaz nebo v base64.
Ailoot · Obrázky POST /v1/images/generations grok-imagine-image-2.0
grok-imagine-image-2.0Úvod
Grok Imagine Image 2.0 vytváří obrázky podle popisu s možností volby poměru stran, rozlišení a kvality. Samotný model podporuje také úpravy obrázků a přenos vizuálního stylu.
- Přijímané vstupy
- Text
- Výsledky
- Obrázky
Dostupné v Ailoot · vstupy a metody
Ailoot · Obrázky POST /v1/images/generations
- Vstup
text- Výstup
image- Výstupní formát
- Soubor obrázku
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity grok-imagine-image-2.0 | Výchozí— |
Poleprompt | Typstring | PožadavekPovinné | Hodnoty a limity | Výchozí— |
Polen | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Maximum: 10 | Výchozí1 |
Poleresponse_format | Typstring | PožadavekVolitelné | Hodnoty a limity url, b64_json | Výchozíurl |
Poleresolution | Typstring | PožadavekVolitelné | Hodnoty a limity 1k, 2k | Výchozí1k |
Poleaspect_ratio | Typstring | PožadavekVolitelné | Hodnoty a limity auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1, 1:2, 19.5:9, 9:19.5, 20:9, 9:20, 21:9, 5:2 | Výchozíauto |
Polequality | Typstring | PožadavekVolitelné | Hodnoty a limity low, medium, auto | Výchozí— |
Kombinace vstupních materiálů
Text na obrázek · Povinné: prompt
Parametry a životní cyklus metody
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext |
Parametrrequired | Kontraktmodel, prompt |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/json |
Životní cyklus: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · skutečně vrácené task_id nebo záznam v knihovně médií
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.
Tarify
Sazby metod Ailoot
POST /v1/images/generations- Vstup
- 0,01 US$ za vstupní obrázek
- Výstup
- 0,05 US$ za obrázek v rozlišení 1.5K v nízké kvalitě
- Výstup
- 0,07 US$ za obrázek v rozlišení 1.5K ve střední kvalitě
- Výstup
- 0,04 US$ za obrázek v rozlišení 1K v nízké kvalitě
- Výstup
- 0,06 US$ za obrázek v rozlišení 1K ve střední kvalitě
- Výstup
- 0,06 US$ za obrázek v rozlišení 2K v nízké kvalitě
- Výstup
- 0,08 US$ za obrázek v rozlišení 2K ve střední kvalitě
Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →
Příklady požadavků
Ailoot · Obrázky
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": "grok-imagine-image-2.0", "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': 'grok-imagine-image-2.0', '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": "grok-imagine-image-2.0", "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");
Přijímání a ukládání výsledků
Ailoot · Obrázky
Stáhněte každý vrácený obrázek nebo uložte jeho obsah Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Uchovejte všechny dokončené výsledky
Uložte každý dokončený obrázek; stáhněte obsah každé vrácené URL nebo dekódujte obsah Base64.
Uložte všechny datové položky. Dekódujte každé b64_json nebo stáhněte soubor z každé vrácené podepsané URL. Příponu souboru zvolte podle skutečného typu MIME a bajtů.
Pokud je nutné ověřit původní odpověď
Pokud výsledek generování nebo úpravy obrázku vyžaduje kontrolu, uchovejte původní operation_id/X-Client-Request-ID a vrácené informace o výsledku. Existující vlastní výsledky obnovte prostřednictvím knihovny médií pomocí skutečných hodnot task_id nebo asset_id. Požadavek na generování či úpravu znovu neodesílejte a nevytvářejte URL pro dotazování na stav z operation_id.
Pole odpovědi
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Odpověďserver_error | PodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovat | Další krokUchovejte původní vrácené ID operace nebo úlohy, hlavičky požadavku a odpověď; pokračujte v podporovaném načítání údajů o této původní operaci. Požadavek na vytvoření znovu neodesílejte. |
Aliasy
Aliasy modelu
Ailoot grok-imagine-image-2.0
Aliasy cest metod
Použijte cesty metod uvedené výše.
Související ID modelů
FAQ · grok-imagine-image-2.0
- Jaké vstupy a výsledky jsou dostupné?
POST /v1/images/generations·grok-imagine-image-2.0:text→image- Jaká pole požadavek používá?
POST /v1/images/generations·grok-imagine-image-2.0:model,prompt,n,response_format,resolution,aspect_ratio,quality- Jaké limity platí?
POST /v1/images/generations·grok-imagine-image-2.0:n.minimum:1;n.maximum:10