Civitai’dan Model ve LoRA İndirme: Adım Adım Rehber

Stable Diffusion kurulumunu tamamladın, WebUI açılıyor, her şey güzel görünüyor ama gerçek güç modellerde gizli. Varsayılan modelle üretilen görseller seni tatmin etmiyorsa, işte tam burada Civitai devreye giriyor. Civitai, dünyanın en büyük Stable Diffusion model deposu ve topluluğu olarak binlerce checkpoint, LoRA, embedding ve diğer model türlerini barındırıyor. Bu yazıda Civitai’dan model indirmenin tüm yöntemlerini, doğru dosyaları seçmeyi, organize bir dizin yapısı kurmayı ve işleri otomatize etmeyi ele alacağız.

Civitai’ı Tanımak: Ne Bulursunuz?

Civitai’da birkaç farklı model türü bulacaksınız ve bunları karıştırmamak kritik önem taşıyor.

Checkpoint (Ana Model): Tam eğitilmiş model dosyaları. Genellikle 2GB ile 7GB arasında boyutları var. .safetensors veya .ckpt uzantılıyla geliyorlar. Bunlar WebUI’nin models/Stable-diffusion/ klasörüne gidiyor.

LoRA (Low-Rank Adaptation): Ana modelin üzerine ince ayar yapan küçük dosyalar. Boyutları genellikle 10MB ile 300MB arasında değişiyor. models/Lora/ klasörüne yerleştiriyorsunuz.

Embedding (Textual Inversion): Belirli konseptleri veya stilleri öğreten çok küçük dosyalar. embeddings/ klasörüne gidiyor.

VAE: Görselin son kalitesini etkileyen ek bileşen. models/VAE/ klasörüne gidiyor.

Hypernetwork: LoRA’ya benzer ama farklı teknik yaklaşım. models/hypernetworks/ klasörüne gidiyor.

Bu ayrımı bilmeden indirdiğiniz dosyayı nereye koyacağınızı bilemezsiniz ve WebUI onu göremez.

Hesap Açmak ve API Key Almak

Civitai’dan manuel tarayıcı ile indirme yapabilirsiniz ama otomasyon için API key şart. Önce hesap oluşturun, ardından şu adımları izleyin:

  • Sağ üst köşedeki profil ikonuna tıklayın
  • Account Settings seçeneğine gidin
  • API Keys bölümüne inin
  • Add API Key butonuna tıklayın
  • Key’e anlamlı bir isim verin (örneğin “home-server” veya “workstation”)
  • Oluşturulan key’i kopyalayın ve güvenli bir yerde saklayın

Bu key’i sonraki tüm otomatik indirme işlemlerinde kullanacaksınız.

Manuel İndirme: Temel Yöntem

Önce en basit yöntemi anlayalım. Civitai’da bir modelin sayfasına girdiğinizde sağ tarafta Download butonu göreceksiniz. Ama dikkat etmeniz gereken birkaç noktalı var.

Model sayfasında Files sekmesine tıklayın. Aynı modelin birden fazla versiyonu olabilir. Her versiyon farklı bir training run’ı temsil ediyor. Genellikle:

  • Full versiyon: Tam boyutlu model, en yüksek kalite
  • Pruned versiyon: Gereksiz veriler temizlenmiş, boyut küçük ama kalite aynı
  • fp16 versiyon: 16-bit hassasiyetle kaydedilmiş, boyut yarı yarıya küçük

Çoğu durumda pruned-fp16 safetensors versiyonunu tercih edin. Hem disk alanından tasarruf edersiniz hem de kalite farkı ihmal edilebilir düzeyde kalır.

Komut Satırından İndirme

Sunucu üzerinde çalışıyorsanız veya büyük dosyaları daha kontrollü indirmek istiyorsanız wget veya curl kullanın. Önce indirme URL’sini elde etmeniz gerekiyor.

Civitai model URL’leri şu formattadır: https://civitai.com/models/MODEL_ID

API üzerinden dosya URL’si almak için:

# Model bilgilerini çek
curl -s "https://civitai.com/api/v1/models/MODEL_ID" 
  -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool

Bu komut modelin tüm versiyonlarını ve her versiyondaki dosyaların download URL’lerini gösterir. Oradan doğru URL’yi kopyalayın.

Ardından wget ile indirme:

# Checkpoint indirme örneği
wget -c --content-disposition 
  --header="Authorization: Bearer YOUR_API_KEY" 
  "https://civitai.com/api/download/models/VERSION_ID" 
  -P ~/stable-diffusion-webui/models/Stable-diffusion/

