Recraft: Recraft V4
Recraft V4 generuje rastrowe obrazy 1K, koncentrując się na kompozycji, relacjach kolorów i szczegółowym kierunku twórczym. Obejmuje ilustrację, sceny fotorealistyczne i koncepcje projektowania graficznego, z opcjonalnymi danymi stylu i osobnym procesem obraz–obraz.
O modelu
Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.
Recraft V4 to standardowy model rastrowy generacji V4 Recraft. Producent podkreśla osąd projektowy: zrównoważoną kompozycję, spójne relacje kolorów i szczegóły wspierające zamysł wizualny. Potrafi pracować ze stylizowaną ilustracją, scenami fotograficznymi i koncepcjami projektowania graficznego. Używaj go, gdy opis wymaga obrazu łączącego wybory estetyczne z dokładnością względem promptu, zarówno przy eksplorowaniu nastroju z krótkiej wskazówki, jak i szczegółowym określaniu zamierzonego układu.
Dokładny kod modelu to recraftv4. Dokumentacja producenta podaje rastrowy wynik 1K w bezstratnym WebP lub PNG. Kwadratowy obraz ma 1024 × 1024 piksele, 16:9 — 1344 × 768, a 2:3 — 832 × 1280; pozostałe obsługiwane proporcje używają własnych wymiarów. V4 Pro to osobna rastrowa wersja 2K, a V4 Vector i Pro Vector zwracają edytowalne SVG. Wybierz dokładny wariant V4 do zamierzonego rezultatu, zamiast łączyć różne właściwości wyjściowe.
Przewodnik producenta odróżnia krótkie prompty interpretacyjne od ustrukturyzowanego kierunku twórczego. Krótka fraza może pozostawiać przestrzeń na eksplorację formy, nastroju i kadru. Ustrukturyzowany opis może nazywać temat, otoczenie, pozę, materiał, elementy drugorzędne, światło i hierarchię wizualną. W ilustracji narracyjnej opisz rowerzystę przejeżdżającego przez mały most, wyraziste uproszczone kształty, ciepłe stonowane kolory i jasny ruch od lewej do prawej. Te decyzje dotyczące treści i kompozycji są bardziej użyteczne niż długa lista niepowiązanych przymiotników stylu.
Zakres V4 obejmuje ilustrację, obrazy przestrzenne i grafiki fotorealistyczne. Przewodnik zaleca opisywanie logiki rysunku dla ilustracji oraz materiału, światła, kamery i głębi dla obrazu wyglądającego jak 3D. Ten drugi pozostaje grafiką rastrową, a nie edytowalną siatką. W koncepcji plakatu lub opakowania określ, które słowa są najważniejsze, gdzie należą i jak obraz współdziała z typografią. Producent podkreśla czytelny tekst krótki i średniej długości; sprawdź rzeczywiste słowa i układ w zwróconym obrazie przed jego wykorzystaniem.
Generowanie obsługuje prompty do 10 000 znaków, ziarno losowości, od jednego do sześciu wyników, preferowane kolory i pożądany kolor tła. Opcjonalne zgodne style niestandardowe i obrazy referencyjne mogą kierować sposobem przedstawienia przez elastyczne lub precyzyjne dopasowanie. Wybierz czystą referencję lub zestaw należący do jednego świata wizualnego, a prompt niech opisuje nowy temat i scenę. Dopasowanie koloru referencji do wyniku nie jest gwarantowane, dlatego jasno zachowaj wymaganą paletę i porównaj z nią rezultat. Do generowania ze stylem referencyjnym użyj od jednego do dziesięciu obrazów PNG, JPG lub WebP, nie więcej niż 64 MB łącznie i poniżej 20 MB każdy. Każda referencja wymaga najkrótszego boku co najmniej 256 pikseli, najdłuższego nie większego niż 4096 pikseli i rozdzielczości nie większej niż 16 megapikseli. Używaj tych referencji albo zgodnego zapisanego stylu, zamiast obu naraz.
Udokumentowana operacja obraz–obraz łączy istniejący obraz i prompt, a siła od 0 do 1 określa, jak daleko nowy wynik odchodzi od źródła. Nie przyjmuje w tej operacji ustawień stylu V4. Obecna dokumentacja generowania wyklucza także nazwy stylów z biblioteki, negative_prompt, text_layout, artistic_level i no_text. Przygotuj pozytywny opis oczekiwanego rezultatu i oceń materiał w docelowej kompozycji. Standardowy V4 zapewnia ukierunkowaną rastrową interpretację projektu, z konkretną wersją, formatem i rozmiarem wyniku. Do operacji obraz–obraz dostarcz PNG, JPG, WebP lub SVG poniżej 20 MB, nie więcej niż 16 megapikseli, z oboma bokami od 256 do 4096 pikseli.
Ailoot Ultra · Obrazy POST /v1/images/generations recraft/recraft-v4
recraft/recraft-v4Start
Recraft V4 generuje rastrowe obrazy 1K, koncentrując się na kompozycji, relacjach kolorów i szczegółowym kierunku twórczym. Obejmuje ilustrację, sceny fotorealistyczne i koncepcje projektowania graficznego, z opcjonalnymi danymi stylu i osobnym procesem obraz–obraz.
- Akceptowane dane wejściowe
- Tekst · Obrazy
- Wyniki
- Obrazy
Dostępne w Ailoot · dane wejściowe i metody
Ailoot Ultra · Obrazy POST /v1/images/generations
- Wejście
text,image- Wyjście
image- Format wyjściowy
- Plik obrazu
| Pole | Typ | Wymaganie | Wartości i limity | Domyślnie |
|---|---|---|---|---|
Polemodel | Typstring | WymaganieWymagane | Wartości i limity recraft/recraft-v4 | Domyślnie— |
Poleprompt | Typstring | WymaganieWymagane | Wartości i limity Minimalna długość: 1 | Domyślnie— |
Polen | Typinteger | WymaganieOpcjonalne | Wartości i limity Minimum: 1 Maksimum: 6 | Domyślnie— |
Poleaspect_ratio | Typstring | WymaganieOpcjonalne | Wartości i limity 1:1, 4:3, 3:4, 16:9, 9:16, auto | Domyślnie— |
Poleinput_references | Typarray | WymaganieOpcjonalne | Wartości i limity Minimalna liczba elementów: 0 Maksymalna liczba elementów: 1 | Domyślnie— |
Kombinacje materiałów wejściowych
Tekst na obraz · Wymagane: prompt
reference_guided_image · Wymagane: prompt, actual image reference
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, prompt |
Parametrmaterial_types | Kontrakttext, image |
Parametroptional_controls | Kontraktn, aspect_ratio, input_references |
Parametrn | Kontrakt{"minimum":1,"maximum":6} |
Parametrreference_images | Kontrakt{"minimum":0,"maximum":1,"source":"rzeczywisty materiał dostarczony przez klienta"} |
Parametrprovider_specific_options | KontraktWyłącznie style/controls/text_layout z zapisanej dokładnej listy dozwolonych ustawień endpointu; bez zgadywania struktur. |
Aliasy metody: /v1/images
Cykl życia: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Rzeczywiście zwrócony task_id lub wpis w bibliotece multimediów
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Przykład zawierający wyłącznie prompt zachowuje oficjalną strukturę ImageGenerationRequest.
Zachowaj każdy zwrócony obraz i pełną odpowiedź; liczba wyników jest rzeczywista, a nie żądana w n.
Cennik
Jak obliczana jest ostateczna opłata
Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.
Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.
- Tryb szybki
- Nie określono Gdy wybrany jest tryb szybki
- Tryb flex
- Nie określono Gdy wybrany jest tryb flex
- Maksymalna intensywność rozumowania
- Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Szacunkowe stawki do porównania
Ceny według konfiguracji
Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.
| Konfiguracja | Tabela stawek | Przewidywana ilość | Jednostka rozliczeniowa | Opłata |
|---|---|---|---|---|
| KonfiguracjaBazowe stawki za tokeny | Tabela stawekStawka podstawowa | Przewidywana ilość— | Jednostka rozliczeniowa— | Opłata Wejście · Tokeny wejściowe · Szacunek tylko do porównania — / 1K tokenów Wyjście · Tokeny wyjściowe · Szacunek tylko do porównania — / 1K tokenów Wejście · Odczyt cache · Szacunek tylko do porównania — / 1K tokenów Wejście · Zapis do cache · Szacunek tylko do porównania — / 1K tokenów Wejście · Zapis do cache, 1 godz. · Szacunek tylko do porównania — / 1K tokenów |
| KonfiguracjaUltra | Tabela stawek— | Przewidywana ilość— | Jednostka rozliczeniowaza obraz wyjściowy | Opłata Wyjście · obraz wyjściowy · Szacunek tylko do porównania $0.08 za obraz wyjściowy |
| KonfiguracjaSzacowany koszt generowania | Tabela stawek— | Przewidywana ilośćszacunek dla jednego generowania | Jednostka rozliczeniowa— | Opłata Wyjście · Szacowany koszt generowania · Szacunek tylko do porównania $0.08 szacunek przed generowaniem Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie. |
Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →
Szczegóły taryfy referencyjnej
Referencyjne tabele modelu nie zmieniają wyboru metody, wyceny ani opłat. Naliczane opłaty korzystają ze stawek wybranej metody Ailoot.
Konfiguracje cen obrazów
Ceny według konfiguracji
| Konfiguracja | Warunki rozliczania | Opłata |
|---|---|---|
| KonfiguracjaObraz wyjściowy | Warunki rozliczaniaNie zadeklarowano wariantu cenowego. | Opłata Wyjście · Obraz wyjściowy $0.08 za obraz Równoważne pozycje opisują tę samą opłatę; nie doliczają drugiej opłaty. |
Przykładowe żądania
Ailoot Ultra · Obrazy
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");
Odbieranie i zapisywanie wyników
Ailoot Ultra · Obrazy
Pobierz każdy zwrócony obraz lub zapisz jego zawartość Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Zachowaj wszystkie ukończone wyniki
Zapisz każdy ukończony obraz; pobierz każdy zwrócony URL lub zdekoduj zawartość Base64.
Zachowaj każdy element data i kompletne dane użycia; zapewnij własność i zapisz wszystkie rzeczywiście zwrócone obrazy. Bez zmyślonych adresów URL ani identyfikatorów.
Jeśli trzeba sprawdzić pierwotną odpowiedź
Jeśli wynik generowania lub edycji obrazu wymaga sprawdzenia, zachowaj pierwotny operation_id/X-Client-Request-ID oraz zwrócone informacje o wyniku. Odzyskaj istniejące własne wyniki z biblioteki multimediów, używając rzeczywistych wartości task_id lub asset_id. Nie wysyłaj ponownie żądania generowania lub edycji ani nie twórz adresu URL do sprawdzania stanu na podstawie operation_id.
Pola odpowiedzi
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Błędy i dalsze kroki
| Odpowiedź | Warunek | Następny krok |
|---|---|---|
Odpowiedź400 · invalid_request_error | WarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametru | Następny krokPopraw wskazane pola przed nowym żądaniem utworzenia. |
Odpowiedźserver_error | WarunekZwrócona odpowiedź wskazuje, że operacja lub wynik wymaga sprawdzenia | Następny krokZachowaj pierwotnie zwrócony identyfikator operacji lub zadania, nagłówki żądania i odpowiedź; kontynuuj obsługiwane odczyty tej pierwotnej operacji. Nie wysyłaj ponownie żądania utworzenia. |
Aliasy
Aliasy modelu
Ailoot Ultra recraft/recraft-v4
Aliasy ścieżek metod
/v1/images
Powiązane ID modeli
FAQ · Recraft: Recraft V4
- Jakie dane wejściowe i wyniki są dostępne?
POST /v1/images/generations·recraft/recraft-v4:text,image→image- Jakich pól używa żądanie?
POST /v1/images/generations·recraft/recraft-v4:model,prompt,n,aspect_ratio,input_references- Jakie limity obowiązują?
POST /v1/images/generations·recraft/recraft-v4:n.minimum:1;n.maximum:6