Recraft: Recraft V3
Recraft V3 membuat foto, ilustrasi, dan tata letak grafis dengan komposisi yang mempertimbangkan teks serta kendali gaya. Varian raster dan SVG yang berbeda cocok untuk poster, kumpulan gambar bermerek, ikon, serta desain yang menggabungkan kata-kata dengan struktur visual.
Tentang model
Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.
Recraft V3 adalah model generasi gambar yang dibangun untuk desain grafis maupun adegan fotografis dan ilustratif. Brief tertulis menjelaskan subjek, latar, dan komposisi; hasilnya berupa gambar. V3 mengembangkan rendering teks dan fotorealisme Recraft sambil mempertahankan konsistensi gaya dari gambar contoh tanpa pelatihan ulang.
Teks sebagai bagian komposisi
V3 bekerja dengan teks dalam gambar, termasuk naskah lebih panjang dan huruf berukuran sedang. Recraft menjelaskan tahap tata letak yang menetapkan kata-kata serta posisinya sebelum generasi gambar. Tata letak dapat dibuat otomatis dari brief atau disusun manual dalam lingkungan desain Recraft. Ini membantu menghubungkan judul, ilustrasi, dan teks pendukung dalam satu komposisi. Produsen juga mendokumentasikan koordinat tata letak teks eksplisit, dinyatakan relatif terhadap gambar, bukan kisi piksel tetap. Setiap elemen teks memuat satu kata dan empat titik sudut dalam koordinat ternormalisasi: (0, 0) adalah kiri atas dan (1, 1) kanan bawah. Koordinat dapat melampaui rentang itu, dan bentuk akan dipotong. Kata tata letak teks eksplisit harus mengikuti batasan karakter yang didokumentasikan.
Untuk poster atau sampul, berikan kata-kata tepat dan jelaskan hierarkinya: baris mana memimpin, tempatnya, dan cara gambar mendukungnya. Periksa ejaan serta jarak hasil rendering ketika memilih hasil.
Gaya, palet, dan arahan artistik
V3 mencakup gaya fotografi, ilustrasi, dan emblem kurasi, ditambah pustaka gaya vektor terpisah. Recraft V3 Raw adalah gaya bawaan model raster; Vector art adalah bawaan untuk varian vektor. Photorealism mengarah pada tampilan fotografis, sementara Illustration mengakomodasi tekstur bergaya, bayangan, dan transisi warna lebih kompleks. Gaya vektor mengutamakan bentuk, palet terbatas, serta isian datar atau gradasi sederhana.
Gaya khusus dapat dibuat dari gambar referensi, gaya kompatibel yang ada, atau kombinasinya. Gaya tersebut menyediakan arah visual yang dapat digunakan ulang dalam seri gambar. Kendali pencampuran terdokumentasi memungkinkan referensi dan gaya sumber membawa bobot terpisah; jumlah bobot sesuai dengan sumber. PaletteMatch dan MaxWeight adalah dua kebijakan pencampuran yang tercantum. Produsen mengizinkan hingga 10 gambar referensi gaya dan menggunakan mode pencocokan gaya regular untuk V3. Gaya khusus tersimpan dan referensi gaya langsung adalah masukan alternatif, dan gaya khusus harus cocok dengan model yang digunakan untuk generasi.
Warna pilihan serta warna latar memandu palet. Hingga 10 warna RGB didokumentasikan, dengan setiap komponen 0 hingga 255. Bobot relatif opsional berkisar 0 hingga 1; bobot harus diberikan untuk setiap warna atau tidak sama sekali, dan jumlahnya tidak boleh melebihi 1. Artistic level berkisar dari 0 untuk pengolahan statis bersih hingga 5 untuk komposisi lebih dinamis serta eksentrik. Prompt negatif menjelaskan elemen tidak diinginkan; kendali no-text terpisah menonaktifkan tata letak teks tertanam. Seed acak tersedia untuk keterulangan. Kendali ini memberi sarana berbeda untuk adegan, gaya, dan tata letak visualnya.
Gambar raster dan varian SVG terpisah
Recraft mendokumentasikan dua varian V3. Model raster menghasilkan WebP lossless atau PNG dan sesuai untuk detail fotografis, bayangan, serta ilustrasi bertekstur. Recraft V3 Vector menghasilkan SVG: jalur dan bentuk yang dapat diskalakan tanpa resolusi piksel tetap. Model cocok untuk piktogram, konsep logo, lencana, dan karya vektor terperinci. Konversi raster ke vektor merupakan operasi terpisah dari generasi karya vektor langsung.
Kedua varian memiliki identitas masing-masing. Gambar dengan tampilan seperti vektor dan keluaran SVG sebenarnya merupakan pilihan berbeda. Pilih keluaran yang dimaksud ketika menyiapkan alur desain, alih-alih menganggap nama V3 bersama sebagai bukti setiap operasi mengembalikan jenis berkas sama.
Menyunting dan menyelesaikan karya yang ada
Dokumentasi V3 Recraft mencantumkan generasi gambar ke gambar, inpainting, outpainting, serta penggantian atau generasi latar. Pekerjaan gambar ke gambar menggabungkan gambar yang sudah ada dengan brief baru. Inpainting menghasilkan ulang bagian pilihan menggunakan gambar serta mask yang sesuai; outpainting menambahkan konten di luar bingkai asli. Operasi latar menangani lingkungan subjek.
Perangkat pendamping juga mencakup penghapusan, penghilangan latar, vektorisasi, dan dua pendekatan peningkatan resolusi. Peningkatan resolusi kreatif dapat memperkenalkan detail baru; peningkatan resolusi crisp menyasar tampilan lebih besar dan tajam dari konten yang ada. Ini merupakan operasi berbeda dengan masukan serta hasil masing-masing, bukan makna tambahan nama model raster atau vektor.
Batas prompt, ukuran, dan gambar sumber
Spesifikasi generasi V3 produsen menerima prompt hingga 1000 karakter dan 1–6 gambar per permintaan. Model mendukung 14 rasio aspek: 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, dan 9:16. Contoh raster terdokumentasi mencakup 1024x1024, 1820x1024, dan 1024x1820. Dimensi raster tepat harus berasal dari daftar yang didukung; SVG menggunakan rasio aspek tanpa ukuran piksel tetap. Ketika ukuran tidak diberikan, sistem produsen memilihnya dari prompt.
Untuk operasi masukan gambar, produsen mencantumkan PNG, JPG, dan WebP, dengan SVG bila operasi tertentu mengizinkannya. Berkas harus di bawah 20 MB, tidak lebih besar dari 16 MP, dengan sisi terpanjang maksimal 4096 piksel. Sisi terpendek minimal 256 piksel, dengan pengecualian 32 piksel untuk peningkatan resolusi crisp. Mask sesuai ukuran gambar dan menggunakan hitam serta putih murni; referensi gaya memiliki batas gabungan 64 MB.
Untuk proyek Ailoot API, ubah tugas menjadi brief gambar terarah: naskah tepat, susunan objek, gaya visual, dan komposisi yang diinginkan. Poster, adegan produk, serta seri ikon memerlukan brief berbeda; pertahankan perbedaan varian dan operasi V3 yang relevan ketika menentukan penggunaan setiap hasil.
Ailoot Ultra · Gambar POST /v1/images/generations recraft/recraft-v3
recraft/recraft-v3Mulai
Recraft V3 membuat foto, ilustrasi, dan tata letak grafis dengan komposisi yang mempertimbangkan teks serta kendali gaya. Varian raster dan SVG yang berbeda cocok untuk poster, kumpulan gambar bermerek, ikon, serta desain yang menggabungkan kata-kata dengan struktur visual.
- Masukan yang diterima
- Teks · Gambar
- Hasil
- Gambar
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · Gambar POST /v1/images/generations
- Masukan
text,image- Keluaran
image- Format keluaran
- Berkas gambar
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan recraft/recraft-v3 | Bawaan— |
Kolomprompt | Jenisstring | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
Kolomn | Jenisinteger | PersyaratanOpsional | Nilai & batasan Minimum: 1 Maksimum: 6 | Bawaan— |
Kolomaspect_ratio | Jenisstring | PersyaratanOpsional | Nilai & batasan 1:1, 4:3, 3:4, 16:9, 9:16, auto | Bawaan— |
Kolominput_references | Jenisarray | PersyaratanOpsional | Nilai & batasan Item minimum: 0 Item maksimum: 1 | Bawaan— |
Kombinasi bahan masukan
Teks ke gambar · Wajib: prompt
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, prompt |
Parametermaterial_types | Kontraktext, image |
Parameteroptional_controls | Kontrakaspect_ratio, n, input_references |
Parameterexact_supported_parameters | Kontrak{"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}} |
Parameterreference_material_rule | KontrakHanya referensi gambar aktual pelanggan; ketentuan endpoint penyedia berlaku untuk referensi tersebut. |
Alias metode: /v1/images
Siklus hidup: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id aktual yang dikembalikan atau catatan pustaka media
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Gunakan model yang persis dan bidang masukan yang didokumentasikan.
Simpan respons secara utuh, setiap keluaran aktual, dan ID asli yang dikembalikan.
Paket
Cara menghitung biaya akhir
Tarif yang ditampilkan memperkirakan biaya sebelum pembuatan. Biaya akhir dihitung dari biaya yang tercatat untuk proses pembuatan awal. Durasi keluaran yang terukur dan kuantitas perkiraan bukanlah kuantitas akhir yang ditagihkan.
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tidak ditentukan Saat mode fast dipilih
- Mode Flex
- Tidak ditentukan Saat mode flex dipilih
- Upaya penalaran maksimum
- Tidak ditentukan Saat upaya penalaran maksimum menggunakan penyesuaian default
Perkiraan tarif untuk perbandingan
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Jumlah perkiraan | Satuan penagihan | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Jumlah perkiraan— | Satuan penagihan— | Biaya Masukan · Token masukan · Perkiraan hanya untuk perbandingan — / 1K token Keluaran · Token keluaran · Perkiraan hanya untuk perbandingan — / 1K token Masukan · Pembacaan cache · Perkiraan hanya untuk perbandingan — / 1K token Masukan · Penulisan cache · Perkiraan hanya untuk perbandingan — / 1K token Masukan · Penulisan cache, 1 jam · Perkiraan hanya untuk perbandingan — / 1K token |
| KonfigurasiUltra | Jadwal tarif— | Jumlah perkiraan— | Satuan penagihanper gambar keluaran | Biaya Keluaran · keluaran gambar · Perkiraan hanya untuk perbandingan $0.08 per gambar keluaran |
| KonfigurasiPerkiraan biaya pembuatan | Jadwal tarif— | Jumlah perkiraanestimasi satu kali pembuatan | Satuan penagihan— | Biaya Keluaran · Perkiraan biaya pembuatan · Perkiraan hanya untuk perbandingan $0.08 estimasi sebelum pembuatan Perkiraan ini bukan biaya tambahan maupun tarif tetap untuk proses pembuatan yang telah selesai. |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Detail tarif referensi
Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.
Konfigurasi harga gambar
Harga menurut konfigurasi
| Konfigurasi | Kondisi penagihan | Biaya |
|---|---|---|
| KonfigurasiGambar keluaran | Kondisi penagihanTidak ada varian harga yang dideklarasikan. | Biaya Keluaran · Gambar keluaran $0.08 per gambar Daftar yang setara menjelaskan tagihan yang sama; tidak menambahkan biaya kedua. |
Contoh permintaan
Ailoot Ultra · Gambar
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");
Terima dan simpan hasil
Ailoot Ultra · Gambar
Unduh setiap gambar yang dikembalikan atau simpan konten 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 gambar yang selesai; ambil setiap URL yang dikembalikan atau dekode konten Base64-nya.
Simpan setiap item data dan penggunaan secara utuh; ambil kepemilikan dan simpan semua gambar aktual yang dikembalikan. Tidak ada URL atau ID yang dibuat-buat.
Jika respons asli perlu diperiksa
Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task_id atau asset_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation_id.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomcreated | Jenisinteger |
Kolomdata[].url | Jenisstring |
Kolomdata[].b64_json | Jenisbase64 string |
Kolomusage | Jenisobject |
Alias
Alias model
Ailoot Ultra recraft/recraft-v3
Alias jalur metode
/v1/images
ID pemanggil terkait
FAQ · Recraft: Recraft V3
- Input dan hasil apa yang tersedia?
POST /v1/images/generations·recraft/recraft-v3:text,image→image- Kolom apa yang digunakan permintaan?
POST /v1/images/generations·recraft/recraft-v3:model,prompt,n,aspect_ratio,input_references- Batasan apa yang berlaku?
POST /v1/images/generations·recraft/recraft-v3:n.minimum:1;n.maximum:6