PhotoPrism是開源免費的相簿服務軟體,介面跟Google相簿類似,用於瀏覽電腦上的相片影片。在搜尋時會使用臉孔偵測、AI辨識、地點給圖片分類和上標籤,就像Google相簿自動整理的功能。
PhotoPrism主要特點是自架雲端相簿服務,照片資料都是在本機處理,不會給第三方偷看。如果說自架的NextCloud專精文件,Jellyfin專精影片的話,PhotoPrism就是專精在相片處理這一塊。
經過幾年開發,PhotoPrism現在已經很好上手了,Docker設定後是開箱即用。應用程式介面靠網頁端存取,手機會自動變換UI,且載入速度接近Google相簿。
這篇文章將會介紹PhotoPrism的特色功能,再簡介如何用Docker在自己電腦部署,取代Google相簿。
1. PhotoPrism功能特色#
PhotoPrsim可以讀取硬碟現有資料夾,分類後直接顯示在網頁界面的,無需重新「上傳」照片。
使用PhotoPrsim讓你同時保有資料夾分類相片與雲端上傳的操作習慣。
跟同類型的Immich相簿比起來,PhotoPrism提供更多結構化的資料,讓你更清楚的檢視圖庫裡面的照片。
PhotoPrism主介面是相片影片總覽,按照圖片拍攝時間排序。可用搜尋語法過濾圖片。
為方便網頁檢視,PhotoPrism會自動將圖片影片轉碼成快速載入的格式,並會隨螢幕大小自動變化版面。另有非官方開發的手機APP。

點選相片查看/編輯詳細資料,自訂關鍵字。
相片會按照AI辨識的結果打上標籤,我個人覺得辨識最準的就是相片中的小動物了吧。
有標示地點的相片,PhotoPrism會將其彙整並繪製成地圖。
相片搜尋支援用地點和圖片種類過濾,也可以用「顏色」當關鍵字。
最後是我個人最喜歡的功能。除了一次看全部照片外,PhotoPrism能混合硬碟目錄結構管理相片,所以檔案目錄一有變更,PhotoPrism就會重新掃描。當然從PhotoPrism的界面刪除相片,硬碟上的檔案也會跟著刪除。
PhotoPrism支援另一部裝置從網頁端「上傳」到相簿中,還可以使用WebDAV上傳相片。
不過,雖然PhotoPrism是開源專案,有些進階功能是隱藏的,參見這個表格,付費成為贊助者他們才會開放給您使用。要使用完整功能,你要嘛自己編譯改原始碼,要嘛乖乖付費,就醬子。
如果你已經準備好,那就在你的電腦上安裝PhotoPrism吧。
2. 開始安裝PhotoPrism#
以下內容參考自PhotoPrism官方說明文件,PhotoPrism支援x86和ARM架構的機器。
於Linux系統安裝Docker,如果需要GPU加速再安裝Nvidia顯示卡驅動及Nvidia Container Toolkit。
建立儲存目錄
mkdir ~/photoprism
cd ~/photoprism- 下載PhotoPrism提供的docker-compose:
wget https://dl.photoprism.app/docker/docker-compose.yml- 編輯
docker-compose.yml:
vim docker-compose.yml- 首先找到這一段,設定admin的密碼:
services:
photoprism:
environment:
PHOTOPRISM_ADMIN_USER: "admin"
PHOTOPRISM_ADMIN_PASSWORD: "八位數以上密碼"- 然後設定要掛載到容器內部的目錄。PhotoPrism會從自身
originals目錄匯入相片,格式為硬碟相片目錄:容器內部originals目錄,如下所示,將硬碟目錄掛載後PhotoPrism就會直接取用硬碟的相片。
services:
photoprism:
## 冒號左邊是硬碟路徑,右邊是容器內部的路徑。例如將硬碟目錄"TOSHIBA1TB"掛載作為PhotoPrism的"originals"目錄,等同二邊檔案同步
volumes:
- "/run/media/ivon/TOSHIBA1TB:/photoprism/originals"
- "/run/media/ivon/TOSHIBA1TB/DCIM:/photoprism/originals/DCIM"
- "/run/media/ivon/TOSHIBA1TB/Pictures:/photoprism/originals/Pictures"
## storage是存放縮圖資料的路徑,不改的話預設就是存在docker-compose.yml所在的目錄
- "./storage:/photoprism/storage"
mariadb:
## database是存放資料庫的路徑,不改的話預設就是存在docker-compose.yml所在的目錄
volumes:
- "./database:/var/lib/mysql"- 接著設定轉碼器。PhotoPrism會把影片用ffmpeg轉碼以提昇播放效率,這裡不設定的話預設就是軟解。按照官方文件說明,將docker-compose修改成使用Nvidia顯示卡加速轉碼:
services:
photoprism:
environment:
PHOTOPRISM_FFMPEG_ENCODER: "nvidia"
PHOTOPRISM_INIT: "gpu tensorflow"
NVIDIA_VISIBLE_DEVICES: "all"
NVIDIA_DRIVER_CAPABILITIES: "compute,video,utility"
...
volumes:
- ...
deploy:
resources:
reservations:
devices:
- driver: "nvidia"
count: 1
capabilities: [gpu]- 在三個service下方加上
restart: 'unless-stopped'設定開機自動啟動容器。
services:
photoprism:
restart: 'unless-stopped'- 啟動容器,等待image下載完成。第一次啟動可能要等個幾分鐘才能開啟網頁端登入。
sudo docker compose up -d用瀏覽器開啟
http://localhost:2342,就會進到PhotoPrism網頁端介面。你也可以透過http://區域IP:2342來存取。
登入admin帳號,到左下角的系統設定調成中文

