Skip to main content

Ikhtisar

LoRA (Low-Rank Adaptation) adalah teknik fine-tuning yang mengajarkan model AI sebuah gaya visual baru menggunakan sekumpulan kecil gambar contoh. Cara kerjanya adalah dengan menyuntikkan “style weights” baru ke model yang sudah ada, membuat pelatihan cepat sekaligus efisien. Panduan ini memandu Anda melalui alur lengkap:

Siapkan Gambar Pelatihan

Kurasi dan unggah gambar berkualitas tinggi yang mewakili gaya yang Anda inginkan

Kirim Job Pelatihan

Kirim POST request ke /styles/train dengan URL gambar dan konfigurasi Anda

Pantau Progres

Lacak status job pelatihan Anda menggunakan job_id yang dikembalikan

Hasilkan dengan Gaya Anda

Terapkan gaya yang telah Anda latih ke generasi gambar

Siapkan Gambar Pelatihan

Mengurasi Dataset Anda

Kualitas gambar pelatihan Anda berdampak langsung pada hasil. Jenis pelatihan yang berbeda memiliki persyaratan yang berbeda:
JenisKasus PenggunaanTips
StyleGaya artistik, estetika visualGaya konsisten di berbagai subjek
CharacterKemiripan pribadi, karakter yang konsistenBeragam pose, ekspresi, pencahayaan
ObjectObjek atau produk tertentuBeragam sudut, objek konsisten

Berapa Banyak Gambar?

Kualitas jauh lebih penting daripada kuantitas. Sekumpulan kecil gambar yang sangat baik akan mengungguli sekumpulan besar gambar yang biasa saja.
Ukuran DatasetPanduan
5 gambarMinimum yang layak. Bisa berhasil untuk gaya sederhana dan konsisten
10-30 gambarDirekomendasikan. Keseimbangan terbaik antara kualitas dan cakupan
50+ gambarDiminishing returns kecuali jika gaya memiliki variasi tinggi
Kualitas > Kuantitas15 gambar berkualitas tinggi akan menghasilkan hasil yang lebih baik daripada 50 gambar berkualitas rendah. Prioritaskan:
  • Resolusi tinggi (minimum 1024x1024)
  • Gaya konsisten di semua gambar
  • Tidak ada watermark, teks overlay, atau artefak kompresi
  • Subjek yang bervariasi sambil menjaga koherensi gaya
Contoh Dataset
  • Pelatihan character: Foto seseorang dengan beragam pose, ekspresi, dan kondisi pencahayaan. Hindari menyertakan orang lain di dalam gambar.
  • Pelatihan style: Kumpulan karya seni dalam gaya yang konsisten. Misalnya, The Metropolitan Museum of Art Ukiyo-E Dataset menyediakan cetakan kayu Jepang yang ideal untuk melatih gaya artistik.

Unggah Gambar

Sebelum pelatihan, unggah gambar Anda untuk mendapatkan URL yang di-hosting. Gunakan endpoint /assets:
import requests
import os
from dotenv import load_dotenv
import mimetypes

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")

image_dir = "training_images"
uploaded_urls = []

for filename in os.listdir(image_dir):
    if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.webp')):
        filepath = os.path.join(image_dir, filename)
        mime_type, _ = mimetypes.guess_type(filepath)

        with open(filepath, 'rb') as f:
            response = requests.post(
                f"{API_BASE}/assets",
                headers={"Authorization": f"Bearer {API_TOKEN}"},
                files={"file": (filename, f, mime_type)},
                data={"description": f"Training image: {filename}"}
            )

        if response.ok:
            data = response.json()
            uploaded_urls.append(data["image_url"])
            print(f"Uploaded: {filename}")
        else:
            print(f"Failed: {filename}")

print(f"\nUploaded {len(uploaded_urls)} images")
Simpan nilai image_url yang dikembalikan—Anda akan mengirimnya ke endpoint pelatihan.

Latih Gaya Anda

Contoh Pelatihan Dasar

Kirim URL gambar Anda untuk memulai pelatihan:
import requests
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")

# Training URLs from the upload step
urls = [
    "https://krea.ai/assets/img1.jpg",
    "https://krea.ai/assets/img2.jpg",
    "https://krea.ai/assets/img3.jpg",
    # ... more images
]

