37P by abcdkh1209 1달전 | ★ favorite | 댓글 7개

왜 만들었나요?

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

slimg 의 코틀린 바인딩이 추가되었습니다. 서버/백엔드에서 이미지 처리를 손쉽게 할 수 있습니다.

저도 png로 생성된 파일에서 배경제거하고 svg로 변환하면서 용량을 줄이고 품질을 보존하는 것을 LLM으로 만들었습니다. rust로 만들었고 svg로 변환하는 것은 아주 잘 되었는데 svg에서 용량을 줄이기 위해서는 svgo라는 프로그램을 사용할수밖에 없었습니다. svgo는 svg에서 필요없는 코드를 줄이는 기술이 뛰어난데 이것은 도메인 지식이 있어야 하는 부분인거 같아서 svgo를 활용하고 있었습니다.
그런데 MozJPEG, OxiPNG, ravif 같은 최신 코덱을 사용은 생각지 못했습니다. 저도 한 번 시도해보고 싶어졌습니다. 영감 주셔서 감사합니다.

저는 기존에 SalOne22/rimage를 사용중이었는데 이건 어떨지 봐야겠네요. 일단 파이썬 바인딩을 제공하는건 장점인듯 싶습니다.

slimg의 파이썬 바인딩도 추가되었습니다.

저도 압축파일로 묶여있는 이미지를 일괄 변환해주는 툴을 rust로 만들어서 쓰고있는데 이 리포지토리로 내부 호출을 변경해봐야겠습니다
혹시 avif 디코딩이 macos 만 가능한 건 특정한 사유가 있을까요?

이제 0.1.3 버전을 사용하시면 윈도우, 리눅스에서도 avif 디코딩이 가능합니다.

빌드하는데 사용한 github actions 환경에서 avif 를 다루는 라이브러리 버전이 호환되지 않아 그렇습니다. 조만간 빌드환경을 수정하여 리눅스 머신에서도 avif 지원하도록 수정 예정입니다.