Recraft: Recraft V3
Recraft V3 tworzy fotografie, ilustracje i układy graficzne z kompozycją uwzględniającą tekst oraz ustawieniami stylu. Jego odrębne warianty rastrowe i SVG pasują do plakatów, zestawów obrazów marki, ikon i projektów, w których słowa i struktura wizualna muszą działać razem.
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 V3 to model generowania obrazów stworzony do projektowania graficznego oraz scen fotograficznych i ilustracyjnych. Opis tekstowy określa temat, otoczenie i kompozycję; wynikiem jest obraz. V3 rozwija renderowanie tekstu i fotorealizm Recraft, zachowując spójność stylu z przykładowych obrazów bez ponownego treningu.
Tekst jako część kompozycji
V3 pracuje z tekstem wewnątrz obrazu, w tym dłuższymi treściami i literami średniej wielkości. Recraft opisuje etap układu, który ustala słowa i ich położenie przed generowaniem obrazu. Układ można utworzyć automatycznie z opisu lub rozmieścić ręcznie w środowisku projektowym Recraft. Pomaga to łączyć nagłówek, ilustrację i tekst uzupełniający w jednej kompozycji. Producent dokumentuje również jawne współrzędne układu tekstu, wyrażone względem obrazu, a nie jako stała siatka pikseli. Każdy element tekstowy zawiera jedno słowo i cztery punkty narożne we współrzędnych znormalizowanych: (0, 0) to lewy górny róg, a (1, 1) prawy dolny. Współrzędne mogą wykraczać poza ten zakres; wtedy kształt jest przycinany. Słowa jawnego układu tekstu muszą spełniać udokumentowane ograniczenia znaków.
Do plakatu lub okładki dostarcz dokładne słowa i opisz ich hierarchię: która linia prowadzi, gdzie się znajduje i jak obraz ją wspiera. Przy wyborze wyniku sprawdź wyrenderowaną pisownię i odstępy.
Styl, paleta i kierunek artystyczny
V3 obejmuje style fotograficzne, ilustracyjne i emblematów z biblioteki oraz osobną bibliotekę stylów wektorowych. Recraft V3 Raw jest domyślnym stylem modelu rastrowego; Vector art jest domyślny dla wariantu wektorowego. Photorealism dąży do wyglądu fotograficznego, a Illustration obejmuje stylizowane tekstury, cieniowanie i bardziej złożone przejścia kolorów. Style wektorowe preferują kształty, ograniczone palety i płaskie wypełnienia lub proste gradienty.
Niestandardowe style można budować z obrazów referencyjnych, istniejących zgodnych stylów lub połączenia obu. Dostarczają kierunek wizualny do wielokrotnego użycia w serii obrazów. Udokumentowane ustawienia mieszania pozwalają nadawać referencjom i stylom źródłowym osobne wagi; liczba wag odpowiada liczbie źródeł. PaletteMatch i MaxWeight to dwie wymienione zasady mieszania. Producent dopuszcza maksymalnie 10 obrazów referencyjnych stylu i używa zwykłego trybu dopasowania stylu dla V3. Zapisany styl niestandardowy i bezpośrednie referencje stylu są alternatywnymi wejściami, a styl niestandardowy musi odpowiadać modelowi użytemu do generowania.
Preferowane kolory i kolor tła kierują paletą. Udokumentowano maksymalnie 10 kolorów RGB, z każdą składową od 0 do 255. Opcjonalne wagi względne mieszczą się w zakresie od 0 do 1; trzeba je podać dla każdego koloru albo dla żadnego, a ich suma nie może przekraczać 1. Poziom artystyczny mieści się w zakresie od 0 dla statycznego, czystego przedstawienia do 5 dla bardziej dynamicznych, ekscentrycznych kompozycji. Prompt negatywny opisuje niepożądane elementy; osobne ustawienie bez tekstu wyłącza osadzone układy tekstowe. Ziarno losowości jest dostępne dla powtarzalności. Te ustawienia dają różne sposoby oddziaływania na scenę, jej styl i układ wizualny.
Obrazy rastrowe i osobny wariant SVG
Recraft dokumentuje dwa warianty V3. Model rastrowy tworzy bezstratny WebP lub PNG i pasuje do szczegółów fotograficznych, cieniowania oraz teksturowanej ilustracji. Recraft V3 Vector tworzy SVG: ścieżki i kształty, które można skalować bez stałej rozdzielczości w pikselach. Pasuje do piktogramów, koncepcji logo, odznak i szczegółowej grafiki wektorowej. Konwersja rastra do wektora jest odrębną operacją od bezpośredniego generowania grafiki wektorowej.
Oba warianty mają własną tożsamość. Obraz o wyglądzie wektorowym i rzeczywisty wynik SVG to różne wybory. Przy przygotowywaniu procesu projektowego wybierz zamierzony wynik, zamiast traktować wspólną nazwę V3 jako dowód, że każda operacja zwraca ten sam typ pliku.
Edycja i wykańczanie istniejącej grafiki
Dokumentacja V3 Recraft wymienia generowanie obraz–obraz, uzupełnianie fragmentów obrazu, rozszerzanie kadru oraz podmianę lub generowanie tła. Praca obraz–obraz łączy istniejący obraz z nowym opisem. Uzupełnianie fragmentów ponownie generuje wybrany obszar przy użyciu obrazu i pasującej maski; rozszerzanie kadru dodaje treść poza oryginalnymi granicami. Operacje tła dotyczą otoczenia tematu.
Towarzyszący zestaw narzędzi obejmuje także wymazywanie, usuwanie tła, wektoryzację i dwa sposoby zwiększania rozdzielczości. Kreatywne zwiększanie może wprowadzać nowe szczegóły; ostre zwiększanie celuje w wyraźniejsze większe odwzorowanie istniejącej treści. Są to odrębne operacje z własnymi wejściami i wynikami, a nie dodatkowe znaczenia nazwy modelu rastrowego lub wektorowego.
Limity promptu, rozmiaru i obrazu źródłowego
Specyfikacja generowania V3 producenta przyjmuje prompt do 1000 znaków i 1–6 obrazów na żądanie. Obsługuje 14 proporcji: 1:1, 2:1, 1:2, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 6:10, 14:10, 10:14, 16:9 i 9:16. Udokumentowane przykłady rastrowe obejmują 1024x1024, 1820x1024 i 1024x1820. Dokładne wymiary rastra muszą pochodzić z obsługiwanej listy; SVG używa proporcji bez stałego rozmiaru w pikselach. Gdy rozmiar jest pominięty, system producenta wybiera go na podstawie promptu.
Dla operacji z obrazem wejściowym producent wymienia PNG, JPG i WebP oraz SVG tam, gdzie pozwala na to konkretna operacja. Pliki muszą mieć poniżej 20 MB, nie więcej niż 16 MP, z najdłuższym bokiem najwyżej 4096 pikseli. Najkrótszy bok ma co najmniej 256 pikseli, z wyjątkiem 32 pikseli dla ostrego zwiększania rozdzielczości. Maski odpowiadają rozmiarowi obrazu i używają czystej czerni oraz bieli; referencje stylu mają łączny limit 64 MB.
W projekcie API Ailoot przekształć zadanie w skupiony opis obrazu: dokładną treść, układ przedmiotów, styl wizualny i oczekiwaną kompozycję. Plakat, scena produktowa i seria ikon wymagają różnych opisów; zachowuj odpowiednie rozróżnienia wariantów i operacji V3 przy ustalaniu sposobu użycia każdego wyniku.
Ailoot Ultra · Obrazy POST /v1/images/generations recraft/recraft-v3
recraft/recraft-v3Start
Recraft V3 tworzy fotografie, ilustracje i układy graficzne z kompozycją uwzględniającą tekst oraz ustawieniami stylu. Jego odrębne warianty rastrowe i SVG pasują do plakatów, zestawów obrazów marki, ikon i projektów, w których słowa i struktura wizualna muszą działać razem.
- 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-v3 | 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
Parametry i cykl życia metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, prompt |
Parametrmaterial_types | Kontrakttext, image |
Parametroptional_controls | Kontraktaspect_ratio, n, input_references |
Parametrexact_supported_parameters | Kontrakt{"aspect_ratio":{"type":"enum","values":["1:1","4:3","3:4","16:9","9:16","auto"]},"n":{"type":"range","min":1,"max":6},"input_references":{"type":"range","min":0,"max":1}} |
Parametrreference_material_rule | KontraktWyłącznie rzeczywiste obrazy referencyjne klienta; obowiązują warunki endpointu dostawcy. |
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}
Użyj dokładnego modelu i udokumentowanych pól wejściowych.
Zachowaj kompletną odpowiedź, wszystkie rzeczywiste wyniki i pierwotne zwrócone identyfikatory.
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 na wyjściu · 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-v3', '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-v3', '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-v3", "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 |
Aliasy
Aliasy modelu
Ailoot Ultra recraft/recraft-v3
Aliasy ścieżek metod
/v1/images
Powiązane ID modeli
FAQ · Recraft: Recraft V3
- Jakie dane wejściowe i wyniki są dostępne?
POST /v1/images/generations·recraft/recraft-v3:text,image→image- Jakich pól używa żądanie?
POST /v1/images/generations·recraft/recraft-v3:model,prompt,n,aspect_ratio,input_references- Jakie limity obowiązują?
POST /v1/images/generations·recraft/recraft-v3:n.minimum:1;n.maximum:6