Ucupaint: a texture layer stack for Blender that treats painting as compositing
Ucupaint is Blender addon to manage texture layers for Eevee and Cycles renderer.
At a glance
- What is it?
- A GPL add-on that replaces Blender's single image texture with a stack of fill, overlay and modifier layers, plus the baking and decal tooling that comes with managing them.
- Who is it for?
- Ucupaint is a serious piece of tooling rather than a convenience wrapper, and the version span it covers is the most interesting fact about it. One add-on supports Blender from 2.76 through the current extension platform releases, which means the node library files and the addon_updater shim exist to bridge roughly eight years of Blender API churn.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A texture layer stack rather than a single image
Blender's stock material workflow paints into one texture. Ucupaint replaces that with a stack: fill layers, overlay layers, modifiers and masks, each with its own blend mode and opacity, composited down into the texture the material samples. The description says the add-on manages texture layers for the Eevee and Cycles renderers, and the repository layout backs that up rather than contradicting it. `Layer.py`, `layer_common.py` and `transition.py` handle the stack, while `Modifier.py`, `Mask.py` and `MaskModifier.py` are the non-destructive operators that sit above it.
The layer list in `transition_common.py` and `layer_common.py` is effectively the data model, and reading those two files is the fastest way to understand what a layer can be. The presence of `NodeEditor` integration in the menu locations confirms the add-on builds real shader nodes rather than compositing externally in image space.
The practical difference is that a layer stack is non-destructive in the way a Photoshop document is. A fill layer with a gradient can sit under an overlay that holds grime, and neither has to be flattened into a baked PNG to be edited later. That is the entire value proposition, and it is why the modifier classes exist as operators rather than as one-shot image operations.
Installing for old and new Blender alike
There are two installation paths and they are not interchangeable. The release path is the traditional one: go to the releases page, download the zip matching your Blender version, then install it through Edit > Preferences > Add-ons.
Edit > Preferences > Add-onsThat step is not in the README as code, but the sequence it describes is: press Install, browse to the downloaded zip, and confirm. The second path is the Blender Extension Platform, which works for Blender 4.2 and newer.
Edit > Preferences > Get ExtensionsYou search for Ucupaint there and install it like any other extension. The README flags one real difference between the paths: the extension platform version has no branch selection. If you have been using branch selection to test unreleased features, that capability is specific to the release-zip route.
Note what the release numbering means. Recent tags are `2.4.9`, `2.4.8` and `2.4.7`, so a patch release is a patch of the add-on's own version, not of Blender. The add-on version and the Blender version are separate axes, which is why the compatibility claim spanning 2.76 onward needs several release zips rather than one.
Where the interface lives across eight years of Blender
The README gives two menu locations because Blender moved its sidebar between those versions.
On Blender 2.7x the entry is in View 3D > Tool Shelf > Ucupaint. From Blender 2.80 onward it moves to the Sidebar, reachable from either View 3D or the Node Editor. The reason for offering it in the node editor is that this add-on's work happens in shader nodes, and being one click away from the node graph is most of the convenience.
Compatibility is stated as all official Blender versions from 2.76, with some features reserved for more recent releases. That claim is broad enough that the repository layout deserves attention. Three blend library files sit at the root: `lib.blend`, `lib_281.blend` and `lib_282.blend`. Those are per-version node libraries checked into the repository, and their existence is the concrete evidence behind the compatibility claim. Blender's node system changed shape around 2.81 and 2.82, and shipping separate library files per era is how the add-on keeps its node groups loading across that boundary.
So the honest reading is: the add-on loads everywhere from 2.76 up, and the node library it depends on is versioned per Blender era. If you are on a very old Blender and a feature is missing, that is the documented carve-out rather than a bug.
Baking, decals and the modules that back the layers
A layer stack is only useful if you can collapse it when the renderer needs a single texture, and that is what the baking layer handles. `Bake.py`, `BakeInfo.py`, `BakeTarget.py` and `BakeToLayer.py` are four separate modules for one operation, which tells you the bake path is not a single code path. Bake targets can differ, and baking into a layer rather than into a texture file is a separate target type again.
The decal system is `Decal.py`, and it sits on top of the mask system rather than replacing it. `UDIM.py` and `ImageAtlas.py` cover the two tiling schemes a paintable surface might use: UDIM tiles for multi-image character sets, and an atlas packed into a single image. `vector_displacement.py` and `NormalMapModifier.py` handle the derived data that a material needs beyond color.
What that module list implies for a user is that Ucupaint is trying to cover the same ground as a dedicated texture painting application, not just add a couple of layers. Every one of those modules is a place where a bug report will eventually land, and the presence of `tests/` and a `Test.py` at the root says the author treats that as a real surface.
The addon_updater bridge and what it implies
Three files handle updating: `addon_updater.py`, `addon_updater_ops.py` and `addon_updater_preferences.py`. Splitting the concern that way, with a preferences module of its own, is the shape of a vendored dependency rather than a hand-rolled download, and it is worth knowing that an updater of this kind is fetching and installing a zip on the user's machine.
Its presence interacts directly with the extension platform path described earlier. A user who installs from the releases page gets the updater's behavior, which is version-specific and branch-aware. A user who installs from the Blender extension platform gets whatever the platform's own update mechanism does, and the README's note that this version has no branch selection is really a note about which update story you are in. Two installation routes, two update models, one add-on.
`blender_manifest.toml` exists for the extension platform build, and `preferences.py` holds the add-on's own settings. Between them, a user on either path has somewhere to configure the add-on, and a developer reading the tree can tell which parts exist to satisfy Blender 4.2 plus versus which parts have been there since the 2.7x era.
Where the documentation actually lives
The README is short and points outward for everything substantive. Documentation and demos live in a separate wiki repository at `ucupumar/ucupaint-wiki`, published at the project's GitHub Pages site, and the README is candid that it is not finished.
The Discord server is offered as the support channel, and the wiki repository accepts contributions, which means the documentation is maintained separately from the code by the same person. That is a reasonable arrangement for a solo-maintained Blender add-on, but it means the release zip is where you get reference material and the wiki is where you get explanation.
Two details in the tree are worth a reader's attention. `credits_ui.py` suggests in-addon attribution, which is common for texture artists who license brush sets. `Localization.py` means the interface is translatable, which for a tool used by artists across regions is more than a nicety. Neither is documented in the README, and both are the kind of thing that only becomes visible when you read the repository.
Editorial conclusion
Ucupaint is a serious piece of tooling rather than a convenience wrapper, and the version span it covers is the most interesting fact about it. One add-on supports Blender from 2.76 through the current extension platform releases, which means the node library files and the addon_updater shim exist to bridge roughly eight years of Blender API churn. Start with the releases page to match your Blender version, read the wiki for the layer model, and expect the real documentation to live outside the repository.
Frequently asked questions
Is Ucupaint free to use?
The repository is licensed under GPL-3.0 and is distributed through GitHub releases and the Blender Extension Platform at no cost. The GPL terms apply to redistribution and modification of the add-on itself, not to textures you paint with it.
Which Blender versions does Ucupaint support?
The README states that Ucupaint works with all official Blender versions starting from 2.76, with some features limited to newer releases. The repository ships separate node library files, lib.blend, lib_281.blend and lib_282.blend, which is how it bridges Blender's node system changes around 2.81 and 2.82.
How do I open the Ucupaint panel in Blender?
Select an object that can hold a material, such as a mesh or a curve. On Blender 2.7x the panel is View 3D > Tool Shelf > Ucupaint, and from Blender 2.80 onward it is in the Sidebar, available from either View 3D or the Node Editor.
What is the difference between installing from releases and the Extension Platform?
The releases route gives you a versioned zip and, importantly, branch selection for testing unreleased features. The Blender 4.2 and newer extension platform route is simpler but has no branch selection, because the platform manages updates itself.
Does Ucupaint work with Cycles as well as Eevee?
Yes. The project description states the add-on manages texture layers for both the Eevee and Cycles renderers. The separate node library files at the repository root are what let the same layer model load across both the old and new Blender node systems.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ucupumar-ucupaint)