PhotoPrism vs Immich: Mana Pilihan Terbaik?
Bandingkan dua pelayan foto kendiri ini. Ketahui perbezaan penggunaan RAM, fungsi aplikasi telefon, sokongan peta, serta arahan sandaran Docker yang tepat untuk VPS anda.
PhotoPrism berbanding Immich: jawapan ringkas
Pemilihan antara PhotoPrism dan Immich adalah pilihan antara dua fungsi yang berbeza, bukan dua versi produk yang sama. Immich menggantikan Google Photos: aplikasi telefon akan menyandarkan gulungan kamera anda secara automatik, dan garis masa yang dipaparkan akan kelihatan biasa bagi sesiapa yang beralih daripada galeri telefon. PhotoPrism pula menyusun pustaka foto yang sedia ada: ia mengindeks folder fail pada cakera, membaca metadata fail tersebut, meletakkannya pada peta, dan membiarkan fail tersebut kekal di lokasi asalnya.
Pilih Immich jika masalah anda ialah "telefon saya penuh dan saya mahu berhenti menggunakan Google Photos". Pilih PhotoPrism jika masalah anda ialah "saya mempunyai 400 GB foto pada pemacu dan saya tidak dapat mencari apa-apa di dalamnya". Kedua-duanya adalah sumber terbuka, kedua-duanya berjalan sebagai bekas Docker pada VPS biasa, dan kedua-duanya mengindeks serta mencari pustaka anda tanpa menghantar apa-apa maklumat kepada pihak ketiga.
Perbezaan falsafah dan sebab ia menentukan segala-galanya
Immich memiliki fail-fail tersebut. Anda menghalakannya ke lokasi muat naik, aplikasi telefon atau pemuat naik web menghantar fail asal masuk, dan Immich menyimpannya di bawah laluan sendiri dengan penamaan tersendiri. Pangkalan data memegang kebenaran tentang album, wajah dan carian. Reka bentuk itulah yang menjadikan pengalaman telefon bagus, kerana pelayan sentiasa mengetahui status penuh setiap aset.
PhotoPrism membaca fail-fail tersebut. Anda melakukan mount pada folder originals yang sudah anda kawal, dan PhotoPrism membina indeks di atasnya. Struktur direktori anda kekal milik anda. Jika anda membuang PhotoPrism esok, foto-foto tersebut kekal di sana dalam folder yang sama dengan nama yang sama, dan fail YAML sidecar yang ditulis oleh PhotoPrism untuk menerangkan perkara yang dipelajarinya kekal dalam folder storan sendiri, iaitu tempat ia menyimpannya secara lalai.
Perbezaan tunggal itu menjelaskan kebanyakan perkara lain. Immich mempunyai sokongan mudah alih yang kukuh kerana ia mengawal proses pengambilan data (ingestion). PhotoPrism mempunyai penyusunan pustaka yang kukuh kerana ia tidak pernah bercanggah dengan struktur sedia ada anda. Immich ialah jawapan yang lebih baik untuk keluarga yang foto-fotonya berada dalam telefon. PhotoPrism ialah jawapan yang lebih baik untuk arkib yang berada dalam cakera.
Keperluan perkakasan: Immich memerlukan lebih banyak sumber
Had memori minimum yang didokumentasikan adalah jauh berbeza, dan pada VPS kecil, ini biasanya menjadi faktor penentu.
Data di sebalik carta ini
[
{
"label": "Immich",
"min_ram_gb": 6
},
{
"label": "PhotoPrism",
"min_ram_gb": 3
}
]Immich mendokumentasikan 6 GB RAM sebagai minimum dan 8 GB sebagai saranan, dengan nota bahawa mesin 4 GB hanya boleh menjalankannya jika pembelajaran mesin (machine learning) dimatikan. PhotoPrism mendokumentasikan 3 GB memori fizikal dan dua teras CPU, serta menyatakan bahawa melebihi minimum tersebut, jumlah RAM harus sepadan dengan bilangan teras.
Jurang ini adalah nyata, dan ia berpunca daripada kontena pembelajaran mesin. Immich menjalankan modelnya dalam servis immich-machine-learning berasingan yang memuatkan model CLIP (contrastive language image pretraining) dan pengesanan wajah ke dalam memori. Pada mesin 2 GB, kernel akan mematikan kontena tersebut, dan anda akan melihat ia keluar dengan kod 137, iaitu status bagi proses yang dimatikan dengan signal 9, yang merupakan cara Docker menunjukkan ralat kehabisan memori (out of memory). Model terbina dalam PhotoPrism berjalan pada ONNX, yang menurut dokumentasinya secara amnya berfungsi dengan baik pada semua jenis perkakasan, dan ia mempunyai mekanisme sandaran untuk memori terhad: pada mesin dengan 1 GB atau kurang, ia melumpuhkan penukaran RAW dan pengecaman wajah. Walau bagaimanapun, itu bukan jaminan kestabilan. Di bawah minimum 3 GB, projek tersebut memberi amaran tentang ketidakstabilan dan masalah prestasi, jadi anggaplah had minimum itu sebagai tahap terendah.
Dokumentasi PhotoPrism menyatakan dengan jelas keperluan sekurang-kurangnya 4 GB swap pada pelayan. Halaman keperluan Immich tidak menyebut tentang swap, tetapi swap memberikan ruang tambahan kepada kontena pembelajaran mesinnya pada mesin kecil. Tambahkannya sebelum anda memasang mana-mana aplikasi tersebut.
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 kini sepatutnya memaparkan baris Swap: yang menunjukkan 4.0Gi. Jika ia memaparkan 0B, maka swapon telah gagal, biasanya kerana sistem fail tidak menyokong fallocate, dan sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 menjadi pilihan sandaran. Had memori kontena juga penting di sini, dan menetapkan had memori dalam Docker Compose adalah cara untuk menghalang satu servis yang menggunakan banyak sumber daripada menyebabkan keseluruhan mesin terhenti. Pengecualiannya ialah PhotoPrism sendiri: dokumentasinya menasihatkan agar tidak menetapkan had memori yang ketat pada kontena tersebut, kerana pengindeksan fail besar memerlukan memori tambahan secara ringkas dan had yang ditetapkan boleh menyebabkan but semula yang tidak dijangka.
Satu lagi keperluan sering memerangkap pengguna. Pangkalan data Postgres Immich mesti berada pada sistem fail Unix biasa dengan pemilikan dan kebenaran yang betul, pada storan tempatan, dan bukan pada perkongsian rangkaian (network share). PhotoPrism memberi amaran agar tidak menyimpan fail pangkalan datanya pada folder rangkaian yang dikongsi dan menyatakan storan SSD tempatan sebagai lokasi terbaik untuknya. Kedua-dua aplikasi tidak selamat untuk dijalankan jika pangkalan datanya berada pada storan objek yang dipasang (mounted object store).
Cara memasang setiap satu
Kedua-dua pemasangan melibatkan fail compose vendor dan satu arahan. Sediakan Docker Engine dan pemalam Compose terlebih dahulu, seperti yang diterangkan dalam panduan kami tentang Docker Compose pada VPS.
Immich menerbitkan fail compose dan contoh fail environment bagi setiap release.
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.envSunting .env sebelum memulakan apa-apa. UPLOAD_LOCATION ialah tempat asal anda akan disimpan. DB_PASSWORD disertakan dengan tetapan lalai yang berfungsi, dan Immich mengesyorkan agar ia ditukar kepada kata laluan rawak, walaupun ia tidak mewajibkannya. Postgres tidak didedahkan kepada umum, jadi kata laluan hanya digunakan untuk pengesahan tempatan, namun menggunakan kata laluan rawak tidak merugikan. Gunakan hanya aksara A-Za-z0-9, kerana dokumentasi Immich menyatakan bahawa aksara lain boleh menyebabkan masalah apabila Docker menghuraikan nilai tersebut. Kemudian, mulakannya.
docker compose up -d
docker compose psAntara muka web menjawab pada port 2283. Akaun pertama yang didaftarkan melalui halaman tersebut akan menjadi pentadbir, jadi akses halaman itu dan daftar dengan segera dan jangan biarkan instans terbuka terbiar di internet.
PhotoPrism menghantar satu fail compose yang sudah merangkumi MariaDB.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlBuka compose.yaml dan tukar PHOTOPRISM_ADMIN_PASSWORD sebelum permulaan pertama. Dokumentasi menyatakan dengan jelas: aplikasi bermula dengan apa jua kata laluan awal yang terdapat dalam fail tersebut, panjang minimum ialah 8 aksara, dan nilai lalai tidak boleh digunakan pada pelayan awam. Tetapkan volum originals ke folder yang menyimpan foto anda pada masa yang sama.
docker compose up -d
docker compose logs -f photoprismPhotoPrism menjawab pada port 2342 dengan pengguna admin. Tiada satu pun aplikasi ini harus didedahkan secara terus. Letakkan reverse proxy dengan TLS (transport layer security) di hadapan, menggunakan bentuk persediaan yang sama seperti yang digunakan untuk Nextcloud yang dihoskan sendiri dengan Docker, TLS dan sandaran, atau pastikan pelayan bersifat peribadi dan aksesnya melalui VPN. Jika VPS tersebut akhirnya mengandungi lebih daripada sekadar foto, gunakan sekatan yang sama pada setiap servis yang anda tambah, kerana relay RustDesk yang dihoskan sendiri hanya memerlukan dua port miliknya sendiri untuk boleh dicapai dan tiada yang lain.
Antara kedua-duanya, yang manakah mempunyai aplikasi telefon yang lebih baik
Ini adalah aspek di mana kedua-dua projek ini paling berbeza, dan ia merupakan sebab utama mengapa kebanyakan orang memilih Immich.
Immich menyediakan aplikasi rasmi untuk Android dan iOS. Aplikasi ini melakukan sandaran latar belakang untuk gulungan kamera, yang bermaksud foto baharu akan dipindahkan dari telefon tanpa perlu membuka sebarang aplikasi. Untuk menggunakannya di luar rumah, Immich mendokumentasikan tiga kaedah: VPN seperti WireGuard atau OpenVPN, Tailscale, atau reverse proxy yang menyediakan HTTPS. Reverse proxy membolehkan aplikasi telefon bersambung tanpa memerlukan aplikasi VPN pada setiap telefon, dan Immich memberi amaran supaya tidak memajukan port 2283 terus ke internet tanpa konfigurasi tambahan.
PhotoPrism tidak mempunyai aplikasi natif rasmi. Ia menyediakan progressive web app, yang boleh ditambah ke skrin utama daripada pelayar, dan ia mendokumentasikan WebDAV (web distributed authoring and versioning) sebagai cara untuk menyegerakkan data dari telefon. Projek ini mengesyorkan aplikasi pihak ketiga bernama PhotoSync untuk tujuan ini, yang dihalakan ke direktori /import/ atau /originals/ melalui WebDAV. Ia berfungsi, namun ia merupakan aplikasi pihak ketiga berbayar yang melakukan tugas yang dilakukan oleh Immich di dalam kliennya sendiri.
Jika sandaran telefon automatik untuk beberapa ahli keluarga adalah keperluan utama, maka keputusannya jelas. Immich.
Apa yang sebenarnya diberikan oleh pembelajaran mesin kepada anda
Immich melakukan carian semantik ke atas pustaka anda menggunakan CLIP, jadi pertanyaan seperti "basikal merah dalam salji" akan menemui foto yang tidak pernah ditanda oleh sesiapa pun. Ia juga melakukan pengesanan dan pengelompokan wajah, serta pengesanan pendua. Pengindeksan import yang besar pada CPU berjalan selama berjam-jam di latar belakang, yang merupakan perkara biasa dan tidak memerlukan GPU (unit pemprosesan grafik).
PhotoPrism mengelaskan imej kepada label dengan model ONNX terbina dalam, mengesan wajah dan mengumpulkan mereka kepada orang dengan model wajah ONNX, serta membaca metadata lokasi untuk membina peta tempat. Fail vision.yml dalam folder konfigurasinya boleh menukar kepada Ollama atau OpenAI untuk label dan kapsyen jika anda mahukannya. Peta tersebut merupakan ciri yang membuatkan pengguna terus menggunakannya: pustaka yang diindeks mengikut tempat kejadian adalah cara yang benar-benar berbeza untuk melayari foto selama dua puluh tahun. Idea yang sama berfungsi pada koleksi media lain, dan antaramuka kedai video 90-an Halcyon untuk Jellyfin adalah versi filem bagi perkara tersebut, melayari mengikut rak dan bukannya mengikut senarai. Pengecaman wajah disertakan dalam edisi Community percuma. Keahlian Essentials dan Plus berbayar menambah ciri tambahan seperti lapisan peta yang lebih kaya, lebih banyak peranan pengguna dan antara muka pengurusan pengguna, bermula daripada beberapa euro sebulan, dibilkan setiap tahun, setakat Oktober 2026.
Immich tidak mempunyai ciri yang disekat oleh bayaran, dan pihak projek menyatakan ia tidak akan berbuat demikian. Ia menjual kunci produk seumur hidup pilihan, $25 untuk seorang pengguna atau $100 untuk keseluruhan pelayan pada harga yang diumumkan oleh Immich pada Julai 2024, tetapi pembelian kunci tidak membuka apa-apa ciri tambahan dan Immich berfungsi tanpa sekatan jika anda tidak membayar. Teras PhotoPrism adalah percuma, dengan tambahan berbayar pilihan.
Sandaran menentukan sama ada anda menyimpannya
Pelayan foto tanpa sandaran hanya menunggu satu kegagalan cakera untuk kehilangan segala-galanya yang dimiliki oleh sesebuah keluarga. Kedua-dua aplikasi memerlukan dua sandaran: pangkalan data dan fail.
Bagi Immich, lakukan dump pangkalan data daripada kontena Postgres dan salin lokasi muat naik.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzKemudian sandarkan UPLOAD_LOCATION. Folder yang menyimpan data yang tidak boleh diganti ialah upload, library dan profile. Folder thumbs dan encoded-video boleh dijana semula, dengan kos masa CPU selama berjam-jam. Dump pangkalan data sahaja tidak memulihkan apa-apa, kerana ia hanya menyimpan metadata.
Bagi PhotoPrism, indeks mempunyai arahannya sendiri.
docker compose exec photoprism photoprism backup -i -fPerintah itu menulis dump SQL di bawah storage/backup/. Kemudian salin folder originals dan folder storage. Oleh kerana PhotoPrism juga menulis fail YAML sidecar yang menerangkan setiap foto, indeks yang hilang boleh dibina semula daripada fail sahaja, yang merupakan kelebihan sebenar untuk arkib yang anda rancang untuk simpan selama beberapa dekad.
Walau apa pun pilihan anda, hantar sandaran tersebut keluar dari pelayan mengikut jadual menggunakan sandaran restic yang disulitkan dan dinyahduplikasi ke storan jauh. Sandaran yang berada pada cakera yang sama dengan pustaka bukanlah sandaran. Konfigurasikan tugas tersebut supaya menghantar pemberitahuan apabila gagal, kerana sandaran yang terhenti secara senyap pada bulan Mac kelihatan sama seperti sandaran yang berjaya dijalankan malam tadi sehingga tiba hari anda memerlukannya, dan pelayan ntfy yang dihos sendiri akan menghantar kegagalan tersebut ke telefon anda pada petang yang sama.
Yang mana satu patut anda jalankan
Jalankan Immich jika foto anda berada dalam telefon, jika lebih daripada seorang perlu membuat sandaran (backup) roll kamera, dan jika anda boleh memperuntukkan 6 GB RAM atau lebih kepada pelayan. Ia merupakan alternatif Google Photos yang paling hampir untuk dihoskan sendiri, dan pengalaman penggunaan mudah alih adalah fokus utamanya. Panduan pemasangan Immich langkah demi langkah kami merangkumi isu kehabisan memori dan perangkap naik taraf secara terperinci.
Jalankan PhotoPrism jika anda sudah mempunyai arkib foto pada cakera, jika anda mementingkan peta dan metadata serta ingin mengekalkan struktur folder sendiri, atau jika VPS anda mempunyai 4 GB RAM dan anda lebih mengutamakan pustaka yang berfungsi berbanding sistem yang kerap melakukan swapping. Ia merupakan alat penyusunan yang lebih baik dan lebih ringan untuk perkakasan berspesifikasi rendah.
Menjalankan kedua-duanya juga adalah munasabah. Immich mengendalikan kemasukan foto harian daripada telefon, dan sekali setahun anda mengasingkan foto pilihan ke dalam arkib anda dan membiarkan PhotoPrism mengindeks arkib tersebut. Kedua-duanya tidak bercanggah, kerana PhotoPrism membaca folder manakala Immich menguruskan storannya sendiri.
FAQ
Bolehkah PhotoPrism dan Immich berkongsi folder foto yang sama?
Tidak selamat jika kedua-duanya mempunyai akses tulis. PhotoPrism mengindeks folder originals dan mempunyai ciri yang menulis ke dalam folder tersebut kecuali jika ia dijalankan dalam mod baca sahaja, manakala Immich menjangkakan ia mempunyai hak milik penuh ke atas kandungan lokasi muat naiknya. Anda boleh menghalakan PhotoPrism ke salinan baca sahaja bagi folder library milik Immich untuk tujuan pelayaran, tetapi jangan benarkan kedua-dua aplikasi mengurus fail yang sama. Ini kerana templat storan Immich boleh mengalih atau menamakan semula aset semasa PhotoPrism sedang melakukan pengindeksan.
Adakah Immich cukup stabil untuk menyimpan satu-satunya salinan foto saya?
Tiada aplikasi self-hosted yang harus menjadi satu-satunya tempat simpanan bagi sebarang data. Immich kini mengikuti pembersihan versi semantik (semantic versioning) dan menyatakan bahawa perubahan yang menjejaskan keserasian (breaking changes) hanya terhad kepada keluaran major. Oleh itu, tetapkan IMMICH_VERSION kepada tag versi major seperti v3, baca nota keluaran, dan kemudian lakukan naik taraf dengan docker compose pull && docker compose up -d. Proses menurunkan versi (downgrading) tidak disokong, walaupun dalam versi minor yang sama, jadi buatlah dump pangkalan data sebelum setiap naik taraf. Pastikan fail asal disandarkan di luar pelayan supaya risiko kekal rendah.
Mengapa kontena machine learning Immich sentiasa dimulakan semula?
Biasanya ia ditamatkan kerana menggunakan terlalu banyak memori. Jalankan docker compose ps --all, kerana kontena yang berhenti tidak akan kelihatan tanpa flag tersebut, dan cari perkhidmatan machine learning yang keluar dengan kod 137. Kod tersebut bermaksud proses itu ditamatkan dengan signal 9; pembunuh memori (out of memory killer) kernel biasanya menjadi punca, tetapi bukan satu-satunya sebab, jadi sahkan perkara ini dengan sudo dmesg | grep -i 'out of memory'. Tambahkan swap, atau lumpuhkan machine learning sepenuhnya pada mesin dengan 4 GB RAM. Had memori pada kontena tidak mengehadkan prestasinya: apabila mencapai had, ia tetap akan ditamatkan, tetapi ia berhenti memonopoli sumber pelayan yang lain. Carian pintar dan pengecaman wajah akan berhenti berfungsi tanpa machine learning, namun fungsi Immich yang lain akan berjalan dengan lancar.
Adakah PhotoPrism memerlukan MariaDB, atau adakah SQLite mencukupi?
SQLite berfungsi dan memadai untuk pustaka peribadi, tetapi PhotoPrism mengehadkan dirinya kepada empat pekerja (workers) apabila menggunakannya. Dokumentasi mencadangkan pertukaran kepada MariaDB kerana ia mengendalikan konkurensi tinggi dengan lebih baik. Fail compose yang dibekalkan oleh projek tersebut sudah pun menyertakan MariaDB, jadi laluan yang disyorkan juga merupakan laluan lalai.
Berapakah ruang cakera yang perlu saya bajetkan melebihi saiz pustaka saya?
Tambahkan 10 hingga 20 peratus daripada saiz fail asal anda untuk kedua-dua aplikasi. Ini bagi menampung lakaran kenit (thumbnails) yang dijana dan pratonton video yang ditranskod. Koleksi bersaiz 200 GB memerlukan kira-kira 220 hingga 240 GB untuk pustaka sahaja, ditambah dengan ruang untuk pangkalan data dan pertumbuhan masa depan. Jika anda juga menyimpan salinan sandaran tempatan yang lengkap pada volum yang sama, fail asal dan salinan tersebut memerlukan sekurang-kurangnya 400 GB sebelum mengambil kira perkara lain. Oleh itu, bajetkan sekitar 450 GB atau letakkan salinan tersebut pada volum yang berasingan.