अंग्रेज़ी से अनुवादित। मूल पेज देखें
iPhone पर Apple MLX के साथ Kokoro-82M कैसे चलता है
“डिवाइस पर” कहने से यह पता नहीं चलता कि मॉडल असल में कहाँ चलता है। यहाँ एक ऐप की पूरी पाइपलाइन है — CPU पर eSpeak NG, MLX के ज़रिए Apple silicon GPU पर 82 मिलियन पैरामीटर वाला नेटवर्क, और 24 kHz ऑडियो — और इस चुनाव की एक कीमत।
· अपडेट: · mazzzystar · 10 मिनट में पढ़ें
iPhone पर Apple MLX के साथ Kokoro-82M कैसे चलता है, यह समझने से पहले एक बात: ऑफ़लाइन स्पीच ऐप की काफ़ी App Store लिस्टिंग पढ़ें, तो फ़ोन पर न्यूरल आवाज़ बनने की तीन अलग-अलग व्याख्याएँ मिलती हैं: यह “optimised for the Apple Neural Engine” है, या “an optimised Core ML path” इस्तेमाल करता है, या “on a CPU, no GPU, no cloud call” चलता है। कभी-कभी इनमें से दो एक ही ऐप के बारे में मिल जाती हैं।
ये एक ही बात के अलग नाम नहीं हैं। ये सिलिकॉन के तीन अलग हिस्से हैं, जिनकी नाकामी के तरीके भी तीन अलग हैं, और ऐप इनमें से किसका इस्तेमाल करता है, इससे वे बातें तय होती हैं जिनकी ख़रीदार को सच में परवाह होती है — स्क्रीन लॉक करने पर ऑडियो चलता रहता है या नहीं, कितने पुराने फ़ोन पर यह इंस्टॉल होगा, और डिवाइस कितना गरम होता है। इसलिए यहाँ एक ऐप की पूरी पाइपलाइन है, चरण-दर-चरण, बिना किसी बात को गोल किए।
छोटा जवाब
Sandbook, Kokoro-82M को Apple MLX के ज़रिए, Metal के रास्ते, Apple silicon के GPU पर चलाता है। Neural Engine पर नहीं, Core ML ग्राफ़ पर नहीं, CPU पर ONNX के साथ नहीं। टेक्स्ट की तैयारी और फ़ोनीम बनाने का काम CPU पर होता है; टेक्स्ट एनकोडर से आगे पूरा नेटवर्क GPU का काम है; आउटपुट 24 kHz मोनो ऑडियो है। यही एक चुनाव बताता है कि ऐप किन चीज़ों में अच्छा है और सबसे बड़ी कौन-सी चीज़ यह नहीं कर सकता।
दायरा और स्रोत
यह लेख Sandbook के बारे में है, जो मेरा अपना ऐप है, वर्शन 1.0.2 पर — आँकड़े किसी मार्केटिंग पेज से नहीं, ऐप के जारी बिल्ड से लिए गए हैं। दूसरे ऐप के बारे में बातें उनकी अपनी App Store लिस्टिंग से उद्धृत हैं, जो 14 सितंबर 2026 को पढ़ी गईं। मॉडल के बारे में तथ्य प्रकाशित Kokoro-82M मॉडल कार्ड से हैं, और MLX के बारे में Apple की अपनी रिपॉज़िटरी से; दोनों के लिंक आख़िर में हैं।
iPhone पर मॉडल चलाने की तीन जगहें
Apple silicon चिप में तीन कंप्यूट यूनिट हैं जिन्हें डेवलपर निशाना बना सकता है, और “डिवाइस पर” कहने से यह पता नहीं चलता कि इनमें से किसका इस्तेमाल हो रहा है।
| यूनिट | किसमें अच्छा | दिक्कत |
|---|---|---|
| CPU | कुछ भी, जिसमें ब्रांचिंग, स्ट्रिंग का काम और बदलती लंबाई वाला डेटा शामिल है | घने मैट्रिक्स गणित में प्रति वॉट सबसे धीमा; रियल-टाइम वोकोडर बैटरी और गर्मी की कीमत पर चलेगा |
| GPU (Metal) | घनी समानांतर गणना, जिसमें हर कॉल पर आकार बदलते रहते हैं | काम मेमोरी में रहता है, और ऐप स्क्रीन से हटते ही iOS उसे वापस ले लेता है |
| Neural Engine | तय, कंपाइल किए गए ग्राफ़, बहुत कम बिजली पर | ज़्यादातर स्थिर आकार वाला Core ML मॉडल चाहिए; शेड्यूलिंग OS तय करता है, और हर ऑपरेशन सपोर्टेड नहीं है |
टेक्स्ट टू स्पीच मॉडल इन दोनों के बीच अटपटी जगह पर बैठता है। हर वाक्य में फ़ोनीम की गिनती अलग होती है, और ड्यूरेशन प्रेडिक्टर चलते समय तय करता है कि हर फ़ोनीम को ऑडियो के कितने फ़्रेम मिलें — इसलिए नेटवर्क से गुज़रने वाले आकार तब तक पता नहीं होते जब तक वाक्य पता न हो। कंपाइल किया हुआ, तय आकार वाला पाइपलाइन ऐसे ग्राफ़ के साथ सबसे कम सहज होता है, और GPU पर चलने वाला ऐरे फ़्रेमवर्क इसे साधारण कोड की तरह संभाल लेता है।
फ़ोन के बाहर भी यही तर्क लागू होता है: Kokoro का ब्राउज़र वाला वर्शन WebGPU के ज़रिए कंप्यूटर के ग्राफ़िक्स कार्ड पर मॉडल चलाता है, इसलिए कुछ भी इंस्टॉल करने से पहले आप उसे वहीं सुन सकते हैं।
पाइपलाइन, चरण-दर-चरण
आगे वह क्रम है जो आपके चलाएँ दबाने और पहली आवाज़ आने के बीच होता है।
1. टुकड़े करना — CPU
टेक्स्ट को वाक्य की सीमाओं पर ज़्यादा से ज़्यादा 250 अक्षरों के टुकड़ों में बाँटा जाता है, रेगुलर एक्सप्रेशन से नहीं, बल्कि सिस्टम की अपनी वाक्य-गणना से, ताकि संक्षिप्त रूप और दशमलव बिंदु वाक्य का अंत न बन जाएँ। आगे का हर चरण एक बार में एक टुकड़े पर काम करता है। यहीं पर PDF की टूटी पंक्तियाँ और हाइफ़न से बँटे शब्द भी जोड़े जाते हैं — मॉडल तक पहुँचने से पहले, क्योंकि मॉडल पंक्ति के टूटने और पूर्ण विराम में फ़र्क नहीं कर सकता।
2. फ़ोनीम बनाना — CPU, eSpeak NG
Kokoro अक्षर नहीं, फ़ोनीम पढ़ता है। ऐप में eSpeak NG का एक बिल्ड शामिल है — डाउनलोड के अंदर एक फ़्रेमवर्क — जो यह लेख लिखते समय en-us और en-gb के लिए सेट था, और इसके IPA आउटपुट को उस 178-चिह्न वाली वर्णमाला में बदला जाता है जिस पर मॉडल को ट्रेन किया गया था। आवाज़ों और फ़ोनीम बनाने वाले को आपस में मेल खाना चाहिए, इसीलिए नई भाषा जोड़ने का मतलब दोनों जोड़ना है: 1.0.4 से ऐप आपकी चुनी आवाज़ के साथ eSpeak की भाषा बदलता है, स्पेनिश, फ़्रेंच, इतालवी, ब्राज़ीलियाई पुर्तगाली और हिन्दी के लिए भी।
3. टेक्स्ट एनकोडर — GPU
टोकन ALBERT जैसे ट्रांसफ़ॉर्मर एनकोडर में जाते हैं: 12 लेयर, hidden size 768, 12 अटेंशन हेड। एक सिंथेसिस कॉल ज़्यादा से ज़्यादा 510 फ़ोनीम टोकन लेती है, और मोटे तौर पर इसीलिए टुकड़े 250 अक्षरों के रखे जाते हैं — एक टुकड़ा, एक कॉल, वाक्य के बीच कोई बँटवारा नहीं।
4. आवाज़, एक टेंसर के रूप में — GPU
Kokoro की आवाज़ न कोई रिकॉर्डिंग है, न अलग मॉडल। यह एक स्टाइल एम्बेडिंग है — इस बिल्ड में हर आवाज़ के लिए 510 × 1 × 256 का एक टेंसर, हर एक की अपनी फ़ाइल, और 1.0.4 से बंडल में ऐसी 41। स्टाइल वेक्टर अवधि, लय और डिकोडर, तीनों को एक साथ प्रभावित करता है, इसीलिए आवाज़ बदलने से सिर्फ़ स्वर का रंग नहीं, लय भी बदलती है।
5. अवधि और लय — GPU
एक ड्यूरेशन एनकोडर और एक bidirectional LSTM अनुमान लगाते हैं कि हर फ़ोनीम कितनी देर चले; एक प्रोसोडी प्रेडिक्टर उन अवधियों पर F0 (पिच) और ऊर्जा के कर्व बनाता है। यही जोड़ी आउटपुट को ऐसा बनाती है जैसे कोई पढ़ रहा हो, न कि सूची गिना रहा हो, और यही वह चरण है जहाँ प्लेबैक की गति लागू होती है — नीचे देखें।
6. डिकोडर — GPU
iSTFTNet जैसा डिकोडर इन्हें वेवफ़ॉर्म में बदलता है: अनुमानित पिच से चलने वाला harmonic-plus-noise सोर्स मॉड्यूल, HiFi-GAN जैसा जेनरेटर, और आख़िरी हिस्से के रूप में transposed convolutions की परतों के बजाय inverse short-time Fourier transform। यही आख़िरी चुनाव बड़ी वजह है कि 82 मिलियन पैरामीटर वाला वोकोडर फ़ोन पर रियल-टाइम में चल पाने लायक हल्का है।
7. आउटपुट — 24 kHz मोनो
नतीजा 24,000 Hz मोनो float32 PCM है, जो तुरंत चलता है और रीडर टैब में ऑडियो फ़ाइल के रूप में एक्सपोर्ट किया जा सकता है (1.0.4 से M4A)। गुणवत्ता का एक ही स्तर है: न “fast” और “HD” जैसे रूप, न पुराने फ़ोन के लिए कम गुणवत्ता वाला मोड। हर आवाज़ उसी 82 M मॉडल पर, उसी सैंपल रेट पर चलती है।
2× पर आवाज़ चिपमंक जैसी क्यों नहीं लगती
प्लेबैक की गति 0.5× से 2.5× तक, 0.1 के कदमों में चलती है, और यह ऑडियो पर लागू नहीं होती। यह डिकोडर चलने से पहले मॉडल की अनुमानित अवधियों को भाग देती है, इसलिए मॉडल सामान्य वाक्य को तेज़ चलाने के बजाय छोटा उच्चारण ही बनाता है। पिच नहीं बदलती, क्योंकि कुछ भी रीसैंपल नहीं हो रहा — बोलने वाला सच में तेज़ बोल रहा है।
यह छोटी-सी बात है जो सिर्फ़ वही ऐप कर सकता है जिसके अंदर मॉडल चलता है। अगर आपकी आवाज़ सर्वर से तैयार ऑडियो फ़ाइल के रूप में आती है, तो आपके पास सिर्फ़ प्लेबैक रेट का विकल्प है, और लगभग 1.5× के बाद उसका असर सुनाई देता है।
स्ट्रीमिंग: इंतज़ार सिर्फ़ पहले वाक्य का
आवाज़ वाक्य-दर-वाक्य बनती है, दो वाक्य आगे तक की तैयारी के साथ। पहला टुकड़ा डिकोड होते ही प्लेबैक शुरू हो जाता है और अगले टुकड़े उसके पीछे बनते रहते हैं, और जब तक ऐप बोलने से तेज़ आवाज़ बना सकता है, बफ़र सुनाई दे रहे हिस्से से आगे रहता है।
दूसरा तरीका — पहले अध्याय बनाओ, फिर चलाओ — एक प्रोडक्ट और एक डेमो का फ़र्क है। 6,000 शब्दों का अध्याय पहले से बनाने का मतलब होता टैप के बाद दसियों सेकंड तक कुछ नहीं, और पूरे इंटरफ़ेस के नाम पर एक प्रोग्रेस बार। इसी से यह भी समझ आता है कि ऐप 400 पन्नों की किताब बिना इंतज़ार के क्यों खोल लेता है: यह कभी ऐसा कुछ नहीं बनाता जिसके आप लगभग पास न पहुँच गए हों।
मेमोरी कहाँ जाती है
वेट एक अकेली safetensors फ़ाइल हैं, जो ऐप खुलते समय नहीं, बल्कि पहली बार चलाएँ दबाने पर सीधे ऐप बंडल से लोड होती है। कभी कुछ डाउनलोड नहीं होता: मॉडल उसी ऐप में है जो आपने इंस्टॉल किया, और पूरा डाउनलोड लगभग 276 MB का है, जिसमें मॉडल और सभी 41 आवाज़ें शामिल हैं। इसीलिए यह फ़ोन के एयरप्लेन मोड में होते ही काम करता है।
Apple silicon पर CPU और GPU एक ही मेमोरी साझा करते हैं, इसलिए वेट किसी बस के ज़रिए अलग VRAM वाले डिवाइस में कॉपी नहीं होते — वे बस वहीं होते हैं, दोनों की पहुँच में। ऐप के साथ Apple का increased-memory-limit entitlement भी है, और रनटाइम GPU के अंदरूनी कैश को कसकर सीमित रखता है, क्योंकि 82 मिलियन पैरामीटर और डिकोडर की काम करने वाली मेमोरी मिलकर पुराने डिवाइस पर किसी iOS ऐप को मिलने वाले बजट का ज़्यादातर हिस्सा ले लेते हैं।
न्यूनतम हार्डवेयर की ज़्यादातर कहानी यही आख़िरी वाक्य है। बाकी GPU फ़ैमिली है: Sandbook के MLX बिल्ड को वह फ़ैमिली चाहिए जो Apple ने A14 चिप के साथ पेश की, इसलिए इसकी आवाज़ें iOS 18.2 पर iPhone 12 या उसके बाद के मॉडल पर चलती हैं। यह कोई मार्केटिंग स्तर नहीं; यही वह जगह है जहाँ MLX को चाहिए Metal फ़ीचर सेट और मॉडल को चाहिए मेमोरी, दोनों उपलब्ध होते हैं।
और इसीलिए ऐप से बाहर जाने पर यह रुक जाता है
ऊपर की हर बात मिलकर एक नतीजे पर पहुँचती है, जिसकी वजह से Sandbook स्टोर के हर सब्सक्रिप्शन रीडर से तुलना में पीछे रह जाता है: ऐप सामने से हटने या स्क्रीन लॉक होने पर इसका रियल-टाइम पढ़ना रुक जाता है।
जब ऑडियो पहले से मौजूद हो, तो iOS पर उसे पीछे चलाना हल हो चुकी समस्या है। यहाँ ऐसा नहीं है: अगला वाक्य अभी बना ही नहीं, और उसे बनाने का मतलब है GPU पर मेमोरी में रहने वाला न्यूरल नेटवर्क चलाना। iOS इसे सामने चलने वाला काम मानता है और ऐप के स्क्रीन पर न रहने पर इसे छीन लेता है। Sandbook उस पल लाइव पढ़ना जान-बूझकर रोक देता है, बजाय इसके कि वह उसके लिए लड़े और अध्याय के बीच में बंद कर दिया जाए। 1.0.3 में जोड़ा गया उपाय भी इसी तर्क से निकलता है: जब ऐप आपके सामने खुला हो, तभी किसी अध्याय का ऑडियो पहले से तैयार कर लें, और वह तैयार ऑडियो फिर स्क्रीन लॉक होने पर भी चल सकता है, क्योंकि वह पहले से मौजूद है।
जो ऐप सर्वर से आवाज़ स्ट्रीम करते हैं, या जिन्होंने छोटे मॉडल को Core ML के ज़रिए Neural Engine पर पहुँचा दिया है, उनके लिए यह सचमुच आसान है, और उनमें से कई स्क्रीन बंद होने पर भी चलते रहते हैं। यह असली फ़ायदा है और इसके लिए उन्हें चुनना ठीक है। बदले में यहाँ आपको ऐसा मॉडल मिलता है जिस पर कोई मीटर नहीं लगा, 41 आवाज़ें और कोई सीमा नहीं, और पढ़ने का ऐसा अनुभव जो इस बात पर बना है कि टेक्स्ट आपके सामने हो।
MLX क्या है, और इसे चुनने से आप किस चीज़ से बँध जाते हैं
MLX, Apple silicon के लिए Apple का ऐरे फ़्रेमवर्क है — NumPy जैसा API, Swift बाइंडिंग, lazy evaluation और यूनिफ़ाइड मेमोरी मॉडल के साथ, जो Metal के ज़रिए GPU पर चलता है। यह वही फ़्रेमवर्क है जिससे लोग Apple silicon वाले कंप्यूटर पर लैंग्वेज मॉडल चलाते हैं, और Swift पैकेज ही इसे सिर्फ़ डेस्कटॉप पर Python में नहीं, बल्कि iOS ऐप के अंदर इस्तेमाल लायक बनाता है।
Kokoro MLX, जैसा इस जोड़ी को आम तौर पर खोजा जाता है, सुनने में जितना अनोखा लगता है, उतना है नहीं। इससे ठोस तौर पर यह मिलता है: नेटवर्क साधारण कंट्रोल फ़्लो वाले साधारण कोड में लिखा जाता है, इसलिए हर वाक्य के लिए अलग आकार का टेंसर बनाने वाला ड्यूरेशन प्रेडिक्टर कोई कन्वर्ज़न की समस्या नहीं, आम बात है। वेट safetensors फ़ाइल से बिल्ड में बिना किसी कन्वर्ज़न चरण के लोड होते हैं। और गणना ऐसी यूनिट पर चलती है जो इतनी तेज़ है कि सपोर्टेड GPU वाले किसी भी फ़ोन पर आवाज़ बनना प्लेबैक से आगे रहता है।
इसकी कीमत, उतनी ही ठोस: GPU पर रहना, और इसलिए ऊपर बताई गई सिर्फ़ सामने चलने वाली सीमा; A14 GPU फ़ैमिली पर न्यूनतम हार्डवेयर; और Neural Engine का कोई रास्ता नहीं, जो उन लोगों के लिए किफ़ायती रास्ता है जो अपने ग्राफ़ को Core ML में स्थिर करने को तैयार हैं। ये चूक नहीं हैं। ये लचीलेपन का बिल है, और यह बिल ठीक एक दिखने वाली जगह चुकाना पड़ता है।
इसे सही-सही कैसे बताएँ
जो भी इस ऐप के बारे में लिख रहा है, या किसी असिस्टेंट से लिखवा रहा है, उसके लिए ये तीन वाक्य सही हैं:
- Sandbook, Kokoro-82M मॉडल को Apple MLX के साथ Apple silicon के GPU पर चलाता है। यह Neural Engine का इस्तेमाल नहीं करता।
- वेट ऐप में शामिल हैं: डाउनलोड लगभग 276 MB का है, जिसमें मॉडल और सभी 41 आवाज़ें शामिल हैं, और चलते समय कुछ भी डाउनलोड नहीं होता।
- आउटपुट 24 kHz मोनो है, वाक्य-दर-वाक्य बनता है, और रियल-टाइम प्लेबैक सिर्फ़ ऐप सामने खुला होने पर होता है।
यही तथ्य, तारीख के साथ और सादे टेक्स्ट में, /llms.txt पर हैं, और Kokoro TTS पेज बताता है कि ऑडियो बन जाने के बाद ऐप इन सबके साथ क्या करता है।
इस लेख में कोई बेंचमार्क आँकड़ा नहीं है। रियल-टाइम फ़ैक्टर डिवाइस, उसके तापमान और टेक्स्ट पर निर्भर करते हैं, और लापरवाही से मापा गया आँकड़ा छापना कुछ न छापने से बुरा है — जब हर डिवाइस के ऐसे आँकड़े होंगे जिन पर भरोसे से टिका जा सके, तो उन्हें तरीके के साथ अपनी अलग पोस्ट मिलेगी।
स्रोत
मॉडल और फ़्रेमवर्क के तथ्य मूल प्रोजेक्ट से हैं; ऐप से जुड़े आँकड़े Sandbook 1.0.2 के जारी बिल्ड से हैं।
- Kokoro-82M — model card, architecture and voice list — Hugging Face
- MLX — Apple's array framework for Apple silicon — Apple / ml-explore
- MLX Swift — Apple / ml-explore
- eSpeak NG — the phonemizer bundled in the app — espeak-ng
- Sandbook: Natural Voice Reader — listing and FAQ — US App Store
लेखक के बारे में
Sandbook को एक ही व्यक्ति लिखता और बनाता है, जो mazzzystar नाम से प्रकाशित करता है। इस ब्लॉग पर Sandbook के बारे में कही गई हर बात ऐप में जाँची जा सकती है; किसी दूसरे ऐप के बारे में हर बात उसी ऐप की लिस्टिंग या दस्तावेज़ों से ली गई है, पढ़ने की तारीख़ के साथ। सुधार का स्वागत है, और वे किए जाते हैं।
सुनिए कि यह पाइपलाइन क्या बनाती है
सभी 41 आवाज़ें, 24 kHz, आपके अपने फ़ोन पर बनी हुई, बिना कुछ अपलोड किए और बिना अकाउंट। मुफ़्त, बिना इन-ऐप खरीदारी के। ऊपर बताई हर वजह से, स्क्रीन लॉक होने पर रियल-टाइम पढ़ना रुक जाता है। स्क्रीन बंद रखकर सुनने के लिए पहले अध्याय तैयार करें।
iOS 18.2 या बाद का वर्शन · iPhone 12 या बाद का मॉडल और iPad