course
FLUX.2 एक आधुनिक टेक्स्ट-टू-इमेज मॉडल है जिसे उच्च-गुणवत्ता और नियंत्रित जेनरेशन के लिए बनाया गया है। इस ट्यूटोरियल में, मैं आपको FLUX.2-dev वेरिएंट का उपयोग करके एक Capsule Wardrobe Visualizer बनाना सिखाऊंगा, जिसमें हम 2–10 कपड़ों की इमेज (शर्ट, पैंट, जैकेट, जूते, आदि) अपलोड करते हैं, मॉडल उन पीसेज़ के कॉम्बिनेशन सैंपल करता है, और ऐप अलग-अलग तरीकों से उन्हें मिलाकर आउटफिट्स का एक ग्रिड लौटाता है।
नतीजा एक इंटरैक्टिव टूल है जो आपको आउटफिट कॉम्बिनेशन को विज़ुअली एक्सप्लोर करने देता है, जिसे GPU मेमोरी के लिए ऑप्टिमाइज़्ड डिफ्यूज़न मॉडल पावर करता है।
यदि आप इस ट्यूटोरियल के पीछे के सिद्धांतों के बारे में और जानना चाहते हैं, तो मैं Deep Learning for Images with PyTorch कोर्स देखने की सलाह देता/देती हूँ।
FLUX 2 क्या है?
FLUX.2 टेक्स्ट-टू-इमेज मॉडलों का एक परिवार है जो गुणवत्ता, गति, और लचीलापन के स्पेक्ट्रम के अलग-अलग बिंदुओं के लिए ऑप्टिमाइज़्ड हैं, किसी एक मोनोलिथिक चेकपॉइंट की बजाय। यह कई महत्वपूर्ण क्षमताएँ लाता है:
- मल्टी-रेफरेंस सपोर्ट: आप एक साथ 10 तक इमेज पर कंडीशन कर सकते हैं, जो कई जेनरेशन में प्रोडक्ट कंसिस्टेंसी के लिए अहम है।
- इमेज डिटेल और फोटोरियलिज़्म: FLUX 2 में बारीक डिटेल और यथार्थवाद में स्पष्ट छलांग दिखती है, जो इसे वास्तविक फोटोग्राफी के और करीब लाती है।
- टेक्स्ट रेंडरिंग: Pro और Flex वर्ज़न जटिल टाइपोग्राफी, इन्फोग्राफिक्स, और UI मॉकअप्स के लिए आदर्श हैं।
- एन्हांस्ड प्रॉम्प्ट फॉलोइंग: FLUX 2 संरचित, बहु-भाग प्रॉम्प्ट्स का बेहतर पालन दिखाता है, जो विशिष्ट पोज़, लाइटिंग, और स्टाइलिंग का वर्णन करते समय उपयोगी है।
- वर्ल्ड नॉलेज और स्पैशियल लॉजिक: इसे वास्तविक दुनिया की वस्तुओं, लाइटिंग, और कंपोज़िशन की अधिक ग्राउंडेड समझ है, जिससे अधिक सुसंगत दृश्य बनते हैं।
व्यवहार में, आप आमतौर पर तीन मुख्य वेरिएंट देखते हैं:
- FLUX.2-Pro: यह उच्चतम फिडेलिटी, थोड़ा धीमा मॉडल वेरिएंट है, जो प्रोडक्शन-ग्रेड इमेज रेंडरिंग के लिए आदर्श है जहाँ आप इटरेशन स्पीड से अधिक पॉलिश की परवाह करते हैं।
- FLUX.2-Flex: यह बैलेंस्ड प्रीसेट वेरिएंट बेहतर लेटेंसी और VRAM उपयोग के साथ मजबूत गुणवत्ता देता है। यह सामान्य-उद्देश्य इमेज जेनरेशन के लिए उपयुक्त है।
- FLUX.2-Dev: यह प्रयोगात्मक वेरिएंट है, जिसे कोड में टिंकर करना आसान है और डेमो-फ्रेंडली सेटिंग्स देता है।
Pro और Flex की तुलना में, Dev वेरिएंट खासकर उन लोगों के लिए डिज़ाइन किया गया है जो प्रयोग करना चाहते हैं, और यह हमारे इंटरैक्टिव कैप्सूल-वार्डरोब ग्रिड के लिए बिल्कुल सही है।
FLUX.2-Dev(4-बिट) क्यों चुनें?
मूल FLUX.2 लाइन पहले से ही शक्तिशाली है, लेकिन FLUX.2-Dev और 4-बिट क्वांटाइज़ेशन इस डेमो को चलाना, इटरेट करना, और बढ़ाना काफी आसान बना देता है। वजहें ये हैं:
- एक्सपेरिमेंटेशन के लिए बना: Dev वेरिएंट सीधे कस्टम Python लॉजिक, मल्टी-इमेज कंडीशनिंग, और हमारे Gradio UI में बिना अतिरिक्त कोड के प्लग हो जाता है।
- VRAM पर नियंत्रण: 4-बिट वेट्स, FP16/BF16 की तुलना में पैरामीटर मेमोरी को लगभग 3 से 4 गुना कम करते हैं, जिससे हम आराम से चला सकते हैं:
- 3×3 इमेज बैच
- 20–30 डिफ्यूज़न स्टेप्स
- 512×384–768×512 जैसी मीडियम-टू-हाई रेज़ोल्यूशन एक सिंगल A100 पर, बिना आउट-ऑफ-मेमोरी (OOM) एरर्स के।
- तेज़ इटरेशन: चूँकि मॉडल हल्का है, हम बार-बार सीड, स्टेप्स, गाइडेंस, ग्रिड साइज, और रेज़ोल्यूशन में बदलाव कर सकते हैं और वार्डरोब ग्रिड को रीजनरेट कर सकते हैं।
- इंटरैक्टिव ग्रिड्स के लिए बढ़िया गुणवत्ता: Dev रूप में भी, मॉडल ने दिखाया है कि यह सुसंगत लाइटिंग और विश्वसनीय फैब्रिक के साथ स्टूडियो-क्वालिटी फैशन शॉट्स पैदा कर सकता है, जो 3×3 आउटफिट ग्रिड्स के लिए बिल्कुल वही है जो हम चाहते हैं, किसी एक “हीरो” रेंडर की बजाय। बेशक, आपके नतीजे अलग हो सकते हैं, और इस स्तर की गुणवत्ता पाना अक्सर सावधानीपूर्वक प्रॉम्प्ट इंजीनियरिंग, रेफरेंस इमेज की क्यूरेशन (कंसिस्टेंट लाइटिंग/एंगल/बैकग्राउंड), और संभवतः पोस्ट-फिल्टरिंग मांगता है।
संक्षेप में, FLUX.2-Dev (4-बिट) हमें एक इंटरैक्टिव कैप्सूल वार्डरोब टूल के लिए मेमोरी, गति, और गुणवत्ता का बेहतरीन मेल देता है।
Flux 2 डेमो ओवरव्यू: Capsule Wardrobe Visualizer
इस भाग में, हम Gradio एप्लिकेशन में लिपटे FLUX 2 मॉडल के साथ एक कैप्सूल वार्डरोब विज़ुअलाइज़र लागू करेंगे। उच्च स्तर पर, ऐप तीन काम करता है:
- यह कई वार्डरोब इमेज को रेफरेंस के रूप में लेता है।
- एक संरचित प्रॉम्प्ट बनाता है जो FLUX.2-dev को निर्दिष्ट आइटम्स का उपयोग करते हुए फुल-बॉडी फैशन फ़ोटो बनाने का निर्देश देता है।
- प्रत्येक टाइल में वस्तुओं को रैंडम तरीके से जोड़कर आउटफिट्स का ग्रिड जनरेट करता है, जिसमें ग्रिड साइज (पंक्तियाँ × कॉलम), डिफ्यूज़न स्टेप्स, और गाइडेंस स्केल बदलते हैं।
नीचे दिए गए वीडियो में, आप वर्कफ़्लो का संक्षिप्त संस्करण देख सकते हैं। डेमो के लिए वीडियो की गति बढ़ाई गई है (वास्तविक जेनरेशन प्रक्रिया में कई मिनट लग सकते हैं):
चरण 1: एनवायरनमेंट सेटअप
सबसे पहले, GitHub से नवीनतम diffusers लाइब्रेरी और अन्य निर्भरताएँ इंस्टॉल करें।
!pip install -q "git+https://github.com/huggingface/diffusers.git@main" \
"transformers>=4.44.0" accelerate safetensors bitsandbytes gradio pillow
इसके बाद Hugging Face में लॉग इन करें ताकि आप 4-बिट FLUX.2-dev वेट्स पुल कर सकें:
from huggingface_hub import login
login()
निर्देश मिलने पर HF टोकन पास करें और मॉडल पुल करने के लिए HF में लॉग इन करें। फिर एक त्वरित sanity चेक करें कि CUDA उपलब्ध है या नहीं और हम किस GPU पर हैं:
import torch, diffusers, bitsandbytes as bnb
print("diffusers:", diffusers.__version__)
print("CUDA available:", torch.cuda.is_available())
!nvidia-smi
यदि आप nvidia-smi आउटपुट में अपना GPU देखते हैं और CUDA available: True है, तो आप तैयार हैं।
चरण 2: FLUX.2-dev(4-बिट) मॉडल
अब हम diffusers/FLUX.2-dev-bnb-4bit रिपॉजिटरी से 4-बिट FLUX.2-dev कॉम्पोनेंट्स लोड करेंगे।
from diffusers import Flux2Pipeline, Flux2Transformer2DModel
from transformers import Mistral3ForConditionalGeneration
import torch
bnb_repo = "diffusers/FLUX.2-dev-bnb-4bit"
torch_dtype = torch.bfloat16
device = "cuda"
print("Loading 4-bit transformer...")
transformer = Flux2Transformer2DModel.from_pretrained(
bnb_repo,
subfolder="transformer",
torch_dtype=torch_dtype,
device_map="auto",
)
print("Loading 4-bit text encoder...")
text_encoder = Mistral3ForConditionalGeneration.from_pretrained(
bnb_repo,
subfolder="text_encoder",
torch_dtype=torch_dtype,
device_map="auto",
)
print("Building Flux2 pipeline...")
pipe = Flux2Pipeline.from_pretrained(
bnb_repo,
transformer=transformer,
text_encoder=text_encoder,
torch_dtype=torch_dtype,
).to(device)
pipe.set_progress_bar_config(disable=False)
print("Loaded. Example param device:", next(pipe.transformer.parameters()).device)
एक बार निर्भरताएँ इंस्टॉल हो जाने के बाद, हम diffusers लाइब्रेरी का उपयोग करके FLUX.2 लोड कर सकते हैं और इसे transformers से Mistral 3 टेक्स्ट एनकोडर के साथ पेयर कर सकते हैं। कोड में यह इस प्रकार दिखता है:
Flux2Transformer2DModel: यह डी-नॉइज़िंग प्रक्रिया के लिए जिम्मेदार कोर U-Net जैसे ट्रांसफॉर्मर है और 4-बिट क्वांटाइज़्ड रूप में लोड होता है।Mistral3ForConditionalGeneration: यह मॉडल टेक्स्ट एनकोडर के रूप में उपयोग होता है, जो आपके टेक्स्ट प्रॉम्प्ट को डिफ्यूज़न प्रक्रिया के लिए कंडीशनिंग सिग्नल्स में बदलता है।Flux2Pipeline: यह पाइपलाइन ट्रांसफॉर्मर, टेक्स्ट एनकोडर, और सपोर्टिंग कॉम्पोनेंट्स को एक एकल, कॉल करने योग्य इंटरफ़ेस में संयोजित करती है ताकि इमेज जेनरेशन हो सके।
device_map="auto" और torch_dtype=torch.bfloat16 का उपयोग विभिन्न GPU सेटअप्स पर चीज़ों को लचीला रखते हुए मेमोरी-इफिशिएंट बनाए रखता है।
चरण 3: इमेजेस का प्रीप्रोसेसिंग
ऐप उपयोगकर्ताओं को कई वार्डरोब इमेज अपलोड करने देता है। हमें कुछ यूटिलिटीज़ चाहिए:
- Gradio फ़ाइल ऑब्जेक्ट्स को PIL Images में बदलना
- उन्हें कंडीशनिंग के लिए प्रबंधनीय आकार में रिज़ाइज़ करना
import gradio as gr
import random, json
from typing import List, Union
from PIL import Image
MAX_REFS = 10
def files_to_pil(files: List[Union[str, dict]]) -> List[Image.Image]:
images = []
for f in files:
path = f.get("name") if isinstance(f, dict) else f
if not path:
continue
img = Image.open(path).convert("RGB")
images.append(img)
return images
def preprocess_refs(refs: List[Image.Image], max_size: int = 512) -> List[Image.Image]:
processed = []
for img in refs:
img = img.convert("RGB")
img.thumbnail((max_size, max_size), Image.LANCZOS)
processed.append(img)
return processed
ऊपर दिए गए कोड में दो प्रमुख हेल्पर फ़ंक्शंस परिभाषित हैं।
files_to_pil()फ़ंक्शन Gradio द्वारा लौटाए गए फ़ाइल ऑब्जेक्ट्स को लेता है, उनके पथ निकालता है, और प्रत्येक फ़ाइल को RGBPIL.Imageके रूप में खोलता है।preprocess_refs()फ़ंक्शन इन इमेजेस को उनका आस्पेक्ट रेशियो बनाए रखते हुए अधिकतम 512 × 512 के आकार में रिज़ाइज़ करता है, जो गति और मेमोरी उपयोग दोनों के लिए महत्वपूर्ण है।
इसके अलावा, हम कंडीशनिंग सेट को ओवरलोड होने से बचाने के लिए MAX_REFS = 10 के साथ रेफरेंस इमेज की संख्या सीमित करते हैं।
चरण 4: आउटफिट प्रॉम्प्ट
एक सिंगल फ्लैट टेक्स्ट प्रॉम्प्ट भेजने के बजाय, मैंने एक संरचित JSON-जैसा प्रॉम्प्ट बनाया है जो वर्णन करता है:
- स्टूडियो सेटिंग
- सब्जेक्ट और पोज़
- आउटफिट पीसेज़ (रेफरेंस इमेज से जुड़े)
- लाइटिंग, मूड, और कैमरा जानकारी
def build_outfit_prompt(outfit_indices: List[int], labels: List[str]) -> str:
item_phrases = [
f"{labels[idx]} from reference image {idx+1}" for idx in outfit_indices
]
outfit_items_str = ", ".join(item_phrases)
mistral_prompt = """A professional full-body studio photograph of a high-end fashion editorial shoot, set against a flawless seamless neutral gray backdrop (#f5f5f5) in a controlled studio environment. The scene is bathed in soft, diffused three-point lighting (key, fill, and subtle rim) that eliminates harsh shadows, ensuring even illumination across the subject while preserving dimensionality and texture.
At the center of the frame stands a full-body adult model, exuding quiet confidence in a relaxed yet poised stance—one foot slightly forward, weight balanced, body angled subtly to the right. The model’s expression is natural, with a neutral gaze directed just off-camera, evoking a modern, minimalist lookbook aesthetic.
The outfit—meticulously styled and tailored—is the focal point, captured with ultra-realistic 8K resolution and razor-sharp detail. Fabrics display tactile depth: the weave of knits, the drape of silks, the sheen of leathers, and the crispness of cotton are all rendered with commercial-grade precision. The shallow depth of field (50mm prime lens, f/2.8) keeps the subject in crystalline focus while softly blurring the backdrop, emphasizing the outfit’s textures and proportions.
The composition adheres to classic fashion photography rules: vertical framing, ample headroom, and a slightly dynamic angle (eye-level) that flatters the model’s posture. The color palette is controlled and sophisticated, dominated by the outfit’s hues against the neutral gray, with subtle tonal contrasts to highlight layers and accessories.
Every element—from the studio-quality lighting to the catalog-ready styling—conveys luxury, clarity, and commercial appeal, designed to showcase the outfit as a covetable, high-end ensemble."""
prompt_dict = {
"scene": mistral_prompt,
"subjects": [
{
"description": (
"The model is styled in an outfit composed of: "
+ outfit_items_str
+ ". Each garment should closely match the color, fabric, and key design details of its reference image."
)
}
]
}
return json.dumps(prompt_dict)
build_outfit_prompt() फ़ंक्शन तीन महत्वपूर्ण काम करता है:
- पहले, यह
outfit_indicesऔरlabelsका उपयोग करके ऐसे वाक्यांश बनाता है जैसे "reference image 1 से wardrobe piece 1", जिन्हें इस विशेष आउटफिट के लिए चुने गए परिधानों का वर्णन करने वाले एक सिंगल स्ट्रिंग में जोड़ा जाता है। - दूसरा, यह इन्हें एक नैचुरल-लैंग्वेज mistral_prompt में समाहित करता है जो स्टूडियो एन्वायरनमेंट, लाइटिंग सेटअप, कैमरा लेंस, डेप्थ ऑफ फील्ड इत्यादि को परिभाषित करता है।
- अंत में, हम सब कुछ
sceneऔरsubjectsफ़ील्ड वालेprompt_dictमें लपेटते हैं, फिर उस डिक्शनरी को JSON में सीरियलाइज़ करते हैं ताकि उसे पाइपलाइन को एक सिंगल प्रॉम्प्ट स्ट्रिंग के रूप में पास किया जा सके।
कॉन्सेप्चुअली, हम हर अपलोड की गई वार्डरोब इमेज को “wardrobe piece i” मानते हैं और मॉडल से कहते हैं “wardrobe piece 1, wardrobe piece 3, और wardrobe piece 4 का उपयोग करते हुए एक आउटफिट तैयार करें,” जबकि हर पीस के रंग, फैब्रिक, और प्रमुख डिज़ाइन डिटेल्स को संरक्षित रखें।
नोट: चूँकि हम इस पाइपलाइन में टेक्स्ट एनकोडर के रूप में Mistral मॉडल का उपयोग करते हैं, मैंने Meta प्रॉम्प्टिंग के जरिए लंबे स्टूडियो-वर्णन प्रॉम्प्ट (mistral_prompt) का ड्राफ्ट तैयार करने में भी Mistral का उपयोग किया। इससे शैली उस चीज़ के अनुरूप रहती है जिसकी एनकोडर को “उम्मीद” है, और सीधे कोड में वर्डिंग को ट्यून करना आसान हो जाता है।
चरण 5: वार्डरोब ग्रिड जनरेट करना
डेमो का हृदय capsule_fn है, जो:
- अपलोड की गई इमेजेस और UI पैरामीटर्स लेता है
- प्रत्येक टाइल के लिए वार्डरोब पीसेज़ के सबसेट्स को रैंडम तरीके से चुनता है
- फिर, कई इमेज जनरेट करने के लिए FLUX.2-dev पाइपलाइन को कॉल करता है
- अंततः, उन्हें एक सिंगल ग्रिड में संयोजित करता है
def make_grid(images: List[Image.Image], rows: int, cols: int) -> Image.Image:
w, h = images[0].size
grid = Image.new("RGB", (cols * w, rows * h), (255, 255, 255))
for idx, img in enumerate(images):
r, c = divmod(idx, cols)
grid.paste(img, (c * w, r * h))
return grid
def capsule_fn(files, rows, cols, height, width, steps, guidance, seed):
if not files or len(files) < 2:
return None
images = files_to_pil(files)
images = images[:MAX_REFS]
refs = preprocess_refs(images, max_size=512)
labels = [f"wardrobe piece {i+1}" for i in range(len(refs))]
random.seed(int(seed))
tiles = []
num_tiles = rows * cols
for i in range(num_tiles):
k = min(len(refs), random.randint(2, 3))
outfit_idxs = random.sample(range(len(refs)), k=k)
prompt = build_outfit_prompt(outfit_idxs, labels)
generator = torch.Generator(device=device).manual_seed(int(seed) + i)
out = pipe(
prompt=prompt,
image=refs,
height=height,
width=width,
num_inference_steps=steps,
guidance_scale=guidance,
generator=generator,
)
tiles.append(out.images[0])
grid = make_grid(tiles, rows, cols)
return grid
ऊपर दिए गए दो फ़ंक्शंस कैप्सूल वार्डरोब डेमो के कोर इंजन का निर्माण करते हैं।
make_grid()फ़ंक्शन पंक्तियाँ × कॉलम लेआउट के लिए पर्याप्त बड़ा एक खाली कैनवस बनाता है, फिर प्रत्येक जेनरेटेड आउटफिट इमेज को सही स्थान पर पेस्ट करता है, और एक सिंगल ग्रिड इमेज तैयार करता है।capsule_fn()फ़ंक्शन उपयोगकर्ता की वार्डरोब इमेजेस को रेफरेंस के रूप में तैयार करता है, प्रति टाइल 2–3 पीसेज़ को रैंडम चुनता है, एक संरचित आउटफिट प्रॉम्प्ट बनाता है, और चुनी गई रेज़ोल्यूशन, स्टेप्स, गाइडेंस, और सीड के साथ FLUX.2 पाइपलाइन को कॉल करता है। यह सभी जेनरेटेड टाइल्स इकट्ठा करता है औरmake_grid()फ़ंक्शन को पास करता है, ताकि उपयोगकर्ता को मिक्स-एंड-मैच आउटफिट्स का अंतिम ग्रिड दिखे।
चरण 6: Gradio UI
यह चरण कैप्सूल वार्डरोब इंजन को Gradio ऐप से जोड़ता है। उपयोगकर्ता वार्डरोब इमेज अपलोड करता है, ग्रिड और जेनरेशन सेटिंग्स चुनता है, और बदले में एक संयुक्त आउटफिट ग्रिड प्राप्त करता है।
inputs = [
gr.File(file_types=["image"], file_count="multiple", label="Wardrobe pieces (2–10 images)"),
gr.Slider(1, 4, value=2, step=1, label="Grid rows"),
gr.Slider(1, 4, value=2, step=1, label="Grid cols"),
gr.Slider(384, 896, value=512, step=64, label="Image height"),
gr.Slider(256, 640, value=384, step=64, label="Image width"),
gr.Slider(10, 30, value=16, step=2, label="Diffusion steps"),
gr.Slider(1.0, 7.0, value=2.5, step=0.5, label="Guidance scale"),
gr.Number(value=42, precision=0, label="Seed")
]
iface = gr.Interface(
fn=capsule_fn,
inputs=inputs,
outputs=gr.Image(type="pil", label="Capsule wardrobe grid"),
title="Capsule Wardrobe Visualizer – FLUX.2-dev (4-bit)",
description="Upload 2–10 product images; mix & match outfits using FLUX.2-dev with multi-image reference.",
)
iface.launch(share=True, debug = True)
हम Gradio ऐप इस प्रकार बनाते हैं:
- इनपुट्स लिस्ट ऐप के सभी इंटरैक्टिव कंट्रोल्स को परिभाषित करती है। वार्डरोब पीसेज़ इनपुट 2–10 कपड़ों या प्रोडक्ट शॉट्स के लिए मल्टी-फ़ाइल अपलोड है, जबकि rows और cols स्लाइडर्स ग्रिड का आकार सेट करते हैं और इस प्रकार प्रति बैच जनरेट होने वाले आउटफिट्स की संख्या तय होती है।
- इमेज हाइट और इमेज विड्थ स्लाइडर्स प्रत्येक टाइल के रेज़ोल्यूशन को नियंत्रित करते हैं; उच्च मान अधिक VRAM और समय लेते हैं।
- वहीं डिफ्यूज़न स्टेप्स स्लाइडर तय करता है कि मॉडल कितने डी-नॉइज़िंग स्टेप्स चलाए (16–24 अच्छा डिफॉल्ट है), और गाइडेंस स्केल नियंत्रित करता है कि मॉडल टेक्स्ट प्रॉम्प्ट बनाम रेफरेंसेज़ का कितना कड़ाई से पालन करे।
gr.Interfaceकॉल इन इनपुट्स कोcapsule_fnफ़ंक्शन से जोड़ता है और एकलgr.Imageआउटपुट घोषित करता है।launch(share=True, debug=True)कॉल Gradio सर्वर शुरू करता है, डेमो के लिए एक पब्लिक शेयर करने योग्य लिंक एक्सपोज़ करता है, और कंसोल में डिबग लॉगिंग सक्षम करता है ताकि किसी भी समस्या का निदान करने में मदद मिले।
इंटरफ़ेस लाइव होने के बाद:
- कपड़ों के कुछ आइटम अपलोड करें (जैसे, 2 शर्ट, 2 पैंट, 1 जैकेट, 1 जोड़ी जूते)।
- 3x3 या 2x2 ग्रिड, 512x384 रेज़ोल्यूशन, ~20 स्टेप्स, और 2.5 गाइडेंस चुनें।
- "Submit" पर क्लिक करें और एडिटोरियल-स्टाइल इमेजेस से ग्रिड को भरते देखें।