-c parametresi kesilen indirmeyi kaldığı yerden devam ettiriyor, bu büyük dosyalar için hayat kurtarıcı. --content-disposition ise dosyayı orijinal adıyla kaydediyor.

Python ile Otomatik İndirme Scripti

Birden fazla model indirmeniz gerektiğinde veya süreçi otomatize etmek istediğinizde Python scripti işinizi büyük ölçüde kolaylaştırır. Aşağıdaki script hem checkpoint hem LoRA indirmeyi destekliyor:

#!/usr/bin/env python3
import os
import sys
import requests
from pathlib import Path

API_KEY = os.environ.get("CIVITAI_API_KEY", "")
BASE_URL = "https://civitai.com/api/v1"
WEBUI_PATH = Path.home() / "stable-diffusion-webui"

MODEL_DIRS = {
    "Checkpoint": WEBUI_PATH / "models" / "Stable-diffusion",
    "LORA": WEBUI_PATH / "models" / "Lora",
    "TextualInversion": WEBUI_PATH / "embeddings",
    "VAE": WEBUI_PATH / "models" / "VAE",
    "Hypernetwork": WEBUI_PATH / "models" / "hypernetworks",
}

def get_model_info(model_id):
    headers = {"Authorization": f"Bearer {API_KEY}"}
    response = requests.get(f"{BASE_URL}/models/{model_id}", headers=headers)
    response.raise_for_status()
    return response.json()

def download_model(version_id, dest_dir, filename=None):
    headers = {"Authorization": f"Bearer {API_KEY}"}
    url = f"https://civitai.com/api/download/models/{version_id}"
    
    with requests.get(url, headers=headers, stream=True) as r:
        r.raise_for_status()
        if not filename:
            cd = r.headers.get("content-disposition", "")
            filename = cd.split("filename=")[-1].strip('"') if "filename=" in cd else f"model_{version_id}.safetensors"
        
        dest_path = Path(dest_dir) / filename
        total = int(r.headers.get("content-length", 0))
        downloaded = 0
        
        print(f"İndiriliyor: {filename}")
        with open(dest_path, "wb") as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
                downloaded += len(chunk)
                if total:
                    pct = downloaded / total * 100
                    print(f"r{pct:.1f}% tamamlandı", end="", flush=True)
        print(f"nTamamlandı: {dest_path}")

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Kullanim: python3 download.py MODEL_ID VERSION_ID")
        sys.exit(1)
    
    model_id = sys.argv[1]
    version_id = sys.argv[2]
    info = get_model_info(model_id)
    model_type = info.get("type", "Checkpoint")
    dest = MODEL_DIRS.get(model_type, MODEL_DIRS["Checkpoint"])
    dest.mkdir(parents=True, exist_ok=True)
    download_model(version_id, dest)

Bu scripti çalıştırmadan önce API key’inizi environment variable olarak set edin:

export CIVITAI_API_KEY="buraya_kendi_key_inizi_yazin"
python3 download.py 4384 128713

Dizin Yapısını Düzgün Organize Etmek

Model koleksiyonunuz büyüdükçe dizin yapısı kritik hale geliyor. Benim önerdiğim yapı:

# Dizin yapısını oluştur
mkdir -p ~/stable-diffusion-webui/models/Stable-diffusion/{realistic,anime,artistic}
mkdir -p ~/stable-diffusion-webui/models/Lora/{characters,styles,concepts,poses}
mkdir -p ~/stable-diffusion-webui/models/VAE
mkdir -p ~/stable-diffusion-webui/embeddings/{positive,negative}

# Mevcut model dosyalarını listele
find ~/stable-diffusion-webui/models -name "*.safetensors" -o -name "*.ckpt" | sort

Alt dizinlere göre organize etmek WebUI’daki model seçimini çok daha kolay hale getiriyor. AUTOMATIC1111 WebUI alt dizinleri destekliyor, dolayısıyla realistic/dreamshaper_8.safetensors gibi bir path sorunsuz çalışıyor.

Toplu İndirme: Model Listesinden

Bir projede kullanacağınız modelleri önceden listeleyip toplu indirme yapabilirsiniz. Bunun için basit bir requirements formatı oluşturalım:

