Reddit

[FOSS] A tool to shrink Immich libraries 20-50% by converting originals to JPEG-XL / AV1 in place while keeping albums and metadata intact.

Immich 사진·영상 원본을 JPEG XL·AV1로 바꿔 저장 공간을 줄이는 도구

Immich 라이브러리의 사진과 영상을 JPEG XL, HEIC, AVIF, AV1로 일괄 변환하는 오픈소스 도구입니다. 변환 파일을 업로드하고 메타데이터를 복사한 뒤 업로드를 확인해야 원본을 휴지통으로 옮기며, 휴대전화 동기화가 다시 저장 공간을 차지할 수 있다는 제약도 있습니다.

에디터 노트

저장 공간 절감의 관건은 변환 자체보다 이후 동기화 동작입니다. 개발자는 Immich가 원본 파일의 해시를 기준으로 휴대전화 사진을 다시 올릴 수 있다고 답했고, 이미 휴대전화에서 지운 기간만 처리하라고 안내했습니다. 그러므로 변환 범위에 휴대전화에 남은 사진이 포함되면 파일을 바꿔도 절감 효과가 유지되지 않을 수 있습니다. JPEG에서 JXL로 가는 경로는 원본 복원이 가능한 무손실 변환이라는 설명이 있어 원본 보존을 걱정하는 사용자에게 구분점이 됩니다. 반면 AV1 영상은 인코딩 결과와 재생 호환성을 실제 라이브러리에서 확인해야 합니다. 댓글에서도 라이브 영상 품질과 재생 성능 우려가 나왔지만 측정 결과는 제시되지 않았습니다. 도구는 출력 검증 뒤 원본을 휴지통으로 옮기고 실패 시 원본을 보존하지만, 웹 UI에 인증이 없고 업로드 모드가 원본을 삭제하므로 백업과 제한된 범위의 시험이 사용 절차에 포함됩니다.

AI 요약

Immich 라이브러리의 원본 사진과 영상을 지정한 형식으로 일괄 변환하는 셀프 호스팅 웹 도구입니다. 사용자는 라이브러리 전체, 앨범, 날짜 범위, 직접 선택한 파일을 대상으로 실행할 수 있으며, 변환 전 예상 결과를 확인하는 드라이런과 브라우저에서 진행 상황을 보는 기능도 제공합니다.

변환과 파일 처리

이미지는 JPEG XL(JXL), HEIC, AVIF 중 하나로 바꾸고 영상은 MP4 컨테이너의 AV1로 인코딩합니다. 입력 이미지 형식은 JPEG, PNG, WebP, HEIC, AVIF, TIFF, GIF, BMP입니다. 개발자는 JXL이 사진을 20~40%, AV1이 영상을 30~50% 줄이며 눈에 띄는 품질 손실이 없다고 설명합니다. 다만 이는 도구 설명에 제시된 수치이며 개별 라이브러리에서 측정한 결과는 아닙니다. JPEG에서 JXL로 바꾸는 경우에는 무손실 변환으로 원래 JPEG를 비트 단위로 복원할 수 있다고 설명합니다.

업로드 모드에서는 파일을 내려받아 변환하고 새 파일을 Immich에 올립니다. EXIF, GPS, 즐겨찾기, 평점, 앨범 정보를 복사하고 업로드를 검증한 다음 원본을 삭제해 Immich 휴지통으로 보냅니다. 휴지통 보관 기간은 30일입니다. 변환이 실패하면 새 파일을 정리하고 원본을 유지하며 결과와 오류를 기록합니다. 출력 파일이 원본보다 커지면 압축률을 높여 재시도하고, 다음 실행에서는 이미 변환한 파일을 건너뜁니다.

로컬 모드는 Immich에 파일을 올리거나 기존 파일을 바꾸지 않습니다. 지정한 디스크의 연도·월 폴더에 결과를 저장하고 원본을 함께 보관하는 설정도 지원합니다. 라이브 포토는 사진과 영상의 연결을 유지하며, 영상 변환은 기본값으로 꺼져 있습니다. Google, Samsung, OnePlus 형식처럼 영상이 사진 안에 포함된 라이브 포토는 정지 사진만 저장합니다.

