tinct

module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2025 License: MIT

README

Tinct

An extensible colour palette generator and theme manager for unified theming across your entire environment

Generate colour palettes from images, AI, remote themes, or manual specifications. Apply them consistently to terminals, desktop environments, window managers, and external devices. Built with Go for speed and extensibility.

Go Version License

Quick Start

Installation

Arch Linux (AUR):

yay -S tinct-bin      # Using yay
paru -S tinct-bin     # Using paru

From Go:

go install github.com/jmylchreest/tinct/cmd/tinct@latest

From source:

git clone https://github.com/jmylchreest/tinct.git
cd tinct && go build -o tinct ./cmd/tinct
Basic Usage
# Preview colors from an image
tinct extract --preview --categorise wallpaper.jpg

# Apply theme to all configured applications
tinct generate -i image -p ~/Pictures/wallpaper.jpg -o all

# Use a specific theme (Catppuccin Mocha)
tinct generate -i remote-json \
  --remote-json.url "https://raw.githubusercontent.com/catppuccin/palette/main/palette.json" \
  --remote-json.query "colors.mocha" \
  -o all

# Generate AI image and apply theme (requires Google API key)
export GOOGLE_API_KEY="your-api-key"
tinct generate -i google-genai \
  --prompt "beautiful sunset over mountains" \
  -o all

Features

  • Multiple Input Sources - Extract from images, generate with AI, fetch remote themes (JSON/CSS), or specify manually
  • Smart Categorisation - Auto-assigns background, foreground, accent, and semantic colours with WCAG contrast checking
  • Unified Theming - Apply consistent color schemes across 25+ applications and desktop environments
  • External Device Support - Control LED strips, smart lights, and RGB peripherals
  • Plugin Architecture - Extend with custom inputs/outputs in any language
  • Theme-Aware - Automatic dark/light theme detection with accessibility compliance

Supported Applications

Tinct supports 25+ applications across terminals, desktop environments, window managers, and more:

Category Applications
Terminals Alacritty, Ghostty, Kitty
Desktop Environments GNOME Shell, KDE Plasma, GTK3/GTK4, Libadwaita, Qt5/Qt6
Window Managers Hyprland, Hyprpaper, Hyprlock
Bars & Notifications Waybar, Dunst, SwayOSD
Launchers Fuzzel, Walker, Wofi
Editors & Multiplexers Neovim, Zed, Zellij

See Plugin Reference for complete plugin list and configuration.

Example Workflows

Theme from Wallpaper
# Extract and apply
tinct generate -i image -p ~/Pictures/wallpaper.jpg -o all

# With ambient lighting extraction for LED sync
tinct generate -i image -p wallpaper.jpg \
  --image.extractAmbience \
  --image.ambienceRegions 8 \
  -o all,wled-ambient
# Catppuccin Mocha
tinct generate -i remote-json \
  --remote-json.url "https://raw.githubusercontent.com/catppuccin/palette/main/palette.json" \
  --remote-json.query "colors.mocha" \
  -o all

# Tokyo Night
tinct generate -i remote-json \
  --remote-json.url "https://raw.githubusercontent.com/folke/tokyonight.nvim/main/extras/lua/tokyonight_colors.lua" \
  --remote-json.query "night" \
  -o hyprland,kitty,waybar

See Theme Cookbook for ready-to-use commands for Dracula, Nord, Gruvbox, and more.

AI-Generated Themes
# Get Google API key from https://aistudio.google.com/apikey
export GOOGLE_API_KEY="your-key-here"

# Generate image and apply theme
tinct generate -i google-genai \
  --prompt "sunset over rolling hills of tuscany" \
  -o all

Documentation

Document Description
Plugin Reference Complete plugin list and configuration
Theme Cookbook Ready-to-use commands for popular themes
Template Guide Template functions and customization
Setup Guide Detailed installation and configuration
Development Guide Creating built-in Go plugins
External Plugins Creating plugins in any language
Screenshots Guide Adding screenshots to documentation

Plugin Management

# Add official plugin repository
tinct plugins repo add official https://github.com/jmylchreest/tinct-plugins

# List all plugins
tinct plugins list

# Install external plugin
tinct plugins install <github-user>/<repo>

# Enable/disable specific plugins
export TINCT_ENABLED_PLUGINS="image,hyprland,kitty,kde-plasma"
export TINCT_DISABLED_PLUGINS="waybar"

Creating Plugins

Tinct supports two types of plugins:

  1. Built-in plugins (Go) - Compiled into binary for maximum performance
  2. External plugins (Any language) - Standalone executables using JSON-stdio protocol

Quick External Plugin Example:

#!/bin/bash
# contrib/plugins/output/my-app.sh

read -r palette
background=$(echo "$palette" | jq -r '.palette.background | .hex')

cat > ~/.config/my-app/colors.conf <<EOF
background = $background
EOF

Make it executable and use it:

chmod +x my-app.sh
tinct generate -i image -p wallpaper.jpg -o my-app --plugin-path ./my-app.sh

See External Plugins Guide for detailed examples including LED controllers.

Project Structure

tinct/
├── cmd/tinct/                    # CLI entry point
├── internal/
│   ├── colour/                   # Color extraction & categorization
│   ├── plugin/
│   │   ├── input/                # Input plugins (image, AI, remote)
│   │   ├── output/               # Output plugins (apps, devices)
│   │   └── manager/              # Plugin management
│   └── cli/                      # Command handlers
├── docs/                         # Documentation
│   ├── PLUGINS.md                # Plugin reference
│   ├── THEME-COOKBOOK.md         # Theme recipes
│   ├── TEMPLATE_GUIDE.md         # Template reference
│   └── *.md                      # Other guides
├── contrib/plugins/              # Example external plugins
└── .github/screenshots/          # Documentation screenshots

Advanced Features

Ambient Lighting & External Devices

Extract positional colors for LED synchronization:

# Extract edge/corner colors
tinct generate -i image -p wallpaper.jpg \
  --image.extractAmbience \
  --image.ambienceRegions 8 \
  -o wled-ambient \
  --plugin-args 'wled-ambient={"host":"192.168.1.100"}'

Example plugins for external devices in contrib/plugins/output/:

  • WLED ambient lighting (wled-ambient.sh)
  • OpenRGB peripheral control (openrgb-peripheral.sh)
  • Philips Hue integration (see contrib)

See External Plugins Guide for writing device controllers.

Role Hints & Weighting

Override auto-categorization with explicit role assignments:

# Assign specific colors to roles
tinct generate -i file \
  --file.colors "#1e1e2e,#cdd6f4,#89b4fa" \
  --file.hints "background=0,foreground=1,accent1=2" \
  -o all
Plugin Hooks

Automatically reload applications after theme changes:

# Reload Kitty after generating theme
tinct generate -i image -p wallpaper.jpg -o kitty --kitty.reload

# Hyprpaper automatically applies wallpaper
tinct generate -i image -p wallpaper.jpg -o hyprpaper

See Plugin Hooks for details.

Contributing

Contributions welcome! We especially need:

  • Plugin templates for broader adoption
  • New application/device support
  • Documentation improvements
  • Bug reports and feature requests

See Development Guide and Plugin Wishlist.

License

MIT License - see LICENSE

Acknowledgments

Built with Go 1.25+. Color theory based on Material Design 3 and WCAG 2.1 guidelines.


Note: Application plugin templates are based on online examples and personal configurations. They may benefit from refactoring for broader adoption. Contributions are significantly welcome!

Directories