Flux 2 उदाहरण और प्रेक्षण
यह समझने के लिए कि व्यवहार में FLUX.2-dev कैसा बर्ताव करता है, मैंने अंतिम ऐप के साथ कुछ छोटे प्रयोग चलाए। मैंने डिफ्यूज़न स्टेप्स और गाइडेंस स्केल में बदलाव किया, और यह भी आज़माया कि एक ही परिधान की कई इमेज और हर यूनिक परिधान की एक-एक इमेज के साथ मॉडल कितना वैरायटी पैदा करता है।
- डिफ्यूज़न स्टेप्स और गाइडेंस मुख्यतः गति और शार्पनेस को प्रभावित करते हैं, मेमोरी को नहीं। 28 से 30 स्टेप्स और 2.5 से 5.0 गाइडेंस बढ़ाने पर VRAM उपयोग लगभग समान रहता है, लेकिन हर बैच थोड़ा धीमा होता है और आउटफिट्स और अधिक क्रिस्प हो जाते हैं। हालांकि, सैद्धांतिक रूप से उच्च स्टेप काउंट (जैसे 50) ग्रिड के लुक को स्पष्ट रूप से बदल सकता है और अधिक लेटेंसी के साथ उच्च गुणवत्ता आउटपुट दे सकता है।
- A100 पर, 4-बिट बहुत कम्फ़र्टेबल डिफॉल्ट लगता है। 4-बिट FLUX.2-dev चेकपॉइंट के साथ, ~20–28 स्टेप्स पर 512x384 की 3x3 ग्रिड्स सिंगल-GPU डेमो के लिए तेज़ और सुरक्षित महसूस होती हैं। यदि आपके पास H100 है और आप इसके बजाय मूल (नॉन-क्वांटाइज़्ड) चेकपॉइंट लोड कर सकते हैं, तो अक्सर आप समान लेटेंसी पर उच्च इमेज गुणवत्ता प्राप्त कर सकते हैं। बेशक, VRAM और बैच साइज पर निर्भर करते हुए आपका वास्तविक अनुभव भिन्न हो सकता है।
उदाहरण 1: एक ही परिधान के कई व्यूज़ के साथ डिफॉल्ट सेटिंग्स
मैंने पहले एक ही आउटफिट की अलग-अलग एंगल्स से ली गई कई इमेज अपलोड कीं, डिफॉल्ट डिफ्यूज़न स्टेप्स और मध्यम गाइडेंस रखा। मॉडल ने सुसंगत स्टूडियो लाइटिंग और फैब्रिक डिटेल्स के साथ, ऐसे आउटफिट्स बनाए जो एक ही कैप्सूल सेट के वैरिएशंस जैसे लगे।

