Show HN: SplatHash – BlurHash와 ThumbHash에 대한 가벼운 대안

발행: (2026년 2월 28일 오후 08:24 GMT+9)
4 분 소요

Source: Hacker News

개요

SplatHash

이미지를 16바이트로 압축하고 복원합니다

Algorithm · Demo · Bugs · Contributing

SplatHash는 어떤 이미지든 정확히 16바이트(22자 base64url 문자열)로 인코딩하고, 0.067 ms 안에 32×32 흐릿한 프리뷰로 디코딩합니다. Go, TypeScript, Python 모두 비트‑단위로 동일한 해시를 생성합니다.

Visual comparison of SplatHash, ThumbHash, and BlurHash reconstructions

열: 원본 · SplatHash 32×32 · ThumbHash · BlurHash. 재생성: mise run compare.

설치

언어설치 명령문서
Gogo get github.com/junevm/splathash/src/goREADME
TypeScript / JSnpm install splathash-tsREADME
Pythonpip install splathash-pyREADME

Go가 기준 구현입니다. 다른 구현들은 모두 비트‑단위로 검증되었습니다.

벤치마크

Intel Core i5‑9300H에서 수행한 Go 벤치마크 (go test -bench=. -benchmem).

항목SplatHashThumbHashBlurHash
디코드 시간0.067 ms0.50 ms6.55 ms
인코드 시간3.53 ms0.86 ms445 ms
디코드 할당71,1685
바이트고정 1625–3720–25
문자열 길이22자34–50자27–30자

디코드는 모든 페이지 로드 시마다 모든 사용자에게 실행됩니다. 인코드는 업로드 시 한 번 실행됩니다. 디코드 최적화에 중점을 두세요.

BenchmarkEncodeSplatHash-8      303      3530083 ns/op   100760 B/op   29 allocs/op
BenchmarkEncodeThumbHash-8     1431       863553 ns/op     1015 B/op    6 allocs/op
BenchmarkEncodeBlurHash-8         3    445696421 ns/op 33358234 B/op    8 allocs/op
BenchmarkDecodeSplatHash-8    17182        67622 ns/op    29584 B/op    7 allocs/op
BenchmarkDecodeThumbHash-8     6559       503366 ns/op    58408 B/op 1168 allocs/op
BenchmarkDecodeBlurHash-8       171      6553100 ns/op   547552 B/op    5 allocs/op

비교

항목SplatHashThumbHashBlurHash
고정 출력 크기예 (16 바이트)아니오아니오
128‑비트 정수로 저장 가능아니오아니오
지각 색 공간 (Oklab)아니오아니오
공간적으로 국지화된 기저예 (가우시안)아니오아니오
전역 가중치 최적화예 (Ridge)아니오아니오
알파 채널 지원아니오
언어 간 비트‑정확도아니오아니오
품질 대비 크기 조정 가능아니오아니오

작동 원리

배경색 + 매칭 퍼슈트를 통해 배치된 여섯 개의 가우시안 블롭, Ridge Regression으로 색 최적화, 모두 Oklab 색 공간에서 128 비트에 압축. 전체 사양: ALGORITHM.md.

개발

mise install          # 고정된 버전의 Go와 Node 설치
mise run test         # 모든 테스트 실행 (Go + TypeScript + Python)
mise run bench        # Go 벤치마크 실행
mise run compare      # docs/comparison.png 재생성

라이선스

LICENSE를 확인하세요.

0 조회
Back to Blog

관련 글

더 보기 »

구리지 않은 시맨틱 무효화

캐싱 문제 웹 애플리케이션을 어느 정도 기간 동안 작업해 본 사람이라면 캐싱에 대한 상황을 잘 알 것입니다. 캐시를 추가하면 모든 것이 빨라지고, 그 다음에 누군가…

스프린트

!Sprint: Express 코드 중복 없이 https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9mcbu1c3wuvlq0tiuup0.png 소개 Sprint: 코드 중복을 없애세요