Mover únicamente la posición de una función hace que en la pantalla de revisión se muestren largas listas de eliminaciones y adiciones, mientras que un cambio de imagen puede concluirse con una sola línea indicando que el archivo ha cambiado. En estos casos, es más importante identificar rápidamente qué ha cambiado que saber cuántas líneas se han modificado.
OmniDiff, creado en Rust, compara la estructura sintáctica del código y aplica métodos de comparación específicos a formatos como imágenes, fuentes y PDFs. Basándonos en la documentación oficial y en la demostración pública, analizaremos cómo puede integrarse en los flujos de trabajo existentes con Git. 1
La tecnología clave de OmniDiff: reconocimiento de estructura basado en Rust y soporte para archivos no textuales

Reconocimiento estructural en la comparación de código OmniDiff analiza el código fuente de un total de 25 lenguajes, como C, C++, Go, Python, Rust y TypeScript, convirtiéndolos en árboles de sintaxis mediante el analizador Tree-sitter 2, 1. La tecnología fundamental aquí es la implementación eficiente del algoritmo de diferencia de árboles APTED (Advanced Post-order Traversal Edit Distance) 3. Mientras que las comparaciones de diferencias basadas en texto convencionales reconocen el código movido como 'eliminación seguida de inserción', OmniDiff puede identificar que el código se ha movido realmente (Moved) analizando los cambios estructurales en el árbol de sintaxis 3.
El lenguaje del código fuente se detecta por su extensión. En cambio, los archivos no textuales se identifican por su formato real en bytes, no por su nombre. Es necesario distinguir estas dos rutas para comprender con precisión el alcance de la compatibilidad. 1
Análisis por unidad de contenido para archivos no textuales Para los archivos binarios que no son código de texto, la comparación se realiza de la siguiente manera según las características del contenido 2, 1, 4.
- Imágenes: Las imágenes, como PNG, JPEG y GIF, se comparan a nivel de píxel. En particular, en el caso de GIFs animados, se informa específicamente sobre el aumento en el número de fotogramas (por ejemplo, de 5 a 7) o los cambios fotograma a fotograma 2, 4.
- Fuentes: En archivos de fuente como TrueType, OpenType y WOFF2, se renderizan los glifos para rastrear la tasa de cambio de píxeles de iconos específicos (por ejemplo, U+0021) y las modificaciones en las métricas 1, 4.
- Archivos comprimidos: Se abren archivos de formato contenedor como ZIP, JAR, EPUB y documentos de Office (ODT) para extraer y analizar solo los componentes modificados. Los archivos comprimidos anidados también se comparan componente por componente 2, 4.
- PDF: Se renderizan las páginas para identificar cambios visuales, registrando de manera diferenciada los cambios en los metadatos y las diferencias en el renderizado de las páginas 2, 4.
Rendimiento real y pruebas de referencia: velocidad de procesamiento y precisión
Las cifras siguientes son resultados de mediciones publicadas por el desarrollador del proyecto. En este artículo no se han vuelto a medir las por separado. Los resultados variarán si cambian los objetos de comparación o los conjuntos de datos.
En una discusión en Hacker News, el desarrollador compartió cifras de comparación para casos de código compatibles tanto con Difftastic como con OmniDiff. Según estos datos, la velocidad de procesamiento mediana (p50) de OmniDiff es de 4 ms, aproximadamente ocho veces más rápida que los 35 ms de Difftastic 3.
Al limitar la comparación únicamente a cambios de código donde el alcance de la compatibilidad coincide con Difftastic, OmniDiff muestra un porcentaje de coincidencia 'perfecta' ('perfect') con el criterio de evaluación humana del 90%, presentando una precisión superior al 64% de Difftastic 3.
El anterior porcentaje del 90% está limitado a comparaciones donde el alcance de la compatibilidad coincide con el de Difftastic. En una evaluación separada de la precisión total del código recopilada en GeekNews, la tasa de coincidencia completa según --minimal se presenta como del 69,6%. No se deben interpretar ambas cifras como el mismo resultado de evaluación. 2
Actualmente, los errores actuales se originan principalmente en las reglas de renderizado sobre cómo resaltar los cambios en la pantalla, más que en el propio algoritmo de coincidencia 2.
Integración en el flujo de trabajo del desarrollador: interfaz TUI, CLI y conexión con editores

OmniDiff admite tanto una interfaz interactiva de terminal (TUI) como la salida de texto plano para scripts, lo que permite aplicarlo con flexibilidad en diversos entornos de desarrollo.
Integración con sistemas de control de versiones (Git, Jujutsu)
El visor interactivo de Git se configura mediante omnidiff git configure y se abre con git difftool. GIT_EXTERNAL_DIFF=omnidiff git diff es la integración para la salida de texto plano 2, 1. Si simplemente se introduce git diff, en un entorno de paginador no se iniciará la interfaz TUI interactiva, sino que se mostrará el resultado en modo de texto plano (modo headless) 2, 1. En el caso de Jujutsu (jj), mediante un asistente de configuración dedicado, se puede configurar en modo de invocación por archivo (file-by-file) para utilizar plenamente la función de detección de lenguaje 2, 1.
Tras la instalación, se pueden comparar directamente dos archivos o ejecutar el asistente de configuración de Git. En el asistente, se selecciona el alcance de aplicación del repositorio actual y global. 1
omnidiff BEFORE AFTER
omnidiff git configure
git difftoolFormatos de salida y herramientas de revisión
- Visor de terminal (TUI): Admite temas claros y oscuros, y muestra las imágenes en pantalla como imágenes reales mediante colores de 24 bits o protocolos gráficos de terminal (kitty, sixel, etc.) 2, 1.
- Automatización/Scripts:
--headlessgenera texto plano, y el modo se activa automáticamente incluso cuando la salida estándar no es un terminal. La salida en JSON requiere el uso deomnidiff --mode json BEFORE AFTER2, 1. - Revisión en navegador: También es posible revisar los cambios en un entorno de navegador web a través del proyecto
codereview, una versión temprana que se encuentra aún en la fasev0.0.02, 1.
Complementos para editores
Se proporcionan complementos para VS Code y Neovim (omnidiff-vscode, omnidiff.nvim), que también pueden instalarse y utilizarse en otros editores como Cursor o VSCodium a través de Open VSX 2, 1.
Limitaciones técnicas y estado actual del proyecto OmniDiff

Se debe distinguir entre un visor para comparar contenido y una herramienta para resolver conflictos de fusión. La tarea más representativa es la falta de soporte para la fusión en tres direcciones (3-way merge). El algoritmo APTED está optimizado por defecto para comparaciones en dos direcciones, por lo que la función de diferencia en tres direcciones para resolver conflictos de fusión es un desafío que el desarrollador ha manifestado querer abordar en el futuro 3. El README explica que actualmente no se aceptan contribuciones externas para mantener la velocidad de desarrollo 2, 1. Durante el desarrollo se han utilizado agentes de IA (Claude Code) y se ha adoptado la licencia AGPL-3.0-only 2, 1. Sería recomendable examinar primero los tipos de cambios frecuentes en la demostración pública y comparar los resultados con dos archivos familiares. Si se trata de repositorios donde hay frecuentes movimientos de código o cambios en imágenes o fuentes, será fácil verificar qué diferencias hay respecto a la comparación lineal habitual.
Referencias
- github.com/ivankovic/omnidiff · github.com↩
- ↩
- Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust | Hacker News · news.ycombinator.com↩
- ivankovic.github.io/omnidiff/showcase/content.html · ivankovic.github.io↩