उदाहरण 2: एक ही परिधान के कई व्यूज़ के साथ उच्च डिफ्यूज़न स्टेप्स
इसके बाद, मैंने वही रेफरेंस इमेज रखीं लेकिन डिफ्यूज़न स्टेप्स को 28 तक बढ़ाया (और गाइडेंस थोड़ा समायोजित किया)। ग्रिड कुछ और शार्प और पॉलिश्ड हो गया, पर अभी भी वही कोर परिधानों को पुनर्संयोजित करने पर केंद्रित रहा। समझौता यह था कि प्रति बैच जेनरेशन समय में थोड़ा लेकिन ध्यान देने योग्य इज़ाफ़ा हुआ।

प्रयोग 3: प्रत्येक यूनिक परिधान के लिए एक इमेज
अंत में, मैंने प्रत्येक विशिष्ट परिधान के लिए एक-एक प्रोडक्ट शॉट अपलोड किया और एक और 3x3 ग्रिड जनरेट किया। नतीजे में आने वाले आउटफिट्स सेल्स में कहीं अधिक विविध थे, जो अलग-अलग टॉप्स और बॉटम्स को रोचक तरीकों से मिलाते थे। कुछ रिपीटेशन फिर भी दिखा, पर कुल मिलाकर ग्रिड एक वास्तविक कैप्सूल वार्डरोब के और करीब लगा, जिसमें एक ही सीड और सेटिंग्स पर अधिक विविध कॉम्बिनेशन थे।