# models.txt dosyası oluştur
cat > ~/models.txt << 'EOF'
# FORMAT: MODEL_ID:VERSION_ID:TUR
# Realistic Vision v5.1
4201:130072:Checkpoint
# DreamShaper 8
4384:128713:Checkpoint  
# Detail Tweaker LoRA
58390:62833:LORA
# Negative hand embedding
56519:60938:TextualInversion
EOF

Bu dosyayı işleyecek bash scripti:

#!/bin/bash

WEBUI_PATH="$HOME/stable-diffusion-webui"
API_KEY="${CIVITAI_API_KEY}"
MODELS_FILE="${1:-models.txt}"

if [ -z "$API_KEY" ]; then
    echo "Hata: CIVITAI_API_KEY environment variable set edilmemis!"
    exit 1
fi

while IFS= read -r line; do
    # Yorum satirlarini ve bos satirlari atla
    [[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
    
    MODEL_ID=$(echo "$line" | cut -d: -f1)
    VERSION_ID=$(echo "$line" | cut -d: -f2)
    MODEL_TYPE=$(echo "$line" | cut -d: -f3)
    
    case "$MODEL_TYPE" in
        "Checkpoint") DEST="$WEBUI_PATH/models/Stable-diffusion" ;;
        "LORA")        DEST="$WEBUI_PATH/models/Lora" ;;
        "VAE")         DEST="$WEBUI_PATH/models/VAE" ;;
        *)             DEST="$WEBUI_PATH/models/Stable-diffusion" ;;
    esac
    
    echo ">>> Model indiriliyor: ID=$MODEL_ID, Version=$VERSION_ID"
    wget -q -c --content-disposition 
        --header="Authorization: Bearer $API_KEY" 
        "https://civitai.com/api/download/models/$VERSION_ID" 
        -P "$DEST"
    
    echo ">>> Tamamlandi!"
    sleep 2  # API rate limit icin kisa bekleme
done < "$MODELS_FILE"

echo "Tum modeller indirildi."

Bu scripti kaydedin ve çalıştırılabilir yapın:

chmod +x ~/download_models.sh
~/download_models.sh ~/models.txt

Safetensors ve CKPT Arasındaki Fark

Bu konuya ayrıca değinmek gerekiyor çünkü sık sorulan bir soru. .ckpt formatı Python pickle kullanan eski formattır ve teorik olarak zararlı kod içerebilir. .safetensors ise Hugging Face’in geliştirdiği güvenli format. Sadece tensor verisi içeriyor, herhangi bir executable code barındırmıyor.

Pratikte ne yapmalısınız:

  • Her zaman .safetensors formatını tercih edin
  • Sadece safetensors versiyonu yoksa .ckpt kullanın
  • Güvenmediğiniz kaynaklardan gelen .ckpt dosyalarını çalıştırmayın

Elinizdeki .ckpt dosyalarını safetensors’a dönüştürmek isterseniz:

# Dönüştürme scripti için gerekli kütüphane
pip install safetensors torch

# Dönüştürme
python3 -c "
import torch
from safetensors.torch import save_file

model = torch.load('model.ckpt', map_location='cpu')
weights = model.get('state_dict', model)
save_file(weights, 'model.safetensors')
print('Donusum tamamlandi.')
"

WebUI’de Model Değişimi ve Reload

Yeni model indirdikten sonra WebUI’yi yeniden başlatmanıza gerek yok. AUTOMATIC1111 üzerinde sayfanın üstündeki checkpoint dropdown’ının yanındaki refresh butonuna tıklayın, yeni model listede görünecek. API üzerinden aynı işlemi yapmak isterseniz:

# WebUI API ile model listesini yenile
curl -s -X POST "http://localhost:7860/sdapi/v1/refresh-checkpoints"

# Mevcut modelleri listele
curl -s "http://localhost:7860/sdapi/v1/sd-models" | python3 -m json.tool | grep title

LoRA Kullanımı: Prompt’a Nasıl Eklenir

LoRA indirdiniz, doğru klasöre koydunuz, şimdi nasıl kullanacaksınız? Prompt içinde özel sözdizimi kullanıyorsunuz:

masterpiece, best quality, <lora:dosya_adi:agirlik>, 1girl, detailed face

Burada dosya_adi uzantısız dosya adı, agirlik ise 0 ile 1 arasında bir değer. Çoğu LoRA için 0.6-0.8 arası iyi sonuç veriyor. Bazı LoRA’lar kendi dokümantasyonlarında önerilen ağırlığı belirtiyor, buna dikkat edin.

Birden fazla LoRA aynı anda kullanabilirsiniz:

