1.2.0 के बाद दो शिकायतें बार-बार लौटती रहीं: "यह मेरी सहकर्मी का सरनेम हर बार ग़लत लिखता है" और "Enhance या तो ऑन है या ऑफ़ — मुझे हमेशा एक ही तरह की सफ़ाई नहीं चाहिए।"
1.3.0 आज रिलीज़ हो गया है। यह दोनों को ठीक करता है, और उस तीसरी लगातार परेशानी का भी हल देता है: मीटिंग ट्रांसक्रिप्ट जहाँ सामने वाले की हर लाइन दो बार दिखती है क्योंकि आपने हेडफ़ोन नहीं पहने थे।
देखिए क्या बदला।
कस्टम वोकैबुलरी
हर स्पीच इंजन के पास कुछ शब्द होते हैं जो ख़ास आपके लिए वह लगातार ग़लत करता है — एक सरनेम, एक प्रोडक्ट का नाम, कोई इंटरनल एक्रोनिम, उस टूल का नाम जिसे आप दिन में चालीस बार बोलते हैं। Parakeet ने आपके स्टार्टअप का नाम कभी नहीं सुना। "Claude Code" वापस "clod code" बनकर आता है, जब तक आप ध्यान देना बंद करके हर बार हाथ से ठीक करने नहीं लगते।
सेटिंग्स में अब एक Vocabulary सेक्शन है। हर नियम एक जोड़ी है: रिकग्नाइज़र क्या बनाता है, और उसे क्या बनाना चाहिए था। clod code → Claude Code. kubernets → Kubernetes. मॉडल ने जो सुना उसकी जगह नाम की सही स्पेलिंग।
व्यवहार में जो बातें मायने रखती हैं:
- डिफ़ॉल्ट रूप से पूरे शब्द का मिलान, ताकि
catका नियम कभी "category" के बीच में बदलाव न करे। सबस्ट्रिंग सुधारों के लिए इसे बंद कर दें। - डिफ़ॉल्ट रूप से केस-इनसेंसिटिव, और हर नियम के लिए एक टॉगल जब
APIसिर्फ़APIसे मैच करना चाहिए। - हर नियम का अपना ऑन/ऑफ़ स्विच, ताकि किसी नियम को हटाए बिना रोका जा सके।
- कई शब्दों वाले वाक्यांश भी चलते हैं — बाईं ओर एक ही टोकन होना ज़रूरी नहीं।
नियम एक नहीं, तीन जगह लगते हैं। आपके शब्द ट्रांसक्रिप्शन से पहले रिकग्नाइज़र को बायसिंग संकेत के रूप में जाते हैं, उसके बाद कच्चे ट्रांसक्रिप्ट पर रिप्लेसमेंट के रूप में लगते हैं, और LLM प्रॉम्प्ट में "इन्हें ज्यों का त्यों रखो" निर्देश के रूप में जाते हैं — ताकि क्लीनअप पास चुपचाप वही स्पेलिंग दोबारा न बदल दे जिसे आपने अभी ठीक किया। इसी वजह से इस फ़ीचर का पहला भोला संस्करण रिलीज़ नहीं हुआ था: नाम ठीक करना और फिर Enhance से उसे वापस बदलवा देना, ठीक न करने से भी बुरा है।
अगर आप कोडिंग एजेंट्स में डिक्टेट करते हैं, तो सबसे पहले यही सेट कीजिए। आपके स्टैक के प्रॉपर नाउन कवर करने वाले दस नियम ज़्यादातर मैन्युअल एडिटिंग ख़त्म कर देते हैं।
Enhance टॉगल की जगह डिक्टेशन मोड्स
पहले Enhance एक चेकबॉक्स था: टेक्स्ट साफ़ करो, या मत करो। डिफ़ॉल्ट के तौर पर यह सही है, पर सीमा के तौर पर ग़लत — एक ही बोला हुआ पैराग्राफ़ इस बात पर निर्भर करके अलग निकलना चाहिए कि वह जा कहाँ रहा है।
1.3.0 टॉगल की जगह मोड पिकर देता है:
- Raw — आपने जो कहा, बिल्कुल वही पेस्ट करता है, कोई LLM पास नहीं। सबसे तेज़ रास्ता; लाइव अनुवाद यहाँ भी काम करता है।
- Cleanup — व्याकरण, विराम चिह्न, भरावन शब्द हटाना, शब्दचयन वैसा ही। पुराना Enhance व्यवहार, और अब भी डिफ़ॉल्ट।
- Email — डिक्टेशन को एक व्यवस्थित, प्रोफ़ेशनल ईमेल में ढालता है, बिना ऐसा सब्जेक्ट या क्लोज़िंग गढ़े जो आपने बोला ही नहीं। यह असल में कैसा पढ़ने में लगता है, देखिए Mac पर ईमेल डिक्टेट करना।
- Message — छोटा, सहज चैट मैसेज।
- Bullets — समूहबद्ध बुलेट पॉइंट्स में पुनर्गठित।
- Formal — निखरा हुआ, औपचारिक टोन।
- Custom — आपका अपना निर्देश, सेटिंग्स में सेव और हर डिक्टेशन पर लागू।
Custom सबसे दिलचस्प मोड है। यह फ़्री-टेक्स्ट प्रॉम्प्ट है, तो "हमेशा ब्रिटिश अंग्रेज़ी में लिखो और em dash कभी मत लगाओ" या "स्पेनिश में अनुवाद करो और तीन वाक्यों से ज़्यादा मत लिखो" भी एक वैध मोड है। सब कुछ अब भी डिवाइस पर मौजूद मॉडल से लोकल ही चलता है।
सभी मोड्स में संख्याएँ, कोड आइडेंटिफ़ायर, URL, फ़ाइल पाथ, उद्धरण चिह्नों के भीतर का टेक्स्ट और आपके वोकैबुलरी शब्द दोबारा लिखे जाने से सुरक्षित हैं। पुनर्रचना को गद्य बदलना चाहिए, उसके भीतर के भार उठाने वाले टोकन नहीं।
स्पीकर पर की गई मीटिंग्स: दोहरी लाइनों की समस्या
अगर आप बिना हेडफ़ोन कॉल करते हैं, तो दूर बैठे प्रतिभागी आपके Mac के स्पीकर से बजते हैं और सीधे वापस माइक्रोफ़ोन में चले जाते हैं। Vext माइक और सिस्टम ऑडियो को अलग-अलग स्ट्रीम के रूप में कैप्चर करता है, इसलिए एक ही वाक्य दो बार ट्रांसक्राइब होता है — एक बार सिस्टम स्ट्रीम से साफ़, एक बार माइक से ख़राब — और ट्रांसक्रिप्ट में ऐसा दिखता है जैसे सामने वाले की कही हर बात आपने दोहराई हो।
हमने इसे ऑडियो स्तर पर दो बार हल करने की कोशिश की। पहले CoreML पर चलने वाले DTLN इको कैंसलर से, फिर Apple के अपने Voice Processing I/O से। दोनों काम करते हैं, और दोनों हटा दिए गए: VPIO साझा माइक्रोफ़ोन स्टेट बदल देता है, इसलिए उसे चालू करने पर ऑटोमैटिक गेन कंट्रोल और नॉइज़ सप्रेशन उन सभी ऐप्स में रिस जाता है जो वही माइक पढ़ रहे हैं — Vext के रिकॉर्ड करते समय Zoom में आपकी आवाज़ ख़राब हो जाती है। यह स्वीकार्य सौदा नहीं है।
जो संस्करण रिलीज़ हुआ, वह ऑडियो के बजाय ट्रांसक्रिप्ट पर काम करता है। इको ऑडियो इतना बिगड़ा होता है कि वॉइसप्रिंट मिलान टूट जाता है, लेकिन वह वही शब्द उसी समय बोलता है, और दोनों स्ट्रीम एक ही मीटिंग घड़ी साझा करती हैं। इसलिए डीडुप्लिकेटर टेक्स्ट को समय से मिलाता है: वह माइक चंक जिसके टोकन दो सेकंड की विंडो में किसी सिस्टम चंक के भीतर काफ़ी हद तक समाए हों, इको है और हटा दिया जाता है। दूसरा पास उन छोटे-छोटे टुकड़ों को जोड़ देता है जो शब्द-सीमा पर विभाजन से बचे रह जाते हैं।
इसके ऊपर, ऑफ़लाइन रिफ़ाइनमेंट पास अब दूर के स्पीकरों के वॉइस एम्बेडिंग का उपयोग करके लीक हुए ऑडियो को पहचानकर हटाता है, और जो समानता अकेले नहीं पकड़ पाती उसके लिए ओवरलैप डिटेक्शन भी करता है।
कुल असर: लैपटॉप स्पीकर पर Zoom या Meet कॉल रिकॉर्ड करने पर अब ऐसा ट्रांसक्रिप्ट मिलता है जो हेडफ़ोन वाले नतीजे के काफ़ी क़रीब है। हेडफ़ोन अब भी बेहतर हैं। बस अब ज़रूरी नहीं रहे।
शब्द-स्तर पर स्पीकर विभाजन
इससे जुड़ा हुआ, और ट्रांसक्रिप्ट की एक पूरी श्रेणी की गड़बड़ियों की असली जड़।
वॉइस एक्टिविटी डिटेक्शन ऑडियो को चंक्स में काटता है। जब दो लोग तेज़ी से बारी बदलते हैं, तो एक ही चंक में तीन-चार बार स्पीकर बदल सकते हैं, और पूरा हिस्सा एक ही लेबल के नीचे एक ब्लॉक की तरह ट्रांसक्राइब होता था। ऑफ़लाइन पास बाद में एट्रिब्यूशन ठीक कर देता था, पर जुड़ा हुआ टेक्स्ट जुड़ा ही रहता था।
1.3.0 टोकन स्तर पर काटता है। हर पहचाने गए शब्द के साथ टाइमस्टैम्प होता है, डायराइज़ेशन टाइमलाइन बताती है कि उस पल कौन बोल रहा था, और चंक ट्रांसक्रिप्ट तक पहुँचने से पहले ही प्रति-स्पीकर हिस्सों में कट जाता है — जिन शब्दों को टाइमलाइन कवर नहीं करती, उनके लिए पिछला लेबल आगे बढ़ा दिया जाता है। बारी-बारी बोलने वाले लोग मीटिंग चलते-चलते ही अलग-अलग लाइनों में दिखते हैं।
स्पीकर पहचान जो ढहती नहीं
स्पीकर पहचान में तीन सुधार, तीनों असली रिकॉर्डिंग्स से निकले जो ग़लत हो गई थीं:
वन-टू-वन मैचिंग। क्लस्टर-से-प्रोफ़ाइल असाइनमेंट लालची (greedy) था, इसलिए दो अलग लोग एक ही ज्ञात स्पीकर से मैच होकर एक पहचान में मिल सकते थे। अब यह यूनीक मैपिंग है — एक क्लस्टर, एक प्रोफ़ाइल।
स्थिर वॉइस प्रोफ़ाइल। एम्बेडिंग L2-नॉर्मलाइज़्ड होती हैं और नए सैंपल आने पर एक्सपोनेंशियल मूविंग एवरेज से मिलाई जाती हैं, ओवरराइट नहीं होतीं। प्रोफ़ाइल हर मीटिंग के साथ बेहतर होती हैं, आख़िरी रिकॉर्डिंग की ओर बहती नहीं।
कोलैप्स गार्ड। पाँच लोगों की एक मीटिंग ऑफ़लाइन पास से "Me" और एक अन्य व्यक्ति बनकर लौटी: ऑफ़लाइन डायराइज़र ने 590 सेगमेंट वाली स्ट्रीम को अंडर-क्लस्टर करके एक ही क्लस्टर बना दिया, और चूँकि वह पास अंतिम माना जाता है, उसने उन चार स्पीकरों को मिटा दिया जिन्हें लाइव पास ने सही से अलग किया था। अब अगर ऑफ़लाइन पास किसी स्ट्रीम के लिए एक या उससे कम क्लस्टर देता है जबकि लाइव पास ने दो या अधिक स्पीकर स्थापित किए थे, तो लाइव लेबल ही रखे जाते हैं। ज़्यादा बँटे हुए स्पीकर Speakers टैब में मर्ज किए जा सकते हैं; अंतिम माने गए पास द्वारा मिटाए गए स्पीकर हमेशा के लिए चले जाते हैं।
हॉटकीज़, नए सिरे से
हॉटकी सिस्टम स्टोरेज लेयर से ऊपर तक दोबारा लिखा गया है। अब पाँच एक्शन के अलग-अलग बाइंडिंग हैं: पुश-टू-टॉक डिक्टेशन, हैंड्स-फ़्री डिक्टेशन, नोट्स, मीटिंग्स और स्क्रीनशॉट।
पहले से इस्तेमाल हो रहा कॉम्बिनेशन असाइन करने पर टकराव पकड़ा और सुलझाया जाता है, बजाय इसके कि एक ही की पर चुपचाप दो एक्शन चलें। किसी भी बाइंडिंग को Delete की या बटन से हटाया जा सकता है, और रिकॉर्डर कैप्चर के दौरान असली फ़ीडबैक देता है। बिखरी हुई AppStorage प्रॉपर्टीज़ और मैन्युअल डिकोडिंग वाला पुराना मैनेजर हटा दिया गया है।
जर्मन और डच
इंटरफ़ेस अब सात भाषाओं में है: अंग्रेज़ी, स्पेनिश, जर्मन, डच, रूसी, हिंदी और थाई — साथ ही Auto, जो macOS की सिस्टम भाषा का अनुसरण करता है। सेटिंग्स → General में बदलें; तुरंत लागू, रीस्टार्ट की ज़रूरत नहीं।
डिज़ाइन: macOS 26 पर Liquid Glass
macOS 26 Tahoe पर ऑनबोर्डिंग, वेलकम गाइड, लाइसेंस स्क्रीन, मॉडल लोडिंग व्यू और रिकॉर्डिंग पिल नेटिव Liquid Glass सरफ़ेस के साथ एडेप्टिव टिंटिंग का उपयोग करते हैं। पुराने macOS संस्करणों पर सब कुछ पिछली मटीरियल्स पर लौट आता है — आपके लिए कुछ नहीं बदलता।
एनिमेशन कर्व अब हर व्यू के अलग कॉन्स्टेंट के बजाय साझा प्रिमिटिव हैं, इसलिए पूरे ऐप में ट्रांज़िशन एक जैसे लगते हैं, और रिकॉर्डिंग इंडिकेटर सिस्टम की Reduce Motion सेटिंग का सम्मान करते हैं।
स्थिरता और डेटा
रिलीज़ का कम चमकदार आधा हिस्सा:
- रद्द किए गए ट्रांसक्रिप्शन जॉब एक कोर को 100% CPU पर घुमाते रह सकते थे। ठीक किया गया।
- बैकग्राउंड फ़ाइनलाइज़ेशन चलते समय मीटिंग टाइटल या ट्रांसक्रिप्ट एडिट करने पर आपका बदलाव चुपचाप वापस लौट सकता था। अब राइट्स आंशिक अपडेट हैं जो यूज़र-एडिटेबल फ़ील्ड्स को नहीं मिटाते।
- टेक्स्ट प्रोसेसर भरावन शब्द हटाते समय सही ट्रांसक्रिप्ट टेक्स्ट भी बिगाड़ सकता था — हाइफ़न वाले टोकन और विराम चिह्न अब सुरक्षित हैं।
- स्कीमा बदलने पर डेटाबेस अब ख़ुद को नहीं मिटाता। वह रास्ता अपडेट के समय मीटिंग हिस्ट्री नष्ट कर सकता था; अब बंद है।
- अमान्य VAD रेंज से होने वाले क्रैश और ऑडियो लेवल की रेस कंडीशन ठीक की गई।
- सिस्टम ऑडियो का डाउनसैंपलिंग भोली लीनियर इंटरपोलेशन के बजाय सही एंटी-एलियासिंग के साथ
AVAudioConverterसे होता है — रिकग्नाइज़र के लिए स्पष्ट रूप से साफ़ इनपुट। - टेक्स्ट और इमेज पेस्ट के दौरान क्लिपबोर्ड सुरक्षित रहता है।
- ऑडियो इंजन तभी बनता है जब रिकॉर्डिंग वास्तव में शुरू होती है, इसलिए निष्क्रिय Vext अब माइक्रोफ़ोन हार्डवेयर नहीं रोके रखता।
- ऐप बंद होने से पहले मीटिंग टाइटल और लाइव ट्रांसक्रिप्शन सेव हो जाते हैं।
- स्पीकर हटाने पर अब पुष्टि माँगी जाती है।
अपडेट
brew upgrade muvon/tap/vext
या Vext 1.3.0 सीधे डाउनलोड करें। आपकी मीटिंग्स, स्पीकर प्रोफ़ाइल और सेटिंग्स बनी रहती हैं — Enhance टॉगल Cleanup मोड बन जाता है, और आपके मौजूदा हॉटकी नए बाइंडिंग में माइग्रेट हो जाते हैं।
सब कुछ अब भी पूरी तरह आपके Mac पर चलता है: कोई क्लाउड नहीं, कोई अकाउंट नहीं, कोई सब्सक्रिप्शन नहीं।