Ultimate Colorizer
The complete recolorization framework for Unity — textures, materials, meshes, sprites, tilemaps and palettes, plus runtime character dyes and cosmetics. Click-to-recolor in the Editor with no code, or drive everything from a clean C# API.
MaterialPropertyBlock — your shared materials and source textures are never mutated. Preview in the Editor, undo freely.⚡ Recolor in 10 seconds
GameObject → Ultimate Colorizer → Material Tint Cube, pick a color, press Play. No script.
🖼 Texture & sprite recolor
Replace colors, palette remap, masks, gradients, LUTs, sprite-rect — CPU, deterministic.
🎭 Runtime dyes & cosmetics
Multi-channel character dye, cosmetic slots, deterministic randomize, multiplayer-safe payloads.
🎨 Palettes & harmonies
Palette assets, harmony generation, validation and JSON import/export from the Inspector.
📝 Recolor Studio
Author profiles, browse palettes, build material presets, batch-process variants.
📙 Clean C# API
Profiles, processors, a processing service and runtime controllers — fully scriptable.
This guide leads with the no-code workflow, then covers the recolor engine, the runtime systems, and the scripting API and reference at the end.
Installation
Import once — there is nothing to configure to start recoloring.
In
Window → Package Manager → My Assets, download and import Ultimate Colorizer. It lands at Assets/UltimateColorizer/.On first import a Welcome window appears with quick actions. You can re-open it any time from
Tools → Ultimate Colorizer → Welcome.GameObject → Ultimate Colorizer → Material Tint Cube drops a ready, pre-wired object into the scene.The object recolors automatically. No scripting required.
Requirements
- Unity 6000.0 or newer (Unity 6).
- Render pipeline: Built-in and URP are supported and verified. HDRP is supported through pipeline-aware material adapters (verify on an HDRP project before shipping an HDRP claim).
- Works with both the Input System package and the legacy Input Manager — no special input package is required.
- No third-party dependencies. Source-available C#.
What gets installed
Assets/UltimateColorizer/
Runtime/ // Core model, texture/material/mesh engines, palettes,
// runtime customization, characters, batch, SDK, validation
Editor/ // Recolor Studio, windows, no-code inspectors, Welcome,
// GameObject scaffolding, headless validation/build runners
Demo/ // An interactive scene showcasing every feature
Documentation/ // You are here
Samples/ // Texture, material, mesh, character, cosmetics sample scenes
Tests/ // EditMode + PlayMode (run headless via Unity -runTests)Project
Quick Start (No-Code)
Recolor a real object in the scene without writing a line of code.
GameObject → Ultimate Colorizer → Material Tint Cube. A cube drops in with a Recolor Material Applicator already attached.In the Inspector, change Color. The cube updates live in the Scene view via the Preview In Scene button.
Tick Apply On Start. Now the color applies automatically when the game runs.
The object recolors — no script. Try a Sprite Tint Object or a Runtime Dye Controller next.
Tools → Ultimate Colorizer → Welcome → Open the Demo Scene) and press Play. It opens on an interactive Welcome screen that introduces the asset, walks you through this same 3-step quick start, lets you recolor a live preview by clicking a color, and launches a guided tour of every feature.Editor Tools & No-Code
Every primary capability is reachable by clicking — add a component, assign data, pick options, get a result.
The four entry points
➕ GameObject menu
GameObject → Ultimate Colorizer scaffolds ready, pre-wired recolor objects with Undo.
🧩 Components
Add Component → Ultimate Colorizer — each has a friendly inspector with live preview.
📁 Assets → Create
Assets → Create → Ultimate Colorizer creates profiles, palettes, presets and more.
📝 Tools menu
Tools → Ultimate Colorizer opens Recolor Studio and the other authoring windows.
Live preview in the Inspector
The custom inspectors wrap their fields in change-tracking: when you edit a color, texture or option, the component re-applies and the Scene view repaints — so you see the result as you edit, before pressing Play. Property fields that reference a material (color/texture property names) become dropdowns populated from the assigned renderer's shader, so you pick valid options instead of typing strings.
Tools → Ultimate Colorizer → Welcome) has one-click buttons to open this documentation, open the demo scene, create your first recolor object, and open Recolor Studio.Recolor Components
Add these from Add Component → Ultimate Colorizer (or via the GameObject menu).
| Component | What it does | No-code setup |
|---|---|---|
RecolorMaterialApplicator | Tints a renderer via a property block (non-destructive). | Assign Renderer + Color property + Color, tick Apply On Start. |
SpriteRecolorApplicator | Tints a SpriteRenderer. | Assign Sprite Renderer + Color, tick Apply On Start. |
TextureRecolorApplicator | Assigns a texture to a material texture slot. | Assign Renderer + Texture Property + Source Texture, tick Apply On Start. |
RecolorRuntimeController | Multi-channel dye driver (e.g. characters). | Assign a Profile + Renderer Bindings, tick Apply Defaults On Start. |
CosmeticSlotApplicator | Toggles cosmetic objects per slot. | Add bindings (slot + item + target), tick Apply On Start. |
RecolorRuntimeSliderUI | Wires uGUI sliders to a dye channel (HSV). | Assign controller + channel + sliders. |
_BaseColor for URP/Lit, _Color for Built-in). If the saved value isn't present, it auto-binds to a valid first option.Palettes & Import
Palette assets hold named, role-tagged colors and import/export as JSON.
Create a palette
Assets → Create → Ultimate Colorizer → Palette. The palette inspector shows a swatch strip, a one-line summary, and Import JSON / Export JSON buttons.
PaletteJsonUtility, which the runtime API uses too, so palettes round-trip between projects and tools.Harmony generation
Generate palettes from a base color with PaletteGenerator.Generate(seed, mode, count). Modes include Complementary, Analogous, Triadic, Monochrome, Value Ramp, Split-Complementary, Tetradic, Saturation Ramp, Warm and Cool. The Palette Browser exposes this visually.
How It Works
A profile describes what to recolor; processors do the work; a service routes them.
- A
RecolorProfile(ScriptableObject) holds targets, palettes, regions, operations and runtime channels. - Each
RecolorTargetnames a source (texture, material, mesh, sprite, tilemap, renderer, character) and aRecolorTargetType. - An
IRecolorProcessorself-selects per target (texture/material/mesh/tilemap) and applies the profile's operations. RecolorProcessingServiceroutes a target to the right processor through aRecolorProcessorRegistryand returns aRecolorResultwith generated objects and validation issues.
RecolorOperationType covers Replace Color, Replace Palette Entry, Hue Shift, Saturation/Value, Gradient Map, Tint, Multiply, Emission Color, Material Property Set, Vertex Color Replace and LUT Map — so a single profile drives many effects.Textures & Sprites
CPU texture recoloring with deterministic, non-destructive output.
- Replace color with tolerance and a choice of color-distance metric (RGB, weighted RGB, CIE76 approximation).
- Palette remap from a source palette to a target palette.
- Masks — threshold, channel, UV-rect, dilate/erode, combine.
- Gradient map and 1D LUT mapping.
- Sprite-rect recolor and contact-sheet generation for sprite sheets.
- Smart color analysis clusters and classifies a texture's colors (skin, cloth, metal, emission…).
// Replace a color in a texture (preview copy; source is never mutated)
Texture2D result = TextureRecolorUtility.ReplaceColor(
source, fromColor, toColor, tolerance: 24, preserveAlpha: true);C#
Materials
Shader-aware material recoloring and variant generation.
- Property-block recoloring — recolor a renderer without touching shared materials (see
RecolorMaterialApplicator). - Shader analysis detects the pipeline (Built-in / URP / HDRP / Shader Graph) and the available color/texture properties.
- Emission recoloring recognizes both
_EmissionColor(Built-in/URP) and_EmissiveColor(HDRP/Lit). - Material variants — spin off recolored material copies; Material Preset Libraries store reusable color presets.
_BaseColor (URP/Lit), falls back to _Color (Built-in/Standard), then the first detected color property.Meshes & Tilemaps
Vertex colors, UV/submesh workflows, and non-destructive tilemap recoloring.
Meshes
- Vertex color replacement with tolerance.
- UV islands and UV-rect masks, submesh descriptors and channel maps.
- Renderer hierarchy scanning to find and bind every renderer under a root.
Tilemaps
Recolor a UnityEngine.Tilemaps.Tilemap non-destructively: per-cell color replace, palette swap, HSV shift, multiply, tint, global tint, and color extraction. Per-cell colors live on the tilemap, not the tile, so a single shared tile recolors per cell.
Character Dye & Cosmetics
Player-facing customization: dye channels, cosmetic slots, deterministic randomize.
Dye channels
A RecolorProfile's Runtime Channels define named, palette-constrained dye channels (skin, hair, cloth, armor, weapon…) with default colors. A RecolorRuntimeController maps each channel to one or more renderer bindings and applies a RecolorRuntimeState at runtime.
// No-code: tick "Apply Defaults On Start" on the controller, or from code:
controller.SetChannelColor("cloth_primary", Color.cyan);
controller.ApplyProfileDefaults(); // build a state from the profile's defaultsC#
Cosmetics
CosmeticSlotApplicator toggles GameObjects per slot (helmet on/off, cape variants). CharacterRandomizer produces a deterministic dye state from a seed and a CharacterRandomizationRules asset (with locked channels and palette constraints).
Save / Load
Serialize a player's appearance as lightweight data — not full textures.
- JSON payloads via
RuntimeCustomizationStore/RecolorRuntimeState.ToJson(). - Compact, multiplayer-safe payloads via
CompactRuntimePayloadCodec— small enough to sync over the network. - PlayerPrefs persistence helpers, plus a checksum to detect tampering/corruption.
Batch & SDK
Generate variants in bulk and extend the framework.
- Batch processing with deterministic naming, dry-run, progress, cancellation and JSON/CSV reports (
RecolorBatchProcessor). - Validation reports flag missing scripts, broken sample references, duplicate channels and release issues.
- SDK — register custom shader profiles, processors, palette generators and validators; an extension registry discovers them by attribute.
- Headless runners — validation and build entry points for CI (
-executeMethod).
Editor Windows
Open from Tools → Ultimate Colorizer.
| Window | Purpose |
|---|---|
| Recolor Studio | Tabbed authoring for texture, material, mesh, character, runtime, validation and preview. |
| Palette Browser | Browse, generate (harmonies) and validate palettes. |
| Material Preset Library | Build and apply reusable material color presets. |
| Batch Processor | Run batch recolor jobs and export reports. |
| Preset Marketplace | Package and import/export preset bundles. |
| Welcome | First-run onboarding with quick actions (re-openable any time). |
Scripting API
The no-code components are thin wrappers over a clean, fully scriptable API.
using UltimateColorizer;
// 1) Recolor a renderer (non-destructive property block)
var applicator = go.AddComponent<RecolorMaterialApplicator>();
applicator.ApplyColor(Color.red);
// 2) Drive a recolor profile through the processing service
var registry = new RecolorProcessorRegistry();
registry.Register(new TextureRecolorProcessor());
var service = new RecolorProcessingService(registry);
RecolorResult result = service.Process(new RecolorContext(profile, target));
// 3) Runtime multi-channel dye
var state = new RecolorRuntimeState();
state.SetColor("skin", skinColor);
controller.Apply(state);
string json = controller.ToJson(); // save
controller.FromJson(json); // loadC#
Troubleshooting
Common issues and quick fixes.
I added a component but nothing recolors on Play
Tick Apply On Start (it defaults to off so code-driven users aren't overridden). For RecolorRuntimeController, tick Apply Defaults On Start and make sure the profile has Runtime Channels and Renderer Bindings.
The color isn't changing / wrong shader property
Use the Color Property dropdown to pick the property your shader actually exposes — _BaseColor for URP/Lit, _Color for Built-in/Standard. The dropdown is populated from the assigned renderer's material.
Emission recolor does nothing in HDRP
HDRP/Lit uses _EmissiveColor (not _EmissionColor). The engine handles both, but verify your material has an emission property and that emission is enabled on the material.
Palette JSON import shows an error dialog
The file isn't valid palette JSON (or is empty). Export a palette first to see the expected format. Import fails gracefully and leaves the palette unchanged.
FAQ
Quick answers.
Do I need to write code?
No. Add a component, pick a color, tick Apply On Start. The C# API is there when you want it.
Will it mutate my materials or textures?
No. Material recoloring uses property blocks; texture operations produce new copies. Your source assets are untouched.
Which render pipelines are supported?
Built-in and URP are supported and verified. HDRP is supported through pipeline-aware adapters; verify on an HDRP project before relying on it.
Does it need the Input System package?
No. It works with both the Input System package and the legacy Input Manager.
Can I use it for runtime player customization / multiplayer?
Yes. Dye state serializes to JSON or a compact, multiplayer-safe payload you can sync and persist.
Support
Need help? We're here for you.
Get in Touch
Bug reports, feature requests, recoloring or shader questions — reach out and we'll get back to you.
✉ szekipapa77@gmail.comWe typically respond within 24–48 hours.
- Check the Troubleshooting section
- Confirm the recolor component is on the object
- Confirm Apply On Start is enabled (or you call the API)
- Check the Console for validation messages
- Unity version (e.g.
6000.0.30f1) - Render pipeline (Built-in / URP / HDRP)
- The component and shader/material you're using
- A sample object or repro steps
Ultimate Colorizer · Built for Unity 6 · Built-in & URP · Source-available C#
Support: szekipapa77@gmail.com