masterpiece, <lora:detail_tweaker:0.5>, <lora:lighting_style:0.7>, portrait

Disk Alanı Yönetimi

Modeller ciddi disk alanı tüketiyor. 10-15 checkpoint ve 50 LoRA ile kendinizi 100GB+ bir koleksiyonla bulabilirsiniz. Durum takibi için:

# Model klasörü toplam boyutunu göster
du -sh ~/stable-diffusion-webui/models/

# Türe göre boyut dağılımı
du -sh ~/stable-diffusion-webui/models/*/ | sort -rh

# En büyük dosyaları listele
find ~/stable-diffusion-webui/models -name "*.safetensors" -o -name "*.ckpt" 
  | xargs ls -lh 2>/dev/null | sort -rh | head -20

# Uzun süre kullanılmayan modelleri bul (30 günden eski)
find ~/stable-diffusion-webui/models -name "*.safetensors" -atime +30 
  | xargs ls -lh 2>/dev/null

Kullanmadığınız modelleri silmekten çekinmeyin. Civitai hesabınızda veya models.txt dosyanızda kayıtlı olduğu sürece istediğiniz zaman yeniden indirebilirsiniz.

Sık Yapılan Hatalar

Yanlış klasöre koyma: LoRA’yı checkpoint klasörüne veya tersi koymak en yaygın hata. WebUI dosyayı göremez ya da hata verir. Her model türünün kendi klasörü var, buna dikkat edin.

Yarım kalan indirmeler: Özellikle büyük checkpoint dosyalarında internet kesilirse dosya bozuk kalabilir. wget -c ile kaldığı yerden devam edebilirsiniz ama emin olmak için dosya boyutunu kontrol edin:

# Beklenen boyut ile indirilen boyutu karşılaştır
ls -lh ~/stable-diffusion-webui/models/Stable-diffusion/model_adi.safetensors

API key’i koda gömmek: API key’inizi asla kod içine yazmayın. Her zaman environment variable kullanın. .bashrc veya .zshrc dosyanıza şunu ekleyin:

echo 'export CIVITAI_API_KEY="buraya_kendi_key_inizi_yazin"' >> ~/.bashrc
source ~/.bashrc

NSFW içerik ayarları: Civitai hesabınızda NSFW filtreleri açık olduğunda bazı modellerin API üzerinden indirilmesi engellenebiliyor. Account settings’den bu ayarları kontrol edin.

Model Hash Doğrulama

İndirdiğiniz dosyanın bozuk olmadığını ve gerçekten Civitai’da listelendiği model olduğunu doğrulamak için hash kontrolü yapın. Civitai her model dosyası için SHA256 hash bilgisi sağlıyor:

# SHA256 hash hesapla
sha256sum ~/stable-diffusion-webui/models/Stable-diffusion/model_adi.safetensors

# Veya hızlı AutoV2 hash için (WebUI bu formatı kullanır)
python3 -c "
import hashlib

def get_autov2_hash(filepath):
    with open(filepath, 'rb') as f:
        f.seek(0x100000)  # 1MB atla
        data = f.read(0x10000)  # 64KB oku
    return hashlib.sha256(data).hexdigest()[:8]

import sys
print(get_autov2_hash(sys.argv[1]))
" ~/stable-diffusion-webui/models/Stable-diffusion/model_adi.safetensors

Bu hash’i Civitai model sayfasındaki hash bilgisiyle karşılaştırın. Eşleşmiyorsa dosya bozuk ya da değiştirilmiş demektir.

Sonuç

Civitai’dan model indirme kulağa basit gelse de doğru dosyayı seçmek, doğru klasöre koymak, indirme süreçlerini otomatize etmek ve disk alanını yönetmek gerçek bir sistem yöneticisi yaklaşımı gerektiriyor. Manuel tarayıcı indirmesi küçük ölçekli kullanım için yeterli ama ciddiye aldığınız bir kurulum için API destekli scriptler ve organize bir dizin yapısı şart.

Safetensors formatını tercih etmeyi, API key’inizi environment variable olarak yönetmeyi ve model listelerinizi bir dosyada tutmayı alışkanlık haline getirin. Koleksiyonunuz büyüdükçe bu disiplin sizi çok ciddi baş ağrısından kurtaracak. Sonraki adım olarak ComfyUI veya AUTOMATIC1111’in kendi model manager eklentilerini inceleyebilirsiniz, ancak temel indirme ve organizasyon mantığını kavramak her zaman işe yarıyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir