Skip to main content
Version: 0.4.2

random

Generates a colour palette algorithmically — no image, no file, no network. Each colour is drawn from a deterministic PRNG (ChaCha8) seeded either explicitly via --random.seed or, by default, from crypto/rand. The same seed always produces the same palette, which makes this plugin useful for reproducible experimentation, stress-testing the categoriser with hostile inputs, and bootstrapping a theme when you have no image or palette in mind.

Installation

Via the official plugin repository

tinct plugins install random

Build from source

cd contrib/plugins/input/random
go build -ldflags "-X main.Version=0.1.0" -o tinct-plugin-random
install -m 0755 tinct-plugin-random ~/.local/bin/

Verify

which tinct-plugin-random
tinct-plugin-random --plugin-info | jq .

The plugin uses tinct's go-plugin RPC protocol and is discovered automatically once it's on $PATH.

Quick start

# Default — 32 random colours from a fresh crypto/rand seed
tinct generate -i random -o kitty

# Reproducible — same seed, same palette every run
tinct generate -i random -o kitty --random.seed 12345

# Smaller palette
tinct generate -i random -o kitty --random.count 16

# Inspect a palette without writing any theme files
tinct extract -i random --random.seed 12345 --random.count 8

Configuration / credentials

No credentials, no network access, no files. The only inputs are the two plugin-args (count and seed), and both are per-invocation — external plugin arguments are not read from tinct.toml, so there is nothing to persist. Wrap the call in a shell alias if you want a fixed seed:

alias tinct-random='tinct generate -i random --random.seed 12345 -o'

If seed is omitted, the plugin reads 8 bytes from crypto/rand and uses them as the ChaCha8 seed — so every run produces a different palette. Pass seed to lock generation to a known result. The flag is registered as a signed 64-bit integer, so use the --plugin-args JSON form if you need a value above 2^63-1.

Flags

Once the plugin is installed, tinct registers its arguments as regular --random.<arg> flags. They can also be passed as JSON via --plugin-args random='{"seed":12345}'.

FlagTypeDefaultDescription
--random.countinteger32Number of colours to generate (0–4096)
--random.seedinteger(crypto/rand)ChaCha8 seed for reproducible generation

Output

A palette of count colours (default 32), each drawn uniformly at random from the full RGB cube. No role hints are emitted — tinct's categoriser is responsible for picking background, foreground, accents, etc., from the generated set. No theme hint is emitted either, so light/dark is inferred from the average luminance of the result.

This plugin does not provide a wallpaper.

Troubleshooting

plugin-arg 'count' out of range

count is capped at 4096 to prevent accidental misuse (a million colours doesn't yield a more interesting palette than a hundred). Pass a value in 0..4096.

plugin-arg 'count' must be a number

Plugin-args arrive as JSON, where numbers decode as float64. The --random.count flag always sends a number, so this only bites with the raw JSON form: write --plugin-args random='{"count":32}', not '{"count":"32"}' — quoting turns it into a string and the validator rejects it.

Same seed produces a different palette than last time

A change to the colour-generation function (e.g. tinct upgraded the PRNG, or this plugin's version changed) will produce different output for the same seed. Pin both the tinct version and the tinct-plugin-random version if exact reproducibility across machines matters.

Palette looks washed-out / cluttered

Uniform random sampling of RGB doesn't produce aesthetically grouped palettes — that's the point. If you wanted a palette with semantic structure, use image, paletty, or one of the AI-generation inputs instead.

  • image — extract a coherent palette from a real image.
  • paletty — fetch a curated palette from paletty.dev.
  • google-genai, openrouter — generate a source image with an AI model.