설치와 제한

Docker 이미지와 Docker Compose 설치를 지원하며 linux/amd64와 linux/arm64 이미지를 제공합니다. 웹 화면에서 Immich API 주소와 API 키, 형식, 품질, 필터, 출력 모드를 설정합니다. API 주소에는 /api가 필요하고 업로드에는 자산 읽기와 업로드 권한이 있는 키가 필요합니다. 웹 UI에는 자체 인증 기능이 없어 신뢰하는 홈 네트워크나 인증을 추가한 리버스 프록시 안에서 쓰도록 안내합니다. 업로드 모드에서는 원본을 삭제하므로 개발자는 전체 라이브러리를 처리하기 전에 백업하고 작은 범위에서 시험하라고 명시합니다.

Reddit 반응

  • @No-Topic-1545 — 휴대전화에서 올린 라이브 포토와 1,200만 화소 사진, 4K 영상이 라이브러리 대부분이라 도구를 만들었다고 설명합니다. JPEG에서 JXL로 바꾸는 작업은 무손실이며, 업로드를 확인한 뒤 원본을 30일간 휴지통에 둔다고 덧붙입니다.
  • @escapefrompay2win — 휴대전화가 Immich와 동기화 중일 때 변환하면 사진이 중복 업로드되는지 묻습니다.
    • @No-Topic-1545 — 도구가 해시를 우회하거나 속이지 않으므로 휴대전화가 사진을 다시 올린다고 답합니다. 기능 자체가 깨지지는 않지만 저장 공간 절감 효과가 사라질 수 있어 Immich 앱의 Free Up Space를 사용한 뒤 휴대전화에 남아 있지 않은 기간만 변환하라고 권합니다.
  • @async2 — 썸네일 형식을 설정 가능하게 Immich에 반영하는 편이 낫지 않느냐고 묻습니다.
    • @No-Topic-1545 — 썸네일이 아니라 원본 사진을 변환하는 도구라고 설명하며 라이브 포토에서 15MB가 2MB가 된 사례를 듭니다.
  • @Guy_In_Between — JPEG를 JXL로 무손실 변환하면 원본 JPEG를 그대로 복원할 수 있어 보관에 적합하다고 말합니다. 라이브 포토 영상의 압축 손실과 재생 성능은 우려된다고 덧붙입니다.
    • @No-Topic-1545 — JPEG에서 JXL로 바꾸면 평균 20~25% 줄고 비트 단위로 복원할 수 있다고 답합니다. 라이브 포토 영상은 변환하지 않는 선택도 가능하며 기본값은 변환하지 않는 설정이라고 설명합니다.
  • @coderstephen — 원본 사진을 소중히 여기며 주로 RAW로 촬영한다고 말합니다.
  • @maksimkurb — WebP보다 JXL을 선택한 이유를 묻습니다. 자신이 의료용 전체 슬라이드 이미지로 비교했을 때 절감량은 비슷했고 WebP 디코딩이 더 빨랐으며 주요 브라우저에서 JXL 지원이 부족하다고 지적합니다.
    • @No-Topic-1545 — JPEG를 손실 없이 JXL로 바꿨다가 되돌릴 수 있다는 점이 주된 이유라고 답합니다. AVIF도 설정할 수 있으며 압축 효율은 좋지만 인코딩에 시간이 오래 걸리고 JPEG 왕복 무손실 변환은 지원하지 않는다고 설명합니다.
  • @cr4zymanz0r — Immich에 등록하지 않은 서버 공유 폴더의 사진도 처리할 수 있는지 묻습니다.
  • @BandUpset4186 — ProRAW의 DNG 형식을 유지하면서 JPEG XL 압축을 적용하고 HDR 렌더링과 다른 기능도 보존할 수 있는지 묻습니다.

원문: Reddit / 번역·요약: Trawling