PhotoPrism বনাম Immich: কোন photo server আপনার জন্য?
PhotoPrism ও Immich-এর বাস্তব তুলনা: RAM-এর ন্যূনতম চাহিদা, ফোন অ্যাপ, map, VPS-এ backup এবং প্রতিটির প্রয়োজনীয় নির্দিষ্ট command জেনে নিন।
PhotoPrism বনাম Immich: সংক্ষিপ্ত উত্তর
PhotoPrism বনাম Immich নির্বাচন করা একই পণ্যের দুটি সংস্করণের মধ্যে নির্বাচন নয়। এটি দুটি ভিন্ন কাজের মধ্যে নির্বাচন। Immich Google Photos-এর বিকল্প: একটি ফোন অ্যাপ স্বয়ংক্রিয়ভাবে আপনার camera roll-এর backup নেয়, এবং আপনি যে timeline পান তা ফোনের gallery ছেড়ে আসা যেকোনো ব্যক্তির কাছে পরিচিত মনে হবে। PhotoPrism আপনার আগে থেকেই থাকা photo library সংগঠিত করে: এটি disk-এর file folder index করে, metadata পড়ে, সেগুলো map-এ দেখায় এবং file-গুলো যেখানে ছিল সেখানেই রাখে।
সমস্যা যদি হয় "আমার ফোনে জায়গা পূর্ণ এবং আমি Google Photos ব্যবহার বন্ধ করতে চাই", তাহলে Immich বেছে নিন। সমস্যা যদি হয় "একটি drive-এ আমার 400 GB photo আছে এবং সেগুলোর কিছুই খুঁজে পাই না", তাহলে PhotoPrism বেছে নিন। দুটিই open source, দুটিই একটি সাধারণ VPS-এ Docker container হিসেবে চলে, এবং দুটিই কোনো third party-কে কিছু না পাঠিয়ে আপনার library index ও search করে।
দর্শনের পার্থক্য, এবং কেন এটিই সবকিছু নির্ধারণ করে
Immich ফাইলগুলোর মালিকানা নিয়ন্ত্রণ করে। আপনি এটিকে একটি আপলোড অবস্থানের দিকে নির্দেশ করেন, ফোন অ্যাপ বা ওয়েব আপলোডার মূল ফাইলগুলো পাঠায়, এবং Immich নিজস্ব পথ ও নামকরণ ব্যবহার করে সেগুলো সংরক্ষণ করে। অ্যালবাম, মুখাবয়ব এবং অনুসন্ধান সম্পর্কে নির্ভরযোগ্য তথ্য ডেটাবেসে থাকে। এই নকশার কারণেই ফোনে ব্যবহারের অভিজ্ঞতা ভালো হয়, কারণ সার্ভার প্রতিটি সম্পদের সম্পূর্ণ অবস্থা সবসময় জানে।
PhotoPrism ফাইলগুলো পড়ে। আপনি ইতিমধ্যে নিয়ন্ত্রণ করেন এমন একটি originals ফোল্ডার মাউন্ট করেন, এবং PhotoPrism সেটির ওপর একটি ইনডেক্স তৈরি করে। আপনার ডিরেক্টরি ট্রি আপনার নিয়ন্ত্রণেই থাকে। আপনি আগামীকাল PhotoPrism সরিয়ে ফেললেও ছবিগুলো একই ফোল্ডারে একই নামে থেকে যাবে, এবং PhotoPrism ছবিগুলোর পাশে সাইডকার YAML ফাইল লিখে যাবে, যেখানে এটি শেখা তথ্য বর্ণনা করবে।
এই একটিমাত্র পার্থক্য বাকি বেশিরভাগ বিষয় ব্যাখ্যা করে। Immich ইনজেশন নিয়ন্ত্রণ করে বলে এর মোবাইল সমর্থন শক্তিশালী। PhotoPrism আপনার বিদ্যমান কাঠামোর সঙ্গে কখনো সংঘাতে যায় না বলে এর লাইব্রেরি কিউরেশন শক্তিশালী। যেসব পরিবারের ছবি ফোনে থাকে, তাদের জন্য Immich ভালো পছন্দ। যে আর্কাইভ ডিস্কে থাকে, তার জন্য PhotoPrism ভালো পছন্দ।
হার্ডওয়্যারের চাহিদা: Immich আরও বেশি সম্পদ চায়
নথিভুক্ত মেমরির ন্যূনতম সীমাগুলোর মধ্যে বড় পার্থক্য রয়েছে। ছোট 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 RAM উল্লেখ করে। সেখানে বলা হয়েছে, machine learning বন্ধ রাখলেই কেবল 4 GB মেমরির মেশিনে এটি চালানো যায়। PhotoPrism 3 GB physical memory এবং দুটি CPU core উল্লেখ করে। তারা আরও বলে, RAM-এর পরিমাণ core-এর সংখ্যার সঙ্গে সামঞ্জস্যপূর্ণ হওয়া উচিত।
এই পার্থক্য বাস্তব। এর কারণ machine learning container। Immich তার model-গুলো একটি পৃথক immich-machine-learning service-এ চালায়। এই service CLIP (contrastive language image pretraining) এবং face detection model মেমরিতে লোড করে। 2 GB-এর মেশিনে kernel ওই container-টি বন্ধ করে দেয়। Docker-এ এটি out of memory kill হিসেবে দেখা যায় এবং container-টি code 137 দিয়ে বন্ধ হয়। PhotoPrism-এর TensorFlow model ছোট। তাই এটি বন্ধ না হয়ে কার্যক্ষমতা কমায়। 1 GB বা তার কম মেমরির মেশিনে এটি crash না করে RAW conversion এবং TensorFlow বন্ধ করে দেয়।
দুই প্রকল্পই swap ব্যবহারের কথা বলে। PhotoPrism-এর নথিতে server-এ অন্তত 4 GB swap থাকার বিষয়টি স্পষ্টভাবে বলা হয়েছে। যেকোনো একটি ইনস্টল করার আগে 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-এর আউটপুটে এখন 4.0Gi দেখানো একটি Swap: line থাকা উচিত। যদি 0B দেখায়, তাহলে সাধারণত filesystem fallocate সমর্থন না করার কারণে swapon ব্যর্থ হয়েছে। সে ক্ষেত্রে sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 fallback হিসেবে ব্যবহৃত হয়। এখানে container-এর memory ceiling-ও গুরুত্বপূর্ণ। একটি অতিরিক্ত memory ব্যবহারকারী service যাতে পুরো মেশিন অচল করে না দেয়, তার জন্য Docker Compose-এ memory limit নির্ধারণ করুন।
আরেকটি প্রয়োজনীয় বিষয় অনেকেই উপেক্ষা করেন। Immich-এর Postgres database-কে প্রকৃত ownership ও permission-সহ একটি সাধারণ Unix filesystem-এ local storage-এ রাখতে হবে। এটি কখনো network share-এ রাখা যাবে না। PhotoPrism-ও তার database file-এর ক্ষেত্রে একই শর্ত দেয়। কোনো app-এর database mounted object store-এ রেখে নিরাপদে চালানো যায় না।
প্রতিটি ইনস্টল কীভাবে করবেন
উভয় ইনস্টলের জন্য একটি vendor compose file এবং একটি command প্রয়োজন। প্রথমে Docker Engine এবং Compose plugin সেট আপ করুন। এটি VPS-এ Docker Compose-এর আমাদের নির্দেশিকায় দেখানো হয়েছে।
Immich প্রতিটি release-এর সঙ্গে তার compose file এবং একটি example 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-এর default মানটি অবশ্যই পরিবর্তন করুন এবং এতে শুধু A-Za-z0-9 অক্ষরগুলো ব্যবহার করুন, কারণ special character connection string নষ্ট করে। এরপর এটি চালু করুন।
docker compose up -d
docker compose psWeb interface port 2283-এ সাড়া দেয়। ওই পৃষ্ঠার মাধ্যমে নিবন্ধিত প্রথম account-টি administrator হয়। তাই এটি দ্রুত খুলে account register করুন। ইন্টারনেটে উন্মুক্ত instance রেখে দেবেন না।
PhotoPrism এমন একটি compose file সরবরাহ করে, যাতে MariaDB আগে থেকেই অন্তর্ভুক্ত থাকে।
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlপ্রথমবার চালু করার আগে compose.yaml খুলে PHOTOPRISM_ADMIN_PASSWORD পরিবর্তন করুন। ডকুমেন্টেশনে বিষয়টি স্পষ্টভাবে বলা আছে: ওই file-এ থাকা initial password ব্যবহার করেই app চালু হয়। ন্যূনতম দৈর্ঘ্য 8টি অক্ষর। Public server-এ default value কখনো ব্যবহার করবেন না। একই সময়ে originals volume-টি আপনার photos থাকা folder-এ সেট করুন।
docker compose up -d
docker compose logs -f photoprismPhotoPrism user admin হিসেবে port 2342-এ সাড়া দেয়। কোনো app-ই সরাসরি expose করা উচিত নয়। সামনে TLS (transport layer security) সহ একটি reverse proxy রাখুন। সেটআপের ধরনটি Docker, TLS এবং backups সহ self-hosted Nextcloud-এর মতো।
কোনটির ফোন অ্যাপ ভালো
এই ক্ষেত্রেই দুটি প্রকল্পের মধ্যে সবচেয়ে বেশি পার্থক্য দেখা যায়। অধিকাংশ মানুষ শেষ পর্যন্ত Immich বেছে নেওয়ার এটিই প্রধান কারণ।
Immich Android এবং iOS-এর জন্য অফিসিয়াল অ্যাপ প্রকাশ করে। এই অ্যাপগুলো ক্যামেরা রোলের ব্যাকগ্রাউন্ড ব্যাকআপ করে। অর্থাৎ, কাউকে কোনো কিছু খুলতে হয় না; নতুন ছবিগুলো ফোন থেকে স্বয়ংক্রিয়ভাবে চলে যায়। অ্যাপটির জন্য একটি HTTPS endpoint প্রয়োজন। তাই বাড়ির বাইরে ব্যবহার করার পরিকল্পনা থাকলে reverse proxy ঐচ্ছিক নয়।
PhotoPrism-এর কোনো অফিসিয়াল native app নেই। এটি একটি progressive web app প্রকাশ করে, যা আপনি browser থেকে home screen-এ যোগ করতে পারেন। ফোন থেকে sync করার উপায় হিসেবে এটি WebDAV (web distributed authoring and versioning) নথিভুক্ত করে। এ কাজের জন্য প্রকল্পটি PhotoSync নামের একটি third-party app ব্যবহারের সুপারিশ করে। PhotoSync-কে WebDAV-এর মাধ্যমে /import/ অথবা /originals/ directory-তে নির্দেশ করতে হবে। এটি কাজ করে, তবে এখানে একটি paid third-party app এমন কাজ করছে, যা Immich নিজের client-এর মধ্যেই করে।
বেশ কয়েকজন family member-এর জন্য automatic phone backup প্রয়োজন হলে সিদ্ধান্তটি পরিষ্কার। Immich।
মেশিন লার্নিং বাস্তবে আপনাকে যা দেয়
Immich, CLIP ব্যবহার করে আপনার লাইব্রেরিতে semantic search চালায়। তাই "লাল তুষারঢাকা সাইকেল"-এর মতো query এমন ছবিও খুঁজে পায়, যেগুলোতে কেউ কখনও tag যোগ করেনি। এটি face detection, face clustering এবং duplicate detection-ও করে। CPU-তে বড় import-এর indexing ব্যাকগ্রাউন্ডে কয়েক ঘণ্টা চলে। এটি স্বাভাবিক এবং এর জন্য GPU (graphics processing unit) প্রয়োজন হয় না।
PhotoPrism, TensorFlow ব্যবহার করে ছবিকে label-এ শ্রেণিবদ্ধ করে, মুখ শনাক্ত করে মানুষ অনুযায়ী group করে এবং location metadata পড়ে places map তৈরি করে। এই map-ই এমন feature, যার জন্য ব্যবহারকারীরা থেকে যান। কোথায় ছবি তোলা হয়েছে তার ভিত্তিতে সাজানো লাইব্রেরি বিশ বছরের ছবি দেখার জন্য সম্পূর্ণ ভিন্ন একটি পদ্ধতি। Face recognition বিনামূল্যের Community edition-এ অন্তর্ভুক্ত। অর্থপ্রদানের Essentials এবং Plus membership-এ আরও কিছু সুবিধা যোগ হয়, যেমন উন্নত map layer, আরও user role এবং user management interface। July 2026 অনুযায়ী এর মূল্য মাসে কয়েক ইউরো থেকে শুরু।
Immich সম্পূর্ণ বিনামূল্যে এবং এতে কোনো paid tier নেই। PhotoPrism-এর core বিনামূল্যে, তবে ঐচ্ছিক paid extra রয়েছে।
ব্যাকআপই নির্ধারণ করে ডেটা টিকে থাকবে কি না
ব্যাকআপ ছাড়া কোনো photo server-এ একটি disk failure হলেই পরিবারের সব ছবি হারিয়ে যেতে পারে। উভয় অ্যাপের জন্য দুটি ব্যাকআপ দরকার: database এবং files।
Immich-এর ক্ষেত্রে Postgres container থেকে database dump করুন এবং upload location কপি করুন।
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzএরপর UPLOAD_LOCATION ব্যাকআপ নিন। অপূরণীয় data থাকা folder হল upload, library এবং profile। thumbs এবং encoded-video folder পুনরায় তৈরি করা যায়, তবে এতে কয়েক ঘণ্টা CPU time লাগতে পারে। Database dump একা কোনো কিছু restore করতে পারে না, কারণ এতে শুধু metadata থাকে।
PhotoPrism-এর index-এর জন্য আলাদা command রয়েছে।
docker compose exec photoprism photoprism backup -i -fএটি storage/backup/-এর অধীনে একটি SQL dump লেখে। এরপর originals folder এবং storage folder কপি করুন। PhotoPrism প্রতিটি photo বর্ণনা করে sidecar YAML file-ও লেখে। তাই হারানো index শুধু files ব্যবহার করেই পুনর্নির্মাণ করা যায়। কয়েক দশক ধরে সংরক্ষণ করার পরিকল্পনা থাকা archive-এর জন্য এটি একটি গুরুত্বপূর্ণ সুবিধা।
আপনি যেটিই বেছে নিন, remote storage-এ encrypted, deduplicated restic backups ব্যবহার করে নির্ধারিত সময়সূচি অনুযায়ী server-এর বাইরে ব্যাকআপ পাঠান। Library থাকা একই disk-এ রাখা ব্যাকআপ প্রকৃত ব্যাকআপ নয়।
কোনটি চালাবেন
আপনার ছবিগুলো ফোনে থাকলে, একাধিক ব্যক্তির ক্যামেরা রোল ব্যাক আপ করার প্রয়োজন হলে এবং আপনি server-কে 6 GB RAM বা তার বেশি দিতে পারলে Immich চালান। এটি নিজে host করা যায় এমন Google Photos-এর সবচেয়ে কাছাকাছি বিকল্প, এবং এর মূল সুবিধা mobile অভিজ্ঞতা। আমাদের ধাপে ধাপে Immich ইনস্টল নির্দেশিকা-তে memory kill এবং upgrade-এর সমস্যাগুলো বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
আপনার disk-এ আগে থেকেই photo archive থাকলে, maps ও metadata গুরুত্বপূর্ণ হলে এবং নিজের folder structure বজায় রাখতে চাইলে, অথবা আপনার VPS-এ 4 GB RAM থাকলে PhotoPrism চালান। এ ক্ষেত্রে swapping করা library-এর বদলে কার্যকর library পাওয়াই ভালো। PhotoPrism curation-এর জন্য বেশি উপযোগী এবং কম ক্ষমতার hardware-এর ওপর কম চাপ ফেলে।
দুটিই চালানো যুক্তিসঙ্গত হতে পারে। Immich প্রতিদিনের phone ingestion পরিচালনা করবে। বছরে একবার আপনি রাখতে চান এমন ছবিগুলো archive-এ সাজিয়ে PhotoPrism-কে সেগুলো index করতে দিতে পারেন। দুটির মধ্যে conflict হয় না, কারণ PhotoPrism folder পড়ে, আর Immich নিজের folder structure পরিচালনা করে।
FAQ
PhotoPrism এবং Immich কি একই photo folder শেয়ার করতে পারে?
উভয় দিক থেকে নিরাপদে নয়। PhotoPrism একটি originals folder পড়ে এবং আপনার image-গুলোর পাশে sidecar YAML file লেখে, অন্যদিকে Immich আশা করে যে তার upload location-এর বিষয়বস্তুর সম্পূর্ণ নিয়ন্ত্রণ তার নিজের থাকবে। আপনি Immich-এর library folder-এর একটি read-only copy-তে PhotoPrism নির্দেশ করে সেটি browse করতে পারেন। তবে উভয় app-কে একই file পরিচালনা করতে দেবেন না, কারণ Immich indexing করার সময় তার storage template ব্যবহার করে PhotoPrism-এর অধীনে থাকা asset সরাতে বা rename করতে পারে।
আমার photo-গুলোর একমাত্র copy রাখার জন্য Immich কি যথেষ্ট স্থিতিশীল?
কোনো self-hosted app-এর কাছেই কখনো কোনো কিছুর একমাত্র copy রাখা উচিত নয়। Immich প্রায়ই breaking change-সহ release হয়, এবং অসতর্ক docker compose pull database-কে start হতে বাধা দিতে পারে। তাই version pin করুন এবং upgrade করার আগে release notes পড়ুন। Original file-গুলো server-এর বাইরে backup করে রাখুন, তাহলে ঝুঁকি কম থাকবে।
Immich machine learning container বারবার restart হচ্ছে কেন?
অতিরিক্ত memory ব্যবহার করার কারণে এটি kill হচ্ছে। docker compose ps চালিয়ে machine learning service code 137 দিয়ে exit করছে কি না দেখুন। এটি kernel-এর out of memory killer-এর সংকেত। Swap যোগ করুন, অথবা container-এর memory limit নির্ধারণ করুন যাতে এটি kill না হয়ে throttle হয়। বিকল্পভাবে, 4 GB machine-এ machine learning সম্পূর্ণভাবে disable করুন। এটি ছাড়া search কাজ করবে না, তবে Immich-এর বাকি অংশ স্বাভাবিকভাবে চলবে।
PhotoPrism-এর কি MariaDB দরকার, নাকি SQLite ব্যবহার করলেই হবে?
SQLite কাজ করে এবং ব্যক্তিগত library-এর জন্য যথেষ্ট। তবে এটি ব্যবহার করলে PhotoPrism নিজেকে চারটি worker-এ সীমাবদ্ধ রাখে। Documentation-এ MariaDB-তে switching করার পরামর্শ দেওয়া হয়েছে, কারণ এটি বেশি concurrency ভালোভাবে পরিচালনা করে। Project-এর প্রকাশিত compose file-এ MariaDB আগে থেকেই অন্তর্ভুক্ত আছে। তাই প্রস্তাবিত পদ্ধতিই default পদ্ধতি।
Library-এর আকারের অতিরিক্ত কত disk space বরাদ্দ করা উচিত?
উভয় app-এর ক্ষেত্রে original-এর আকারের উপর 10 থেকে 20 percent অতিরিক্ত ধরুন। এতে generated thumbnail এবং transcoded video preview-এর জন্য জায়গা থাকবে। 200 GB collection-এর জন্য database, local backup copy এবং ভবিষ্যৎ বৃদ্ধির জায়গা রাখলে মোটামুটি 300 GB volume প্রয়োজন হবে।