rizzoo 0.6.7

a cross platform color generation tool implementing Material 3 Expressive
rizzoo-0.6.7 is not a library.
  • Material 3 Expressive
    • M3 + base16 palette from any image, URL, or hex color
  • Source Color Picking
    • choose the preferred source color from the most optimal ones.
  • Scheme Blending
    • mix two Material 3 styles
  • Winnow-based Template Engine
    • minimal and simple color manipulation
  • 25+ Color Filters
    • hex, rgb, hsl, lighten, darken, blend, harmonize, ensure_contrast, and more...
  • Templating & Configuration Files
    • define templates, output paths, post hooks, and general configurations
  • Cross-platform Wallpaper Wrappers
    • Windows, Macos, X11(Linux), Wayland(Linux)
  • Caching
    • identical images never regenerate
  • Live Reload
    • watch for changes and re-render automatically

WebP Showcase GIF Showcase

# from an image
rizzoo -i ~/Pictures/wall.jpg -r -o -p

# from a hex color
rizzoo -c "#7c3aed" -r -o -p

# from a URL
rizzoo -u "https://example.com/wall.jpg" -r -o

# first run? generate a config file
rizzoo --init
Usage: rizzoo [OPTIONS]

Options:
  -i, --image <PATH>         image path as color source
  -u, --image-url <URL>      url link of an image as the color source
  -c, --color <HEX>          a color of your choice in hex format
  -R, --restore-wallpaper    restore last wallpaper
  -p, --preview              print palette table
  -r, --render               fill template files with colors
  -o, --output               write all processed templates to output
      --output-to <APP>      write specific processed template to output
  -w, --wallpaper            set as desktop wallpaper
  -q, --silent               no process printed on screen
  -n, --dry-run              rendering and linking flags won't be applied
  -S, --style <STYLE>        [default: tonal-spot] [possible values: tonal-spot, neutral, vibrant, expressive, rainbow, fruit-salad, monochrome, fidelity, content]
      --light                generate light variant colors
  -W, --watch                reload when files change
  -t, --contrast <LEVEL>     increase color contrast [default: standard] [possible values: standard, medium, high]
  -P, --pick <N>             explicitly choose a source color
  -e, --prefer <MODE>        auto-pick source color based on... [possible values: darkness, lightness, saturation]
      --open-picker          explicitly open the interactive color picker
  -b, --blend-style <STYLE>  blend with another style (requires --blend-ratio) [possible values: tonal-spot, neutral, vibrant, expressive, rainbow, fruit-salad, monochrome, fidelity, content]
      --blend-ratio <RATIO>  blend ratio 0.0-1.0 when using --blend-style [default: 0.5]
      --init                 generate configuration file
      --init-overwrite       overwrite configuration file with defaults
  -h, --help                 Print help
  -V, --version              Print version

rizzoo reads ~/.config/rizzoo/config.toml. rizzoo --init generates the default configuration file.

style = "tonal-spot"
light = false
contrast = "standard"

[wallpaper]
set = false
command = "swaybg -i {{ image }} -m fill"

[custom_colors]
accent = { color = "#e06c75", blend = true }

[alacritty]
template = "colors-alacritty.toml"
output   = "~/.config/alacritty/colors.toml"
post_hook = "pkill -SIGUSR1 alacritty"

post_hook runs after the template is written. Add enabled = false to skip an entry.

Templates live in ~/.config/rizzoo/templates/. -r renders them to cache, -o writes them to each entry's output path.

Variables

Every Material role is a hex string: {{ primary }}, {{ on_primary }}, {{ surface }}, {{ background }}, {{ outline }}, {{ error }}… plus {{ base00 }}{{ base15 }}, the colors array, {{ custom_<name> }}, and {{ wallpaper }}.

Filters

Filter Syntax Output
hex {{ primary:hex }} #a6ebc3
hex_raw {{ primary:hex_raw }} a6ebc3
rgb {{ primary:rgb }} 166,235,195
rgb_css {{ primary:rgb_css }} Rgb166, 235, 195
rgba {{ primary:rgba(0.5) }} Rgba166, 235, 195, 0.5
hsl {{ primary:hsl }} 150,59%,79%
hue / saturation / lightness {{ primary:hue }} 150
r / g / b {{ primary:r }} 166
lighten / darken {{ primary:lighten(0.1) }} adjusted color
saturate / desaturate {{ primary:saturate(0.2) }} adjusted color
invert / grayscale {{ primary:invert }} transformed color
blend {{ primary:blend(%secondary, 0.5) }} CAM16-UCS blend
harmonize {{ primary:harmonize(%tertiary) }} hue-shifted toward target
ensure_contrast {{ on_surface:ensure_contrast(%surface, 4.5) }} WCAG-safe color
set_hue / set_saturation / set_lightness {{ primary:set_hue(180) }} forced channel
set_red / set_green / set_blue {{ primary:set_red(255) }} forced channel

All chainable via colon :{{ primary:darken(0.1):hex_raw }}. Bare %var args resolve to other template variables.

For loop

{{#for c in colors }}{{ c:hex_raw }}
{{/c }}

Example

/* material.css */
:root {
  --md-sys-color-primary: {{ primary }};
  --md-sys-color-on-primary: {{ on_primary }};
  --md-sys-color-surface: {{ surface }};
}

Check example/ for a sandboxed testing script.

cargo install rizzoo
git clone https://github.com/plgbrlism/rizzoo && cd rizzoo

cargo build --release

MIT