Recraft: Recraft V4
Recraft V4 generuoja 1K rastrinius vaizdus, daug dėmesio skirdamas kompozicijai, spalvų santykiams ir išsamiai kūrybinei krypčiai. Jis apima iliustraciją, fotorealistines scenas ir grafinio dizaino koncepcijas su pasirenkama stiliaus įvestimi ir atskira vaizdo keitimo pagal vaizdą eiga.
Apie modelį
Šis aprašas apima modelio galimybes. Pasirinktam metodui Ailoot prieinamos įvestys, išvestys ir parinktys nurodytos toliau.
Recraft V4 yra standartinis rastrinis Recraft V4 kartos modelis. Gamintojas pabrėžia dizaino sprendimus: subalansuotą kompoziciją, nuoseklius spalvų santykius ir vizualinį sumanymą palaikančias detales. Jis gali dirbti su stilizuota iliustracija, fotografinėmis scenomis ir grafinio dizaino koncepcijomis. Naudokite jį, kai aprašui reikia vaizdo, jungiančio estetinius pasirinkimus ir tikslų užklausos laikymąsi – tiek tyrinėjant nuotaiką pagal trumpą kryptį, tiek detaliai nurodant apgalvotą išdėstymą.
Tikslus modelio kodas yra recraftv4. Gamintojo specifikacijoje nurodyta 1K rastrinė išvestis nenuostolingu WebP arba PNG formatu. Kvadratinis vaizdas yra 1024 × 1024 pikselių, 16:9 – 1344 × 768, o 2:3 – 832 × 1280; kiti palaikomi santykiai turi savo matmenis. V4 Pro yra atskira 2K rastrinė versija, o V4 Vector ir Pro Vector pateikia redaguojamą SVG. Rinkitės konkrečią V4 versiją pagal numatytą rezultatą, užuot jungę skirtingas išvesties savybes.
Gamintojo vadovas skiria trumpas interpretacines užklausas nuo struktūruotos kūrybinės krypties. Trumpa frazė gali palikti erdvės tyrinėti formą, nuotaiką ir kadravimą. Struktūruotas aprašas gali įvardyti objektą, aplinką, pozą, medžiagą, antrinius elementus, apšvietimą ir vizualinę hierarchiją. Pasakojamajai iliustracijai aprašykite dviratininką, kertantį mažą tiltą, ryškias supaprastintas formas, šiltas prislopintas spalvas ir aiškų judėjimą iš kairės į dešinę. Šie turinio ir kompozicijos sprendimai yra praktiškesni nei ilgas nesusijusių stiliaus būdvardžių sąrašas.
V4 spektras apima iliustraciją, erdvinius vaizdus ir fotorealistinę medžiagą. Vadovas iliustracijai rekomenduoja aprašyti piešimo logiką, o 3D atrodantį vaizdą – per medžiagas, šviesą, kamerą ir gylį. Pastarasis lieka rastriniu vaizdu, o ne redaguojamu tinkleliu. Plakato ar pakuotės koncepcijai nurodykite, kurie žodžiai svarbiausi, kur jie turi būti ir kaip sąveikauja vaizdas bei tipografija. Gamintojas pabrėžia įskaitomą trumpą ir vidutinio ilgio tekstą; prieš naudodami patikrinkite tikrą tekstą ir jo išdėstymą gautame vaizde.
Generavimas palaiko iki 10 000 simbolių užklausas, atsitiktinumo sėklą, nuo vieno iki šešių rezultatų, pageidaujamas spalvas ir norimą fono spalvą. Pasirenkami suderinami individualūs stiliai ir etaloniniai vaizdai gali nukreipti vizualinį apdorojimą per lankstų arba tikslų derinimą. Rinkitės aiškų etaloną ar vienam vizualiniam pasauliui priklausantį rinkinį, o užklausoje aprašykite naują objektą ir sceną. Etalono ir rezultato spalvų atitikimas negarantuojamas, todėl aiškiai nurodykite reikiamą paletę ir palyginkite su ja rezultatą. Generavimui pagal stiliaus etalonus naudokite nuo vieno iki dešimties PNG, JPG arba WebP vaizdų: iš viso ne daugiau kaip 64 MB, kiekvienas mažesnis nei 20 MB. Trumpesnė kiekvieno etalono kraštinė turi būti bent 256 pikselių, ilgesnė – ne daugiau kaip 4 096 pikselių, o raiška – ne didesnė nei 16 megapikselių. Naudokite šiuos etalonus arba suderinamą išsaugotą stilių, bet ne abu kartu.
Dokumentuota vaizdo keitimo pagal vaizdą operacija jungia esamą vaizdą ir užklausą, o strength nuo 0 iki 1 nustato, kiek nauja išvestis nutolsta nuo šaltinio. Ši operacija nepriima V4 stiliaus valdiklių. Dabartinė generavimo specifikacija taip pat nepalaiko parinktų stilių pavadinimų, negative_prompt, text_layout, artistic_level ir no_text. Paruoškite teigiamą norimo rezultato aprašymą ir įvertinkite medžiagą tikslinėje kompozicijoje. Standartinis V4 pateikia kryptingą rastrinę dizaino interpretaciją su konkrečia versija, formatu ir išvesties dydžiu. Vaizdo keitimui pagal vaizdą pateikite mažesnį nei 20 MB PNG, JPG, WebP arba SVG, ne daugiau kaip 16 megapikselių, su abiem kraštinėmis nuo 256 iki 4 096 pikselių.
Ailoot Ultra · Vaizdai POST /v1/images/generations recraft/recraft-v4
recraft/recraft-v4Pradžia
Recraft V4 generuoja 1K rastrinius vaizdus, daug dėmesio skirdamas kompozicijai, spalvų santykiams ir išsamiai kūrybinei krypčiai. Jis apima iliustraciją, fotorealistines scenas ir grafinio dizaino koncepcijas su pasirenkama stiliaus įvestimi ir atskira vaizdo keitimo pagal vaizdą eiga.
- Leidžiamos įvestys
- Tekstas · Vaizdai
- Rezultatai
- Vaizdai
Prieinama Ailoot · įvestys ir metodai
Ailoot Ultra · Vaizdai POST /v1/images/generations
- Įvestis
text,image- Išvestis
image- Išvesties formatas
- Vaizdo failas
| Laukas | Tipas | Reikalavimas | Reikšmės ir ribos | Numatyta |
|---|---|---|---|---|
Laukasmodel | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos recraft/recraft-v4 | Numatyta— |
Laukasprompt | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos Mažiausias ilgis: 1 | Numatyta— |
Laukasn | Tipasinteger | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausia reikšmė: 1 Didžiausia reikšmė: 6 | Numatyta— |
Laukasaspect_ratio | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos 1:1, 4:3, 3:4, 16:9, 9:16, auto | Numatyta— |
Laukasinput_references | Tipasarray | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausias elementų skaičius: 0 Didžiausias elementų skaičius: 1 | Numatyta— |
Įvesties medžiagos deriniai
Iš teksto į vaizdą · Privaloma: prompt
reference_guided_image · Privaloma: prompt, actual image reference
Metodo parametrai ir gyvavimo ciklas
| Parametras | Specifikacija |
|---|---|
Parametrascontent_type | Specifikacijaapplication/json |
Parametrasrequired | Specifikacijamodel, prompt |
Parametrasmaterial_types | Specifikacijatext, image |
Parametrasoptional_controls | Specifikacijan, aspect_ratio, input_references |
Parametrasn | Specifikacija{"minimum":1,"maximum":6} |
Parametrasreference_images | Specifikacija{"minimum":0,"maximum":1,"source":"tikra kliento pateikta medžiaga"} |
Parametrasprovider_specific_options | SpecifikacijaTik išsaugotas tikslus galinio taško leidžiamų parametrų sąrašas style/controls/text_layout; jokių spėjamų struktūrų. |
Metodo pseudonimai: /v1/images
Gyvavimo ciklas: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · faktiškai grąžinta task_id reikšmė arba medijos bibliotekos įrašas
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Pavyzdys su vien tekstine užklausa išlaiko oficialią ImageGenerationRequest struktūrą.
Išsaugokite kiekvieną grąžintą paveikslėlį ir visą atsakymą; rezultatų skaičius yra tikrasis, o ne prašomas n.
Planai
Kaip apskaičiuojamas galutinis mokestis
Rodomi įkainiai leidžia įvertinti kainą prieš generavimą. Galutinė suma apskaičiuojama pagal užfiksuotą pradinio generavimo kainą. Išmatuota rezultato trukmė ir prognozuoti kiekiai nėra galutinis apmokestinamas kiekis.
Tarifų informacija neprideda užklausos parinkčių. Palaikomi parametrai nurodyti prie pasirinkto metodo.
- Spartusis režimas
- Nenurodyta Pasirinkus spartųjį režimą
- Flex režimas
- Nenurodyta Pasirinkus flex režimą
- Didžiausios samprotavimo pastangos
- Nenurodyta Kai didžiausioms samprotavimo pastangoms taikomas numatytasis koregavimas (default)
Numatomi įkainiai palyginimui
Kainos pagal konfigūraciją
Kiekvieną mokestį susiekite su nurodytomis sąlygomis. Kiekvienam alternatyvių konfigūracijų rinkiniui taikykite vieną įkainį.
| Konfigūracija | Įkainių lentelė | Numatomas kiekis | Apskaitos vienetas | Mokestis |
|---|---|---|---|---|
| KonfigūracijaBaziniai žetonų įkainiai | Įkainių lentelėBazinis įkainis | Numatomas kiekis— | Apskaitos vienetas— | Mokestis Įvestis · Įvesties tokenai · Įvertis tik palyginimui — / 1K tokenų Išvestis · Išvesties tokenai · Įvertis tik palyginimui — / 1K tokenų Įvestis · Talpyklos skaitymas · Įvertis tik palyginimui — / 1K tokenų Įvestis · Rašymas į talpyklą · Įvertis tik palyginimui — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val · Įvertis tik palyginimui — / 1K tokenų |
| KonfigūracijaUltra | Įkainių lentelė— | Numatomas kiekis— | Apskaitos vienetasuž išvesties vaizdą | Mokestis Išvestis · išvesties vaizdas · Įvertis tik palyginimui $0.08 už išvesties vaizdą |
| KonfigūracijaNumatoma generavimo kaina | Įkainių lentelė— | Numatomas kiekisvieno generavimo įvertis | Apskaitos vienetas— | Mokestis Išvestis · Numatoma generavimo kaina · Įvertis tik palyginimui $0.08 įvertis prieš generavimą Šis įvertis nėra papildomas mokestis ar fiksuotas užbaigto generavimo įkainis. |
Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →
Informacinio tarifo duomenys
Modelio informacinės lentelės nekeičia metodo pasirinkimo, kainos įverčių ar mokesčių. Galiojantys mokesčiai nustatomi pagal pasirinkto Ailoot metodo įkainius.
Paveikslėlių kainodaros konfigūracijos
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| KonfigūracijaIšvesties paveikslėlis | Apmokestinimo sąlygosKainodaros variantas nedeklaruotas. | Mokestis Išvestis · Išvesties vaizdas $0.08 už vaizdą Lygiaverčiai sąrašų įrašai apibūdina tą patį mokestį; jie neprideda antro mokesčio. |
Užklausų pavyzdžiai
Ailoot Ultra · Vaizdai
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'recraft/recraft-v4', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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")
request={'model': 'recraft/recraft-v4', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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": "recraft/recraft-v4", "prompt": "a red panda astronaut floating in space, studio lighting"};
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");
Gauti ir išsaugoti rezultatus
Ailoot Ultra · Vaizdai
Atsisiųskite kiekvieną grąžintą vaizdą arba išsaugokite jo Base64 turinį
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Išsaugoti visus baigtus rezultatus
Išsaugokite kiekvieną baigtą vaizdą; gaukite turinį iš kiekvieno grąžinto URL arba dekoduokite jo Base64 turinį.
Išsaugokite kiekvieną data elementą ir visus naudojimo duomenis; perimkite į savo saugyklą ir išsaugokite visus tikrus grąžintus paveikslėlius. Jokių išgalvotų URL ar ID.
Jei reikia patikrinti pradinį atsakymą
Jei vaizdo generavimo ar redagavimo rezultatą reikia patikrinti, išsaugokite pradinį operation_id/X-Client-Request-ID ir grąžintą informaciją apie rezultatą. Atkurkite prieigą prie esamų jums priklausančių rezultatų per medijos biblioteką, naudodami faktines task_id arba asset_id reikšmes. Pakartotinai neteikite generavimo ar redagavimo užklausos ir nekurkite būsenos tikrinimo URL iš operation_id.
Atsakymo laukai
| Laukas | Tipas |
|---|---|
Laukascreated | Tipasinteger |
Laukasdata[].url | Tipasstring |
Laukasdata[].b64_json | Tipasbase64 string |
Laukasusage | Tipasobject |
Klaidos ir tolesni veiksmai
| Atsakymas | Sąlyga | Kitas žingsnis |
|---|---|---|
Atsakymas400 · invalid_request_error | SąlygaNetinkami privalomi laukai, medžiagos pateikimo forma arba parametro reikšmė | Kitas žingsnisPrieš naują kūrimo užklausą pataisykite nurodytus laukus. |
Atsakymasserver_error | SąlygaGrąžintame atsakyme nurodoma, kad operaciją arba rezultatą reikia patikrinti | Kitas žingsnisIšsaugokite pradinį grąžintą operacijos ar užduoties ID, užklausos antraštes ir atsakymą; toliau tikrinkite tos pačios pradinės operacijos duomenis palaikomais būdais. Kūrimo užklausos pakartotinai neteikite. |
Pseudonimai
Modelių pseudonimai
Ailoot Ultra recraft/recraft-v4
Metodų kelių pseudonimai
/v1/images
Susiję ID iškvietimui
FAQ · Recraft: Recraft V4
- Kokios įvestys ir rezultatai prieinami?
POST /v1/images/generations·recraft/recraft-v4:text,image→image- Kokius laukus naudoja užklausa?
POST /v1/images/generations·recraft/recraft-v4:model,prompt,n,aspect_ratio,input_references- Kokie apribojimai taikomi?
POST /v1/images/generations·recraft/recraft-v4:n.minimum:1;n.maximum:6