# इमेज स्टैकर — एक बर्स्ट को जोड़िए, RAW फ़ाइलें भी

बीस फ़्रेम एक में, न बीस अपलोड, न कोई RAW कन्वर्टर।

> एक बर्स्ट में ली गई तस्वीरों को एक में जोड़िए। औसत लेकर नॉइज़ खत्म कीजिए, माध्यिका से दृश्य में से लोगों को हटाइए, तारों की लकीरों के लिए हल्का कीजिए, या किसी मैक्रो शॉट की फ़ोकस स्टैकिंग कीजिए। CR2, NEF, ARW, DNG, RAF और CR3 को कैमरे की अपनी झलक निकालकर पढ़ता है। सब कुछ आपके ब्राउज़र में ही चलता है।

यह पेज एक इंटरैक्टिव टूल है जो पूरी तरह आपके ब्राउज़र में चलता है, https://abox.tools/hi/stack-images/ पर — आप इसे जो भी देते हैं, वह कहीं अपलोड नहीं होता। आगे वह सब कुछ है जो यह पेज इस टूल के बारे में शब्दों में कहता है; इसे इस्तेमाल करने के लिए यह पता खोलें।

## यह टूल तस्वीरें **कभी अपलोड नहीं करता**। यहाँ कोई सर्वर है ही नहीं।

हर फ़्रेम को खोलना, डीकोड करना, सीध में लाना, जोड़ना और लिखना, यह सब आपका अपना ब्राउज़र आपकी अपनी मशीन पर करता है। 60 MB की बीस RAW फ़ाइलें करीब एक गीगाबाइट तस्वीरें होती हैं, और उसका एक बाइट भी हिलता नहीं। इस टूल में नेटवर्क का कोई काम है ही नहीं, और फ़ाइलें सीधे आपकी डिस्क से वह worker पढ़ता है जिसके पास कुछ भेजने के लिए कोई जगह ही नहीं है।

- ✗ कोई अपलोड नहीं
- ✗ कोई अकाउंट नहीं
- ✗ कोई वॉटरमार्क नहीं
- ✓ RAW पढ़ता है
- ✓ ऑफ़लाइन चलता है
- ✓ ओपन सोर्स

## ब्राउज़र में तस्वीरों का एक सेट कैसे स्टैक करें

1. **फ़्रेम चुनिए।** कोई बर्स्ट, ब्रैकेट किया हुआ सेट, इंटरवलोमीटर से ली गई कड़ी, या RAW फ़ाइलों का फ़ोल्डर। हर फ़ाइल आते ही खुलती है और उसकी लाइन बताती है कि उसमें से क्या निकला। RAW फ़ाइल के लिए यह कैमरा, भीतर मिली झलक का आकार, और यह कि उसे ढूँढ़ने के लिए फ़ाइल का कितना कम हिस्सा पढ़ना पड़ा।
2. **वह तरीका चुनिए जो आपके खोने वाली चीज़ से मेल खाता हो।** नॉइज़ के लिए औसत, और अगर कुछ हिला हो तो सिग्मा क्लिपिंग। लोग, गाड़ियाँ या गुज़रता हवाई जहाज़ हो तो माध्यिका। अँधेरा आसमान जिसे तारों की लकीरों में बदलना हो तो हल्का। फ़ोकस रिंग घुमाकर लिया गया मैक्रो शॉट हो तो फ़ोकस स्टैकिंग। मेनू के नीचे का नोट बताता है कि आपके फ़्रेमों की गिनती पर हर तरीका क्या करेगा।
3. **तय कीजिए कि फ़्रेम सीध में लाने हैं या नहीं।** हाथ से लिए हों तो हाँ, सिर्फ़ खिसकाना। हाथ से लिए हों और आप घूम भी रहे हों तो खिसकाना, घुमाना और पैमाना। कसे हुए तिपाई या इंटरवलोमीटर पर हों तो नहीं, और वह तेज़ भी रहेगा। हर फ़्रेम उसी से नापा जाता है जिस पर आधार का निशान है, और जब तक आप कुछ और न कहें वह पहला फ़्रेम ही रहता है: “इसे आधार बनाएँ” निशान सरकाता है, और सूची का क्रम जैसा आपने रखा वैसा ही रहता है।
4. **चारों आँकड़े पढ़िए, फिर बटन दबाइए।** कुछ भी चलने से पहले पेज बताता है कि नतीजा कितना बड़ा होगा, मोटे तौर पर कितनी मेमोरी लगेगी, फ़्रेम कितनी बार डीकोड होंगे, और आपकी फ़ाइलों का कितना हिस्सा पढ़ा गया। अगर सेट एक बार में मेमोरी में नहीं आता तो वह यह भी कहता है, और यह भी कि कौन-सा काम करने वाला रिज़ॉल्यूशन इसे सुलझा देगा।

