Source: https://ailoot.ai/models/id/recraft-recraft-v4/
Canonical: https://ailoot.ai/models/id/recraft-recraft-v4/
Language: id

# Recraft: Recraft V4

[Markdown](https://ailoot.ai/models/id/recraft-recraft-v4/index.md) · [JSON](https://ailoot.ai/models/id/recraft-recraft-v4/facts.json)

## [Recraft: Recraft V4](https://ailoot.ai/models/id/recraft-recraft-v4/)

Recraft V4 menghasilkan gambar raster 1K dengan fokus pada komposisi, hubungan warna, dan arahan kreatif terperinci. Model mencakup ilustrasi, adegan fotorealistis, dan konsep desain grafis, dengan masukan gaya opsional serta alur gambar ke gambar terpisah.

- [**Ailoot Ultra · Gambar** `POST /v1/images/generations` `recraft/recraft-v4`](https://ailoot.ai/models/id/recraft-recraft-v4/#method-0)

Tentang model

Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.

Recraft V4 adalah model raster standar dalam generasi V4 Recraft. Produsen menekankan pertimbangan desain: komposisi seimbang, hubungan warna padu, serta detail yang mendukung maksud visual. Model dapat bekerja dengan ilustrasi bergaya, adegan fotografis, dan konsep desain grafis. Gunakan ketika brief meminta gambar yang menggabungkan pilihan estetika dengan ketepatan prompt, baik untuk menjelajahi suasana dari arahan pendek maupun menentukan tata letak disengaja secara terperinci.

Kode model yang tepat adalah recraftv4. Referensi produsen mencantumkan keluaran raster 1K dalam WebP lossless atau PNG. Gambar persegi berukuran 1024 × 1024 piksel, 16:9 sebesar 1344 × 768, dan 2:3 sebesar 832 × 1280; rasio lain yang didukung menggunakan dimensi masing-masing. V4 Pro adalah edisi raster 2K terpisah, sementara V4 Vector dan Pro Vector mengembalikan SVG yang dapat diedit. Pilih varian V4 tepat untuk hasil kerja yang dimaksud, alih-alih menggabungkan sifat keluaran berbeda ini.

Panduan produsen membedakan prompt interpretatif singkat dari arahan kreatif terstruktur. Frasa pendek dapat menyisakan ruang untuk menjelajahi bentuk, suasana, dan pembingkaian. Brief terstruktur dapat menyebut subjek, latar, pose, material, elemen sekunder, pencahayaan, dan hierarki visual. Untuk ilustrasi naratif, jelaskan pesepeda melintasi jembatan kecil, bentuk sederhana tegas, warna hangat lembut, dan gerakan jelas kiri ke kanan. Keputusan konten serta komposisi ini lebih dapat ditindaklanjuti dibanding daftar panjang kata sifat gaya tidak berkaitan.

Jangkauan V4 mencakup ilustrasi, citra berdimensi, dan visual fotorealistis. Panduan menyarankan penjelasan logika gambar untuk ilustrasi serta material, cahaya, kamera, dan kedalaman untuk gambar tampak 3D. Yang terakhir tetap visual raster, bukan mesh yang dapat diedit. Untuk konsep poster atau kemasan, nyatakan kata utama, tempatnya, serta interaksi gambar dengan tipografi. Produsen menyoroti teks pendek dan menengah terbaca; periksa kata-kata serta susunan sebenarnya dalam gambar yang dikembalikan sebelum menggunakannya.

Generasi mendukung prompt hingga 10.000 karakter, seed acak, satu hingga enam keluaran, warna pilihan, dan warna latar yang diinginkan. Gaya khusus kompatibel serta gambar referensi opsional dapat memandu pengolahan visual melalui pencocokan fleksibel atau presisi. Pilih referensi bersih atau kumpulan yang berasal dari satu dunia visual, lalu biarkan prompt menjelaskan subjek dan adegan baru. Kecocokan warna antara referensi dan keluaran tidak dijamin, sehingga nyatakan palet wajib secara eksplisit dan bandingkan hasil dengannya. Untuk generasi bergaya referensi, gunakan satu hingga sepuluh gambar PNG, JPG, atau WebP, total tidak lebih dari 64 MB dan masing-masing di bawah 20 MB. Setiap referensi memerlukan sisi terpendek minimal 256 piksel, sisi terpanjang maksimal 4.096 piksel, dan resolusi maksimal 16 megapiksel. Gunakan referensi ini atau gaya tersimpan kompatibel, bukan keduanya.

Operasi gambar ke gambar terdokumentasi menggabungkan gambar yang sudah ada dan prompt, dengan strength 0 hingga 1 menentukan seberapa jauh keluaran baru bergerak dari sumber. Operasi tidak menerima kendali gaya V4. Referensi generasi saat ini juga mengecualikan nama gaya kurasi, negative\_prompt, text\_layout, artistic\_level, dan no\_text. Siapkan deskripsi positif hasil yang diinginkan dan nilai aset dalam komposisi sasarannya. V4 standar menyediakan penafsiran desain raster terarah, dengan edisi, format, serta ukuran keluaran tertentu. Untuk gambar ke gambar, berikan PNG, JPG, WebP, atau SVG di bawah 20 MB, maksimal 16 megapiksel, dengan kedua sisi antara 256 dan 4.096 piksel.

**Ailoot Ultra · Gambar** `POST /v1/images/generations` `recraft/recraft-v4`

[`recraft/recraft-v4`](https://ailoot.ai/models/id/#m=recraft%2Frecraft-v4&route=Ultra&caller=recraft%2Frecraft-v4&fmt=images)

Recraft /`recraft/recraft-v4`

### Mulai

Recraft V4 menghasilkan gambar raster 1K dengan fokus pada komposisi, hubungan warna, dan arahan kreatif terperinci. Model mencakup ilustrasi, adegan fotorealistis, dan konsep desain grafis, dengan masukan gaya opsional serta alur gambar ke gambar terpisah.

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 |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan recraft/recraft-v4 | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 Maksimum: 6 | Bawaan— |
| Kolom`aspect_ratio` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 1:1, 4:3, 3:4, 16:9, 9:16, auto | Bawaan— |
| Kolom`input_references` | Jenis`array` | PersyaratanOpsional | Nilai & batasan Item minimum: 0 Item maksimum: 1 | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

**reference\_guided\_image** · Wajib: prompt, actual image reference

Parameter metode dan siklus hidup

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, prompt |
| Parameter`material_types` | Kontraktext, image |
| Parameter`optional_controls` | Kontrakn, aspect\_ratio, input\_references |
| Parameter`n` | Kontrak{"minimum":1,"maximum":6} |
| Parameter`reference_images` | Kontrak{"minimum":0,"maximum":1,"source":"materi aktual yang diberikan pelanggan"} |
| Parameter`provider_specific_options` | KontrakHanya style/controls/text\_layout dari daftar izin endpoint persis yang tersimpan; tidak ada struktur yang ditebak. |

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}`

Contoh yang hanya menggunakan prompt mempertahankan struktur resmi ImageGenerationRequest.

Simpan setiap gambar yang dikembalikan dan respons secara utuh; jumlah keluaran adalah jumlah aktual, bukan n yang diminta.

### 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 · gambar keluaran · 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 →](https://ailoot.ai/docs/id/billing/reserve/)

#### 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

curlPython SDKNode.js SDK

```bash
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
```

```python
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])
```

```js
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 · Gambar

