← На главную

OmniDiff сравнивает код, изображения, шрифты и архивы

01.11.2026 13:02 · hackernews

Марко Иванкович представил OmniDiff — написанный на Rust инструмент сравнения файлов с учётом их содержимого. Для 25 языков используются tree-sitter и структурный diff, незнакомые расширения обрабатываются как обычный текст. Бинарные файлы распознаются по байтам, а не имени: изображения сравниваются по пикселям и кадрам, шрифты — по глифам и метрикам, архивы — по вложенным элементам, PDF — по отрисованным страницам. Поддерживаются также курсоры и каталоги переводов gettext и Qt.

Программа предлагает терминальный TUI, headless-режим для скриптов и JSON-вывод. Изображения отображаются через kitty, sixel, iTerm2 или Unicode half blocks. OmniDiff интегрируется с git difftool, GIT_EXTERNAL_DIFF и jj, существуют расширения для VS Code и Neovim. Установить можно готовыми пакетами для Linux, macOS и Windows, Homebrew, apt, Nix или cargo с Rust 1.92.

На 2302 тестовых fixture медианное время сравнения кода составило 4,2 мс, p99 — 177 мс, максимум — 482 мс. На 442 530 изменённых парах из истории примерно 7500 open-source-репозиториев успешно обработано 99,95%. Остальные превысили лимит 120 секунд или 6 ГБ памяти. По более широкому корпусу из 2 018 010 изменений 98,8% файлов сравнивались как текст или по содержимому.

Цели точности подсветки пока не выполнены. На 1419 вручную размеченных fixture preset --full дал ноль несовпадающих байтов в 60% случаев, --minimal — в 69,6%; при допуске 1% ошибок результаты составили 87,5% и 91,5% вместо целевых 90% и 99%. Автор связывает большую часть расхождений с правилами отображения, а не сопоставлением узлов.

Проект доступен по AGPLv3, коммерческая лицензия предлагается по подписке. В разработке открыто используется Claude Code, а внешние contributions временно не принимаются для сохранения скорости работы.

Читать оригинал →