API'lerle Flux Kontext Nasıl Kullanılır: Bir Geliştirici Kılavuzu

Replicate, Fal.ai veya ComfyUI ile Flux Kontext AI görüntü düzenlemeyi API'lerle entegre etmeyi öğrenin. Kod örnekleri ve en iyi uygulamalar.

Efe Demir

Efe Demir

5 June 2025

API'lerle Flux Kontext Nasıl Kullanılır: Bir Geliştirici Kılavuzu

```html

Black Forest Labs tarafından geliştirilen Flux Kontext, yapay zeka destekli görüntü düzenlemede güçlü bir ilerlemeyi temsil eder. Genel görüntü oluşturma modellerinden farklı olarak Flux Kontext, metin yönlendirmeli görüntü manipülasyonunda uzmanlaşmıştır; geliştiricilerin doğal dil talimatları aracılığıyla görüntülerin belirli kısımlarını programlı olarak düzenlemesine olanak tanır. Bu yeteneklerden yararlanmak isteyen geliştiriciler için, mevcut API entegrasyon yöntemlerini anlamak çok önemlidir.

Bu kılavuz, Flux Kontext'i uygulamalarınıza entegre etmenin üç ana yaklaşımını inceleyerek, her yöntem için pratik uygulama rehberliği ve en iyi uygulamalar sunmaktadır.

💡
Uygulamanıza yapay zeka görüntü düzenlemeyi entegre etmek mi istiyorsunuz? Apidog'un API test ve geliştirme platformu, Flux Kontext API uç noktalarını doğrulamanıza, kimlik doğrulama kimlik bilgilerini güvenli bir şekilde yönetmenize ve eşzamansız iş akışlarını test etmenize yardımcı olabilir; güvenilir entegrasyon sağlar. Yapay zeka API geliştirmenizi basitleştirmek için Apidog'u ücretsiz deneyin.

Flux Kontext'i Anlama

Flux Kontext Nedir?

Flux Kontext, aşağıdakileri sağlayan özel bir yapay zeka modeli paketidir:

Flux Kontext'e Nasıl Erişilir

Şu anda, Flux Kontext'e üçüncü taraf ML platformları aracılığıyla erişilebilir:

  1. Replicate: Python, JavaScript, Go ve Swift için API'ler ve SDK'lar ile çeşitli Flux Kontext modellerine ev sahipliği yapar
  2. Fal.ai: Sağlam eşzamansız iş kuyruğu ile JavaScript odaklı erişim sağlar
  3. ComfyUI: Arka uç platformlarına bağlanan görsel düğüm tabanlı iş akışı erişimi sunar

Black Forest Labs tarafından gelecekte bir açık ağırlıklı sürümden (FLUX.1 Kontext [dev]) bahsedildi, ancak henüz mevcut değil.

Yöntem 1: Replicate API aracılığıyla entegrasyon

Replicate, Flux Kontext entegrasyonu için kapsamlı araçlar sunan popüler bir MLOps platformudur.

Önkoşullar

Python Uygulaması

import replicate
import os

# API belirtecini ayarla
os.environ["REPLICATE_API_TOKEN"] = "YOUR_API_TOKEN"  # Yalnızca geliştirme için

# Giriş verilerini hazırla
input_data = {
    "prompt": "Kırmızı arabayı mavi bir spor arabaya dönüştür",
    "image_url": "https://example.com/car.jpg",
    # İsteğe bağlı parametreler
    "seed": 42  # Tekrarlanabilir sonuçlar için
}

# Eşzamansız yaklaşım (üretim için önerilir)
prediction = replicate.predictions.create(
    version="black-forest-labs/flux-kontext-pro:0f1178f5a27e9aa2d2d39c8a43c110f7fa7cbf64062ff04a04cd40899e546065",
    input=input_data,
    webhook="https://your-app.com/webhooks/replicate",
    webhook_events_filter=["completed"]
)

# Referans için tahmin kimliğini sakla
prediction_id = prediction.id
print(f"Tahmin {prediction_id} kimliği ile başlatıldı")

# Alternatif: Eşzamanlı yaklaşım (daha basit ancak zaman aşımına uğrayabilir)
# output = replicate.run(
#     "black-forest-labs/flux-kontext-pro:0f1178f5a27e9aa2d2d39c8a43c110f7fa7cbf64062ff04a04cd40899e546065",
#     input=input_data
# )
# print(f"Oluşturulan görüntü URL'si: {output}")

Webhook İşleyici Örneği

# Örnek Flask webhook işleyicisi
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhooks/replicate', methods=['POST'])
def handle_replicate_webhook():
    data = request.json
    
    if data['status'] == 'succeeded':
        # Başarılı tahmini işle
        output_url = data['output']
        # Uygulama durumunuzu güncelleyin, kullanıcıyı bilgilendirin, vb.
        return jsonify({"status": "processed"}), 200
    elif data['status'] in ['failed', 'canceled']:
        # Hatayı işle
        error = data.get('error', 'Bilinmeyen hata')
        return jsonify({"status": "error_handled"}), 200
    
    return jsonify({"status": "unhandled_status"}), 200

JavaScript Uygulaması

import Replicate from "replicate";

// API belirteci ile başlat
const replicate = new Replicate({
  auth: process.env.REPLICATE_API_TOKEN,
});

async function editImageWithFluxKontext(imageUrl, prompt) {
  try {
    // Tahmin oluştur
    const prediction = await replicate.predictions.create({
      version: "black-forest-labs/flux-kontext-pro:0f1178f5a27e9aa2d2d39c8a43c110f7fa7cbf64062ff04a04cd40899e546065",
      input: {
        prompt: prompt,
        image_url: imageUrl
      },
      webhook: "https://your-app.com/webhooks/replicate",
      webhook_events_filter: ["completed"]
    });
    
    return {
      status: "processing",
      predictionId: prediction.id
    };
  } catch (error) {
    console.error("Tahmin oluşturulurken hata oluştu:", error);
    throw error;
  }
}

Replicate'in Temel Faydaları

Yöntem 2: Fal.ai API aracılığıyla entegrasyon

Fal.ai, güçlü JavaScript desteği ve verimli iş yönetimi ile alternatif bir yol sunar.

Önkoşullar

JavaScript Uygulaması

import { fal } from "@fal-ai/client";

// Kimlik doğrulamasını yapılandır
fal.config({
  credentials: process.env.FAL_KEY
});

// Giriş parametrelerini hazırla
const input = {
  prompt: "Bu portreyi yağlı boya stiline dönüştür",
  image_url: "https://example.com/portrait.jpg",
  guidance_scale: 7.5  // Sonucun istemi ne kadar yakından takip ettiğini kontrol eder
};

// Kuyruk ile eşzamansız yaklaşım
async function processImageWithFluxKontext(input) {
  try {
    // Kuyruğa gönder
    const { request_id } = await fal.queue.submit("fal-ai/flux-pro/kontext", {
      input,
      webhookUrl: "https://your-app.com/webhooks/falai"
    });
    
    return {
      status: "processing",
      requestId: request_id
    };
  } catch (error) {
    console.error("İş gönderilirken hata oluştu:", error);
    throw error;
  }
}

// Alternatif: Abone olma yöntemini kullanma
async function editImageWithFluxKontext(input) {
  try {
    // İşlemi abone ol ve sonucu bekle
    const result = await fal.subscribe("fal-ai/flux-pro/kontext", {
      input,
      logs: true,
      onQueueUpdate: (update) => {
        if (update.status === "IN_PROGRESS") {
          console.log("İşleniyor:", update.logs[update.logs.length - 1]?.message);
        }
      }
    });
    
    return {
      status: "completed",
      outputUrl: result.data.image_url
    };
  } catch (error) {
    console.error("Görüntü işlenirken hata oluştu:", error);
    throw error;
  }
}

Dosya Yükleme Örneği

async function processLocalImageWithFluxKontext(imageFile, prompt) {
  try {
    // Görüntüyü fal.ai depolama alanına yükle
    const { url: imageUrl } = await fal.storage.upload(imageFile);
    
    // Flux Kontext ile işleme
    const result = await fal.subscribe("fal-ai/flux-pro/kontext", {
      input: {
        prompt,
        image_url: imageUrl
      }
    });
    
    return {
      status: "completed",
      outputUrl: result.data.image_url
    };
  } catch (error) {
    console.error("Görüntü işlenirken hata oluştu:", error);
    throw error;
  }
}

Fal.ai'nin Temel Faydaları

Yöntem 3: ComfyUI Düğümleri aracılığıyla entegrasyon

ComfyUI, düğüm tabanlı bir arayüzü tercih edenler için görsel bir iş akışı yaklaşımı sağlar.

Nasıl Çalışır

  1. ComfyUI'yi Yapılandırın: ComfyUI'yi yükleyin ve arka uç hizmeti (örneğin, Replicate) için API kimlik bilgilerini ayarlayın
  2. Flux Kontext Düğümü Ekle: İş akışınıza özel bir "Flux Kontext" düğümü ekleyin
  3. Düğümleri Bağlayın: Giriş görüntü düğümünü Flux Kontext düğümüne bağlayın, istem parametrelerini ayarlayın
  4. İş Akışını Yürütün: API çağrılarını başlatmak ve sonuçları almak için iş akışını çalıştırın

Bu yöntem şunlar için idealdir:

API Entegrasyonu için En İyi Uygulamalar

Güvenli Kimlik Doğrulama

API kimlik bilgilerinizi her zaman koruyun:

// KAÇINILMASI GEREKEN - kimlik bilgilerini kodlamak
const apiKey = "your_api_key_here"; // Güvenlik riski!

// DAHA İYİ - ortam değişkenlerini kullanın
const apiKey = process.env.API_KEY;

// Tarayıcı tabanlı uygulamalar için, her zaman sunucu tarafı bir proxy kullanın
// İstemci tarafı kodu
async function editImage(imageUrl, prompt) {
  const response = await fetch('/api/edit-image', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ imageUrl, prompt })
  });
  
  return response.json();
}

// Sunucu tarafı proxy
app.post('/api/edit-image', async (req, res) => {
  // Sunucu, korumalı API anahtarına erişebilir
  const apiKey = process.env.REPLICATE_API_TOKEN;
  // Burada gerçek API çağrısını yapın
});

Eşzamansız İşlemleri Yönetme

Görüntü düzenleme işlemleri zaman yoğundur. Sağlam bir işleme uygulayın:

  1. Webhook'ları Kullanın: İşlem tamamlandığında bildirim almak için API çağrılarınızı webhook URL'leri ile yapılandırın
  2. Durum Takibi Uygulayın: İş kimliklerini ve durumu veritabanınızda saklayın
// Sunucu tarafı kodu
app.post('/api/edit-image', async (req, res) => {
  const { imageUrl, prompt } = req.body;
  
  try {
    // Bu iş için benzersiz bir kimlik oluşturun
    const jobId = generateUniqueId();
    
    // Veritabanında "beklemede" olarak saklayın
    await db.jobs.create({
      id: jobId,
      status: 'pending',
      created: new Date(),
      imageUrl,
      prompt
    });
    
    // Webhook ile Replicate'e gönder
    const prediction = await replicate.predictions.create({
      version: "black-forest-labs/flux-kontext-pro:0f1178f5a27e9aa2d2d39c8a43c110f7fa7cbf64062ff04a04cd40899e546065",
      input: {
        prompt: prompt,
        image_url: imageUrl
      },
      webhook: `https://your-app.com/webhooks/replicate?jobId=${jobId}`
    });
    
    // Hemen iş kimliği ile dön
    res.json({
      status: 'processing',
      jobId
    });
  } catch (error) {
    console.error("Hata:", error);
    res.status(500).json({ error: 'İstek işlenemedi' });
  }
});
  1. Kullanıcı Geri Bildirimi Sağlayın: Kullanıcılar için durum yoklaması veya gerçek zamanlı güncellemeler uygulayın

