Interactive diff tool for SVG images.
[![Crates.io](https://img.shields.io/crates/v/lukaj)](https://crates.io/crates/lukaj)
[![CI - Main](https://github.com/adamws/lukaj/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/adamws/lukaj/actions/workflows/build-and-test.yml)
[![License](https://img.shields.io/github/license/adamws/lukaj)](https://github.com/adamws/lukaj/blob/master/LICENSE)
[![Coverage Status](https://coveralls.io/repos/github/adamws/lukaj/badge.svg?branch=master)](https://coveralls.io/github/adamws/lukaj?branch=master)
## Features
Swipe SVG graphics comparison with zoom and drag support.
## Installation
To install **precompiled** version of lukaj go to [latest release](https://github.com/adamws/lukaj/releases/latest)
page and download archive for your system. Provided binaries are
static executables for Windows and Linux.
If you're a Rust programmer, lukaj can be installed with `cargo`.
It supports two graphics backends which are enabled/disabled with
[cargo features](https://doc.rust-lang.org/cargo/reference/features.html).
The `use-rsvg` feature is available only when installing from source, precompiled binaries
on release page include only default feature set.
| Feature name | SVG library | 2D rendering library | Precompiled binary release |
| --- | --- | --- | --- |
| `use-usvg` (default) | [resvg](https://crates.io/crates/resvg) | [tiny-skia](https://github.com/RazrFalcon/tiny-skia) | yes |
| `use-rsvg` | [librsvg](https://crates.io/crates/librsvg) | [cairo](https://www.cairographics.org/) | no |
Depending on the operating system and selected feature set, lukaj will require
additional development libraries.
On Ubuntu Linux (click to expand)
1. When using only default `use-usvg` feature:
```bash
$ sudo apt-get install libsdl2-dev
$ cargo install lukaj
```
2. When using additional `use-rsvg` feature:
```bash
$ sudo apt-get install build-essential libcairo2-dev libgdk-pixbuf-2.0-dev \
libglib2.0-dev libpango1.0-dev libsdl2-dev libxml2-dev
$ cargo install lukaj --feature user-rsvg
```
On Windows (using MSYS2) (click to expand)
1. Install MSYS2 and run from it's terminal run:
- For default `use-usvg` feature:
```bash
$ pacman -S mingw-w64-x86_64-SDL2
```
- For additional `use-rsvg` feature:
```bash
$ pacman -S mingw-w64-x86_64-gtk4 mingw-w64-x86_64-gettext \
mingw-w64-x86_64-libxml2 mingw-w64-x86_64-pkgconf \
mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
```
2. Add mingw binaries path (`C:\msys64\mingw64\bin`) to system `Path`
3. Change default rust toolchain to `stable-gnu`
```bash
rustup toolchain install stable-gnu
rustup default stable-gnu
```
4. Run cargo install command
- For default feature only:
```bash
$ cargo install lukaj
```
- For additional `use-rsvg` feature:
```bash
$ cargo install lukaj --features use-rsvg
```
For different setups see this [GUI development with Rust and GTK4](https://gtk-rs.org/gtk4-rs/stable/latest/book/installation_windows.html) guide.
## Usage
To compare two SVG files run:
```
$ lukaj [path 1] [path 2]
```
Lukaj uses following mouse/keyboard controls:
| Button | Action |
| --- | --- |
| Left Click | Move diff separator |
| Right Click | Move images |
| Scroll | Zoom in and out |
| R | Reset images position |
| Esc | Exit |
Complete lukaj options (click to expand)
```
$ lukaj --help
Interactive diff tool for SVG images
Usage: lukaj [OPTIONS] [FILES]...
Arguments:
[FILES]... Files to compare
Options:
-s, --scale Sets a scaling factor
--backend Preferred backend [default: rsvg-with-cairo]
[possible values: rsvg-with-cairo, usvg-with-skia]
-h, --help Print help
-V, --version Print version
```
### Git integration
Lukaj can be used as [git difftool](https://git-scm.com/docs/git-difftool).
To add `git diff-svg` custom command, copy and paste following sections to `.gitconfig` file:
```
[difftool "lukaj"]
cmd = ~/.cargo/bin/lukaj $LOCAL $REMOTE
[alias]
diff-svg = "difftool -t lukaj -y"
```
### Other integrations
- [PCB visual diff with kicad-cli and lukaj](https://adamws.github.io/pcb-visual-diff-with-kicad-cli-and-lukaj)