Recraft: Recraft V4
Recraft V4 genererer rasterbilder i 1K med vekt på komposisjon, fargeforhold og detaljert kreativ regi. Den dekker illustrasjon, fotorealistiske scener og grafiske designkonsepter, med valgfrie stilinndata og en egen bilde-til-bilde-arbeidsflyt.
Om modellen
Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.
Recraft V4 er standardrastermodellen i Recrafts V4-generasjon. Produsenten fremhever designvurdering: balansert komposisjon, sammenhengende fargeforhold og detaljer som støtter den visuelle hensikten. Den kan arbeide med stilisert illustrasjon, fotografiske scener og grafiske designkonsepter. Bruk den når beskrivelsen krever et bilde som kombinerer estetiske valg med promptpresisjon, enten du utforsker en stemning fra en kort retning eller angir en bevisst layout i detalj.
Den spesifikke modellkoden er recraftv4. Produsentreferansen oppgir rasterutdata i 1K som tapsfri WebP eller PNG. Et kvadratisk bilde er 1024 × 1024 piksler, 16:9 er 1344 × 768 og 2:3 er 832 × 1280; andre støttede sideforhold bruker egne dimensjoner. V4 Pro er den separate rasterutgaven i 2K, mens V4 Vector og Pro Vector returnerer redigerbar SVG. Velg den nøyaktige V4-varianten for ønsket leveranse, fremfor å kombinere disse ulike utdataegenskapene.
Produsentens veiledning skiller mellom korte, fortolkbare prompter og strukturert kreativ regi. En kort frase kan gi rom for å utforske form, stemning og utsnitt. En strukturert beskrivelse kan navngi motiv, omgivelser, positur, materiale, sekundære elementer, lyssetting og visuelt hierarki. For en fortellende illustrasjon kan du beskrive en syklist som krysser en liten bro, dristige forenklede former, varme dempede farger og en tydelig bevegelse fra venstre til høyre. Disse innholds- og komposisjonsvalgene er mer anvendelige enn en lang liste over urelaterte stiladjektiver.
V4s spenn omfatter illustrasjon, bilder med dybde og fotorealistiske bilder. Veiledningen anbefaler å beskrive tegnelogikk for illustrasjon og materiale, lys, kamera og dybde for et 3D-lignende bilde. Det siste forblir et rasterbilde fremfor et redigerbart polygonnett. For et plakat- eller emballasjekonsept angir du hvilke ord som er primære, hvor de hører hjemme og hvordan bildet og typografien samspiller. Produsenten fremhever lesbar kort og middels lang tekst; undersøk den faktiske ordlyden og oppstillingen i det returnerte bildet før det brukes.
Generering støtter prompter på opptil 10 000 tegn, en tilfeldig seed, ett til seks resultater, foretrukne farger og ønsket bakgrunnsfarge. Valgfrie kompatible egendefinerte stiler og referansebilder kan styre det visuelle uttrykket gjennom flexible eller precise matching. Velg en ren referanse eller et sett som tilhører én visuell verden, og la deretter prompten beskrive det nye motivet og scenen. Fargesamsvar mellom referanse og resultat er ikke garantert, så hold den nødvendige paletten uttrykkelig og sammenlign resultatet med den. For generering med referansestil bruker du ett til ti PNG-, JPG- eller WebP-bilder, høyst 64 MB til sammen og under 20 MB hver. Hver referanse trenger en kortside på minst 256 piksler, en langside på høyst 4 096 piksler og en oppløsning på høyst 16 megapiksler. Bruk enten disse referansene eller en kompatibel lagret stil, fremfor begge deler.
Den dokumenterte bilde-til-bilde-operasjonen kombinerer et eksisterende bilde og en prompt, med styrke fra 0 til 1 som avgjør hvor langt de nye utdataene beveger seg fra kilden. Den godtar ikke V4-stilkontroller i denne operasjonen. Den nåværende genereringsreferansen utelukker også kuraterte stilnavn, negative_prompt, text_layout, artistic_level og no_text. Klargjør en positiv beskrivelse av ønsket resultat, og vurder bildet innenfor målkomposisjonen. Standardutgaven V4 gir en avgrenset rasterbasert designtolkning, med en bestemt utgave, et bestemt format og en bestemt utdatastørrelse. For bilde-til-bilde sender du inn PNG, JPG, WebP eller SVG under 20 MB, høyst 16 megapiksler, med begge sider mellom 256 og 4 096 piksler.
Ailoot Ultra · Bilder POST /v1/images/generations recraft/recraft-v4
recraft/recraft-v4Start
Recraft V4 genererer rasterbilder i 1K med vekt på komposisjon, fargeforhold og detaljert kreativ regi. Den dekker illustrasjon, fotorealistiske scener og grafiske designkonsepter, med valgfrie stilinndata og en egen bilde-til-bilde-arbeidsflyt.
- Godkjente inndata
- Tekst · Bilder
- Resultater
- Bilder
Tilgjengelig i Ailoot · inndata & metoder
Ailoot Ultra · Bilder POST /v1/images/generations
- Inndatatyper
text,image- Utdatatyper
image- Utdataformat
- Bildefil
| Felt | Type | Krav | Verdier & grenser | Standard |
|---|---|---|---|---|
Feltmodel | Typestring | KravPåkrevd | Verdier & grenser recraft/recraft-v4 | Standard— |
Feltprompt | Typestring | KravPåkrevd | Verdier & grenser Minste lengde: 1 | Standard— |
Feltn | Typeinteger | KravValgfritt | Verdier & grenser Minimum: 1 Maksimum: 6 | Standard— |
Feltaspect_ratio | Typestring | KravValgfritt | Verdier & grenser 1:1, 4:3, 3:4, 16:9, 9:16, auto | Standard— |
Feltinput_references | Typearray | KravValgfritt | Verdier & grenser Minste antall elementer: 0 Maksimalt antall elementer: 1 | Standard— |
Kombinasjoner av inngående materialer
Tekst til bilde · Påkrevd: prompt
reference_guided_image · Påkrevd: prompt, actual image reference
Metodeparametere og livssyklus
| Parameter | Avtale |
|---|---|
Parametercontent_type | Avtaleapplication/json |
Parameterrequired | Avtalemodel, prompt |
Parametermaterial_types | Avtaletext, image |
Parameteroptional_controls | Avtalen, aspect_ratio, input_references |
Parametern | Avtale{"minimum":1,"maximum":6} |
Parameterreference_images | Avtale{"minimum":0,"maximum":1,"source":"Faktisk materiale levert av kunden"} |
Parameterprovider_specific_options | AvtaleBare den lagrede eksakte tillatelseslisten for endepunktets style/controls/text_layout; ingen gjettede strukturer. |
Metodealiaser: /v1/images
Livssyklus: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · faktisk returnert task_id eller oppføring i mediebiblioteket
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Eksemplet som bare bruker en ledetekst, bevarer den offisielle ImageGenerationRequest-strukturen.
Behold hvert returnert bilde og hele svaret; utdatamengden er den faktiske mengden, ikke forespurt n.
Priser
Slik beregnes det endelige beløpet
De viste satsene anslår kostnaden før generering. Det endelige beløpet beregnes ut fra kostnaden som er registrert for den opprinnelige genereringen. Målt varighet på utdataene og anslåtte mengder er ikke den endelige fakturerbare mengden.
Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.
- Hurtigmodus
- Ikke angitt Når hurtigmodus er valgt
- Flex-modus
- Ikke angitt Når flex-modus er valgt
- Maksimal resonneringsinnsats
- Ikke angitt Når justeringen «default» brukes for maksimal resonneringsinnsats
Estimerte satser for sammenligning
Priser etter konfigurasjon
Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.
| Konfigurasjon | Prisplan | Forventet mengde | Faktureringsenhet | Kostnad |
|---|---|---|---|---|
| KonfigurasjonGrunnpriser for tokener | PrisplanGrunnsats | Forventet mengde— | Faktureringsenhet— | Kostnad Inndata · Inngående tokener · Estimat kun for sammenligning — / 1K tokener Utdata · Utgående tokener · Estimat kun for sammenligning — / 1K tokener Inndata · Lesing fra hurtigbuffer · Estimat kun for sammenligning — / 1K tokener Inndata · Skriving til hurtigbuffer · Estimat kun for sammenligning — / 1K tokener Inndata · Skriving til hurtigbuffer, 1 time · Estimat kun for sammenligning — / 1K tokener |
| KonfigurasjonUltra | Prisplan— | Forventet mengde— | Faktureringsenhetper utdatabilde | Kostnad Utdata · utdatabilde · Estimat kun for sammenligning $0.08 per utdatabilde |
| KonfigurasjonAnslått genereringskostnad | Prisplan— | Forventet mengdeestimat for én generering | Faktureringsenhet— | Kostnad Utdata · Anslått genereringskostnad · Estimat kun for sammenligning $0.08 estimat før generering Dette anslaget er verken en tilleggsavgift eller en fast sats for den fullførte genereringen. |
Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →
Detaljer om referansetariffen
Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.
Konfigurasjoner for bildeprising
Priser etter konfigurasjon
| Konfigurasjon | Faktureringsvilkår | Kostnad |
|---|---|---|
| KonfigurasjonUtdatabilde | FaktureringsvilkårIngen prisvariant er deklarert. | Kostnad Utdata · Utdatabilde $0.08 per bilde Tilsvarende oppføringer beskriver samme belastning; de legger ikke til enda en avgift. |
Eksempelforespørsler
Ailoot Ultra · Bilder
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");
Motta og lagre resultater
Ailoot Ultra · Bilder
Last ned hvert returnerte bilde eller lagre Base64-innholdet
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Behold alle ferdige resultater
Lagre hvert ferdige bilde; hent hver returnerte URL eller dekod Base64-innholdet.
Behold hvert dataelement og alt forbruk; ta eierskap til og lagre alle faktiske returnerte bilder. Ingen oppdiktede adresser eller ID-er.
Hvis det opprinnelige svaret må kontrolleres
Hvis et resultat fra bildegenerering eller bilderedigering må kontrolleres, bevar opprinnelig operation_id/X-Client-Request-ID og den returnerte resultatinformasjonen. Hent eksisterende resultater du eier via mediebiblioteket, ved hjelp av faktiske task_id- eller asset_id-verdier. Ikke send genererings-/redigeringsforespørselen på nytt, og ikke konstruer en URL for statusavlesning fra operation_id.
Svarfelter
| Felt | Type |
|---|---|
Feltcreated | Typeinteger |
Feltdata[].url | Typestring |
Feltdata[].b64_json | Typebase64 string |
Feltusage | Typeobject |
Feil og neste trinn
| Svar | Vilkår | Neste trinn |
|---|---|---|
Svar400 · invalid_request_error | VilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdi | Neste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel. |
Svarserver_error | VilkårDet returnerte svaret angir at operasjonen eller resultatet må kontrolleres | Neste trinnBevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt. |
Aliaser
Modellaliaser
Ailoot Ultra recraft/recraft-v4
Aliaser for metodestier
/v1/images
Tilknyttede anroper-ID-er
FAQ · Recraft: Recraft V4
- Hvilke inndata og resultater er tilgjengelige?
POST /v1/images/generations·recraft/recraft-v4:text,image→image- Hvilke felt bruker forespørselen?
POST /v1/images/generations·recraft/recraft-v4:model,prompt,n,aspect_ratio,input_references- Hvilke grenser gjelder?
POST /v1/images/generations·recraft/recraft-v4:n.minimum:1;n.maximum:6