PhotoPrismとImmichの違いは?用途別に比較
PhotoPrismとImmichを、実際のRAM下限、スマホアプリ、地図機能、VPSで必要な正確なバックアップコマンドまで比較します。既存ライブラリの整理と自動バックアップの違いも分かります。
PhotoPrism と Immich の違い: 簡潔な回答
PhotoPrism と Immich のどちらを選ぶかは、同じ製品の異なるバージョンから選ぶことではありません。異なる用途のどちらを選ぶかという問題です。Immich は Google Photos の代替です。スマートフォンのアプリがカメラロールを自動的にバックアップし、表示されるタイムラインも、スマートフォンのギャラリーから移行する人にはなじみのあるものです。PhotoPrism は、すでに所有している写真ライブラリを整理します。ディスク上のファイルが入ったフォルダーをインデックス化し、メタデータを読み取り、地図上に表示します。ファイルは元の場所にそのまま残します。
「スマートフォンの容量がいっぱいで、Google Photos から移行したい」という問題なら Immich を選びます。「ドライブに 400 GB の写真があり、その中から何も見つけられない」という問題なら PhotoPrism を選びます。どちらもオープンソースで、通常の VPS 上で Docker コンテナとして実行できます。どちらも、第三者に何も送信せずにライブラリをインデックス化して検索できます。
思想の違いが、すべてを左右する理由
Immich がファイルを管理します。アップロード先を指定すると、スマートフォンアプリまたは Web アップローダーからオリジナルが送信され、Immich は独自のパスと命名規則で保存します。アルバム、顔、検索に関する正確な情報はデータベースに保持されます。この設計により、サーバーは各アセットの完全な状態を常に把握できるため、スマートフォンでの操作性が優れています。
PhotoPrism はファイルを読み取ります。すでに管理している originals フォルダーをマウントし、その中にインデックスを作成します。ディレクトリ構成はそのまま維持できます。明日 PhotoPrism を削除しても、写真は同じフォルダーに同じ名前で残ります。PhotoPrism が学習した内容を記述するサイドカー YAML ファイルは、PhotoPrism がデフォルトで使用する独自のストレージフォルダーに保存されます。
この1つの違いが、その他の大部分を説明します。Immich は取り込みを管理するため、モバイル対応に優れています。PhotoPrism は既存の構成を変更しないため、ライブラリの整理に優れています。写真がスマートフォンに保存されている家族には、Immich のほうが適しています。ディスク上にアーカイブを保存している場合は、PhotoPrism のほうが適しています。
ハードウェア要件:Immich はより多くのリソースを要求する
文書化されているメモリ要件には大きな差があり、小規模な VPS では通常、これが決定的な要因になります。
このグラフのデータ
[
{
"label": "Immich",
"min_ram_gb": 6
},
{
"label": "PhotoPrism",
"min_ram_gb": 3
}
]Immich は、最小要件として 6 GB、推奨値として 8 GB の RAM を記載しています。また、4 GB のマシンでは machine learning を無効にした場合に限り実行できると説明しています。PhotoPrism は 3 GB の物理メモリと 2 つの CPU コアを記載し、最小要件を超える場合は RAM 容量をコア数に合わせる必要があると説明しています。
この差は実際に存在し、machine learning コンテナが原因です。Immich はモデルを別の immich-machine-learning service で実行し、CLIP(contrastive language image pretraining)と顔検出モデルをメモリに読み込みます。2 GB のマシンでは kernel がこのコンテナを強制終了し、Docker では out of memory による kill が発生した状態として、signal 9 で強制終了されたプロセスのステータスである終了コード 137 が表示されます。PhotoPrism の組み込みモデルは ONNX 上で動作します。ドキュメントによると、ONNX モデルは一般にあらゆる種類のハードウェアで良好に動作します。また、メモリが少ない場合のフォールバックも文書化されています。1 GB 以下のマシンでは RAW 変換と顔認識を無効にします。ただし、これは安定性を保証するものではありません。3 GB の最小要件を下回ると、プロジェクトは不安定性と性能問題が発生すると警告しています。そのため、この値はあくまで最小要件として扱ってください。
PhotoPrism のドキュメントは、サーバーに少なくとも 4 GB の swap を確保するよう明記しています。Immich の要件ページに swap への言及はありませんが、小規模なマシンでは swap によって machine learning コンテナに余裕を持たせられます。どちらかをインストールする前に 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: 行を出力するはずです。0B が出力される場合は、通常、ファイルシステムが fallocate をサポートしていないため swapon に失敗しており、sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 がフォールバックとして使用されています。ここではコンテナのメモリ上限も重要です。Docker Compose でメモリ制限を設定することで、1 つの負荷の高い service がマシン全体を停止させる事態を防げます。ただし、PhotoPrism 自体は例外です。PhotoPrism のドキュメントは、コンテナにハードメモリ制限を設定しないよう推奨しています。大きなファイルの indexing では一時的に追加のメモリが必要になり、制限によって予期しない再起動が発生する可能性があるためです。
もう 1 つ、見落とされやすい要件があります。Immich の Postgres database は、実際の所有者と権限を扱える通常の Unix filesystem 上に置き、local storage を使用する必要があります。network share 上に置いてはいけません。PhotoPrism も、database files を共有 network folder に保存しないよう警告し、local SSD storage が最適な保存先だと説明しています。どちらのアプリも、database を mounted object store 上で安全に実行することはできません。
各サービスのインストール方法
どちらも、ベンダーが提供する compose ファイルと1つのコマンドでインストールできます。まず、VPS での Docker Compose のガイドで説明している Docker Engine と Compose plugin をセットアップします。
Immich は、リリースごとに compose ファイルと環境ファイルの例を公開しています。
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 psWeb インターフェイスは port 2283 で応答します。このページから最初に登録したアカウントが administrator になります。そのため、インターネット上でインスタンスを公開したままにせず、すぐにアクセスして登録してください。
PhotoPrism には、MariaDB をすでに含む compose ファイルが1つ用意されています。
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yaml初回起動前に compose.yaml を開き、PHOTOPRISM_ADMIN_PASSWORD を変更します。ドキュメントにも明記されているとおり、アプリはそのファイルに記載された初期パスワードで起動します。最小長は 8 文字であり、デフォルト値を public server で使用してはいけません。同時に、originals volume を写真が保存されているフォルダーに設定します。
docker compose up -d
docker compose logs -f photoprismPhotoPrism は port 2342 で、ユーザー admin として応答します。どちらのアプリも直接公開しないでください。Docker、TLS、バックアップを使用した自己ホスト Nextcloudと同じ構成で、TLS (transport layer security) 対応の reverse proxy を前段に置きます。または、server を private にして VPN 経由でアクセスします。その VPS で写真以外も扱う場合は、追加するすべてのサービスにも同じ制限を適用してください。自己ホスト RustDesk relayで外部から到達可能にする必要があるのは専用の2つの port だけで、それ以外は公開する必要がないためです。
どちらのスマートフォンアプリが優れているか
この点では、2 つのプロジェクトに最も大きな差があります。多くの人が Immich を選ぶ理由もここにあります。
Immich は Android と iOS 向けの公式アプリを提供しています。カメラロールをバックグラウンドでバックアップできるため、誰もアプリを開かなくても新しい写真がスマートフォンから送信されます。外出先から利用する方法として、Immich は WireGuard や OpenVPN などの VPN、Tailscale、HTTPS を提供するリバースプロキシの 3 つを案内しています。スマートフォンごとに VPN アプリを導入しなくてもモバイルアプリを接続できるのは、リバースプロキシを使う方法です。Immich は、追加設定なしでポート 2283 を直接インターネットに転送しないよう警告しています。
PhotoPrism には公式のネイティブアプリがありません。ブラウザーからホーム画面に追加するプログレッシブ Web アプリを提供しており、スマートフォンから同期する方法として WebDAV (web distributed authoring and versioning) を案内しています。この用途には、PhotoSync というサードパーティーアプリを推奨しています。PhotoSync は WebDAV 経由で /import/ または /originals/ ディレクトリを指定します。動作しますが、Immich では自前のクライアントが担う処理を、有料のサードパーティーアプリに任せることになります。
家族数人のスマートフォンを自動的にバックアップすることが要件なら、結論は明確です。Immich です。
machine learning が実際に提供する機能
Immich は CLIP を使用して library の semantic search を行うため、「雪の中の赤い自転車」のような query で、誰もタグを付けていない写真を検索できます。また、顔検出と顔の clustering、重複検出にも対応しています。大量の import を CPU で indexing すると、バックグラウンドで数時間かかります。これは正常な動作であり、GPU(graphics processing unit)は必要ありません。
PhotoPrism は組み込みの ONNX model を使用して画像を label に分類し、ONNX の顔モデルで顔を検出して person 単位にグループ化します。また、location metadata を読み取って places map を作成します。設定フォルダー内の vision.yml file を使うと、必要に応じて label と caption に Ollama または OpenAI を使用できます。map は、多くのユーザーが使い続ける理由となる機能です。撮影場所で indexing された library は、20 年分の写真を list ではなく別の方法で閲覧できます。同じ考え方は他の media collection にも適用でき、Jellyfin 向け Halcyon の 90s video store front end は、その映画版です。list ではなく棚単位で閲覧します。顔認識は無料の Community edition に含まれます。有料の Essentials と Plus の membership では、より詳細な map layer、追加の user role、user management interface などが追加されます。2026 年 10 月時点では、年払いで月数ユーロから利用できます。
Immich に paywall で制限された機能はなく、プロジェクトは今後も追加しないと説明しています。任意の lifetime product key は販売しており、Immich が 2024 年 7 月に発表した価格では、1 ユーザー用が $25、サーバー全体用が $100 です。ただし、購入しても機能は解放されません。料金を支払わなくても、Immich は制限なく利用できます。PhotoPrism の core は無料で、任意の有料追加機能があります。
バックアップが保持を左右します
バックアップのない写真サーバーでは、ディスクが 1 台故障するだけで、家族の写真をすべて失うおそれがあります。どちらのアプリでも、データベースとファイルの 2 種類をバックアップする必要があります。
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 ファイルも作成するため、インデックスを失ってもファイルだけから再構築できます。これは、数十年にわたって保持する予定のアーカイブにとって大きな利点です。
どれを選ぶ場合でも、暗号化と重複排除に対応した restic バックアップをリモートストレージへスケジュール実行して、バックアップをサーバーの外部へ送信してください。ライブラリと同じディスクに保存されたバックアップは、バックアップとして機能しません。ジョブが失敗したら通知するようにしてください。3 月にひそかに停止したバックアップは、必要になる日まで、昨夜実行されたバックアップと見分けがつきません。自分でホストする ntfy サーバーを使えば、その失敗を同じ日の夕方にスマートフォンへ通知できます。
どちらを選ぶべきか
写真がスマートフォンにあり、複数人がカメラロールをバックアップする必要があり、サーバーに 6 GB 以上の RAM を割り当てられるなら、Immich を実行します。自分でホストできるサービスとしては Google Photos に最も近く、モバイルでの使い勝手が中核です。Immich の手順付きインストールガイドでは、メモリ不足によるプロセス終了やアップグレード時の注意点を詳しく説明しています。VPS ではなく手元の Mac mini で動かす場合は、その 6 GB を Mac 本体ではなく Docker Desktop の VM に割り当てる必要があり、公式が Linux 以外を強く非推奨とする理由も含めてMac mini で Immich を動かすときにできることとできないことにまとめています。スマートフォンに加えてカメラで RAW+JPEG 撮影もしている場合、Immich では同じカットが 2 枚並んで表示され、自動でまとめる機能はまだないため、Immich で RAW+JPEG ペアを手動でスタックにまとめる方法を移行前に確認しておくと戸惑いません。
すでにディスク上に写真アーカイブがあり、地図やメタデータを重視し、自分のフォルダー構成を維持したい場合は PhotoPrism を実行します。VPS の RAM が 4 GB で、スワップが発生するライブラリではなく、正常に動作するライブラリを使いたい場合にも適しています。整理と選別には PhotoPrism のほうが向いており、リソースの少ないハードウェアにも負荷をかけにくい設計です。
両方を運用する方法も合理的です。Immich で日々スマートフォンの写真を取り込み、年に 1 回、残す写真をアーカイブに整理して PhotoPrism にインデックスさせます。PhotoPrism はフォルダーを読み取り、Immich は独自のデータを管理するため、両者は競合しません。
FAQ
PhotoPrism と Immich は同じ写真フォルダーを共有できますか?
双方向で安全に共有することはできません。PhotoPrism は originals フォルダーをインデックス化し、読み取り専用モードで動作させない限り、そのフォルダーに書き込む機能もあります。一方、Immich はアップロード先の内容を自分で管理することを前提としています。PhotoPrism から参照するために、Immich の library フォルダーの読み取り専用コピーを指定することはできます。ただし、両方のアプリケーションに同じファイルを管理させないでください。Immich がインデックス作成中の PhotoPrism の配下で、ストレージテンプレートによってアセットを移動または名前変更する可能性があるためです。
Immich は写真の唯一のコピーを保持できるほど安定していますか?
自己ホスト型アプリケーションに、何かの唯一のコピーを保持させてはいけません。Immich は現在、セマンティックバージョニングに従っており、互換性を壊す変更はメジャーリリースに限定すると説明しています。そのため、IMMICH_VERSION を v3 のようなメジャーバージョンタグに固定し、リリースノートを確認してから docker compose pull && docker compose up -d でアップグレードしてください。同じマイナーバージョン内であってもダウングレードはサポートされないため、アップグレードの前に毎回データベースダンプを取得してください。元のファイルをサーバー外にもバックアップしておけば、リスクを小さくできます。
Immich の machine learning コンテナーが再起動を繰り返すのはなぜですか?
通常は、メモリを使いすぎて強制終了されています。docker compose ps --all を実行してください。このフラグを付けないと停止したコンテナーは表示されないためです。machine learning サービスが終了コード 137 で終了していないか確認します。このコードは、プロセスがシグナル 9 で強制終了されたことを示します。通常の原因は kernel の out of memory killer ですが、それだけとは限らないため、sudo dmesg | grep -i 'out of memory' で確認してください。swap を追加するか、4 GB のマシンでは machine learning を完全に無効にします。コンテナーにメモリ制限を設定しても処理が抑制されるわけではありません。上限に達すると依然として強制終了されますが、サーバーの他の処理をメモリ不足にすることは防げます。machine learning がないと Smart Search と顔認識は動作しませんが、Immich のその他の機能は正常に動作します。
PhotoPrism には MariaDB が必要ですか、それとも SQLite で動作しますか?
SQLite は動作し、個人用ライブラリには適しています。ただし、SQLite を使用する場合、PhotoPrism はワーカー数を 4 に制限します。ドキュメントでは、高い同時実行性に適した MariaDB への切り替えを推奨しています。プロジェクトがリリースする compose ファイルには、すでに MariaDB が含まれています。そのため、推奨構成がそのままデフォルト構成になっています。
ライブラリの容量に加えて、どの程度のディスク容量を見込むべきですか?
どちらのアプリケーションでも、元のファイルの容量に 10 から 20 パーセントを加えてください。生成されるサムネイルと、トランスコードされた動画プレビューに必要な容量です。200 GB のコレクションでは、ライブラリだけでおよそ 220 から 240 GB が必要です。これに加えて、データベースと将来の増加分の容量も確保してください。同じボリュームに完全なローカルバックアップも保持する場合、元のファイルとバックアップだけで、他のデータを考慮する前に少なくとも 400 GB が必要です。そのため、約 450 GB を見込むか、バックアップを別のボリュームに置いてください。