PhotoPrism बनाम Immich: कौन सा फोटो सर्वर बेहतर है?
PhotoPrism और Immich के बीच सही चुनाव कैसे करें। हम इनके RAM उपयोग, मोबाइल ऐप की कार्यक्षमता, मैप फीचर्स और VPS पर Docker के जरिए बैकअप लेने के सटीक कमांड्स की तुलना करते हैं।
PhotoPrism बनाम Immich: संक्षिप्त उत्तर
PhotoPrism और Immich के बीच चुनाव दो अलग-अलग कार्यों के बीच का चुनाव है, न कि एक ही उत्पाद के दो संस्करणों के बीच। Immich, Google Photos का विकल्प है: इसका फोन ऐप स्वचालित रूप से आपके कैमरा रोल का बैकअप लेता है, और इसकी टाइमलाइन किसी भी ऐसे व्यक्ति को जानी-पहचानी लगेगी जो फोन गैलरी का उपयोग छोड़ रहा है। PhotoPrism आपके पास पहले से मौजूद फोटो लाइब्रेरी को व्यवस्थित करता है: यह डिस्क पर मौजूद फाइलों के फोल्डर को इंडेक्स करता है, उनके मेटाडेटा को पढ़ता है, उन्हें मैप पर दिखाता है, और फाइलों को बिल्कुल वहीं रहने देता है जहाँ वे थीं।
यदि आपकी समस्या यह है कि "मेरा फोन भर गया है और मैं Google Photos से बाहर निकलना चाहता हूँ", तो Immich चुनें। यदि आपकी समस्या यह है कि "मेरे पास ड्राइव पर 400 GB फोटो हैं और मुझे उनमें कुछ भी नहीं मिल रहा है", तो PhotoPrism चुनें। दोनों ओपन सोर्स हैं, दोनों सामान्य VPS पर Docker containers के रूप में चलते हैं, और दोनों किसी तीसरे पक्ष को कुछ भी भेजे बिना आपकी लाइब्रेरी को इंडेक्स और सर्च करते हैं।
दर्शन का विभाजन, और यह सब कुछ कैसे निर्धारित करता है
Immich फाइलों का स्वामी है। आप इसे एक upload location बताते हैं, phone app या web uploader originals को भेजते हैं, और Immich उन्हें अपने path के तहत अपने naming convention के साथ store करता है। database में albums, faces और search के बारे में वास्तविक जानकारी होती है। यह design ही phone के अनुभव को बेहतर बनाता है, क्योंकि server को हमेशा हर asset की पूर्ण स्थिति का पता होता है।
PhotoPrism फाइलों को पढ़ता है। आप एक originals folder mount करते हैं जिसे आप पहले से नियंत्रित करते हैं, और PhotoPrism उस पर एक index बनाता है। आपकी directory tree आपकी ही रहती है। यदि आप कल PhotoPrism हटा देते हैं, तो photos उन्हीं folders में उन्हीं नामों के साथ वहीं रहती हैं, और PhotoPrism ने उनके बगल में sidecar YAML files लिखी होंगी जो यह बताती हैं कि उसने क्या सीखा है।
यह एक अंतर बाकी सब कुछ स्पष्ट कर देता है। Immich का mobile support मजबूत है क्योंकि यह ingestion को नियंत्रित करता है। PhotoPrism का library curation मजबूत है क्योंकि यह कभी भी आपकी मौजूदा संरचना से नहीं टकराता। Immich उस परिवार के लिए बेहतर उत्तर है जिनकी photos phones पर रहती हैं। PhotoPrism उस archive के लिए बेहतर उत्तर है जो disk पर रहता है।
Hardware appetite: Immich की अधिक मांग
दस्तावेजीकृत (documented) मेमोरी की न्यूनतम सीमाएं काफी अलग हैं, और एक छोटे VPS पर यह आमतौर पर निर्णय लेने वाला कारक होता है।
The data behind this chart
[
{
"label": "Immich",
"min_ram_gb": 6,
"recommended_ram_gb": 8
},
{
"label": "PhotoPrism",
"min_ram_gb": 3,
"recommended_ram_gb": 4
}
]Immich 6 GB RAM को न्यूनतम और 8 GB को अनुशंसित (recommended) के रूप में सूचीबद्ध करता है, साथ ही यह नोट भी देता है कि 4 GB वाली मशीन पर इसे केवल मशीन लर्निंग बंद करके ही चलाया जा सकता है। PhotoPrism 3 GB फिजिकल मेमोरी और दो CPU कोर की मांग करता है, और कहता है कि RAM की मात्रा कोर की संख्या के अनुरूप होनी चाहिए।
यह अंतर वास्तविक है, और यह मशीन लर्निंग कंटेनर के कारण है। Immich अपने मॉडल्स को एक अलग immich-machine-learning सर्विस में चलाता है जो CLIP (contrastive language image pretraining) और फेस डिटेक्शन मॉडल्स को मेमोरी में लोड करती है। 2 GB वाली मशीन पर kernel उस कंटेनर को kill कर देता है, और आप इसे 137 कोड के साथ exit होते देखते हैं, जो Docker की ओर से out of memory kill का संकेत है। PhotoPrism के TensorFlow मॉडल्स छोटे होते हैं और यह क्रैश होने के बजाय अपनी क्षमता कम कर लेता है: 1 GB या उससे कम RAM वाली मशीनों पर यह क्रैश होने के बजाय RAW कन्वर्जन और TensorFlow को डिसेबल कर देता है।
दोनों प्रोजेक्ट्स swap की मांग करते हैं। PhotoPrism के दस्तावेज़ स्पष्ट रूप से सर्वर पर कम से कम 4 GB swap होने की बात कहते हैं। किसी भी एक को इंस्टॉल करने से पहले इसे जोड़ लें।
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h को अब एक Swap: लाइन प्रिंट करनी चाहिए जिसमें 4.0Gi दिखाई दे। यदि यह 0B प्रिंट करता है, तो swapon विफल हो गया है, आमतौर पर इसलिए क्योंकि फाइलसिस्टम fallocate का समर्थन नहीं करता है, और sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 इसका विकल्प (fallback) है। कंटेनर मेमोरी की सीमाएं (ceilings) यहाँ भी मायने रखती हैं, और Docker Compose में मेमोरी लिमिट सेट करना वह तरीका है जिससे आप एक अधिक संसाधन लेने वाली सर्विस को पूरे सर्वर को डाउन करने से रोक सकते हैं।
एक और आवश्यकता लोगों को उलझाती है। Immich का Postgres डेटाबेस एक सामान्य Unix फाइलसिस्टम पर होना चाहिए जिसमें वास्तविक ओनरशिप और अनुमतियां (permissions) हों, यह लोकल स्टोरेज पर होना चाहिए, कभी भी नेटवर्क शेयर पर नहीं। PhotoPrism भी अपनी डेटाबेस फाइलों के बारे में यही कहता है। किसी भी ऐप का डेटाबेस माउंटेड ऑब्जेक्ट स्टोर पर चलाना सुरक्षित नहीं है।
प्रत्येक को कैसे इंस्टॉल करें
दोनों इंस्टॉलेशन के लिए एक वेंडर compose file और एक कमांड की आवश्यकता होती है। सबसे पहले Docker Engine और Compose plugin को सेटअप करें, जैसा कि Docker Compose on a VPS के लिए हमारी गाइड में बताया गया है।
Immich हर release के साथ अपनी compose file और एक उदाहरण environment file प्रकाशित करता है।
sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envकिसी भी चीज़ को शुरू करने से पहले .env को एडिट करें। UPLOAD_LOCATION वह स्थान है जहाँ आपकी ओरिजिनल फाइलें रहेंगी, और DB_PASSWORD को डिफ़ॉल्ट से बदलकर केवल A-Za-z0-9 वर्णों का उपयोग करना होगा, क्योंकि विशेष वर्ण कनेक्शन स्ट्रिंग को खराब कर देते हैं। इसके बाद इसे शुरू करें।
docker compose up -d
docker compose psवेब इंटरफ़ेस port 2283 पर प्रतिक्रिया देता है। उस पेज के माध्यम से रजिस्टर किया गया पहला अकाउंट एडमिनिस्ट्रेटर बन जाता है, इसलिए इंटरनेट पर एक ओपन इंस्टेंस छोड़ने के बजाय, तुरंत उस तक पहुँचें और रजिस्टर करें।
PhotoPrism एक compose file प्रदान करता है जिसमें पहले से ही MariaDB शामिल है।
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlcompose.yaml को खोलें और पहली बार शुरू करने से पहले PHOTOPRISM_ADMIN_PASSWORD को बदलें। दस्तावेज़ इस बारे में स्पष्ट हैं: ऐप उस फ़ाइल में मौजूद किसी भी शुरुआती पासवर्ड के साथ शुरू होता है, न्यूनतम लंबाई 8 वर्ण है, और डिफ़ॉल्ट मान का उपयोग कभी भी पब्लिक सर्वर पर नहीं किया जाना चाहिए। उसी समय originals वॉल्यूम को उस फ़ोल्डर पर सेट करें जिसमें आपकी तस्वीरें मौजूद हैं।
docker compose up -d
docker compose logs -f photoprismPhotoPrism user admin के साथ port 2342 पर response देता है। किसी भी app को सीधे expose नहीं करना चाहिए। इसके सामने TLS (transport layer security) वाला reverse proxy रखें। यही setup Docker, TLS और backups के साथ self-hosted Nextcloud के लिए भी उपयोग किया जाता है। यदि उस VPS पर photos के अलावा भी services चलने लगें, तो जोड़ी गई प्रत्येक service के लिए यही सीमित exposure रखें। self-hosted RustDesk relay के लिए केवल उसके अपने दो ports reachable होने चाहिए। इसके अलावा कुछ भी reachable नहीं होना चाहिए।
किसका फोन ऐप बेहतर है
यहीं पर ये दोनों प्रोजेक्ट्स सबसे अलग हैं, और यही कारण है कि ज्यादातर लोग अंत में Immich का चुनाव करते हैं।
Immich Android और iOS के लिए आधिकारिक ऐप्स उपलब्ध कराता है। ये बैकग्राउंड में कैमरा रोल का बैकअप लेते हैं, जिसका अर्थ है कि नई तस्वीरें किसी के ऐप खोले बिना ही फोन से सर्वर पर चली जाती हैं। ऐप को एक HTTPS endpoint की आवश्यकता होती है, इसलिए यदि आप घर से बाहर इसका उपयोग करने की योजना बना रहे हैं, तो reverse proxy का होना अनिवार्य है।
PhotoPrism का कोई आधिकारिक नेटिव ऐप नहीं है। यह एक progressive web app प्रदान करता है, जिसे आप ब्राउज़र से होम स्क्रीन पर जोड़ सकते हैं, और यह फोन से सिंक करने के तरीके के रूप में WebDAV (web distributed authoring and versioning) का उपयोग करने का सुझाव देता है। इसके लिए प्रोजेक्ट PhotoSync नामक एक थर्ड-पार्टी ऐप की सिफारिश करता है, जिसे WebDAV के माध्यम से /import/ या /originals/ डायरेक्टरी की ओर पॉइंट किया जाता है। यह काम करता है, लेकिन यह एक सशुल्क थर्ड-पार्टी ऐप है जो वह काम कर रहा है जिसे Immich अपने स्वयं के क्लाइंट के भीतर ही कर देता है।
यदि परिवार के कई सदस्यों के लिए स्वचालित फोन बैकअप की आवश्यकता है, तो इसका उत्तर स्पष्ट है। Immich।
मशीन लर्निंग आपको वास्तव में क्या प्रदान करती है
Immich CLIP का उपयोग करके आपकी लाइब्रेरी पर सिमेंटिक सर्च (semantic search) करता है, इसलिए "red bicycle in snow" जैसी क्वेरी उन तस्वीरों को भी ढूंढ लेती है जिन्हें किसी ने कभी टैग नहीं किया था। यह फेस डिटेक्शन (face detection), क्लस्टरिंग और डुप्लीकेट डिटेक्शन भी करता है। CPU पर बड़े इम्पोर्ट की इंडेक्सिंग बैकग्राउंड में घंटों चलती है, जो सामान्य है और इसके लिए GPU (graphics processing unit) की आवश्यकता नहीं होती है।
PhotoPrism TensorFlow के साथ छवियों को लेबल में वर्गीकृत करता है, चेहरों का पता लगाकर उन्हें लोगों के समूहों में व्यवस्थित करता है, और स्थानों का मैप बनाने के लिए लोकेशन मेटाडेटा को पढ़ता है। मैप वह फीचर है जिसके लिए लोग इसे चुनते हैं: बीस वर्षों की तस्वीरों को इस आधार पर ब्राउज़ करना कि वे कहाँ ली गई थीं, एक बिल्कुल अलग अनुभव है। यही विचार अन्य मीडिया संग्रहों पर भी काम करता है, और Jellyfin के लिए Halcyon का 90s वीडियो स्टोर फ्रंट एंड इसका फिल्म संस्करण है, जो सूची के बजाय शेल्फ के आधार पर ब्राउज़िंग की सुविधा देता है। फेस रिकग्निशन (face recognition) मुफ्त कम्युनिटी एडिशन में शामिल है। सशुल्क Essentials और Plus मेंबरशिप में बेहतर मैप लेयर्स, अधिक यूजर रोल्स और यूजर मैनेजमेंट इंटरफेस जैसे अतिरिक्त फीचर्स मिलते हैं, जिनकी कीमत जुलाई 2026 तक कुछ यूरो प्रति माह से शुरू होती है।
Immich पूरी तरह से मुफ्त है और इसमें कोई सशुल्क टियर नहीं है। PhotoPrism का कोर मुफ्त है, जिसमें वैकल्पिक सशुल्क अतिरिक्त फीचर्स उपलब्ध हैं।
बैकअप तय करते हैं कि डेटा सुरक्षित रहेगा या नहीं
बिना बैकअप वाला फोटो सर्वर एक डिस्क फेलियर की दूरी पर है, जिससे परिवार का सारा डेटा खो सकता है। दोनों ऐप्स के लिए दो बैकअप आवश्यक हैं: डेटाबेस और फाइलें।
Immich के लिए, Postgres कंटेनर से डेटाबेस को डंप करें और अपलोड लोकेशन को कॉपी करें।
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzइसके बाद UPLOAD_LOCATION का बैकअप लें। अपूरणीय डेटा रखने वाले फोल्डर upload, library और profile हैं। thumbs और encoded-video फोल्डरों को घंटों CPU समय खर्च करके दोबारा बनाया जा सकता है। केवल डेटाबेस डंप से कुछ भी रिस्टोर नहीं होता, क्योंकि इसमें केवल मेटाडेटा होता है।
PhotoPrism के लिए, इंडेक्स की अपनी कमांड होती है।
docker compose exec photoprism photoprism backup -i -fयह storage/backup/ के अंतर्गत एक SQL डंप लिखता है। इसके बाद originals फोल्डर और storage फोल्डर को कॉपी करें। चूंकि PhotoPrism प्रत्येक फोटो का विवरण देने वाली साइडकार YAML फाइलें भी लिखता है, इसलिए खोए हुए इंडेक्स को केवल फाइलों से दोबारा बनाया जा सकता है। दशकों तक सुरक्षित रखने वाले आर्काइव के लिए यह एक बड़ा लाभ है।
आप जो भी चुनें, उन backups को निर्धारित schedule पर encrypted, deduplicated restic backups to remote storage के माध्यम से server से बाहर भेजें। Library वाली ही disk पर रखा backup, backup नहीं होता। Job के fail होने पर notification भेजने की व्यवस्था करें, क्योंकि March में चुपचाप बंद हुआ backup उस backup जैसा ही दिखता है जो पिछली रात चला था—जब तक कि आपको उसकी जरूरत न पड़े। self-hosted ntfy server उसी शाम वह failure आपके phone तक पहुंचा देगा।
आपको कौन सा चलाना चाहिए
यदि आपकी तस्वीरें फोन पर हैं, यदि एक से अधिक व्यक्ति को अपना कैमरा रोल बैकअप करना है, और यदि आप सर्वर को 6 GB या उससे अधिक RAM दे सकते हैं, तो Immich चलाएं। यह Google Photos के सबसे करीब का विकल्प है जिसे आप स्वयं होस्ट कर सकते हैं, और इसका मोबाइल अनुभव ही इसकी मुख्य विशेषता है। हमारी Immich इंस्टॉलेशन गाइड में मेमोरी से संबंधित समस्याओं और अपग्रेड के दौरान आने वाली बाधाओं को विस्तार से समझाया गया है।
यदि आपके पास पहले से ही डिस्क पर फोटो का संग्रह है, यदि आप मैप्स, मेटाडेटा और अपनी फोल्डर संरचना को बनाए रखने की परवाह करते हैं, या यदि आपके VPS में 4 GB RAM है और आप स्वैपिंग के बजाय एक कार्यशील लाइब्रेरी चाहते हैं, तो PhotoPrism चलाएं। यह एक बेहतर क्यूरेशन टूल है और कम हार्डवेयर संसाधनों पर अधिक सुचारू रूप से चलता है।
दोनों को एक साथ चलाना भी एक उचित विकल्प है। Immich दैनिक फोन बैकअप को संभालता है, और साल में एक बार आप चुनिंदा तस्वीरों को अपने आर्काइव में व्यवस्थित कर सकते हैं और PhotoPrism को उसे इंडेक्स करने दे सकते हैं। वे आपस में टकराते नहीं हैं, क्योंकि PhotoPrism फोल्डर्स को रीड करता है जबकि Immich का अपना डेटाबेस होता है।
FAQ
क्या PhotoPrism और Immich एक ही photo folder साझा कर सकते हैं?
दोनों दिशाओं में सुरक्षित रूप से नहीं। PhotoPrism एक originals फोल्डर को पढ़ता है और आपकी इमेजेस के साथ sidecar YAML फाइलें लिखता है, जबकि Immich यह अपेक्षा करता है कि उसका upload लोकेशन पूरी तरह उसके नियंत्रण में हो। आप PhotoPrism को Immich के library फोल्डर की read-only कॉपी दिखा सकते हैं ताकि आप उसे ब्राउज़ कर सकें, लेकिन दोनों ऐप्स को एक ही फाइल मैनेज न करने दें। ऐसा इसलिए है क्योंकि Immich का स्टोरेज टेम्पलेट इंडेक्सिंग के दौरान PhotoPrism के लिए एसेट्स को मूव या रीनेम कर सकता है।
क्या Immich इतना स्थिर है कि मेरी तस्वीरों की एकमात्र कॉपी उसी में रखी जाए?
किसी भी self-hosted ऐप में किसी भी चीज़ की एकमात्र कॉपी नहीं रखनी चाहिए। Immich में अक्सर breaking changes आते हैं, और एक लापरवाही भरा docker compose pull डेटाबेस को स्टार्ट होने से रोक सकता है। इसलिए अपने वर्ज़न को पिन करें और अपग्रेड करने से पहले release notes पढ़ें। मूल फाइलों का बैकअप सर्वर के बाहर रखें, इससे जोखिम कम रहता है।
Immich का machine learning कंटेनर बार-बार रीस्टार्ट क्यों हो रहा है?
यह बहुत अधिक मेमोरी इस्तेमाल करने के कारण बंद (kill) हो रहा है। docker compose ps चलाएं और देखें कि क्या machine learning सर्विस कोड 137 के साथ बंद हो रही है, जो कि kernel out of memory killer का संकेत है। swap जोड़ें, या कंटेनर को मेमोरी लिमिट दें ताकि वह kill होने के बजाय थ्रॉटल हो जाए, या 4 GB वाले मशीन पर machine learning को पूरी तरह डिसेबल कर दें। इसके बिना सर्च काम करना बंद कर देता है, लेकिन बाकी Immich ठीक चलता है।
क्या PhotoPrism को MariaDB की आवश्यकता है, या SQLite काम करेगा?
SQLite काम करता है और एक व्यक्तिगत लाइब्रेरी के लिए ठीक है, लेकिन इसका उपयोग करने पर PhotoPrism खुद को चार वर्कर्स तक सीमित कर लेता है। डॉक्यूमेंटेशन MariaDB पर स्विच करने की सलाह देता है क्योंकि यह उच्च concurrency को बेहतर तरीके से संभालता है। प्रोजेक्ट द्वारा प्रदान की गई compose फाइल में पहले से ही MariaDB शामिल है, इसलिए अनुशंसित रास्ता वही है जो डिफ़ॉल्ट है।
मुझे अपनी लाइब्रेरी के आकार से कितनी अधिक डिस्क स्पेस का बजट रखना चाहिए?
किसी भी ऐप के लिए, अपनी ओरिजिनल फाइलों के आकार के ऊपर 10 से 20 प्रतिशत अतिरिक्त जगह रखें। यह जनरेट किए गए थंबनेल और ट्रांसकोडेड वीडियो प्रीव्यू के लिए आवश्यक है। 200 GB के कलेक्शन के लिए लगभग 300 GB का वॉल्यूम रखें, ताकि डेटाबेस, लोकल बैकअप कॉपी और भविष्य की ग्रोथ के लिए जगह बनी रहे।