Show GN: slimg - Rust로 만든 이미지 최적화 CLI (54GB → 8GB)
(github.com/clroot)왜 만들었나요?
Google의 Squoosh라는 툴을 애용했는데, CLI 버전은 실행하면 오류가 나고 웹 버전은 쓸만했지만... Google 특유의 방치 상태에 결국 직접 만들기로 했습니다. 대체제를 찾아봤는데 마음에 드는 게 없었습니다.
slimg란?
Rust로 작성된 이미지 최적화 CLI입니다. JPEG, WebP, PNG, AVIF, QOI 간 변환과 리사이즈, 품질 최적화를 지원합니다. MozJPEG, OxiPNG, ravif 같은 최신 코덱을 사용합니다.
실제 사용 결과:
개인 사진 54GB를 일괄 최적화했는데 8GB로 줄었습니다. (85% 감소) 품질은 육안으로 거의 차이 못 느끼는 수준입니다.
# 디렉토리 일괄 처리 (병렬)
slimg convert ./photos --format webp --quality 85 --recursive
# 리사이즈 + 변환
slimg resize photo.jpg --width 800 --format avif --quality 70
기술적인 특징:
- Rayon으로 모든 CPU 코어 병렬 처리
- 임시 파일 → atomic rename으로 안전한 overwrite
- 라이브러리(slimg-core)와 CLI 분리 (재사용 가능)
- C 코덱 바인딩으로 네이티브 성능
설치:
brew install clroot/tap/slimg
# https://github.com/clroot/slimg/releases
GitHub: https://github.com/clroot/slimg
저도 압축파일로 묶여있는 이미지를 일괄 변환해주는 툴을 rust로 만들어서 쓰고있는데 이 리포지토리로 내부 호출을 변경해봐야겠습니다
혹시 avif 디코딩이 macos 만 가능한 건 특정한 사유가 있을까요?
빌드하는데 사용한 github actions 환경에서 avif 를 다루는 라이브러리 버전이 호환되지 않아 그렇습니다. 조만간 빌드환경을 수정하여 리눅스 머신에서도 avif 지원하도록 수정 예정입니다.