Flux 2 Klein के लिए शुद्ध C-आधारित inference
(github.com/antirez)- FLUX.2-klein-4B मॉडल का उपयोग करके टेक्स्ट या इमेज इनपुट से इमेज जनरेट करने वाला शुद्ध C implementation
- बिना किसी external dependency के चलता है, और वैकल्पिक BLAS या Metal acceleration के जरिए अधिकतम 30 गुना तक speed-up संभव
- Qwen3-4B text encoder built-in है, इसलिए अलग embedding calculation process की ज़रूरत नहीं
- Text-to-image और image-to-image transformation दोनों को support करता है, साथ ही command-line interface और C library API भी देता है
- Python runtime या PyTorch के बिना भी चल सकता है, इसलिए lightweight inference environments और open source AI accessibility बढ़ाने के लिहाज़ से महत्वपूर्ण
प्रोजेक्ट अवलोकन
- FLUX.2-klein-4B Black Forest Labs का एक image generation model है, जो text prompt या existing image को input लेकर नई image बनाता है
- पूरा code केवल standard C library से लिखा गया है, और वैकल्पिक रूप से MPS(Apple Metal) तथा BLAS(OpenBLAS) acceleration को support करता है
- मॉडल को HuggingFace से लगभग 16GB आकार में डाउनलोड किया जा सकता है, और इसके components हैं VAE(300MB), Transformer(4GB), Qwen3-4B encoder(8GB), और Tokenizer
मुख्य फीचर्स
- Zero dependencies: बाहरी libraries के बिना standalone execution संभव
- BLAS उपयोग करने पर लगभग 30 गुना speed-up, macOS पर Apple Accelerate और Linux पर OpenBLAS उपलब्ध
- Metal GPU acceleration: Apple Silicon environment में अपने-आप सक्रिय
- Text-to-image: text prompt से image generation
- Image-to-image: existing image को prompt के अनुसार transform करना
- Integrated text encoder: Qwen3-4B encoder built-in, external embedding की ज़रूरत नहीं
- Memory efficient: encoding के बाद encoder memory अपने-आप release हो जाती है, लगभग 8GB की बचत
उपयोग उदाहरण
- टेक्स्ट से इमेज जनरेशन
./flux -d flux-klein-model -p "A fluffy orange cat sitting on a windowsill" -o cat.png - इमेज ट्रांसफ़ॉर्मेशन
./flux -d flux-klein-model -i photo.png -o painting.png -p "oil painting style" -t 0.7-tमान transformation strength को control करता है; 0.0 पर मूल image बनी रहती है, 1.0 पर पूरी तरह से regenerate होती है
मॉडल संरचना और प्रदर्शन
- Transformer: 5 double blocks और 20 single blocks, 3072 hidden dimensions, 24 attention heads
- VAE: AutoencoderKL, 128 latent channels, 8x spatial compression
- Text Encoder: Qwen3-4B, 36 layers, 2560 hidden dimensions
- Inference steps: 4-step sampling से high-quality results
- Memory requirements
- text encoding: लगभग 8GB
- diffusion: लगभग 8GB
- peak maximum: 16GB (encoder release होने से पहले)
- Performance benchmark (Apple M3 Max, 128GB RAM)
- 512×512: MPS 49.6 सेकंड, BLAS 51.9 सेकंड, PyTorch MPS 5.4 सेकंड
- 256×256: MPS 32.4 सेकंड, BLAS 29.7 सेकंड, PyTorch MPS 3.0 सेकंड
- 64×64: MPS 25.0 सेकंड, BLAS 23.5 सेकंड, PyTorch MPS 2.2 सेकंड
- शुद्ध C backend बहुत धीमा है और केवल testing के लिए उपयुक्त है
बिल्ड और रन
- backend चयन
make mps: macOS Apple Silicon (सबसे तेज)make blas: Intel Mac या Linux (OpenBLAS आवश्यक)make generic: शुद्ध C, बिना dependency (धीमा)
- मॉडल डाउनलोड
pip install huggingface_hub python download_model.py - output resolution अधिकतम 1024×1024, न्यूनतम 64×64, और 16 के गुणज की अनुशंसा
C लाइब्रेरी API
- मॉडल लोड और मुक्त करना
flux_load_dir(path)/flux_free(ctx)
- इमेज जनरेशन और ट्रांसफ़ॉर्मेशन
flux_generate(ctx, prompt, params)flux_img2img(ctx, prompt, input, params)
- इमेज input/output
flux_image_load(path)/flux_image_save(img, path)
- यूटिलिटी
flux_set_seed(seed)से reproducibility सुनिश्चितflux_get_error()से error message की जाँचflux_release_text_encoder(ctx)से memory को manually release किया जा सकता है
लाइसेंस और अन्य जानकारी
- MIT लाइसेंस के तहत जारी
- repository language composition: C 93.9%, Objective-C 3.5%, Makefile 1.7%, Python 0.9%
- 446 stars और 20 forks के साथ community की सक्रिय रुचि
1 टिप्पणियां
Hacker News टिप्पणियाँ
यह प्रोजेक्ट संभव हो पाया क्योंकि Opus को IMPLEMENTATION_NOTES.md फ़ाइल का ज़रूर उपयोग करने के लिए कहा गया था
डेवलपमेंट के दौरान मिली हर बात को इस फ़ाइल में जोड़ते रहना, इसे हमेशा up-to-date रखना, और context compression के बाद तुरंत प्रोसेस करना स्पष्ट रूप से तय किया गया था
इस तरीके की वजह से बड़े coding काम को efficiently आगे बढ़ाते हुए भी flow नहीं टूटा
अधिक जानकारी के लिए GitHub की IMPLEMENTATION_NOTES.md फ़ाइल देखें
मैंने vibe-speccing लेख में इस approach पर बात की है
spec के नीचे “experiment log” रखना भी उपयोगी रहा, ताकि हर unexpected बदलाव को दर्ज किया जा सके
यह भी जानना दिलचस्प होगा कि benchmark चलाए गए या नहीं। Python stack, C-आधारित inference tool से तेज़ है या धीमा, यह भी रोचक है
लंबे समय से प्रशंसक होने के नाते, ऐसे tools के उपयोग पर आपका perspective सुनना चाहूँगा
मैं आपका workflow सीखना चाहता हूँ
मैं Beads का उपयोग कर रहा हूँ, और खासकर बड़े projects में output quality निश्चित रूप से बेहतर होती है
README में motivation को दिलचस्पी से पढ़ा
मैं भी इसी तरह PROMPTS.md फ़ाइल शामिल करने की कोशिश कर रहा हूँ
sharing और education के उद्देश्य से, experienced developer कौन-सा approach अपनाता है यह दिखाना मददगार होता है
Claude hook का उपयोग करके इसे deterministic रखा जा सकता है। AGENTS.md में मैंने इसे read-only बताया है
अलग-अलग LLM के बीच switch करते समय task background पहुँचाने में भी यह उपयोगी रहा
आखिरकार prompt ऐसे interactions का कुल योग होता है, इसलिए उसे अर्थपूर्ण ढंग से फिर से बनाना बहुत कठिन है
LLM का उपयोग करके दूसरी भाषा में transpile करने वाले प्रयोग के बारे में, नतीजे और प्रक्रिया कैसी रही यह जानना चाहूँगा
मैंने भी हाल में एक project bottleneck को Claude से “इसे Rust में फिर से लिखो” कहा था, और speed काफी बढ़ गई
लेकिन output अभी भी lab के बाहर भरोसे लायक स्तर का नहीं था
मुख्य बात यह है कि agent feedback के ज़रिए समझ सके कि प्रगति हो रही है या नहीं, और reference implementation से तुलना करते हुए debug कर सके
सारा code उन implementation hints के आधार पर लिखा गया था जिनमें मैंने वांछित परिणाम स्पष्ट किए थे
आज किसी ने मेरे HNSW vectorset implementation को Swift में port किया, और वही license होने से अच्छा लगा
Claude द्वारा generate किया गया code मैं GPT-5.x-Codex से फिर से check कराता हूँ
Opus 4.5 अब भी off-by-one जैसी गलतियाँ करता है, इसलिए किसी दूसरे model को peer reviewer की तरह उपयोग करना प्रभावी है
मेरा validation क्रम है: lint → test → दूसरा model → मैं
मूल FLUX.2 [klein] model और Python code सिर्फ 3 दिन पहले ही जारी किए गए थे
संबंधित चर्चा यहाँ देखें
सिर्फ C में लिखा होने का मतलब यह नहीं कि वह ज़रूर C-level performance देगा
benchmark के अनुसार यह PyTorch से 8 गुना धीमा है। इस स्तर का high-performance code LLM से बनवाने में अभी सीमाएँ हैं
धीमे होने का कारण LLM code quality नहीं बल्कि hardware difference है
असली core operations वास्तव में PyTorch जैसी ही kernel libraries को call करते हैं
कई प्रयासों और benchmark को दोहराकर तेज़ी से सुधार किया जा सकता है, और कभी-कभी torch की मज़बूत baseline से भी आगे निकला जा सकता है
मेरी समझ से यह Salvatore का ML क्षेत्र में पहला OSS project है, तो जानना चाहूँगा कि उन्होंने संबंधित background knowledge कैसे बनाया
यह भी जानना चाहता हूँ कि क्या Claude ने domain expertise देने में मदद की
मैं इतालवी भाषा में एक AI YouTube channel भी चलाता हूँ, जहाँ papers पढ़कर समझाता हूँ
2003 में मैंने अपना पहला neural network implementation बनाया था, और उसके बाद भी PyTorch या C में छोटे GPT models के साथ प्रयोग करता रहा हूँ
Redis Vector Sets पर काम करते समय मैंने कई embedding models के साथ काम किया
Claude की वजह से implementation की रफ़्तार तेज़ हुई, लेकिन बुनियादी concepts पहले से पता थे
सिर्फ programming background हो और AI का अनुभव बहुत कम हो, तब भी यह संभव हो सकता है, लेकिन ज़्यादा back-and-forth feedback की ज़रूरत पड़ेगी
पिछले महीने मैंने इसी तरह के प्रयोग में Qwen 3 Omni को llama.cpp में port किया था
GGUF conversion, quantization, और input/output modalities को एक हफ्ते में implement किया, लेकिन PR reject हो गया
संबंधित links: PR #18404, Hugging Face model
जो लोग manually kernels लिखते हैं, वे अगर model को सही तरह guide करें तो शानदार नतीजे पा सकते हैं
अगर यह रुझान जारी रहा, तो और तेज़ और बेहतर llama.cpp fork सामने आएँगे
यह दिलचस्प है कि OpenBLAS और MPS लगभग एक जैसी speed देते हैं
README में लिखा है कि GPU का उपयोग सिर्फ MPS करता है
अगर मैं Claude से यही काम कराऊँ, तो क्या MIT license लगाकर उस पर अपना नाम लिख सकता हूँ?
संदर्भ के लिए, Flux2 Apache License का उपयोग करता है
बड़ा अंतर तो नहीं है, लेकिन ऐसी license details ध्यान खींचती हैं
लेकिन उसका मतलब तभी है जब वह वास्तव में ठीक से काम भी करे
मैं C अच्छी तरह नहीं जानता और मुख्यतः SQL-आधारित analysis करता हूँ, तो जानना चाहता हूँ कि यह code production-grade है या नहीं
अक्सर सुनता हूँ कि LLM द्वारा बनाया गया code maintain करना कठिन होता है
data science tasks में performance कभी-कभी inconsistent रहती है, लेकिन अगर problem definition और input information साफ़ दी जाए, तो अच्छे नतीजे मिल सकते हैं