> ## Documentation Index
> Fetch the complete documentation index at: https://www.krea.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Özel Stil Eğitimi

> Kendi veri kümelerinizden özel görüntü stilleri eğitin ve tutarlı çıktılar üretin; küratörlük, etiketleme ve yineleme en iyi uygulamaları için rehberlik.

export const HeroHeader = ({image, video, title, description}) => {
  return <div className="relative aspect-[2/1] h-[30vh] w-full rounded-lg overflow-hidden mb-8">
      {}
      {video && <video autoPlay muted loop playsInline className="absolute top-0 left-0 w-full h-full object-cover hidden md:block m-0" style={{
    zIndex: 1,
    objectPosition: "20% 20%"
  }}>
          <source src={video} type="video/webm" />
        </video>}

      {}
      <img src={image} alt="" className={`absolute top-0 left-0 m-0 w-full h-full object-cover ${video ? "md:hidden" : "block"}`} style={{
    zIndex: 1,
    objectPosition: "20% 20%"
  }} />

      {}
      <div className="absolute inset-0 bg-gradient-to-t from-black/70 via-black/30 to-black/10 flex flex-col justify-end p-8 dark:hidden" style={{
    zIndex: 2
  }}>
        <h1 className="text-4xl font-bold text-white m-0 drop-shadow-[0_2px_4px_rgba(0,0,0,0.5)]">
          {title}
        </h1>
        <p className="text-lg text-white/95 mt-2 drop-shadow-[0_1px_2px_rgba(0,0,0,0.5)]">
          {description}
        </p>
      </div>

      {}
      <div className="absolute inset-0 bg-gradient-to-t from-black/80 via-black/40 to-black/20 hidden dark:flex flex-col justify-end p-8" style={{
    zIndex: 2
  }}>
        <h1 className="text-4xl font-bold text-white m-0 drop-shadow-[0_2px_4px_rgba(0,0,0,0.5)]">
          {title}
        </h1>
        <p className="text-lg text-white/95 mt-2 drop-shadow-[0_1px_2px_rgba(0,0,0,0.5)]">
          {description}
        </p>
      </div>
    </div>;
};

<HeroHeader image="https://s.krea.ai/docs-lora.webp" title="Özel Stil Eğitimi (LoRA)" description="Tutarlı görsel estetikle AI sanatı üretmek için kendi görüntülerinizi kullanarak özel bir stil eğitin." />

## Genel Bakış

LoRA (Low-Rank Adaptation), bir AI modeline küçük bir örnek görüntü kümesi kullanarak yeni bir görsel stil öğreten bir ince ayar tekniğidir. Mevcut bir modele yeni "stil ağırlıkları" enjekte ederek çalışır, bu da eğitimi hem hızlı hem de verimli hale getirir.

Bu kılavuz tam iş akışını anlatır:

<Steps>
  <Step title="Eğitim Görüntülerini Hazırlayın" icon="images">
    İstediğiniz stili temsil eden yüksek kaliteli görüntüleri küratörlüğünü yapın ve yükleyin
  </Step>

  <Step title="Eğitim İşini Gönderin" icon="play">
    Görüntü URL'leriniz ve yapılandırmanızla `/styles/train` adresine bir POST isteği gönderin
  </Step>

  <Step title="İlerlemeyi İzleyin" icon="clock">
    Döndürülen `job_id`'yi kullanarak eğitim işinizin durumunu takip edin
  </Step>

  <Step title="Stilinizle Üretim Yapın" icon="sparkles">
    Eğitilmiş stilinizi görüntü üretimine uygulayın
  </Step>
</Steps>

***

## Eğitim Görüntülerini Hazırlama

### Veri Kümenizin Küratörlüğünü Yapma

Eğitim görüntülerinizin kalitesi sonuçları doğrudan etkiler. Farklı eğitim türlerinin farklı gereksinimleri vardır:

| Tür           | Kullanım Alanı                         | İpuçları                                |
| ------------- | -------------------------------------- | --------------------------------------- |
| **Style**     | Sanatsal stiller, görsel estetik       | Çeşitli konular arasında tutarlı stil   |
| **Character** | Kişisel benzerlik, tutarlı karakterler | Çeşitli pozlar, ifadeler, aydınlatmalar |
| **Object**    | Belirli öğeler, ürünler                | Birden çok açı, tutarlı nesne           |

### Kaç Görüntü Gerekli?

Kalite, nicelikten çok daha önemlidir. Küçük ama mükemmel görüntülerden oluşan bir küme, büyük ama vasat bir kümeden daha iyi sonuç verir.