Unduh setiap gambar yang dikembalikan atau simpan konten Base64-nya

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /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 |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| Kolom`usage` | Jenisobject |

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot Ultra** [`recraft/recraft-v4`](https://ailoot.ai/models/id/#m=recraft%2Frecraft-v4&route=Ultra&caller=recraft%2Frecraft-v4&fmt=images)

#### Alias jalur metode

`/v1/images`

#### ID pemanggil terkait

[`recraft/recraft-v4`](https://ailoot.ai/models/id/#m=recraft%2Frecraft-v4&route=Ultra&caller=recraft%2Frecraft-v4&fmt=images)

FAQ · Recraft: Recraft V4

Input dan hasil apa yang tersedia?

`POST /v1/images/generations` · `recraft/recraft-v4`: `text`, `image` → `image`

Kolom apa yang digunakan permintaan?

`POST /v1/images/generations` · `recraft/recraft-v4`: `model`, `prompt`, `n`, `aspect_ratio`, `input_references`

Batasan apa yang berlaku?

`POST /v1/images/generations` · `recraft/recraft-v4`: `n.minimum`: `1`; `n.maximum`: `6`

Hubungkan Ailoot ke Claude Code, OpenCode, Hermes, atau aplikasi Anda.

## Perusahaan dan portofolio proyeknya

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

## Beli token dengan diskon.

Diskon langganan untuk pekerjaan rutin. Kode promo — hingga 50% untuk pembelian token.

Langganan

Pilih paket dengan diskon untuk permintaan rutin Anda.

Kode promo hingga 50%

Masukkan kode saat membeli. Harga dihitung ulang sesuai promosi aktif.

Biaya dalam riwayat

Model, token, dan jumlah tagihan disimpan untuk setiap permintaan.

[Pilih langganan](https://ailoot.ai/docs/id/billing/subscriptions/) · [Lihat harga model](https://ailoot.ai/models/id/)

## Hubungkan API ke produk yang Anda jual.

SaaS, aplikasi, dan bot — sesuai penawaran dan perjanjian lisensi Ailoot. Untuk penjualan kembali, mintalah lisensi reseller.

Aplikasi komersial

Integrasikan pembuatan teks, gambar, video, dan suara dalam fitur berbayar layanan Anda.

Lisensi reseller

Kirim deskripsi proyek dan skema akses. Mintalah ketentuan penggunaan dan penjualan kembali secara tertulis.

Dokumen di situs

Penawaran, perjanjian lisensi, dan kebijakan pemrosesan data tersedia sebelum koneksi.

[Minta lisensi reseller](mailto:support@ailoot.ai) · [Penawaran dan perjanjian lisensi](https://ailoot.ai/legal/offer?lang=id)

## Ailoot · Perusahaan dan portofolio proyeknya





Ailoot bertumpu pada pengalaman operasional yang teruji, basis pelanggan yang besar, layanan yang stabil, dan pemantauan KPI berkelanjutan.





Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.





Ailoot memanfaatkan pengalaman operasional ini untuk akses API ke fitur AI dalam produk pelanggan, agen, aplikasi, dan otomatisasi.
