PhotoPrism یا Immich: کون سا photo server بہتر ہے؟
PhotoPrism اور Immich کا عملی موازنہ: RAM کی حقیقی کم از کم ضرورت، فون apps، maps، اور VPS پر درکار backup commands سمیت درست انتخاب جانیں۔
PhotoPrism اور Immich: مختصر جواب
PhotoPrism اور Immich کے درمیان انتخاب دو مختلف کاموں کے درمیان انتخاب ہے، نہ کہ ایک ہی پروڈکٹ کے دو ورژنز کے درمیان۔ Immich، Google Photos کی جگہ لیتا ہے: فون ایپ آپ کے کیمرا رول کا خودکار بیک اپ بناتی ہے، اور حاصل ہونے والی ٹائم لائن ہر اس شخص کو مانوس لگتی ہے جو فون گیلری چھوڑ رہا ہو۔ PhotoPrism اس فوٹو لائبریری کو منظم کرتا ہے جو آپ کے پاس پہلے سے موجود ہے: یہ ڈسک پر موجود فائلوں کے فولڈرز کو index کرتا ہے، ان کا metadata پڑھتا ہے، انہیں نقشے پر دکھاتا ہے، اور فائلوں کو بالکل اسی جگہ رہنے دیتا ہے۔
اگر مسئلہ یہ ہے کہ "میرا فون بھر گیا ہے اور میں Google Photos سے جان چھڑانا چاہتا ہوں"، تو Immich منتخب کریں۔ اگر مسئلہ یہ ہے کہ "میرے پاس ایک drive پر 400 GB کی تصاویر ہیں اور مجھے ان میں کچھ نہیں ملتا"، تو PhotoPrism منتخب کریں۔ دونوں open source ہیں، دونوں عام VPS پر Docker containers کے طور پر چلتے ہیں، اور دونوں آپ کی لائبریری کو کسی تیسرے فریق کو کچھ بھیجے بغیر index اور search کرتے ہیں۔
فلسفیانہ فرق، اور یہ کیوں سب کچھ طے کرتا ہے
Immich فائلوں کا انتظام خود کرتا ہے۔ آپ اسے اپ لوڈ کی ایک جگہ دیتے ہیں، فون ایپ یا ویب اپ لوڈر اصل فائلیں وہاں بھیجتا ہے، اور Immich انہیں اپنے راستے کے تحت اپنے نام رکھنے کے طریقے کے ساتھ محفوظ کرتا ہے۔ Database میں albums، faces اور search سے متعلق اصل معلومات محفوظ ہوتی ہیں۔ یہی ڈیزائن فون کے تجربے کو بہتر بناتا ہے، کیونکہ server ہر asset کی مکمل حالت سے ہمیشہ باخبر رہتا ہے۔
PhotoPrism فائلوں کو پڑھتا ہے۔ آپ ایک ایسی originals folder mount کرتے ہیں جس کا انتظام پہلے ہی آپ کے پاس ہے، اور PhotoPrism اس پر ایک index بناتا ہے۔ Directory tree آپ کی ملکیت میں رہتی ہے۔ اگر آپ کل PhotoPrism ہٹا دیں، تو photos وہیں انہی folders میں، انہی ناموں کے ساتھ موجود رہیں گی، اور PhotoPrism ان کے ساتھ sidecar YAML files لکھ چکا ہوگا جن میں اس کی حاصل کردہ معلومات درج ہوں گی۔
یہ ایک فرق باقی زیادہ تر باتوں کی وضاحت کرتا ہے۔ Immich کے پاس مضبوط mobile support ہے، کیونکہ ingestion کا اختیار اسی کے پاس ہوتا ہے۔ PhotoPrism کی library curation مضبوط ہے، کیونکہ یہ آپ کے موجودہ structure میں کبھی مداخلت نہیں کرتا۔ ایسے خاندان کے لیے Immich بہتر انتخاب ہے جن کی photos فونز میں موجود ہوں۔ ایسے archive کے لیے PhotoPrism بہتر انتخاب ہے جو کسی disk پر محفوظ ہو۔
ہارڈویئر کی ضرورت: 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 بتاتا ہے۔ اس میں یہ بھی درج ہے کہ 4 GB والی مشین اسے صرف machine learning بند کرکے چلا سکتی ہے۔ PhotoPrism 3 GB فزیکل میموری اور 2 CPU cores کی ضرورت بتاتا ہے، اور کہتا ہے کہ RAM کی مقدار cores کی تعداد کے مطابق ہونی چاہیے۔
یہ فرق حقیقی ہے، اور اس کی وجہ machine learning container ہے۔ Immich اپنے models کو ایک علیحدہ immich-machine-learning service میں چلاتا ہے، جو CLIP (contrastive language image pretraining) اور face detection models کو میموری میں load کرتی ہے۔ 2 GB والی مشین پر kernel اس container کو ختم کر دیتا ہے، اور آپ اسے code 137 کے ساتھ exit ہوتے دیکھتے ہیں۔ Docker میں out of memory kill اسی طرح ظاہر ہوتا ہے۔ PhotoPrism کے TensorFlow models چھوٹے ہیں، اور پروگرام ختم ہونے کے بجائے اپنی کارکردگی محدود کرتا ہے۔ 1 GB یا اس سے کم میموری والی مشینوں پر یہ crash ہونے کے بجائے RAW conversion اور TensorFlow کو disable کر دیتا ہے۔
دونوں projects swap کا تقاضا کرتے ہیں۔ PhotoPrism کی دستاویزات server پر کم از کم 4 GB swap کی واضح سفارش کرتی ہیں۔ دونوں میں سے کسی کو install کرنے سے پہلے 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: line دکھانی چاہیے جس میں 4.0Gi ہو۔ اگر اس میں 0B ظاہر ہو، تو swapon ناکام ہو گئی ہے۔ عموماً اس کی وجہ یہ ہوتی ہے کہ filesystem fallocate کو support نہیں کرتا، اور sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 متبادل طریقہ ہوتا ہے۔ یہاں container کی memory ceilings بھی اہم ہیں، اور Docker Compose میں memory limits مقرر کرنا ایک service کو پوری مشین کے وسائل استعمال کرکے system کو بند ہونے سے روکنے کا طریقہ ہے۔
ایک اور شرط اکثر نظر انداز ہو جاتی ہے۔ Immich کا Postgres database حقیقی ownership اور permissions والے عام Unix filesystem پر، local storage میں ہونا چاہیے؛ اسے کبھی network share پر نہ رکھیں۔ PhotoPrism بھی اپنی database files کے لیے یہی شرط بیان کرتا ہے۔ کسی بھی app کا database mounted object store پر چلانا محفوظ نہیں ہے۔
ہر ایک کو کیسے انسٹال کریں
دونوں انسٹالیشنز میں vendor کی compose فائل اور ایک command شامل ہے۔ پہلے Docker Engine اور Compose plugin سیٹ اپ کریں، جیسا کہ VPS پر Docker Compose کے لیے ہماری رہنما میں بتایا گیا ہے۔
Immich ہر release کے ساتھ اپنی compose فائل اور ایک مثال environment فائل فراہم کرتا ہے۔
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 حروف استعمال کرتے ہوئے default سے تبدیل کرنا ضروری ہے، کیونکہ special characters connection string کو خراب کر دیتے ہیں۔ اس کے بعد اسے شروع کریں۔
docker compose up -d
docker compose psWeb interface، port 2283 پر دستیاب ہوتا ہے۔ اس صفحے کے ذریعے رجسٹر ہونے والا پہلا account administrator بن جاتا ہے۔ اس لیے اسے فوراً کھول کر رجسٹریشن مکمل کریں، اور instance کو internet پر کھلا نہ چھوڑیں۔
PhotoPrism ایک ایسی compose فائل فراہم کرتا ہے جس میں MariaDB پہلے سے شامل ہے۔
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlپہلی بار شروع کرنے سے پہلے compose.yaml کھولیں اور PHOTOPRISM_ADMIN_PASSWORD تبدیل کریں۔ دستاویزات میں یہ بات واضح طور پر بیان کی گئی ہے: app اسی initial password کے ساتھ شروع ہوتی ہے جو اس فائل میں موجود ہو، کم از کم لمبائی 8 characters ہے، اور public server پر default value کبھی استعمال نہیں کرنی چاہیے۔ اسی وقت originals volume کو اس folder پر سیٹ کریں جس میں آپ کی تصاویر موجود ہیں۔
docker compose up -d
docker compose logs -f photoprismPhotoPrism، port 2342 پر admin user کے ساتھ دستیاب ہوتا ہے۔ کسی بھی app کو براہ راست expose نہیں کرنا چاہیے۔ اس کے سامنے TLS (transport layer security) کے ساتھ reverse proxy رکھیں، جیسا setup 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 تجویز کرتا ہے، جسے WebDAV کے ذریعے /import/ یا /originals/ directory کی طرف کنفیگر کیا جاتا ہے۔ یہ طریقہ کام کرتا ہے، لیکن اس کے لیے ایک paid third-party app استعمال ہوتی ہے، جبکہ Immich یہی کام اپنے client کے اندر انجام دیتا ہے۔
اگر کئی خاندان کے افراد کے لیے فون کا خودکار بیک اپ درکار ہے، تو فیصلہ واضح ہے۔ Immich۔
مشین لرننگ دراصل آپ کو کیا فراہم کرتی ہے
Immich، CLIP استعمال کرتے ہوئے، آپ کی لائبریری میں معنوی تلاش کرتا ہے۔ اس لیے "red bicycle in snow" جیسی query ایسی تصاویر بھی تلاش کر لیتی ہے جنہیں کسی نے کبھی tag نہیں کیا۔ یہ چہروں کی شناخت، ان کی clustering اور duplicate تصاویر کی شناخت بھی کرتا ہے۔ CPU پر بڑی import کی indexing پس منظر میں کئی گھنٹے چل سکتی ہے۔ یہ معمول کی بات ہے اور اس کے لیے GPU (graphics processing unit) ضروری نہیں ہے۔
PhotoPrism، TensorFlow کے ذریعے تصاویر کو labels میں classify کرتا ہے، چہروں کی شناخت کرتا ہے اور انہیں لوگوں کے گروپس میں شامل کرتا ہے۔ یہ location metadata بھی پڑھتا ہے تاکہ places map بنایا جا سکے۔ یہی map وہ feature ہے جس کی وجہ سے لوگ PhotoPrism استعمال کرتے رہتے ہیں۔ تصاویر کو اس مقام کے مطابق دیکھنا جہاں وہ لی گئی تھیں، بیس سال کی تصاویر براؤز کرنے کا واقعی مختلف طریقہ ہے۔ Face recognition مفت Community edition میں شامل ہے۔ ادا شدہ Essentials اور Plus memberships اضافی سہولیات فراہم کرتی ہیں، جیسے زیادہ تفصیلی map layers، مزید user roles اور user management interface۔ July 2026 تک ان کی قیمت چند یورو ماہانہ سے شروع ہوتی ہے۔
Immich مکمل طور پر مفت ہے اور اس میں کوئی paid tier نہیں ہے۔ PhotoPrism کا بنیادی حصہ مفت ہے، جبکہ اضافی paid features اختیاری ہیں۔
بیک اپ فیصلہ کرتا ہے کہ ڈیٹا محفوظ رہے گا یا نہیں
بیک اپ کے بغیر فوٹو سرور میں صرف ایک ڈسک کی خرابی پورے خاندان کا تمام ڈیٹا ضائع کر سکتی ہے۔ دونوں ایپس کے لیے دو بیک اپ درکار ہیں: ڈیٹا بیس اور فائلیں۔
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 ہر تصویر کی وضاحت کرنے والی sidecar YAML فائلیں بھی لکھتا ہے، اس لیے ضائع شدہ انڈیکس صرف فائلوں سے دوبارہ بنایا جا سکتا ہے۔ کئی دہائیوں تک محفوظ رکھنے والے آرکائیو کے لیے یہ ایک اہم فائدہ ہے۔
آپ جو بھی آپشن منتخب کریں، ریموٹ اسٹوریج پر encrypted، deduplicated restic بیک اپس کے ذریعے مقررہ شیڈول کے مطابق یہ بیک اپ سرور سے باہر بھیجیں۔ لائبریری والی اسی ڈسک پر موجود بیک اپ، بیک اپ نہیں ہوتا۔
آپ کو کون سا چلانا چاہیے
اگر آپ کی تصاویر فونز میں ہیں، ایک سے زیادہ افراد کو اپنے camera roll کا بیک اپ لینا ہے، اور آپ server کو 6 GB RAM یا اس سے زیادہ دے سکتے ہیں، تو Immich چلائیں۔ یہ وہ سافٹ ویئر ہے جو خود میزبانی کے ذریعے Google Photos کے سب سے قریب آتا ہے، اور اس کی اصل توجہ mobile experience ہے۔ ہماری مرحلہ وار Immich انسٹالیشن گائیڈ میں memory kills اور upgrade traps کی تفصیل موجود ہے۔
اگر آپ کے پاس پہلے سے disk پر photo archive موجود ہے، آپ maps اور metadata کو اہمیت دیتے ہیں اور اپنی folder structure برقرار رکھنا چاہتے ہیں، یا آپ کے VPS میں 4 GB RAM ہے اور آپ swapping library کے بجائے ایک فعال library چاہتے ہیں، تو PhotoPrism چلائیں۔ یہ تصاویر کی بہتر curation فراہم کرتا ہے اور کم وسائل والے hardware پر کم بوجھ ڈالتا ہے۔
دونوں چلانا بھی مناسب ہے۔ Immich روزانہ فون سے تصاویر درآمد کرتا ہے۔ سال میں ایک بار آپ محفوظ رکھنے والی تصاویر کو اپنے archive میں ترتیب دے سکتے ہیں اور PhotoPrism کو ان کا index بنانے دے سکتے ہیں۔ دونوں میں تضاد نہیں ہوتا، کیونکہ PhotoPrism folders پڑھتا ہے جبکہ Immich اپنی الگ storage کا مالک ہوتا ہے۔
FAQ
کیا PhotoPrism اور Immich ایک ہی تصاویر والے فولڈر کو مشترکہ طور پر استعمال کر سکتے ہیں؟
دونوں سمتوں میں محفوظ طریقے سے نہیں۔ PhotoPrism ایک originals فولڈر کو پڑھتا ہے اور آپ کی تصاویر کے ساتھ موجود جگہ پر sidecar YAML فائلیں لکھتا ہے، جبکہ Immich توقع کرتا ہے کہ اس کے upload location کے مواد کا انتظام اسی کے پاس ہو۔ آپ تصاویر دیکھنے کے لیے PhotoPrism کو Immich کے library فولڈر کی read-only کاپی کی طرف متوجہ کر سکتے ہیں، لیکن دونوں ایپس کو ایک ہی فائلوں کا انتظام نہ کرنے دیں، کیونکہ Immich کا storage template، PhotoPrism کی indexing کے دوران، assets کو منتقل یا rename کر سکتا ہے۔
کیا Immich میری تصاویر کی واحد کاپی رکھنے کے لیے کافی مستحکم ہے؟
نہیں۔ کسی بھی self-hosted ایپ کے پاس کسی چیز کی واحد کاپی نہیں ہونی چاہیے۔ Immich اکثر breaking changes جاری کرتا ہے، اور ایک غیر محتاط docker compose pull database کو start ہونے سے روک سکتا ہے۔ اس لیے اپنا version pin کریں اور upgrade سے پہلے release notes پڑھیں۔ اصل فائلوں کا server سے باہر backup رکھیں؛ اس طرح خطرہ کم رہتا ہے۔
Immich کا machine learning container بار بار restart کیوں ہوتا ہے؟
اسے بہت زیادہ memory استعمال کرنے کی وجہ سے ختم کیا جا رہا ہے۔ docker compose ps چلائیں اور دیکھیں کہ machine learning service code 137 کے ساتھ exit ہو رہی ہے یا نہیں۔ یہ kernel کا out of memory killer ہے۔ swap شامل کریں، یا container کے لیے memory limit مقرر کریں تاکہ اسے ختم کرنے کے بجائے throttle کیا جائے، یا 4 GB machine پر machine learning مکمل طور پر disable کر دیں۔ اس کے بغیر search کام کرنا بند کر دیتی ہے، جبکہ Immich کا باقی حصہ ٹھیک چلتا رہتا ہے۔
کیا PhotoPrism کو MariaDB درکار ہے، یا SQLite کافی ہوگا؟
SQLite کام کرتا ہے اور ذاتی library کے لیے مناسب ہے، لیکن اسے استعمال کرتے وقت PhotoPrism خود کو چار workers تک محدود کر دیتا ہے۔ docs زیادہ concurrency سنبھالنے کی وجہ سے MariaDB پر منتقل ہونے کی سفارش کرتی ہیں۔ project کے جاری کردہ compose file میں MariaDB پہلے ہی شامل ہے، اس لیے تجویز کردہ طریقہ default بھی ہے۔
اپنی library کے سائز سے زیادہ کتنی disk space مختص کرنی چاہیے؟
اپنی originals کے سائز کے اوپر 10 سے 20 فیصد اضافی جگہ رکھیں، چاہے آپ کوئی بھی ایپ استعمال کریں۔ اس میں generated thumbnails اور transcoded video previews شامل ہوتے ہیں۔ 200 GB کی collection کے لیے تقریباً 300 GB کا volume درکار ہوگا، تاکہ database، local backup copy اور آئندہ اضافے کے لیے بھی جگہ باقی رہے۔