Hata İşleme

Sağlam uygulamalar oluşturmak için kapsamlı hata işleme uygulayın:

async function processWithRetry(imageUrl, prompt, maxRetries = 3) {
  let attempt = 0;
  
  while (attempt < maxRetries) {
    try {
      return await processImageWithFluxKontext(imageUrl, prompt);
    } catch (error) {
      attempt++;
      
      if (isTransientError(error)) {
        // Üstel geri alma
        const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000;
        console.log(`Tekrar deneme ${delay}ms sonra (Deneme ${attempt}/${maxRetries})`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        // Tekrar denenemeyen hata
        throw error;
      }
    }
  }
  
  throw new Error(`Başarısız ${maxRetries} denemeden sonra`);
}

function isTransientError(error) {
  // Geçici olabilecek hataları belirleyin (oran sınırları, sunucu hataları)
  return error.status === 429 || error.status >= 500;
}

Etkili İstem Mühendisliği

Sonuçlarınızın kalitesi, iyi hazırlanmış istemlere büyük ölçüde bağlıdır:

// İstem geliştirmeyi uygulayın
function enhancePrompt(basicPrompt, targetObject, action) {
  // Niyetlere göre daha ayrıntılı bir istem oluşturun
  let enhancedPrompt = basicPrompt;
  
  // Hedef nesne hakkında özgüllük ekleyin
  if (targetObject) {
    enhancedPrompt += `, ${targetObject} üzerine odaklanarak`;
  }
  
  // Hedeflenmeyen öğeler için koruma talimatları ekleyin
  if (targetObject && action) {
    enhancedPrompt += `. Görüntüdeki diğer tüm öğeleri korurken ${targetObject}'u ${action} edin.`;
  }
  
  return enhancedPrompt;
}

// Görüntüler içindeki metin düzenleme için özel sözdizimi kullanın
function createTextEditPrompt(oldText, newText) {
  return `"${oldText}" metnini, aynı stili ve yazı tipini koruyarak "${newText}" ile değiştirin.`;
}

Performans ve Maliyet Optimizasyonu

Sık kullanılan düzenlemeler için önbelleğe almayı düşünün:

// Dağıtılmış önbelleğe alma için Redis kullanma
const redis = require('redis');
const { promisify } = require('util');
const client = redis.createClient(process.env.REDIS_URL);

const getAsync = promisify(client.get).bind(client);
const setExAsync = promisify(client.setex).bind(client);

async function getCachedOrProcessImage(imageUrl, prompt) {
  const cacheKey = `flux:${createHash(imageUrl)}:${createHash(prompt)}`;
  
  // Önce önbelleği deneyin
  const cachedResult = await getAsync(cacheKey);
  if (cachedResult) {
    return JSON.parse(cachedResult);
  }
  
  // Görüntüyü işleyin
  const result = await processImageWithFluxKontext(imageUrl, prompt);
  
  // 24 saat önbelleğe alın
  await setExAsync(cacheKey, 86400, JSON.stringify(result));
  
  return result;
}

Yöntem Karşılaştırması

Flux Kontext için bir entegrasyon yöntemi seçerken, bu faktörleri göz önünde bulundurun:

FaktörReplicate APIFal.ai APIComfyUI Düğümleri
Dil DesteğiPython, JavaScript, Go, SwiftÖncelikle JavaScriptYok (Görsel)
Kullanım DurumuGenel uygulama arka uçlarıJavaScript/Node.js uygulamalarıGörsel iş akışları, prototip oluşturma
Eşzamansız ÖzelliklerWebhook'lar, yoklama

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin