rizzoo 0.6.9

a cross platform color generation tool implementing Material 3 Expressive
rizzoo-0.6.9 is not a library.
  • Material 3 Expressive
    • M3 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
  • Templating & Configuration
    • define templates, output paths, post hooks, and general configurations
  • Winnow-based Template Engine
    • minimal and simple color manipulation
  • Intuitive Color Filters
    • hex, rgb, hsl, lighten, darken, blend, harmonize, ensure_contrast, and more...
  • Cross-platform Wallpaper Wrappers
    • Windows, Macos, X11(Linux), Wayland(Linux)
  • Caching
    • identical images never regenerate
  • Live Reload
    • watch for changes and renders 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
Options:
  -i, --image <PATH>         image file / path as color source
  -u, --image-url <URL>      url of an image to use as the color source
  -c, --color <HEX>          hex color to use as the color source
  -P, --pick <N>             explicitly choose the most optimal source color 0-3
  -e, --prefer <MODE>        auto-pick the source color based on...
      --open-picker          open the interactive color picker
  -r, --render               fill template files with colors
  -o, --output               write all processed templates to output
      --output-only <APP>    write specific processed template to output
  -p, --preview              print palette table
  -n, --dry-run              render but skip writing or updating files anywhere
  -q, --silent               suppress process outputs
  -S, --style <STYLE>        choose a Material 3 style
      --light                generate light variant colors
  -t, --contrast <LEVEL>     choose color contrast levels
  -b, --blend-style <STYLE>  blend with a second Material 3 style
      --blend-ratio <RATIO>  blend ratio 0.1 – 0.9 ( requires --blend-style )
  -w, --wallpaper            set as desktop wallpaper
  -R, --reload-scheme        reload last generated color scheme
  -W, --watch                watch relevant files and re-render on change
      --init                 generate a default configuration file ( warns if already existing )
      --init-overwrite       overwrite configuration file with defaults
  -h, --help                 prints me ;)
  -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 {{ shadow }}, {{ scrim }}, {{ custom_<name> }}, and {{ wallpaper }}.

Filters

Filter Syntax Output
hex_raw {{ primary:hex_raw }} a6ebc3
rgb {{ primary:rgb }} rgb(166, 235, 195)
rgba {{ primary:rgba(0.5) }} rgba(166, 235, 195, 0.5)
hsl {{ primary:hsl }} hsl(150, 59%, 79%)
hsla {{ primary:hsla(0.5) }} hsla(150, 59%, 79%, 0.5)
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

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

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