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 を削除しても、写真は同じフォルダーに同じ名前で残ります。PhotoPrism は、認識した内容を記述するサイドカー YAML ファイルを写真の隣に作成します。
この1つの違いが、その他の大部分を説明します。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、推奨として 8 GB の RAM を記載しています。また、4 GB のマシンでは machine learning を無効にした場合に限って実行できると説明しています。PhotoPrism は、物理メモリ 3 GB と CPU コア 2 個を記載し、RAM 容量はコア数に合わせる必要があると説明しています。
この差は実際に存在し、machine learning コンテナに起因します。Immich はモデルを別の immich-machine-learning サービスで実行し、CLIP(contrastive language image pretraining)と顔検出モデルをメモリに読み込みます。2 GB の環境ではカーネルがこのコンテナを強制終了し、Docker からは終了コード 137 として表示されます。これは out of memory による強制終了の状態です。PhotoPrism の TensorFlow モデルはより小さく、停止する代わりに機能を縮小します。1 GB 以下のマシンでは、クラッシュするのではなく 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 を実行すると、4.0Gi を示す Swap: 行が表示されます。0B と表示された場合は swapon が失敗しています。通常はファイルシステムが fallocate に対応していないことが原因で、sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 が代替手段になります。ここではコンテナのメモリ上限も重要です。Docker Compose でメモリ制限を設定することで、1 つの負荷の高いサービスがサーバー全体を停止させる事態を防げます。
もう 1 つ、見落とされやすい要件があります。Immich の Postgres データベースは、実際の所有者情報と権限を扱える通常の Unix ファイルシステム上に配置し、ローカルストレージを使用する必要があります。ネットワーク共有には配置しないでください。PhotoPrism のデータベースファイルについても同様です。どちらのアプリも、マウントしたオブジェクトストレージ上でデータベースを実行するのは安全ではありません。
各アプリのインストール方法
どちらも、ベンダーが提供する compose ファイルを配置して、1 つのコマンドを実行するだけです。まず Docker Engine と Compose plugin をセットアップしてください。手順は VPS で Docker Compose を使うガイドで説明しています。
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 インターフェースはポート 2283 で応答します。このページから最初に登録したアカウントが管理者になります。そのため、インスタンスをインターネット上に公開したままにせず、すぐにアクセスして登録してください。
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 文字です。公開サーバーではデフォルト値を絶対に使用しないでください。同時に、originals volume を写真が保存されているフォルダーに設定します。
docker compose up -d
docker compose logs -f photoprismPhotoPrism はユーザー admin とともにポート 2342 で応答します。どちらのアプリも直接公開しないでください。Docker、TLS、バックアップを使ったセルフホスト Nextcloudと同じ構成で、前段に TLS(transport layer security)対応のリバースプロキシを配置します。
どちらのスマートフォンアプリが優れていますか
ここが両プロジェクトの最も大きな違いであり、多くの人が最終的に Immich を選ぶ理由です。
Immich には Android と iOS 向けの公式アプリがあります。カメラロールをバックグラウンドでバックアップできるため、新しい写真はアプリを開かなくてもスマートフォンから転送されます。アプリには HTTPS エンドポイントが必要です。そのため、自宅外から利用する場合、リバースプロキシは必須です。
PhotoPrism には公式のネイティブアプリがありません。ブラウザーからホーム画面に追加するプログレッシブ Web アプリを提供しており、スマートフォンとの同期には WebDAV(web distributed authoring and versioning)を使用する方法を案内しています。この用途では、プロジェクトは PhotoSync というサードパーティーアプリを推奨しています。PhotoSync は WebDAV 経由で /import/ または /originals/ ディレクトリを指定して使用します。動作しますが、Immich では専用クライアントに組み込まれている機能を、有料のサードパーティーアプリで実行することになります。
複数の家族メンバーのスマートフォンを自動的にバックアップすることが要件なら、結論は明確です。Immich です。
機械学習で実際にできること
Immich は CLIP を使用してライブラリをセマンティック検索するため、「雪の中の赤い自転車」のようなクエリで、誰もタグを付けていない写真も見つけられます。顔検出と顔のクラスタリング、重複検出にも対応しています。大規模なインポートを CPU でインデックス化すると、バックグラウンドで数時間かかります。これは正常な動作であり、GPU(graphics processing unit)は必要ありません。
PhotoPrism は TensorFlow で画像を分類してラベルを付け、顔を検出して人物ごとにグループ化します。また、位置情報メタデータを読み取り、場所のマップを作成します。このマップが、ユーザーが使い続ける主な理由です。撮影場所でインデックス化されたライブラリは、20 年分の写真を閲覧する方法を大きく変えます。顔認識は無料の Community edition に含まれています。有料の Essentials および Plus メンバーシップでは、より詳細なマップレイヤー、追加のユーザーロール、ユーザー管理インターフェースなどが追加されます。2026 年 7 月時点では、月数ユーロから利用できます。
Immich は完全に無料で、有料ティアはありません。PhotoPrism のコア機能は無料で、追加機能のみ有料です。
バックアップが保持を左右します
バックアップのない写真サーバーでは、ディスクが 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 でリモートストレージへバックアップを定期的に実行し、サーバー外へ送信してください。ライブラリと同じディスクに保存されたバックアップは、バックアップではありません。
どちらを選ぶべきか
写真がスマートフォンにあり、複数人がカメラロールをバックアップする必要があり、サーバーに 6 GB 以上の RAM を割り当てられるなら、Immich を実行します。自分でホストできるサービスとしては Google Photos に最も近く、モバイルでの使い勝手が中核です。Immich の手順付きインストールガイドでは、メモリ不足によるプロセス終了やアップグレード時の注意点を詳しく説明しています。
すでにディスク上に写真アーカイブがあり、地図やメタデータを重視し、自分のフォルダー構成を維持したい場合は PhotoPrism を実行します。VPS の RAM が 4 GB で、スワップが発生するライブラリではなく、正常に動作するライブラリを使いたい場合にも適しています。整理と選別には PhotoPrism のほうが向いており、リソースの少ないハードウェアにも負荷をかけにくい設計です。
両方を運用する方法も合理的です。Immich で日々スマートフォンの写真を取り込み、年に 1 回、残す写真をアーカイブに整理して PhotoPrism にインデックスさせます。PhotoPrism はフォルダーを読み取り、Immich は独自のデータを管理するため、両者は競合しません。
FAQ
PhotoPrism と Immich は同じ写真フォルダーを共有できますか?
両方向で安全に共有することはできません。PhotoPrism は originals フォルダーを読み取り、画像の隣にサイドカー YAML ファイルを書き込みます。一方、Immich はアップロード先の内容を自分で管理することを前提としています。Immich の library フォルダーの読み取り専用コピーを PhotoPrism に指定して閲覧することはできます。ただし、両方のアプリケーションに同じファイルを管理させないでください。Immich はインデックス作成中にストレージテンプレートに従ってアセットを移動または名前変更するため、PhotoPrism の管理対象に影響する可能性があります。
Immich に写真の唯一のコピーを保存しても十分安定していますか?
自己ホスト型アプリケーションに、何かの唯一のコピーを保持させてはいけません。Immich は互換性を壊す変更を頻繁にリリースします。また、不用意な docker compose pull によりデータベースが起動できなくなることがあります。そのため、バージョンを固定し、アップグレード前にリリースノートを確認してください。元のファイルをサーバー外にもバックアップしておけば、リスクを小さくできます。
Immich の machine learning コンテナが再起動を繰り返すのはなぜですか?
メモリを使いすぎたため、強制終了されています。docker compose ps を実行し、machine learning サービスが終了コード 137 で終了していないか確認してください。これは kernel の out of memory killer による終了を示します。swap を追加するか、コンテナにメモリ制限を設定して強制終了ではなくスロットリングされるようにしてください。4 GB のマシンでは machine learning 自体を無効にする方法もあります。これを無効にすると検索は機能しなくなりますが、Immich のその他の機能は正常に動作します。
PhotoPrism には MariaDB が必要ですか。それとも SQLite で十分ですか?
SQLite は動作し、個人用ライブラリには適しています。ただし、SQLite を使用すると PhotoPrism はワーカー数を 4 に制限します。ドキュメントでは、高い同時実行性に適した MariaDB への切り替えを推奨しています。プロジェクトがリリースする compose ファイルには MariaDB がすでに含まれているため、推奨構成がそのままデフォルトになっています。
ライブラリの容量に加えて、ディスク容量をどの程度確保すべきですか?
どちらのアプリケーションでも、オリジナルの容量に 10 から 20 パーセントを上乗せしてください。生成されるサムネイルと、トランスコードされた動画プレビューに必要な容量を確保できます。200 GB のコレクションなら、データベース、ローカルバックアップのコピー、今後の増加分を考慮し、概ね 300 GB のボリュームが必要です。