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

Flux Kontext'i Anlama
Flux Kontext Nedir?

Flux Kontext, aşağıdakileri sağlayan özel bir yapay zeka modeli paketidir:
- Metin istemleriyle yönlendirilen hassas, yerelleştirilmiş görüntü değişiklikleri
- Stil aktarımları (suluboya, yağlı boya, eskizler)
- Nesne ve giysi değişiklikleri
- Görüntü içi metin düzenleme
- Arka plan dönüşümleri
Flux Kontext'e Nasıl Erişilir
Şu anda, Flux Kontext'e üçüncü taraf ML platformları aracılığıyla erişilebilir:
- Replicate: Python, JavaScript, Go ve Swift için API'ler ve SDK'lar ile çeşitli Flux Kontext modellerine ev sahipliği yapar
- Fal.ai: Sağlam eşzamansız iş kuyruğu ile JavaScript odaklı erişim sağlar
- 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
- Replicate hesabı ve API belirteci
- Uygun SDK'nın kurulumu (örneğin, Python için
pip install replicate
)
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ı
- Çoklu dil SDK'ları (Python, JavaScript, Go, Swift)
- Çeşitli Flux Kontext modellerine ve özel uygulamalara erişim
- Yönetilen altyapı ve ölçeklendirme
- Eşzamansız işlemler için sağlam webhook desteği
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
- Fal.ai hesabı ve API Anahtarı (FAL_KEY)
- İstemcinin kurulumu:
npm install @fal-ai/client
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ı
- Güçlü JavaScript/Node.js entegrasyonu
- Eşzamansız işleme için sağlam kuyruk sistemi
- Entegre dosya depolama çözümü
- Gerçek zamanlı günlükler ve ilerleme güncellemeleri
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
- ComfyUI'yi Yapılandırın: ComfyUI'yi yükleyin ve arka uç hizmeti (örneğin, Replicate) için API kimlik bilgilerini ayarlayın
- Flux Kontext Düğümü Ekle: İş akışınıza özel bir "Flux Kontext" düğümü ekleyin
- Düğümleri Bağlayın: Giriş görüntü düğümünü Flux Kontext düğümüne bağlayın, istem parametrelerini ayarlayın
- İş 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:
- Hızlı prototip oluşturma ve görsel denemeler
- Görsel arayüzleri tercih eden sanatçılar ve tasarımcılar
- Programlı çözümleri uygulamadan önce istemleri test etme
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:
- 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
- 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' });
}
});
- 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ör | Replicate API | Fal.ai API | ComfyUI Düğümleri |
---|---|---|---|
Dil Desteği | Python, JavaScript, Go, Swift | Öncelikle JavaScript | Yok (Görsel) |
Kullanım Durumu | Genel uygulama arka uçları | JavaScript/Node.js uygulamaları | Görsel iş akışları, prototip oluşturma |
Eşzamansız Özellikler | Webhook'lar, yoklama |