Path Synopsis
cmd
tinct command
Tinct - A modern colour palette generator
Tinct - A modern colour palette generator
tinct-repo-manager command
Package main provides the tinct-repo-manager CLI tool.
Package main provides the tinct-repo-manager CLI tool.
contrib
internal
cli
Package cli provides the command-line interface for Tinct.
Package cli provides the command-line interface for Tinct.
colour
Package colour provides accent color selection logic.
Package colour provides accent color selection logic.
compression
Package compression provides utilities for extracting and decompressing plugin archives.
Package compression provides utilities for extracting and decompressing plugin archives.
image
Package image provides utilities for loading and processing images.
Package image provides utilities for loading and processing images.
manifest
Package manifest provides file tracking for tinct-generated files.
Package manifest provides file tracking for tinct-generated files.
plugin/executor
Package executor provides a unified interface for executing plugins regardless of their underlying protocol (go-plugin RPC or JSON-stdio).
Package executor provides a unified interface for executing plugins regardless of their underlying protocol (go-plugin RPC or JSON-stdio).
plugin/input
Package input provides the interface and base types for input plugins.
Package input provides the interface and base types for input plugins.
plugin/input/file
Package file provides an input plugin for loading colour palettes from files or manual specifications.
Package file provides an input plugin for loading colour palettes from files or manual specifications.
plugin/input/googlegenai
Package googlegenai provides an input plugin for generating images using Google's Imagen models.
Package googlegenai provides an input plugin for generating images using Google's Imagen models.
plugin/input/image
Package image provides an input plugin for extracting colour palettes from images.
Package image provides an input plugin for extracting colour palettes from images.
plugin/input/remotecss
Package remotecss provides an input plugin for fetching colour palettes from remote CSS sources.
Package remotecss provides an input plugin for fetching colour palettes from remote CSS sources.
plugin/input/remotejson
Package remotejson provides an input plugin for fetching colour palettes from remote JSON sources with JSONPath queries.
Package remotejson provides an input plugin for fetching colour palettes from remote JSON sources with JSONPath queries.
plugin/input/shared/regions
Package regions provides utilities for extracting colors from specific.
Package regions provides utilities for extracting colors from specific.
plugin/input/shared/seed
Package seed provides utilities for deterministic seed generation for k-means clustering.
Package seed provides utilities for deterministic seed generation for k-means clustering.
plugin/manager
Package manager provides plugin management with configuration support.
Package manager provides plugin management with configuration support.
plugin/output
Package output provides the interface and base types for output plugins.
Package output provides the interface and base types for output plugins.
plugin/output/alacritty
Package alacritty provides an output plugin for Alacritty terminal colour themes.
Package alacritty provides an output plugin for Alacritty terminal colour themes.
plugin/output/common
Package common provides shared utilities for output plugins.
Package common provides shared utilities for output plugins.
plugin/output/dunst
Package dunst provides an output plugin for Dunst notification daemon colour themes.
Package dunst provides an output plugin for Dunst notification daemon colour themes.
plugin/output/fuzzel
Package fuzzel provides an output plugin for Fuzzel application launcher colour themes.
Package fuzzel provides an output plugin for Fuzzel application launcher colour themes.
plugin/output/ghostty
Package ghostty provides an output plugin for Ghostty terminal emulator colour themes.
Package ghostty provides an output plugin for Ghostty terminal emulator colour themes.
plugin/output/gnome-shell
Package gnomeshell provides an output plugin for GNOME Shell theming.
Package gnomeshell provides an output plugin for GNOME Shell theming.
plugin/output/gtk3
Package gtk3 provides an output plugin for GTK3 application theming.
Package gtk3 provides an output plugin for GTK3 application theming.
plugin/output/gtk4
Package gtk4 provides an output plugin for GTK4 application theming.
Package gtk4 provides an output plugin for GTK4 application theming.
plugin/output/hyprland
Package hyprland provides an output plugin for Hyprland window manager colour themes.
Package hyprland provides an output plugin for Hyprland window manager colour themes.
plugin/output/hyprlock
Package hyprlock provides an output plugin for Hyprlock screen lock colour themes.
Package hyprlock provides an output plugin for Hyprlock screen lock colour themes.
plugin/output/hyprpaper
Package hyprpaper provides an output plugin for Hyprpaper wallpaper manager configuration.
Package hyprpaper provides an output plugin for Hyprpaper wallpaper manager configuration.
plugin/output/kde-plasma
Package kdeplasma provides an output plugin for KDE Plasma desktop environment theming.
Package kdeplasma provides an output plugin for KDE Plasma desktop environment theming.
plugin/output/kitty
Package kitty provides an output plugin for Kitty terminal colour themes.
Package kitty provides an output plugin for Kitty terminal colour themes.
plugin/output/libadwaita
Package libadwaita provides an output plugin for libadwaita/GNOME application theming.
Package libadwaita provides an output plugin for libadwaita/GNOME application theming.
plugin/output/neovim
Package neovim provides an output plugin for Neovim colour themes.
Package neovim provides an output plugin for Neovim colour themes.
plugin/output/qt5
Package qt5 provides an output plugin for Qt5 application theming via qt5ct.
Package qt5 provides an output plugin for Qt5 application theming via qt5ct.
plugin/output/qt6
Package qt6 provides an output plugin for Qt6 application theming via qt6ct.
Package qt6 provides an output plugin for Qt6 application theming via qt6ct.
plugin/output/swayosd
Package swayosd provides an output plugin for SwayOSD on-screen display colour themes.
Package swayosd provides an output plugin for SwayOSD on-screen display colour themes.
plugin/output/template
Package template provides utilities for loading plugin templates with custom override support.
Package template provides utilities for loading plugin templates with custom override support.
plugin/output/testing
Package testing provides shared test utilities for output plugins.
Package testing provides shared test utilities for output plugins.
plugin/output/walker
Package walker provides an output plugin for Walker application launcher colour themes.
Package walker provides an output plugin for Walker application launcher colour themes.
plugin/output/waybar
Package waybar provides an output plugin for Waybar status bar colour themes.
Package waybar provides an output plugin for Waybar status bar colour themes.
plugin/output/wofi
Package wofi provides an output plugin for Wofi application launcher colour themes.
Package wofi provides an output plugin for Wofi application launcher colour themes.
plugin/output/zellij
Package zellij provides an output plugin for Zellij terminal multiplexer colour themes.
Package zellij provides an output plugin for Zellij terminal multiplexer colour themes.
plugin/protocol
Package protocol defines the plugin protocol version and compatibility checking.
Package protocol defines the plugin protocol version and compatibility checking.
plugin/repository
Package repository provides plugin repository management for Tinct.
Package repository provides plugin repository management for Tinct.
repocli
Package repocli provides CLI commands for the repository manager tool.
Package repocli provides CLI commands for the repository manager tool.
repomanager
Package repomanager provides repository manifest management functionality.
Package repomanager provides repository manifest management functionality.
security
Package security provides security validation utilities for Tinct.
Package security provides security validation utilities for Tinct.
util
Package util provides shared utility functions used across the application.
Package util provides shared utility functions used across the application.
util/http
Package http provides HTTP utilities for fetching remote resources.
Package http provides HTTP utilities for fetching remote resources.
util/imagecache
Package imagecache provides utilities for downloading and caching remote images.
Package imagecache provides utilities for downloading and caching remote images.
version
Package version provides build-time version information for Tinct.
Package version provides build-time version information for Tinct.
pkg
colour
Package colour provides public types and utilities for working with color palettes.
Package colour provides public types and utilities for working with color palettes.
plugin
Package plugin provides the public API for tinct plugins.
Package plugin provides the public API for tinct plugins.
template
Package template provides template utilities and functions for tinct plugins.
Package template provides template utilities and functions for tinct plugins.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL