dipc 1.2.0

Convert your favorite images and wallpapers with your favorite color palettes/themes
# dipc

[![crates.io](https://img.shields.io/crates/v/dipc)](https://crates.io/crates/dipc)
[![Homebrew](https://img.shields.io/homebrew/v/dipc)](https://formulae.brew.sh/formula/dipc)

<a href="https://repology.org/project/dipc/versions">
    <img src="https://repology.org/badge/vertical-allrepos/dipc.svg" alt="Packaging status" align="right">
</a>

<picture>
    <source media="(prefers-color-scheme: dark)" srcset="images/dipc_dark.png">
    <img alt="dipc light icon" src="images/dipc_light.png">
</picture>

doprz' image palette converter

Convert your favorite images and wallpapers with your favorite color palettes/themes

## Color Palettes/Themes

- catppuccin
- dracula
- edge
- everforest
- gruvbox
- gruvbox-material
- nord
- onedark
- rose-pine
- solarized
- tokyo-night

## Examples

![dipc examples](images/dipc_examples.png)

### Image Credits

Paul Bill - [https://unsplash.com/@hoffman11](https://unsplash.com/@hoffman11)

Adrien Vajas - [https://unsplash.com/@adrien_vj](https://unsplash.com/@adrien_vj)

Filipp Romanovski - [https://unsplash.com/@filipp_roman_photography](https://unsplash.com/@filipp_roman_photography)

## Installation

### Cargo

```sh
cargo install dipc
```

### Homebrew

```sh
brew install dipc
```

### Nix

`dipc` is available as a flake from GitHub or from nixpkgs

```sh
# From GitHub
nix run github:doprz/dipc
# From nixpkgs
nix run nixpkgs#dipc
```

### From Source

To build and install from source, first checkout the tag or branch you want to install, then run

```sh
cargo install --path .
```

This will build and install `dipc` in your `~/.cargo/bin`. Make sure that `~/.cargo/bin` is in your `$PATH` variable.

### Arch Linux (Community Maintained)

For Arch Linux users, `dipc` is available in the Arch User Repository (AUR)

```sh
yay -S dipc
```

> [!WARNING]
> This is a community-maintained version of `dipc` and not an official release.

## Usage

```
Convert your favorite images and wallpapers with your favorite color palettes/themes

Usage: dipc [OPTIONS] [PALETTE] [FILE]...

Arguments:
  [PALETTE]
          The color palette to use:
              - name of a builtin theme
              - path to a theme in JSON
              - a JSON string with the theme (starting with `JSON: {}`)
          Run with --help instead of -h for a list of all builtin themes
          
          Builtin themes:
              - catppuccin
              - dracula
              - edge
              - everforest
              - gruvbox
              - gruvbox-material
              - nord
              - onedark
              - rose-pine
              - solarized
              - tokyo-night

  [FILE]...
          The image(s) to process. Use `-` to read from stdin

Options:
  -s, --styles <VARIATIONS>
          The color palette variation(s) to use
          Run with --help instead of -h for a list of all possible values
          
          Possible values:
              - `all` to generate an image for each of the variations
              - `none` if you are using a flat theme without variations
              - or a comma-delimited list of the names of variations it should use
          
          [default: all]

  -o, --output <PATH>
          Output image(s) name/path as a comma-delimited list. Use `-` to write to stdout

  -d, --dir-output <PATH>
          Output directory name/path

  -m, --method <METHOD>
          CIELAB DeltaE method to use
          
          [default: de2000]

          Possible values:
          - de2000:  The default DeltaE method
          - de1994g: CIE94 DeltaE implementation, weighted with a tolerance for graphics
          - de1994t: CIE94 DeltaE implementation, weighted with a tolerance for textiles
          - de1976:  The original DeltaE implementation, a basic euclidian distance formula

  -v, --verbose...
          Verbose mode (-v, -vv, -vvv)

      --tui
          Launch interactive TUI mode

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version
```

### TUI

```sh
dipc --tui
```

![dipc tui](images/dipc_tui.png)

### Convert all images in directory

```sh
# Save to current directory
dipc <PALETTE> <INPUT_DIR>/*

# Save to output directory
dipc --dir-output <PATH> <PALETTE> <INPUT_DIR>/*
```

### Convert multiple images

```sh
dipc <PALETTE> img0.png img1.png

# Rename files
dipc --output new-img0.png,new-img1.png <PALETTE> img0.png img1.png
```

### Color palette variation(s)/style(s)

```sh
dipc --styles Style0 <PALETTE> img.png
dipc --styles Style0,Style1 <PALETTE> img.png
```

### CIELAB DeltaE method

```sh
dipc --method <METHOD> <PALETTE> img.png
```

### Support for stdin/stdout

```sh
grim -g "$(slurp)" - | dipc catppuccin - -o - | swappy -f -
cat image.png | dipc gruvbox - -o - > themed.png
```

## License

`dipc` is dual-licensed under the terms of both the MIT License and the Apache License 2.0

SPDX-License-Identifier: MIT OR Apache-2.0