點選左側的收藏庫,開始掃描新相片影片建立資料庫。

初次索引的時候會狂吃系統資源,RAM不足4GB的電腦記得要給大一點SWAP。1000張相片大約需要幾個小時索引和分類,中間如果有移除目錄,建議也是讓PhotoPrism重新掃描變更。
如果要停止容器,執行此指令:
cd "docker-compose.yml所在目錄"
sudo docker compose down- 現在本機能存取PhotoPrism了,那麼外部網路要怎麼連線到PhotoPrism呢?我採用內網穿透方式,看這裡瞭解如何將電腦和手機加入至虛擬區域網路。記得防火牆要開啟2342 TCP通訊埠:
sudo ufw allow 2342/tcp
sudo ufw reload3. 匯入Google相簿照片至PhotoPrism#
將Google相簿的相片搬家到PhotoPrism,在那之前要先用第三方程式整理一下。
使用GooglePhotosTakeoutHelper整理照片。
照片整理完後,先將PhotoPrism容器停止
cd ~/photoprism
docker compose down- 編輯
docker-compose.yml,加入Google相簿的目錄到PhotoPrism。目錄名稱隨意取,下面只是範例。
volumes:
- "/run/media/ivon/TOSHIBA1TB/DCIM:/photoprism/originals/DCIM"
- "/run/media/ivon/TOSHIBA1TB/GooglePhotos:/photoprism/originals/GooglePhotos"- 再啟動容器。登入PhotoPrism網頁,開始掃描新相片。
sudo docker compose up -d4. PhotoPrism相片管理機制#
PhotoPrism的主目錄是
originals,但在Docker容器內部不好存取。硬碟有個目錄叫做Pictures,你將它掛載到PhotoPrism,PhotoPrism就會將Pictures當作originals目錄使用。這樣一來PhotoPrism就會開始處理
originals資料夾下的相片,轉檔成較小的格式並寫入到資料庫,也就是網頁端主畫面所看到的那樣。而originals目錄下的相片檔案保持不變。因此你可以建立子目錄,像是originals/family這樣,方便在PhotoPrism的主界面以「資料夾」模式檢視相片。而PhotoPrism的「相簿」功能並不會在硬碟上建立任何目錄,只有PhotoPrism網頁端能看到。未來要新增相片,有二種方法:一:把相片傳到硬碟
Pictures目錄,再由PhotoPrism掃描新增。二:從PhotoPrism的網頁端上傳相片。從PhotoPrism網頁端上傳的相片會跑去哪?PhotoPrism會將其放到
originals目錄,以拍攝日期建立目錄。例如foo.webp是11/1拍攝的,它就會在originals目錄下建立「11」、「01」的目錄,再把相片檔案放進去。由此可見,習慣用「資料夾」分類相片的人,還是採用方法一新增相片到硬碟較好,你可以手動把檔案傳到電腦,或是用Syncthing這類軟體無線同步。
在PhotoPrism網頁端刪除相片,硬碟目錄的相片也會刪除,反之亦然。不過PhotoPrism網頁端要刪除相片是選取相片,點選「封存」,進到左側選單的「封存」頁面才能將相片刪除。
用WebDAV放相片到PhotoPrism的originals目錄後,PhotoPrism每15分鐘會自動索引新相片。
5. 分享PhotoPrism相片 & 用WebDAV上傳相片#
如果PhotoPrism是架在有網域的伺服器上,選取「相簿」點選分享,別人就可以透過該連結查看相簿。
你可以從網頁端直接下載多張相片。
分享「單張相片」是分享原始畫質的檔案,會得到一個WebDAV連結。
PhotoPrism內建WebDAV伺服器功能,點選分享相片後,用GNOME的Nautilus這類軟體掛載WebDAV,就能存取originals目錄下的檔案。
6. PhotoPrism手機APP#
手機遠端存取PhotoPrism請記得使用內網穿透軟體,看這裡。
PhotoPrism官方沒有開發APP,僅提供PWA網頁程式,也就是在手機開網頁版,網址為http://電腦虛擬區域IP:2443。
不過手機還是有APP用起來比較爽吧,這裡有第三方開發的PhotoPrism Gallery,界面清爽許多,支援搜尋相簿和標籤。

可惜的是PhotoPrism並沒有直覺的手機備份方案,如果要自動將手機相片備份到電腦目錄,建議使用開源的Syncthing同步到硬碟目錄,這樣就能給PhotoPrism掃描新相片。