response = requests.post(
    f"{API_BASE}/styles/train",
    headers={
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "name": "Ukiyo-E Style",
        "urls": urls,
        "model": "flux_dev",
        "type": "Style",
        "max_train_steps": 500
    }
)

response.raise_for_status()
job = response.json()
print(f"Training started! Job ID: {job['job_id']}")

Jenis Pelatihan

Parameter type menetapkan default cerdas yang dioptimalkan untuk kasus penggunaan Anda:
JenisCocok untuk
StyleGaya artistik, estetika visual
CharacterKemiripan pribadi, karakter yang konsisten
ObjectObjek atau produk tertentu
DefaultPelatihan generik

Parameter

Parameter Wajib

name
string
required
Nama deskriptif untuk gaya kustom Anda.Contoh: "Ukiyo-E Style", "Product Photos"
urls
array
required
Array URL gambar untuk dilatih. Sertakan lebih banyak gambar untuk hasil yang lebih baik.

Parameter Opsional

model
string
default:"flux_dev"
Model dasar untuk pelatihan:Model gambar:
  • flux_dev - Berkualitas tinggi, serbaguna
  • flux_schnell - Model realtime dari BFL
  • qwen - Model dari Alibaba
  • z-image - Model gambar efisien dari Alibaba
  • wan22 - Hanya untuk generasi gambar
Model video:
  • wan - Model video dari Alibaba
type
string
default:"Default"
Kategori pelatihan: Style, Object, Character, atau Default
trigger_word
string
Kata kustom untuk mengaktifkan gaya ini di prompt. Jika tidak ditentukan, akan menggunakan nama gaya.
Pilih trigger word unik yang tidak akan muncul di prompt biasa. Gunakan underscore untuk trigger multi-kata: ukiyo_style
learning_rate
number
Mengontrol intensitas pelatihan. Nilai yang lebih tinggi melatih lebih cepat tetapi bisa overfit.Rentang yang direkomendasikan: 0.0001 - 0.001
max_train_steps
integer
Iterasi pelatihan maksimum. Rentang: 1-2000
batch_size
integer
Gambar yang diproses secara bersamaan. Batch lebih besar = pelatihan lebih cepat tetapi memori lebih banyak.

Menyesuaikan Parameter Lanjutan

Mulai dengan default yang ditetapkan oleh field type—cocok untuk sebagian besar kasus. Hanya sesuaikan ini bila Anda melihat masalah tertentu:
Mengontrol seberapa agresif model beradaptasi dengan gambar pelatihan Anda.
NilaiKapan Digunakan
0.0001 (lebih rendah)Masalah overfitting, gaya kompleks, dataset kecil
0.0003 (default)Sebagian besar kasus penggunaan
0.0005-0.001 (lebih tinggi)Pelatihan lebih cepat
Tanda perlu penyesuaian:
  • Output terlihat identik dengan gambar pelatihan → turunkan rate
  • Pengaruh gaya lemah setelah pelatihan → naikkan rate sedikit
Berapa lama model berlatih pada gambar Anda.
Ukuran DatasetSteps yang Direkomendasikan
5-10 gambar300-500 steps
15-30 gambar500-800 steps
50+ gambar800-1500 steps
Tanda perlu penyesuaian:
  • Output terlalu kaku, mengabaikan prompt → kurangi steps
  • Pengaruh gaya lemah → tambah steps
  • Gambar yang dihasilkan terlihat persis seperti data pelatihan → kurangi steps (overfitting)
Penyesuaian IteratifJika percobaan pelatihan pertama Anda tidak menghasilkan hasil yang diinginkan:
  1. Mulai dengan menyesuaikan max_train_steps (perbaikan paling umum)
  2. Kemudian coba learning_rate jika steps saja tidak membantu

Format Respons

{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued",
  "created_at": "2024-01-15T10:30:00Z"
}

Pantau Progres Pelatihan

Pelatihan biasanya memakan waktu 5-15 menit. Lakukan polling Jobs API untuk memeriksa status:
import requests
import time
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")
job_id = "your-job-id"

