Recraft: Recraft V4
Recraft V4 menjana imej raster 1K dengan fokus pada komposisi, hubungan warna dan arah kreatif terperinci. Ia merangkumi ilustrasi, adegan fotorealistik dan konsep reka bentuk grafik, dengan input gaya pilihan serta aliran imej-ke-imej berasingan.
Tentang model
Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.
Recraft V4 ialah model raster standard dalam generasi V4 Recraft. Pengeluar menekankan pertimbangan reka bentuk: komposisi seimbang, hubungan warna padu dan perincian yang menyokong niat visual. Ia boleh digunakan untuk ilustrasi bergaya, adegan fotografi dan konsep reka bentuk grafik. Gunakannya apabila arahan memerlukan imej yang menggabungkan pilihan estetika dengan ketepatan prompt, sama ada menerokai suasana daripada arah ringkas atau menetapkan susun atur disengajakan secara terperinci.
Kod model tepat ialah recraftv4. Rujukan pengeluarnya menyenaraikan output raster 1K dalam WebP tanpa kehilangan atau PNG. Imej segi empat sama ialah 1024 × 1024 piksel, 16:9 ialah 1344 × 768 dan 2:3 ialah 832 × 1280; nisbah disokong lain menggunakan dimensi sendiri. V4 Pro ialah edisi raster 2K berasingan, sementara V4 Vector dan Pro Vector mengembalikan SVG boleh sunting. Pilih varian V4 tepat untuk hasil dimaksudkan tanpa menggabungkan sifat output berbeza ini.
Panduan pengeluar membezakan prompt tafsiran ringkas daripada arah kreatif berstruktur. Frasa pendek boleh memberikan ruang menerokai bentuk, suasana dan pembingkaian. Arahan berstruktur boleh menamakan subjek, latar, pose, bahan, unsur sekunder, pencahayaan serta hierarki visual. Untuk ilustrasi naratif, huraikan penunggang basikal menyeberangi jambatan kecil, bentuk ringkas berani, warna hangat redup dan gerakan kiri-ke-kanan jelas. Keputusan kandungan serta komposisi ini lebih boleh dilaksanakan daripada senarai panjang kata sifat gaya tidak berkaitan.
Julat V4 merangkumi ilustrasi, imejan berdimensi dan visual fotorealistik. Panduan mengesyorkan penerangan logik lukisan untuk ilustrasi serta bahan, cahaya, kamera dan kedalaman untuk imej kelihatan 3D. Hasil terakhir itu kekal visual raster, bukannya mesh boleh sunting. Untuk konsep poster atau bungkusan, nyatakan perkataan utama, kedudukannya dan cara imej serta tipografi berinteraksi. Pengeluar menonjolkan teks pendek dan sederhana yang boleh dibaca; periksa perkataan serta susunan sebenar dalam imej dikembalikan sebelum menggunakannya.
Penjanaan menyokong prompt sehingga 10,000 aksara, seed rawak, satu hingga enam output, warna pilihan dan warna latar belakang dikehendaki. Gaya tersuai serasi serta imej rujukan pilihan boleh memandu olahan visual melalui padanan fleksibel atau tepat. Pilih rujukan bersih atau set dalam satu dunia visual, kemudian biarkan prompt menerangkan subjek dan adegan baharu. Padanan warna antara rujukan dan output tidak dijamin, jadi nyatakan palet diperlukan secara eksplisit dan bandingkan hasil dengannya. Untuk penjanaan gaya rujukan, gunakan satu hingga sepuluh imej PNG, JPG atau WebP, jumlah tidak melebihi 64 MB dan setiap satu di bawah 20 MB. Setiap rujukan memerlukan sisi terpendek sekurang-kurangnya 256 piksel, sisi terpanjang tidak melebihi 4,096 piksel dan resolusi tidak melebihi 16 megapiksel. Gunakan sama ada rujukan ini atau gaya tersimpan serasi, bukan kedua-duanya.
Operasi imej-ke-imej yang didokumenkan menggabungkan imej sedia ada dan prompt, dengan kekuatan 0 hingga 1 menentukan sejauh mana output baharu menyimpang daripada sumber. Ia tidak menerima kawalan gaya V4 dalam operasi itu. Rujukan penjanaan semasa turut mengecualikan nama gaya yang dikurasi, negative_prompt, text_layout, artistic_level dan no_text. Sediakan penerangan positif hasil dikehendaki dan nilai aset dalam komposisi sasarannya. V4 standard memberikan tafsiran reka bentuk raster terarah, dengan edisi, format dan saiz output khusus. Untuk imej-ke-imej, berikan PNG, JPG, WebP atau SVG di bawah 20 MB, tidak melebihi 16 megapiksel, dengan kedua-dua sisi antara 256 dan 4,096 piksel.
Ailoot Ultra · Imej POST /v1/images/generations recraft/recraft-v4
recraft/recraft-v4Pengenalan
Recraft V4 menjana imej raster 1K dengan fokus pada komposisi, hubungan warna dan arah kreatif terperinci. Ia merangkumi ilustrasi, adegan fotorealistik dan konsep reka bentuk grafik, dengan input gaya pilihan serta aliran imej-ke-imej berasingan.
- Input yang diterima
- Teks · Imej
- Hasil
- Imej
Tersedia di Ailoot · input & kaedah
Ailoot Ultra · Imej POST /v1/images/generations
- Input
text,image- Output
image- Format output
- Fail imej
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had recraft/recraft-v4 | Lalai— |
Medanprompt | Jenisstring | KeperluanDiperlukan | Nilai & had Panjang minimum: 1 | Lalai— |
Medann | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Maksimum: 6 | Lalai— |
Medanaspect_ratio | Jenisstring | KeperluanPilihan | Nilai & had 1:1, 4:3, 3:4, 16:9, 9:16, auto | Lalai— |
Medaninput_references | Jenisarray | KeperluanPilihan | Nilai & had Item minimum: 0 Item maksimum: 1 | Lalai— |
Gabungan bahan input
Teks kepada imej · Diperlukan: prompt
reference_guided_image · Diperlukan: prompt, actual image reference
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, prompt |
Parametermaterial_types | Kontraktext, image |
Parameteroptional_controls | Kontrakn, aspect_ratio, input_references |
Parametern | Kontrak{"minimum":1,"maximum":6} |
Parameterreference_images | Kontrak{"minimum":0,"maximum":1,"source":"bahan sebenar yang dibekalkan pelanggan"} |
Parameterprovider_specific_options | KontrakHanya style/controls/text_layout dalam senarai dibenarkan titik akhir tepat yang disimpan; jangan meneka bentuk struktur. |
Alias kaedah: /v1/images
Kitar hayat: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id sebenar yang dikembalikan atau rekod pustaka media
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Contoh yang hanya menggunakan prompt mengekalkan struktur ImageGenerationRequest rasmi.
Simpan setiap imej yang dikembalikan dan respons penuh; kuantiti output ialah kuantiti sebenar, bukan n yang diminta.
Pelan harga
Cara caj akhir dikira
Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.
Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.
- Mod pantas
- Tidak dinyatakan Apabila mod pantas dipilih
- Mod flex
- Tidak dinyatakan Apabila mod flex dipilih
- Usaha penaakulan maksimum
- Tidak dinyatakan Apabila usaha penaakulan maksimum menggunakan pelarasan default
Anggaran kadar untuk perbandingan
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Kuantiti ramalan | Unit pengebilan | Caj |
|---|---|---|---|---|
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Kuantiti ramalan— | Unit pengebilan— | Caj Input · Token input · Anggaran untuk perbandingan sahaja — / 1K token Output · Token output · Anggaran untuk perbandingan sahaja — / 1K token Input · Bacaan cache · Anggaran untuk perbandingan sahaja — / 1K token Input · Penulisan cache · Anggaran untuk perbandingan sahaja — / 1K token Input · Penulisan cache, 1 jam · Anggaran untuk perbandingan sahaja — / 1K token |
| KonfigurasiUltra | Jadual kadar— | Kuantiti ramalan— | Unit pengebilanbagi setiap imej keluaran | Caj Output · imej keluaran · Anggaran untuk perbandingan sahaja $0.08 bagi setiap imej keluaran |
| KonfigurasiAnggaran kos penjanaan | Jadual kadar— | Kuantiti ramalananggaran untuk satu penjanaan | Unit pengebilan— | Caj Output · Anggaran kos penjanaan · Anggaran untuk perbandingan sahaja $0.08 anggaran sebelum penjanaan Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai. |
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Butiran tarif rujukan
Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.
Konfigurasi harga imej
Harga mengikut konfigurasi
| Konfigurasi | Syarat pengebilan | Caj |
|---|---|---|
| KonfigurasiImej output | Syarat pengebilanTiada varian harga diisytiharkan. | Caj Output · Imej keluaran $0.08 bagi setiap imej Penyenaraian setara menerangkan caj yang sama; ia tidak menambah fi kedua. |
Contoh permintaan
Ailoot Ultra · Imej
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");
Terima dan simpan hasil
Ailoot Ultra · Imej
Muat turun setiap imej yang dikembalikan atau simpan kandungan Base64-nya
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Simpan semua hasil yang selesai
Simpan setiap imej yang selesai; dapatkan setiap URL yang dikembalikan atau nyahkod kandungan Base64-nya.
Simpan setiap item data dan penggunaan lengkap; ambil pemilikan dan simpan semua imej sebenar yang dikembalikan. Jangan mereka-reka URL atau ID.
Jika respons asal perlu disemak
Jika hasil penjanaan atau penyuntingan imej memerlukan semakan, simpan operation_id/X-Client-Request-ID asal serta maklumat hasil yang dikembalikan. Pulihkan hasil sedia ada milik anda melalui pustaka media menggunakan nilai task_id atau asset_id sebenar. Jangan hantar semula permintaan penjanaan/penyuntingan atau bina URL tinjauan status daripada operation_id.
Medan respons
| Medan | Jenis |
|---|---|
Medancreated | Jenisinteger |
Medandata[].url | Jenisstring |
Medandata[].b64_json | Jenisbase64 string |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Responsserver_error | SyaratRespons yang dikembalikan menyatakan bahawa operasi atau hasil memerlukan semakan | Langkah seterusnyaSimpan ID operasi/tugas asal yang dikembalikan, pengepala permintaan dan respons; teruskan pembacaan yang disokong bagi operasi asal tersebut. Jangan hantar semula permintaan penciptaan. |
Alias
Alias model
Ailoot Ultra recraft/recraft-v4
Alias laluan kaedah
/v1/images
ID pemanggil berkaitan
FAQ · Recraft: Recraft V4
- Apakah input dan hasil yang tersedia?
POST /v1/images/generations·recraft/recraft-v4:text,image→image- Apakah medan yang digunakan oleh permintaan?
POST /v1/images/generations·recraft/recraft-v4:model,prompt,n,aspect_ratio,input_references- Apakah had yang terpakai?
POST /v1/images/generations·recraft/recraft-v4:n.minimum:1;n.maximum:6