## विस्तार से

[नॉइज़ घटाने या लोगों को हटाने के लिए तस्वीरें कैसे स्टैक करें](https://abox.tools/hi/guides/stack-photos-to-reduce-noise/): स्टैक करना एक बर्स्ट के कई फ़्रेमों को एक तस्वीर में जोड़ देता है। कौन-सा तरीका चाहिए यह इस पर निर्भर है कि आप क्या खोना चाहते हैं: नॉइज़, राह चलते लोग, या किसी मैक्रो शॉट की उथली गहराई। हर तरीका कैसे काम करता है, उसका क्या खर्च है, और RAW फ़ाइलें कहाँ बैठती हैं।

## बॉक्स में और भी टूल

- [इमेज ब्लैकआउट टूल](https://abox.tools/hi/redact-image/): जो हिस्सा आप ढकते हैं वह फ़ाइल से मिट जाता है, फ़ाइल के अंदर छिपा नहीं रहता।
- [EXIF व्यूअर और रिमूवर](https://abox.tools/hi/exif-editor/): देखिए कि फ़ोटो आपके बारे में क्या-क्या बता रही है। फिर उसे निकाल बाहर कीजिए।
- [DICOM व्यूअर](https://abox.tools/hi/dicom-viewer/): CT, MRI, एक्स-रे और अल्ट्रासाउंड, विंडो, हेडर और नाप के साथ।
- [तस्वीर से ICO](https://abox.tools/hi/image-to-ico/): एक तस्वीर भीतर। ब्राउज़र, Windows या Mac जो भी साइज़ माँगे, वह सब बाहर।

## सवाल

### क्या मेरी तस्वीरें कहीं अपलोड होती हैं?

नहीं। हर फ़्रेम को खोलना, डीकोड करना, सीध में लाना, स्टैक करना और लिखना, यह सब आपका अपना ब्राउज़र आपके अपने हार्डवेयर पर करता है। इस टूल में नेटवर्क का कोई काम है ही नहीं, न यह कभी कुछ मँगाता है और न कभी कुछ भेजता है। और पेज की `Content-Security-Policy` में हर वह पता लिखा है जिससे वह बात कर सकता है, जिनमें से एक भी इस साइट का नहीं है। पेज एक बार लोड कीजिए, इंटरनेट बंद कीजिए, और यह फिर भी चलता है। यहाँ यह बात ज़्यादातर टूल से ज़्यादा मायने रखती है, सिर्फ़ मात्रा की वजह से। बीस RAW फ़्रेम करीब एक गीगाबाइट होते हैं, और एक गीगाबाइट तस्वीरें सिर्फ़ इसलिए अपलोड करना कि उनका औसत निकाला जा सके, ठीक वही चीज़ है जिससे बचने के लिए यह टूल बना है।

### यह कौन-से RAW फ़ॉर्मैट पढ़ सकता है, और कैसे?

CR2, CR3, NEF, NRW, ARW, SR2, SRF, DNG, ORF, RAF, RW2, PEF, SRW, 3FR, IIQ, DCR, KDC, MRW, MEF, RWL और कुछ और, यानी लगभग वह सब जो कैमरे लिखते हैं। इनमें से यह जो पढ़ता है वह है पूरे आकार की वह JPEG झलक जिसे खुद कैमरे ने शॉट लेते वक्त बनाया था, यानी वही तस्वीर जो कैमरे की पीठ पर दिखती है और वही जिसे आपका ऑपरेटिंग सिस्टम थंबनेल की तरह बनाता है। उसे फ़ाइल की डायरेक्ट्री संरचना टटोलकर ढूँढ़ा जाता है, जिसमें कुछ किलोबाइट के दो-चार पाठ लगते हैं, और फिर एक टुकड़ा उठा लिया जाता है। **यह सेंसर डेटा का डीमोज़ेक नहीं है।** नतीजे में कैमरे का ही व्हाइट बैलेंस और पिक्चर स्टाइल होता है, हर चैनल पर आठ बिट के साथ, न कि वह बारह या चौदह बिट का रैखिक सेंसर डेटा जो कोई RAW कन्वर्टर देता।

### तो फिर सेंसर डेटा को ठीक से डीकोड क्यों नहीं करते?

क्योंकि इसका मतलब होता LibRaw या dcraw को साथ लाना, यानी फ़ॉर्मैट के एक ही परिवार के लिए दसियों मेगाबाइट का दूसरा इंजन, जिसका ज़्यादातर हिस्सा हर निर्माता की अलग कंप्रेशन योजनाएँ हैं। यह सौदा इस साइट के सोर्स में `docs/what-can-be-built-here.md` में तय किया गया है, जहाँ कैमरा RAW इस टूल के बनने से भी पहले से बाहर रखी चीज़ों की सूची में है। जो बदला वह उस सवाल का जवाब नहीं, बल्कि यह पता चलना है कि स्टैक करने के लिए उसकी ज़रूरत ही नहीं। झलकें पूरे रिज़ॉल्यूशन की होती हैं, वे वही हैं जो कैमरा आपको वैसे भी JPEG के रूप में देता, और उन्हें पढ़ना डीमोज़ेक करने से करीब सौ गुना तेज़ है। अगर आपको सेंसर डेटा चाहिए, तो पहले फ़्रेम किसी RAW कन्वर्टर में डेवलप कीजिए और उसके बनाए TIFF या JPEG स्टैक कीजिए, यह टूल उन्हें भी लेता है।

### यह कितने फ़्रेम और कितने बड़े सँभाल सकता है?

सात में से छह तरीके बहते हुए चलते हैं। वे एक ही संचायक रखते हैं और हर फ़्रेम को ठीक एक बार पढ़ते हैं, इसलिए सौ फ़्रेम उतनी ही मेमोरी लेते हैं जितनी दो, और बढ़ता सिर्फ़ वक्त है। माध्यिका इसका अपवाद है, क्योंकि किसी सेट का बीच का मान तब तक पता नहीं चल सकता जब तक पूरा सेट न हो, इसलिए वह हर फ़्रेम एक साथ पकड़े रखती है। 24 मेगापिक्सल के बीस फ़्रेम करीब 1.4 GB होते हैं, और इतना कोई ब्राउज़र नहीं देता। ऐसा होने पर तस्वीर को आड़ी पट्टियों में काटकर एक-एक पट्टी स्टैक की जाती है, जिसमें हर पट्टी के लिए फ़्रेम दोबारा पढ़ने पड़ते हैं। पेज यह सब आपके बटन दबाने से पहले ही निकाल लेता है और आँकड़ा दिखा देता है, इसलिए धीमा चलना कभी चौंकाता नहीं।

### फ़्रेम सीध में लाने से असल में होता क्या है?

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

### मुझे कौन-सा तरीका इस्तेमाल करना चाहिए?

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

### मेरी RAW फ़ाइलें चौदह बिट की हैं तो नतीजा आठ बिट का क्यों है?

क्योंकि जो स्टैक हो रहा है वह कैमरे की अपनी झलक है, और वह JPEG है। यह कहना भी बनता है कि स्टैक करना उसमें से कुछ वापस दिला देता है। आठ बिट के सोलह फ़्रेमों का औसत ऐसा नतीजा देता है जिसमें उनमें से किसी एक से भी बारीक छायाएँ होती हैं, क्योंकि जिस नॉइज़ ने हर फ़्रेम का पूर्णांकन अलग किया था वही औसत को दो स्तरों के बीच बैठने देता है। यहाँ गणित फ़्लोटिंग पॉइंट में होता है और बिलकुल आखिर में एक ही बार पूर्णांकित किया जाता है, इसलिए बीच में कुछ फेंका नहीं जाता। फिर भी यह रैखिक सेंसर डेटा स्टैक करने जैसा नहीं है, और यह टूल इसका दिखावा नहीं करता।

### क्या मैं अलग-अलग नाप के या अलग कैमरों के फ़्रेम स्टैक कर सकता हूँ?

हाँ, हालाँकि यह आम तौर पर गलती होती है और जाँच लेना चाहिए कि आपका इरादा यही था। नतीजा सबसे बड़े फ़्रेम की नाप का होता है, और बाकी हर फ़्रेम को उसमें बिठाकर बीच में रखा जाता है। कैमरे मिलाने से रंगों की व्याख्या भी मिल जाती है, इसलिए दोनों का औसत एक ही रोशनी की दो अलग व्याख्याओं का औसत होता है। यह वाकई वहाँ काम आता है जहाँ सेट दो रिज़ॉल्यूशन में लिया गया हो, या जहाँ एक ही फ़्रेम की RAW फ़ाइल और JPEG दोनों हों।

### यह कह रहा है कि काम पट्टियों में होगा। इसका क्या मतलब है?

कि उस तरीके को जितनी काम करने वाली मेमोरी चाहिए वह उससे ज़्यादा है जितनी यह टूल एक बार में लेने को तैयार है, इसलिए तस्वीर को आड़ी पट्टियों में काटकर एक-एक पट्टी स्टैक की जाएगी। नतीजा फिर भी ठीक वही आता है। बस हर पट्टी के लिए फ़्रेम दोबारा पढ़े जाते हैं, इसलिए ज़्यादा वक्त लगता है, और पेज बता देता है कि यह कितनी डीकोडिंग बनेगी। काम करने वाला रिज़ॉल्यूशन एक कदम घटाने से मेमोरी चौथाई रह जाती है, जो लगभग हमेशा पट्टियों वाले काम को एक ही चक्कर में बदल देता है, और नोट बता देता है कि कौन-सी सेटिंग ऐसा करेगी।

### बाकी किसी टूल में Worker नहीं है, तो इसमें क्यों?

क्योंकि अकेला यही है जिसका काम मिनटों में नापा जाता है। यहाँ बाकी हर टूल ऐसा कुछ करता है जिसमें एक-दो सेकंड लगते हैं, जहाँ काम को मुख्य धारा से हटाना बस दिखावा होता। बीस बड़े फ़्रेम स्टैक करना सैकड़ों मेगाबाइट पर ठोस गणित है, और मुख्य धारा पर इसका मतलब है जमा हुआ पेज। न कोई प्रगति पट्टी सरकती, न रद्द वाला बटन जवाब देता, और आखिर में ब्राउज़र टैब बंद करने की पेशकश करने लगता। Worker इसी ब्राउज़र के भीतर एक दूसरी धारा है, जो इसी फ़ोल्डर की एक फ़ाइल को, इसी नीति के तहत चलाती है। वह न सर्वर है और न नेटवर्क फ़ीचर।

### क्या यह मुफ़्त है, और क्या अकाउंट चाहिए?

यह मुफ़्त है, और न अकाउंट है, न साइन-इन, न ट्रायल, न कोई वॉटरमार्क। आप कितने फ़्रेम स्टैक करें या वे कितने बड़े हों, इस पर भी कोई सीमा नहीं है, क्योंकि इसका खर्च उठाने वाला कोई सर्वर ही नहीं है। काम आपकी अपनी मशीन पर होता है और अकेली छत आपकी अपनी मेमोरी है। साइट पर विज्ञापन चलते हैं और उन्हीं से इसका खर्च निकलता है, और विज्ञापनों को आपकी तस्वीरों के बारे में कुछ नहीं दिया जाता।

## प्राइवेसी का यह दावा कैसे जाँचा जा सकता है

- **आपकी तस्वीरों के जाने के लिए कोई जगह ही नहीं है।** Content-Security-Policy में हर वह पता लिखा है जिससे यह पेज बात कर सकता है, और उनमें से एक भी इस साइट का नहीं है। यहाँ कोई ऐसा एंडपॉइंट नहीं है जहाँ आपकी फ़ाइलें जमा हो सकें, और कोड में ऐसा कुछ नहीं है जो होता तो भी उन्हें भेजता। न `src/` में और न worker में कोई `fetch`, `XMLHttpRequest` या `sendBeacon` है।
- **RAW फ़ाइलें पढ़ी जाती हैं, अपलोड नहीं होतीं, और पढ़ी भी बस ज़रा-सी जाती हैं।** किसी कैमरे की RAW फ़ाइल में पहले से एक पूरे आकार की JPEG होती है जिसे कैमरे ने शॉट लेते वक्त ही बनाया था। यह टूल डायरेक्ट्री की कुछ प्रविष्टियाँ टटोलकर उसे ढूँढ़ता है और फिर एक ही टुकड़ा माँगता है, जो 60 MB की फ़ाइल में आम तौर पर सौ किलोबाइट से कम होता है। काम करते हुए पेज आपको वह आँकड़ा आपकी फ़ाइलों के साइज़ के साथ दिखाता रहता है। सेंसर का डेटा तो कभी पढ़ा ही नहीं जाता।
- **काम इसी मशीन के एक Worker में होता है, किसी सर्वर पर नहीं।** यहाँ worker इस्तेमाल करने वाला यही अकेला टूल है, क्योंकि स्टैक करना सेकंड नहीं बल्कि मिनटों का गणित है, और जमा हुआ पेज न प्रगति दिखा सकता है और न रद्द किया जा सकता है। Worker इसी ब्राउज़र के भीतर एक दूसरी धारा है, देखिए `src/worker.js`। उसे खुद फ़ाइलें सौंपी जाती हैं, जो मुफ़्त पड़ता है क्योंकि फ़ाइल का हैंडल उसके बाइट नहीं होता। और उस पर पेज जैसी ही Content-Security-Policy लागू है, यानी भेजने के लिए कोई जगह नहीं।
- **इस सेट के बारे में कहीं कुछ नहीं बताया जाता।** आपने कितने फ़्रेम स्टैक किए, उन्हें किस कैमरे ने लिखा, हर एक कितना खिसका था, आपने कौन-सा तरीका चुना और उसमें कितना वक्त लगा, यह सब पेज बंद करने तक इसी पेज की मेमोरी में रहता है। इस रिपॉज़िटरी में कोई अलग एनालिटिक्स इवेंट नहीं है जो उसमें से कुछ ले जाए, और डाउनलोड के बाद यह साइट जो एक सवाल पूछती है वह अंगूठा ऊपर या नीचे और टूल का नाम भेजता है, और कुछ नहीं।
- **यह ऑफ़लाइन चलता है।** नेटवर्क काट दीजिए और टूल वैसा ही रहेगा, क्योंकि इसमें नेटवर्क वाला कोई कदम कभी था ही नहीं। worker और उसके लोड किए हर मॉड्यूल को इसी पेज का अपना service worker कैश कर लेता है, इसलिए इंस्टॉल की हुई कॉपी नेटवर्क खींच लेने पर भी RAW फ़ाइलें स्टैक करती है।

**खुद जाँच लीजिए।** ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा `dist` ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं: https://github.com/A-Box-of-Tools/website

सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए `config/site.toml`, RAW फ़ाइल मेगाबाइट के बजाय किलोबाइट पढ़कर कैसे खोली जाती है इसके लिए `src/raw.js`, हर तरीके के गणित के लिए `src/stack.js`, और पेज पर दिखने वाले मेमोरी व डीकोडिंग के आँकड़े कहाँ से आते हैं इसके लिए `src/plan.js`। वे उसी फ़ाइल के जवाब हैं, अंदाज़े नहीं।