while True:
    response = requests.get(
        f"{API_BASE}/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_TOKEN}"}
    )
    job = response.json()
    status = job["status"]

    print(f"Status: {status}")

    if status == "completed":
        style_id = job["result"]["style_id"]
        print(f"Training complete! Style ID: {style_id}")
        break
    elif status in ["failed", "cancelled"]:
        print(f"Training {status}")
        break

    time.sleep(30)
Job pelatihan berjalan melalui status ini:
  1. queued - Menunggu di antrean
  2. processing - Pelatihan aktif
  3. completed - Pelatihan selesai dengan sukses
  4. failed - Pelatihan mengalami kesalahan
  5. cancelled - Job dibatalkan secara manual

Gunakan Gaya Terlatih Anda

Setelah pelatihan selesai, terapkan gaya Anda ke generasi gambar menggunakan parameter styles:
Kepemilikan gaya antara aplikasi dan APIAPI dan aplikasi web Krea beroperasi sebagai identitas pengguna terpisah di dalam workspace Anda. Gaya bersifat privat bagi pengguna yang membuatnya, sehingga:
  • Gaya yang dilatih via aplikasi tidak dapat diakses via API kecuali dibagikan
  • Gaya yang dilatih via API tidak dapat diakses di aplikasi kecuali dibagikan
Untuk membagikan gaya ke workspace Anda (berlaku di kedua arah):
curl -X POST https://api.krea.ai/styles/YOUR_STYLE_ID/share/workspace \
  -H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import time
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")
STYLE_ID = "w29t6pvy0"

response = requests.post(
    f"{API_BASE}/generate/image/krea/krea-2/medium",
    headers={
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "prompt": "An abstract, colorful, surreal composition of symmetry and balance. Swirling colors, imagery of trees and coalescing patterns converge. The lantern of light and death. It is as if the world was at once dark, and yet again lit.",
        "aspect_ratio": "1:1",
        "resolution": "1K",
        "styles": [
            {
                "id": STYLE_ID,
                "strength": 0.95
            }
        ]
    }
)

job = response.json()
job_id = job["job_id"]
print(f"Generation started! Job ID: {job_id}")

# Poll for completion
while True:
    check = requests.get(
        f"{API_BASE}/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_TOKEN}"}
    )
    status_data = check.json()

    if status_data["status"] == "completed":
        image_url = status_data["result"]["urls"][0]
        print(f"Image ready: {image_url}")
        break
    elif status_data["status"] == "failed":
        print("Generation failed")
        break

    time.sleep(2)

Kekuatan Gaya

Parameter strength (0.0-1.0) mengontrol seberapa kuat gaya Anda diterapkan:
StrengthEfek
0.5-0.7Pengaruh halus, mempertahankan fleksibilitas prompt
0.8-0.9Penerapan gaya yang kuat, titik awal yang direkomendasikan
0.95-1.0Kepatuhan gaya maksimum, mungkin mengurangi responsivitas prompt
Mulai dengan strength 0.8 dan sesuaikan berdasarkan hasil. Nilai lebih rendah memberikan kebebasan kreatif lebih; nilai lebih tinggi memaksakan kepatuhan gaya yang lebih ketat.

Menggabungkan Beberapa Gaya

Terapkan beberapa gaya dengan menambahkannya ke array styles:
"styles": [
    {"id": "style-id-1", "strength": 0.6},
    {"id": "style-id-2", "strength": 0.4}
]

Praktik Terbaik

  • Gunakan sebanyak mungkin gambar berkualitas tinggi untuk hasil optimal
  • Pastikan gaya konsisten di semua gambar pelatihan
  • Sertakan variasi subjek sambil menjaga koherensi gaya
  • Hindari watermark, teks overlay, atau artefak
  • Gunakan gambar dengan resolusi minimum 1024x1024
  • Mulai dengan parameter default menggunakan field type
  • Untuk gaya: 500-1000 steps biasanya cukup
  • Learning rate rendah (0.0001-0.0003) mencegah overfitting
  • Tambah steps jika gaya belum cukup kuat
  • Kurangi steps jika output terlalu kaku
  • Gunakan trigger word yang sama jika Anda berencana menggabungkan beberapa gaya
  • Trigger word otomatis disuntikkan ke prompt jika Anda menyertakan gaya
  • Hindari kata umum yang muncul di prompt biasa
  • Gunakan underscore untuk trigger multi-kata: my_custom_style