최근 취미로 카메라를 시작해 사진을 기록하고 있다.
그런데 촬영한 사진 중 몇 장만 공유하는 것이 아쉬워 사진을 공유할 수 있는 오픈소스를 찾아보았다.

PhotoPrism

오픈소스 사진 관리 애플리케이션으로, 사진/비디오를 자체 서버에 호스팅 하면서 자동 태깅, 얼굴 인식, 필터 검색 등을 활용해 사진 라이브러리를 정리하고 탐색할 수 있다.

https://github.com/photoprism/photoprism

 

GitHub - photoprism/photoprism: AI-Powered Photos App for the Decentralized Web 🌈💎✨

AI-Powered Photos App for the Decentralized Web 🌈💎✨ - photoprism/photoprism

github.com

주요 특징

1. 자동 정리와 인덱싱

  • 사진을 불러오면 날짜, 위치(GPS 메타데이터), 카메라 정보 등을 기반으로 자동으로 정리한다.
  • 얼굴 인식과 객체 감지를 통해 사람이나 사물을 분류할 수도 있다.
  • 과정에 라벨을 자동으로 붙여준다. ex) bottle, people, portrait, moment ...

2. 검색 기능

  • 메타데이터, 파일명, 태그, 장소 등을 기준으로 빠른 검색이 가능하다.

3. 접근성

  • 웹 UI를 제공해 PC, 스마트폰, 태블릿 어디서든 접속할 수 있다.

4. 공유

  • 앨범에 공유 링크를 만들어 다른 사람에게 보여줄 수 있다.
  • WebDAV를 통해 외부 파일 탐색기와 연동할 수도 있다.

5. 스토리지 유연성

  • 사진은 로컬 디스크, 외장 HDD, NAS 등에 보관 가능하며, 원본 파일과 별개로 색인 데이터와 썸네일을 따로 관리한다.

 

PhotoPrism 도커 실행

도커로 간단하게 사용할 수 있다.

윈도우의 경우 Docker Desktop을 실행할 수 있다면 준비가 끝났다.

# docker-compoes.yml
services:
  photoprism:
    image: photoprism/photoprism:latest
    depends_on:
      - mariadb
    environment:
      PHOTOPRISM_ADMIN_USER: "admin"
      PHOTOPRISM_ADMIN_PASSWORD: "admin1234"
      PHOTOPRISM_ORIGINALS_LIMIT: 10240
      # 기타 환경 변수 설정
    ports:
      - "2342:2342"  # 웹 UI 포트
    volumes:
      - ./storage:/photoprism/storage
      - ./originals:/photoprism/originals
      
  mariadb:
    image: mariadb:10.11
    environment:
      MYSQL_ROOT_PASSWORD: "0000"
      MYSQL_DATABASE: photoprism
      MYSQL_USER: user
      MYSQL_PASSWORD: "1111"
    volumes:
      - ./db:/var/lib/mysql

1. 폴더를 만들고 docker-compose.yml 작성

ADMIN_USER/PASSWORD

접속하기 위한 관리자 계정이다.

 

ORIGINALS_LIMIT

파일 최대 사이즈 MB 단위이다. default = 1000

 

자세한 Option은 docs 참고

https://docs.photoprism.app/getting-started/config-options/

 

PhotoPrism - Config Options

Official Documentation

docs.photoprism.app

VOLUMES

storage = cache 저장소

originals = 원본 파일 저장소

대략 4GB original에 700MB storage 정도 나온다. 계속 비례적인지는 모르겠지만 약 17퍼 크기가 캐시됐다.

(나는 cache는 ssd에, originals은 hdd에 두었다.)

2. docker compose up -d

만든 폴더 루트에서 `docker compose up -d` 실행한다.

 

 

사용

로그인

로그인

인덱싱

Library & indexing

original 폴더 아래 사진,동영상 파일을 위치시키면 된다.

예시로 3개의 폴더에 사진을 두었다. (/cane, /cavallo, /elefante)

 

인덱싱할 폴더를 고르고 start를 누르면 인덱싱이 진행된다.

Folders
Labels

인덱싱( 파일 등록)이 완료되면 이미지가 보인다.

인덱싱 과정에 자동으로 태그를 생성하거나 얼굴을 인식하여 분류해주기도 한다.

 

삭제

archive

삭제 순서는 archive -> delete 이다.

사진을 선택하고 보관함으로 옮긴다.

delete

보관함에서는 delete icon이 보인다.

삭제는 originals의 원본 파일도 삭제된다.

 

공유

share

폴더나 앨범을 링크가 있는 사용자에게 공유할 수 있다.

유효 기간을 설정할 수도 있고, 휴지통 아이콘을 눌러 링크를 지울 수 있다.

 

로컬로 접속해서 주소가 저렇게 나왔는데, 호스팅 환경에 맞게 외부IP 또는 도메인으로 바꾸면 된다.

ex) 41.167.11.21:2342/s/~~

ex) mymymy.com:2342/s/~~

 

공유 앨범에서 private 처리한 파일은 보이지 않는다.

 

Account Roles

계정에 따른 접근제어도 있다.

https://docs.photoprism.app/user-guide/users/roles/

 

PhotoPrism - Account Roles

Official Documentation

docs.photoprism.app

User와 Viewer는 멤버십 사용자만 가능하다.

docker compose exec photoprism photoprism users add --name "guest2" --email "guest@example.com" --password "guest123" --role guest

Guest를 추가해서 테스트해 보면 공유 링크 접속과 다를 게 없어 보인다.

사진 공유는 계정 관리 없이 링크 공유로 충분하다.

 

마치며

개인적으로 사진을 관리하고 공유하기에는 충분해 보인다.

불편함이 생기기 전까지는 사용해 볼 생각이다.

 

 

'software' 카테고리의 다른 글

Nosql MongoDB를 알아보자  (0) 2023.09.08