निष्कर्ष
4-बिट रूप में FLUX.2-dev इमेज एप्लिकेशन्स के लिए एक बढ़िया मॉडल है। इस ट्यूटोरियल में, हमने diffusers के साथ 4-बिट FLUX.2-dev पाइपलाइन सेटअप की, एक मल्टी-इमेज रेफरेंस वर्कफ़्लो बनाया जो वार्डरोब पीसेज़ को कंडीशनिंग हिंट्स के रूप में लेता है, और सब कुछ Gradio ऐप में रैप किया।
परिणाम एक शक्तिशाली Capsule Wardrobe Visualizer है, जो फैशन ई-कॉमर्स टूलिंग के लिए प्रोटोटाइप के रूप में काम कर सकता है, या बस अपनी अलमारी को खेल-खेल में रीमिक्स करने का तरीका हो सकता है। यहाँ से, आप इसी पाइपलाइन को व्यापक एजेंटिक सिस्टम्स में प्लग कर सकते हैं, जैसे कोई LLM जो ड्रेस कोड या मौसम के आधार पर आउटफिट सुझाए, या इसे किसी वास्तविक प्रोडक्ट कैटलॉग बैकएंड से जोड़ें।
FLUX.2 FAQs
क्या मैं Mistral टेक्स्ट एनकोडर पर लोकल निर्भर हुए बिना FLUX.2-Dev (4-बिट) पाइपलाइन का उपयोग कर सकता/सकती हूँ?
हाँ। FLUX.2, Hugging Face की टेक्स्ट-एनकोडर सेवा के जरिए रिमोट टेक्स्ट-एनकोडिंग सपोर्ट करता है, जो VRAM उपयोग को उल्लेखनीय रूप से कम कर सकता है। Mistral3ForConditionalGeneration को लोकली लोड करने के बजाय, आप रिमोट एनकोडर से प्राप्त prompt_embeds पास कर सकते हैं। यह कम-VRAM GPUs (जैसे, RTX 4090 या मोबाइल GPUs) के लिए उपयोगी है।
बेहतर नतीजों के लिए मुझे अपनी वार्डरोब रेफरेंस फ़ोटो कैसे फॉर्मेट या तैयार करनी चाहिए?
हालाँकि मॉडल मनमाने इमेज स्वीकार करता है, नतीजे बेहतर होते हैं जब:
- कपड़ों की फ़ोटो साफ़ पृष्ठभूमि पर हों
- इमेज अच्छी तरह रोशन और मोटे तौर पर फ्रंट-फेसिंग हों
- परिधान भारी रूप से ओक्लूडेड न हों
- सभी आइटम का फ्रेमिंग समान हो (जैसे, केंद्रित प्रोडक्ट शॉट्स)
क्या FLUX.2 यह सुनिश्चित कर सकता है कि आउटफिट्स में हमेशा एक टॉप, एक बॉटम, और एक जोड़ी जूते शामिल हों?
डिफॉल्ट रूप से नहीं। जब तक आप अपने ऐप में उन्हें स्पष्ट रूप से एन्कोड नहीं करते और चयन लॉजिक लागू नहीं करते, मॉडल “परिधान कैटेगरीज़” नहीं समझता।
आप संरचना लागू कर सकते हैं:
- ऐसे लेबल्स का उपयोग करके जैसे “reference image 1 से top”, “reference image 2 से bottom”
- या
capsule_fnमें रूल-आधारित चयन जोड़कर
जेनरेटेड इमेज में परिधान आपस में ब्लेंड या मॉर्फ होने से कैसे रोकें?
मल्टी-इमेज रेफरेंस मोड्स में आइटम्स आपस में ब्लेंड हो सकते हैं, अगर:
- परिधान एक जैसे दिखते हों,
- आप बहुत सारे रेफरेंस पास करते हैं (8–10),
- या आपका प्रॉम्प्ट बहुत अस्पष्ट है। ब्लेंडिंग कम करने के लिए:
- प्रति टाइल कम रेफरेंस इमेज का उपयोग करें (अधिकतम 2–3)।
- प्रॉम्प्ट को “clearly distinct layers”, “no blending”, “preserve silhouette” जैसे वर्णनों से मजबूत करें।
- सुनिश्चित करें कि रेफरेंस फ़ोटो आकार/रंग में स्पष्ट रूप से भिन्न हों।
कितनी रेफरेंस इमेज FLUX.2 असल में संभाल सकता है, इससे पहले कि गुणवत्ता गिरे?
FLUX.2 10 तक रेफरेंस इमेज सपोर्ट करता है, लेकिन गुणवत्ता रैखिक रूप से स्केल नहीं होती। व्यवहार में:
- 1–4 रेफरेंस → हर आइटम के प्रति मजबूत फिडेलिटी
- 5–7 रेफरेंस → फाइन-डिटेल मैचिंग में कुछ कमजोरी
- 8–10 रेफरेंस → ब्लेंडिंग या अस्पष्ट आइटम सीमाओं का अधिक जोखिम
यह इसलिए है क्योंकि FLUX का मल्टी-इमेज कंडीशनिंग ब्लॉक विज़ुअल एम्बेडिंग्स को डीनॉइज़िंग ट्रांसफॉर्मर में फ्यूज़ करता है। जितनी अधिक एम्बेडिंग्स आप पास करते हैं, ट्रांसफॉर्मर को उतने ही अधिक प्रतिस्पर्धी स्पैशियल और स्टाइल संकेतों को सुलझाना पड़ता है।
मैं एमएल (Gen AI) में Google Developers Expert, Kaggle 3x Expert, और Women Techmakers एंबेसडर हूँ, तथा तकनीक क्षेत्र में 3+ वर्षों का अनुभव रखती हूँ। मैंने 2020 में एक हेल्थ-टेक स्टार्टअप की सह-स्थापना की और वर्तमान में Georgia Tech से कंप्यूटर विज्ञान में मास्टर कर रही हूँ, जिसमें मेरा विशेषज्ञता क्षेत्र मशीन लर्निंग है।

