ivankovic/omnidiff
콘텐츠 인식 diff 도구 OmniDiff 공개
원제 ivankovic/omnidiff
스타 957당일 +300Rust
Key Point
텍스트·이미지·폰트·PDF·아카이브 등 25개 언어와 바이너리를 구분 처리하는 diff 도구로, 기존 줄 기반 diff의 정확도와 속도 문제를 모두 해결했다.
핵심 요약
- Rust로 작성한 고성능 diff 도구 OmniDiff를 공개했으며, 99.95% 코드 변경을 처리하고 98.8% 파일을 콘텐츠별 알고리즘으로 구분한다.
- 텍스트 코드는 100ms 이하에서 처리되고, 평균 4.2ms, 중앙값 97.6 백분위 100ms, 최악 482ms 성능을 갖추었다.
- 25개 언어(Python, JavaScript, Rust, Go 등)는 tree-sitter 문법으로 구조적으로 파싱하고, PNG·JPEG·GIF·WebP 같은 이미지는 픽셀 단위로, 폰트는 글리프별로, PDF는 페이지별로 비교한다.
- ZIP·TAR·GZIP·BZIP2 등 아카이브는 파일 단위로, gettext·Qt 메시지 카탈로그는 메시지 단위로 비교하며, 변화 정도를 투명(바이트만 다름)·미지각·아티팩트·편집·재그리기·교체로 분류한다.
- Git difftool과 Jujutsu 버전 관리 시스템에 통합되고, VS Code 확장(omnidiff-vscode)과 Neovim 플러그인(omnidiff.nvim)으로 에디터 지원을 제공한다.
- JSON 출력 모드와 헤드리스 배치 모드를 지원하며, 색상은 기본 활성화되고 COLORTERM이나 NO_COLOR로 제어할 수 있다.
- 손상된 파일과 아카이브는 회원별로 열고, 'g' 키로 모든 변경 글리프·이미지를 동시 표시하며, Enter로 전체 diff 보기를 열 수 있다.
- 터미널 그래픽은 kitty·sixel·iTerm2 프로토콜을 지원하고, 반블록(halfblocks) 폴백을 제공하며, tmux 내에서도 동작한다.
- AGPL v3 라이선스이고, GitHub Sponsors 월간 구독으로 상용 라이선스(소스 공개 의무 면제)를 제공한다.
- 손으로 그린 1,419개 테스트 케이스 대비 --minimal 모드에서 69.6% 정확 일치, 91.5% 1% 오차 이내 달성한다.
- 코드 변경 442,530쌍 테스트에서 99.95% 완료 성공(6GB·120초 한계 내), 나머지는 생성된 코드·최소화 번들·임베딩 PNG 같은 극단 파일이었다.
- 이미지 69% 정확, 100% 근완벽, 폰트 82% 정확·100% 근완벽 판정을 얻었으며, 프로젝트는 Claude Code AI를 실질적으로 활용해 개발했다.
저장소 보기 ↗github.com