| Veri Kümesi Boyutu | Rehberlik                                                  |
| ------------------ | ---------------------------------------------------------- |
| **5 görüntü**      | Minimum uygun. Basit, tutarlı stiller için işe yarayabilir |
| **10-30 görüntü**  | Önerilen. Kalite ve kapsamın en iyi dengesi                |
| **50+ görüntü**    | Stil yüksek varyasyona sahip olmadıkça azalan getiri       |

<Warning>
  **Kalite > Nicelik**

  15 yüksek kaliteli görüntü, 50 düşük kaliteli görüntüden daha iyi sonuçlar üretir. Şuna öncelik verin:

  * Yüksek çözünürlük (en az 1024x1024)
  * Tüm görüntülerde tutarlı stil
  * Filigran, metin bindirmesi veya sıkıştırma kusurları olmaması
  * Stil tutarlılığını korurken çeşitli konular
</Warning>

<Info>
  **Örnek Veri Kümeleri**

  * **Karakter eğitimi**: Çeşitli pozlar, ifadeler ve aydınlatma koşullarıyla bir kişinin fotoğrafları. Görüntülerde başka kişilerin bulunmasından kaçının.
  * **Stil eğitimi**: Tutarlı bir stilde bir sanat eseri koleksiyonu. Örneğin, [The Metropolitan Museum of Art Ukiyo-E Dataset](https://www.kaggle.com/datasets/kengoichiki/the-metropolitan-museum-of-art-ukiyoe-dataset), sanatsal bir stili eğitmek için ideal Japon tahta baskılarını sağlar.
</Info>

### Görüntüleri Yükleyin

Eğitimden önce, barındırılan URL'leri almak için görüntülerinizi yükleyin. `/assets` uç noktasını kullanın:

<CodeGroup>
  ```python Python theme={null}
  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")
  ```

  ```bash cURL theme={null}
  # Tek bir görüntü yükle
  curl -X POST https://api.krea.ai/assets \
    -H "Authorization: Bearer YOUR_API_TOKEN" \
    -F "file=@/path/to/image.jpg" \
    -F "description=Training image"

  # Yanıt: {"id": "...", "image_url": "https://..."}
  ```
</CodeGroup>

<Tip>
  Döndürülen `image_url` değerlerini kaydedin—bunları eğitim uç noktasına geçireceksiniz.
</Tip>

***

## Stilinizi Eğitin

### Temel Eğitim Örneği

Eğitimi başlatmak için görüntü URL'lerinizi gönderin:

<CodeGroup>
  ```python Python theme={null}
  import requests
  import os
  from dotenv import load_dotenv

  load_dotenv()

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

  # Yükleme adımından gelen eğitim URL'leri
  urls = [
      "https://krea.ai/assets/img1.jpg",
      "https://krea.ai/assets/img2.jpg",
      "https://krea.ai/assets/img3.jpg",
      # ... daha fazla görüntü
  ]

  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']}")
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.krea.ai/styles/train \
    -H "Authorization: Bearer YOUR_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Ukiyo-E Style",
      "urls": [
        "https://krea.ai/assets/img1.jpg",
        "https://krea.ai/assets/img2.jpg",
        "https://krea.ai/assets/img3.jpg"
      ],
      "model": "flux_dev",
      "type": "Style",
      "max_train_steps": 500
    }'
  ```
</CodeGroup>

### Eğitim Türleri

`type` parametresi, kullanım durumunuz için optimize edilmiş akıllı varsayılanları ayarlar:

| Tür         | En İyi Olduğu Alan                     |
| ----------- | -------------------------------------- |
| `Style`     | Sanatsal stiller, görsel estetik       |
| `Character` | Kişisel benzerlik, tutarlı karakterler |
| `Object`    | Belirli öğeler, ürünler                |
| `Default`   | Genel eğitim                           |

### Parametreler

#### Zorunlu Parametreler

<ParamField path="name" type="string" required>
  Özel stiliniz için açıklayıcı bir ad.

  **Örnek:** `"Ukiyo-E Style"`, `"Product Photos"`
</ParamField>

<ParamField path="urls" type="array" required>
  Üzerinde eğitim yapılacak görüntü URL'lerinin dizisi. Daha iyi sonuçlar için daha fazla görüntü ekleyin.
</ParamField>

#### Opsiyonel Parametreler

<ParamField path="model" type="string" default="flux_dev">
  Eğitim için temel model:

  **Görüntü modelleri:**

  * `flux_dev` - Yüksek kalite, çok yönlü
  * `flux_schnell` - BFL'nin gerçek zamanlı modeli
  * `qwen` - Alibaba'nın modeli
  * `z-image` - Alibaba'nın verimli görüntü modeli
  * `wan22` - Yalnızca görüntü üretimi

  **Video modelleri:**

  * `wan` - Alibaba'nın video modeli
</ParamField>

<ParamField path="type" type="string" default="Default">
  Eğitim kategorisi: `Style`, `Object`, `Character` veya `Default`
</ParamField>

<ParamField path="trigger_word" type="string">
  Promptlarda bu stili etkinleştirmek için özel kelime. Belirtilmediğinde, stil adı kullanılır.

  <Tip>Tipik promptlarda görünmeyecek benzersiz tetikleyici kelimeler seçin. Birden çok kelimeli tetikleyiciler için alt çizgi kullanın: `ukiyo_style`</Tip>
</ParamField>

<Accordion title="Gelişmiş Parametreler" icon="sliders">
  <ParamField path="learning_rate" type="number">
    Eğitim yoğunluğunu kontrol eder. Daha yüksek değerler daha hızlı eğitir ancak overfitting yapabilir.

    **Önerilen aralık:** 0.0001 - 0.001
  </ParamField>

  <ParamField path="max_train_steps" type="integer">
    Maksimum eğitim iterasyonu. Aralık: 1-2000
  </ParamField>

  <ParamField path="batch_size" type="integer">
    Aynı anda işlenen görüntüler. Daha büyük batch'ler = daha hızlı eğitim ancak daha fazla bellek.
  </ParamField>
</Accordion>

### Gelişmiş Parametreleri Ayarlama

`type` alanı tarafından belirlenen varsayılanlarla başlayın—bunlar çoğu durum için iyi çalışır. Yalnızca belirli sorunlar görüyorsanız bunları ayarlayın:

<AccordionGroup>
  <Accordion title="Öğrenme Oranı" icon="gauge">
    Modelin eğitim görüntülerinize ne kadar agresif adapte olduğunu kontrol eder.

    | Değer                          | Ne Zaman Kullanılır                                          |
    | ------------------------------ | ------------------------------------------------------------ |
    | **0.0001** (daha düşük)        | Overfitting sorunları, karmaşık stiller, küçük veri kümeleri |
    | **0.0003** (varsayılan)        | Çoğu kullanım durumu                                         |
    | **0.0005-0.001** (daha yüksek) | Daha hızlı eğitim                                            |

    **Ayarlamanız gerektiğine dair işaretler:**

    * Çıktılar eğitim görüntüleriyle aynı görünüyor → oranı düşürün
    * Eğitimden sonra stil etkisi zayıf → oranı biraz artırın
  </Accordion>

  <Accordion title="Eğitim Adımları" icon="shoe-prints">
    Modelin görüntülerinizde ne kadar süre eğitildiği.

    | Veri Kümesi Boyutu | Önerilen Adımlar |
    | ------------------ | ---------------- |
    | 5-10 görüntü       | 300-500 adım     |
    | 15-30 görüntü      | 500-800 adım     |
    | 50+ görüntü        | 800-1500 adım    |

    **Ayarlamanız gerektiğine dair işaretler:**

    * Çıktılar çok katı, promptları görmezden geliyor → adımları azaltın
    * Stil etkisi zayıf → adımları artırın
    * Oluşturulan görüntüler tam olarak eğitim verisi gibi görünüyor → adımları azaltın (overfitting)
  </Accordion>
</AccordionGroup>

<Tip>
  **Yinelemeli Ayarlama**

  İlk eğitim deneyiminiz istediğiniz sonuçları vermezse:

  1. Önce `max_train_steps` ayarını yaparak başlayın (en yaygın çözüm)
  2. Adımlar tek başına yardımcı olmuyorsa `learning_rate` deneyin
</Tip>

### Yanıt Formatı

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

***

## Eğitim İlerlemesini İzleyin

Eğitim genellikle 5-15 dakika sürer. Durumu kontrol etmek için Jobs API'yi sorgulayın:

<CodeGroup>
  ```python Python theme={null}
  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)
  ```

  ```bash cURL theme={null}
  # İş durumunu kontrol et (tamamlanana kadar tekrarla)
  curl -X GET https://api.krea.ai/jobs/YOUR_JOB_ID \
    -H "Authorization: Bearer YOUR_API_TOKEN"
  ```
</CodeGroup>

<Accordion title="İş Durum Değerleri" icon="diagram-project">
  Eğitim işleri bu durumlardan geçer:

  1. **queued** - Kuyrukta bekleme
  2. **processing** - Aktif eğitim
  3. **completed** - Eğitim başarıyla tamamlandı
  4. **failed** - Eğitimde bir hata oluştu
  5. **cancelled** - İş manuel olarak iptal edildi
</Accordion>

***

## Eğitilmiş Stilinizi Kullanın

Eğitim tamamlandığında, `styles` parametresini kullanarak stilinizi görüntü üretimine uygulayın:

<Warning>
  **Uygulama ve API arasında stil sahipliği**

  API ve Krea web uygulaması, çalışma alanınızda ayrı kullanıcı kimlikleri olarak çalışır. Stiller, oluşturan kullanıcıya özeldir, yani:

  * **Uygulamada eğitilmiş stiller**, paylaşılmadıkça API üzerinden erişilebilir değildir
  * **API'de eğitilmiş stiller**, paylaşılmadıkça uygulamada erişilebilir değildir

  Bir stili çalışma alanınızla paylaşmak için (her iki yönde de çalışır):

  ```bash theme={null}
  curl -X POST https://api.krea.ai/styles/YOUR_STYLE_ID/share/workspace \
    -H "Authorization: Bearer YOUR_API_TOKEN"
  ```
</Warning>

<CodeGroup>
  ```python Python theme={null}
  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}")

  # Tamamlanma için sorgula
  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)
  ```

  ```bash cURL theme={null}
  # Stille üretim yap
  curl -X POST https://api.krea.ai/generate/image/krea/krea-2/medium \
    -H "Authorization: Bearer YOUR_API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "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": "w29t6pvy0",
          "strength": 0.95
        }
      ]
    }'

  # Ardından sonuç için /jobs/{job_id} adresini sorgulayın
  ```
</CodeGroup>

### Stil Gücü

`strength` parametresi (0.0-1.0) stilinizin ne kadar güçlü uygulandığını kontrol eder:

| Güç      | Etki                                                               |
| -------- | ------------------------------------------------------------------ |
| 0.5-0.7  | İnce etki, prompt esnekliğini korur                                |
| 0.8-0.9  | Güçlü stil uygulaması, önerilen başlangıç noktası                  |
| 0.95-1.0 | Maksimum stil bağlılığı, prompt yanıt verme özelliğini azaltabilir |

<Tip>
  `0.8` gücünde başlayın ve sonuçlara göre ayarlayın. Daha düşük değerler daha fazla yaratıcı özgürlük verir; daha yüksek değerler daha katı stil bağlılığı sağlar.
</Tip>

### Birden Fazla Stili Birleştirme

`styles` dizisine ekleyerek birden fazla stil uygulayın:

```python theme={null}
"styles": [
    {"id": "style-id-1", "strength": 0.6},
    {"id": "style-id-2", "strength": 0.4}
]
```

***

## En İyi Uygulamalar

<AccordionGroup>
  <Accordion title="Görüntü Seçimi" icon="images">
    * Optimum sonuçlar için elinizdeki yüksek kaliteli görüntülerin mümkün olduğunca fazlasını kullanın
    * Tüm eğitim görüntülerinde tutarlı bir stil sağlayın
    * Stil tutarlılığını korurken konularda çeşitlilik ekleyin
    * Filigranlardan, metin bindirmelerinden veya kusurlardan kaçının
    * En az 1024x1024 çözünürlükteki görüntüleri kullanın
  </Accordion>

  <Accordion title="Eğitim Yapılandırması" icon="sliders">
    * `type` alanını kullanarak varsayılan parametrelerle başlayın
    * Stiller için: 500-1000 adım genellikle yeterlidir
    * Düşük öğrenme oranları (0.0001-0.0003) overfitting'i önler
    * Stil yeterince güçlü değilse adımları artırın
    * Çıktı çok katı ise adımları azaltın
  </Accordion>

  <Accordion title="Tetikleyici Kelimeler" icon="wand-magic-sparkles">
    * Birden fazla stili birleştirmeyi planlıyorsanız aynı tetikleyici kelimeyi kullanın
    * Stili dahil ederseniz tetikleyici kelimeler otomatik olarak prompta enjekte edilir
    * Tipik promptlarda görünen yaygın kelimelerden kaçının
    * Birden çok kelimeli tetikleyiciler için alt çizgi kullanın: `my_custom_style`
  </Accordion>
</AccordionGroup>
