ब्राउज़र में इमेज कन्वर्ज़न असल में कैसे काम करता है (और मैंने इसे ऐसे क्यों बनाया)
Dov Azencot
@DovAzencotयह पूरी साइट जिस वजह से मौजूद है, वह सालों पहले महसूस हुई एक छोटी-सी, बेवकूफ़-सी बेचैनी है। मुझे एक HEIC फ़ोटो को JPG में बदलना था, मैंने सर्च बार में वही ज़ाहिर-सी चीज़ टाइप की, और एक ऐसे कन्वर्टर पर पहुँच गया जो चाहता था कि मैं अपनी तस्वीर उनके सर्वर पर अपलोड करूँ। तो मैंने की। काम कर गया। और फिर मैं वहाँ बैठा यह सोचता रहा: वह फ़ोटो अब किसी ऐसी मशीन पर पड़ी है जिसके बारे में मैं कुछ नहीं जानता, ऐसे लोगों की चलाई हुई जिनसे मैं कभी नहीं मिलूँगा, इतने वक़्त तक रखी हुई जिसके बारे में मुझे कभी बताया ही नहीं गया। किसी अंट-शंट स्क्रीनशॉट के लिए, ठीक है। पर वह स्क्रीनशॉट नहीं था। वह एक निजी फ़ोटो थी, और मैंने अभी-अभी उसे तीस सेकंड बचाने के लिए अजनबियों के हाथ थमा दिया था।
यही वह समस्या है जिससे मैंने आगे कभी दो-चार न होने की ठान ली। जवाब यह निकला कि वह अपलोड शुरू से कभी ज़रूरी था ही नहीं।
पुराना तरीक़ा: किसी अजनबी का कंप्यूटर किराए पर लेना
एक परंपरागत ऑनलाइन कन्वर्टर किसी मेल-ऑर्डर सेवा की तरह काम करता है। आप अपनी फ़ाइल किसी सर्वर तक भेजते हैं। सर्वर अपनी मशीन पर इंस्टॉल सॉफ़्टवेयर से कन्वर्ज़न चलाता है। यह नतीजा वापस नीचे भेजता है। आपकी इमेज ने ऐसे हार्डवेयर से एक चक्कर लगाया जो आपके बस में नहीं, और बीच में कहीं वह पूरी की पूरी एक ऐसी डिस्क पर बैठी रही जो आपकी नहीं है।
उस मॉडल पर कसा हर प्राइवेसी वादा असल में बर्ताव के बारे में एक वादा है — फ़ाइल एक घंटे बाद मिटा दी जाती है, कोई देखता नहीं। शायद यह निभे। शायद निभ जाए। आपके पास जाँचने का कोई तरीक़ा नहीं, और आप अपनी फ़ाइल की असली बाइट इस पर भरोसे के हवाले कर रहे होते हैं। भरोसा ही पूरा आर्किटेक्चर है, और भरोसा ठीक वही चीज़ थी जिसे मैं ख़र्च नहीं करना चाहता था।
नया तरीक़ा: आपके ब्राउज़र के पास कंप्यूटर पहले से है
बदला यह है। आधुनिक ब्राउज़र असली, कंपाइल किए हुए प्रोग्राम क़रीब-क़रीब नेटिव रफ़्तार से चला सकते हैं, WebAssembly नाम की किसी चीज़ के ज़रिए — छोटे में WASM। वे इमेज कोडेक जो पहले किसी सर्वर पर रहते थे — वह कोड जो PNG पढ़ता है, जो WebP एनकोड करता है, जो HEIC डिकोड करता है — WASM में कंपाइल होकर उसी ब्राउज़र टैब के अंदर चल सकते हैं जो आपके पास पहले से खुला है।
तो जब आप इस तरह बने किसी पेज पर फ़ाइल छोड़ते हैं, तो कन्वर्ज़न सॉफ़्टवेयर आपकी मशीन पर एक बार डाउनलोड होता है, वेब पेज के किसी और हिस्से की तरह। उसके बाद असली काम — आपकी इमेज पढ़ना, उसे ट्रांसकोड करना, नई फ़ाइल लिखना — आपके अपने प्रोसेसर पर, आपकी अपनी मेमोरी में होता है। नतीजा सीधे आपके हाथ में डाउनलोड के रूप में थमा दिया जाता है। आपकी फ़ाइल कहीं भेजी ही नहीं जाती, क्योंकि उसे भेजने के लिए कोई जगह है ही नहीं। बीच में कोई सर्वर होता ही नहीं।
इसीलिए मैं कह सकता हूँ कि आपकी फ़ाइलें आपके डिवाइस से बाहर नहीं जातीं, और इसे किसी पॉलिसी के बजाय एक तथ्य की तरह कह सकता हूँ। बात यह नहीं कि मैं न देखने का वादा करता हूँ। बात यह है कि कोई रास्ता ही नहीं जिससे आपकी इमेज मुझ तक पहुँचे। अगर कोई अदालत मुझे हुक्म भी दे तो भी मैं आपकी फ़ोटो निकालकर नहीं दे सकता, क्योंकि वह मेरी तरफ़ के तार पर कभी थी ही नहीं। प्राइवेसी कोई ऊपर से जोड़ा गया फ़ीचर नहीं है। यह इस बात का नतीजा है कि कोड कहाँ चलता है।
आप कैसे जान सकते हैं कि यह सच है
आपको मेरी बात पर यक़ीन करने की ज़रूरत नहीं, और यही हिस्सा मुझे सबसे अच्छा लगता है। अपने ब्राउज़र के डेवलपर टूल खोलिए, network टैब देखिए, और एक फ़ाइल कन्वर्ट कीजिए। आपको पेज और WASM कोडेक एक बार डाउनलोड होते दिखेंगे। आपको अपनी इमेज ऊपर जाती नहीं दिखेगी। और भी बेहतर: पेज लोड कीजिए, अपना Wi-Fi बंद कीजिए, और फिर भी कुछ कन्वर्ट कीजिए। यह तब भी चलता है, क्योंकि जो कुछ इसे चाहिए वह पहले से आपकी मशीन पर है। जो टूल आपकी फ़ाइलें अपलोड करता है वह ऐसा नहीं कर सकता। यह कर सकता है।
वो एक असली सीमा
मैंने ईमानदारी का वादा किया था, तो यह रही। कन्वर्ज़न आपके अपने डिवाइस पर चलाने का मतलब है कि यह आपकी अपनी मेमोरी इस्तेमाल करता है, और किसी ब्राउज़र टैब को खेलने के लिए असीमित मेमोरी नहीं मिलती।
सामान्य फ़ाइलों के लिए — फ़ोटो, स्क्रीनशॉट, लोगो, वह सामान जिसे लोग दिन भर कन्वर्ट करते हैं — यह कोई मुद्दा ही नहीं है। पर अगर आप इस पर कोई सचमुच बेतहाशा बड़ी चीज़ फेंकें, बेहद ऊँचे रिज़ॉल्यूशन की कोई अकेली इमेज, या एक साथ कोई विशाल बैच, तो आप छत से टकरा सकते हैं। किसी इमेज को डिकोड करने का मतलब है उसके अनकंप्रेस्ड पिक्सल मेमोरी में रखना, जो डिस्क पर पड़ी फ़ाइल से कहीं बड़े होते हैं, और एक विशाल इमेज उस सीमा को चुका सकती है जितनी टैब को इजाज़त है। जब ऐसा होता है तो कन्वर्ज़न रेंगने लगता है या टैब हार मान लेता है।
64 GB RAM वाले सर्वर को यह समस्या कभी नहीं होती। तो यह रहा वह सौदा, साफ़-साफ़ कहा गया: सर्वर-साइड कन्वर्टर उन फ़ाइलों को चबा सकता है जो आपका डिवाइस कभी संभाल ही नहीं पाता। यह तरीक़ा नहीं कर सकता। बदले में यह आपको जो देता है वह यह कि आपकी फ़ाइल आपके हाथ से निकलती ही नहीं। लोग असल में जो कुछ कन्वर्ट करते हैं उसके भारी बहुमत के लिए, यह बिना दोबारा सोचे करने लायक सौदा है। किसी दुर्लभ राक्षसी फ़ाइल के लिए, यह एक असली सीमा है, और मैं इसे झुठलाने के बजाय आपको बता देना बेहतर समझता हूँ।
मैं फिर भी इसे सही डिफ़ॉल्ट क्यों मानता हूँ
ज़्यादातर कन्वर्ज़न आम फ़ाइलें हैं जिन्हें शुरू से किसी सर्वर को छूने की ज़रूरत ही नहीं थी। अपलोड हमेशा से उस दौर की बची-खुची निशानी था जब ब्राउज़र यह काम ख़ुद नहीं कर सकते थे। अब कर सकते हैं। तो समझदार डिफ़ॉल्ट पलट गया: फ़ाइल अपनी मशीन पर रखिए, काम स्थानीय रूप से कीजिए, और सर्वर की तरफ़ सिर्फ़ उस दुर्लभ मौक़े पर हाथ बढ़ाइए जब आपका अपना हार्डवेयर सचमुच पार न पा सके।
यहाँ मौजूद हर चीज़ के पीछे यही पूरा विचार है। यह वही साइट है जो मैंने उस एक बेचैन दोपहर के बाद अपने लिए बनाई थी, ताकि मुझे किसी फ़ाइल का बस एक्सटेंशन बदलने के लिए दोबारा कभी कोई निजी फ़ोटो किसी अजनबी के हाथ न थमानी पड़े। पता चला मुझे कभी थमानी थी ही नहीं। आपको भी नहीं है।
संबंधित लेख
PNG को WebP में क्यों बदलता हूँ (और वो एक मौका जब नहीं बदलता)
PNG में एडिट करना बढ़िया है, पर उसे वेब पर भेजना फ़िज़ूलख़र्ची है। WebP असल में कितना बचाता है, कहाँ कुछ नहीं बचाता, और वो एक नियम जो मैं कभी नहीं तोड़ता।
PNG या JPG? वो दस साल पुराना नियम जिससे मैं तय करता हूँ
लॉसलेस बनाम लॉसी, किनारे बनाम फ़ोटो, ट्रांसपेरेंसी बनाम बिना। एक सीधा-सा सवाल बता देता है कि कोई फ़ाइल किस फ़ॉर्मैट में होनी चाहिए — साथ में इसे साबित करने वाली असली साइज़ टेबल।
आपकी iPhone फ़ोटो HEIC क्यों होती हैं (और कब बस उन्हें JPG बना लें)
HEIC सचमुच एक बेहतर फ़ॉर्मैट है, पर आधा वेब आज भी इसे खोल नहीं पाता। Apple ने इसे क्यों चुना, JPG में बदलने पर असल में क्या छोड़ना पड़ता है, और मैं कब झंझट नहीं पालता।
सभी लेख