Anchors, Open Graph and modules
Share detail with anchors, build materials from nine graph templates and update reusable modules.
On this page 5 sections
Three features let one part of a texture set feed another without duplicating work. Anchor points publish the result of a stack at a position so other layers can read it. Open Graph is the built-in node editor for those layers, masks, filters and connections. Material modules make a folder reusable across sets and updatable in place.
Anchor points
An anchor is a row in a mask stack or a channel's filter list that publishes everything evaluated before it. It changes nothing itself. Consumers elsewhere in the set pick the anchor by name.
| Anchor | Where | Publishes |
|---|---|---|
| Mask anchor | Masks › Add Mask Effect › Add Anchor Point | The coverage accumulated by the masks above it in the list. |
| Channel anchor | Inspector › channel › Channel Filters › Anchor | The channel's straight RGBA after the filters above it, before later filters, opacity, blend or masks. Paint layers can publish their painted channel this way. |
| Layer Output | Layer Inspector › Published Outputs | The layer blended over its backdrop, in its group's context. Every channel is available; the consumer picks one. |
| Folder Composite | Folder Inspector › Published Outputs | The folder's child composite before the folder's own opacity, mask and blend. |
Consumers
- Published Input mask — the mask's Anchor picker lists every anchor in the set as Name · Layer · stack, sorted by stack position. Scalars are read as-is; colour channels as Rec.709 luminance.
- Fill content — a fill channel's Content Anchor replaces its colour, value or image. The channel's own detail and filters still apply, so anchor + Gaussian Blur is a blurred copy of another layer's channel.
- Micro Details — Edge Wear, Chips, Dirt, Cavity Dirt, Rust and Drips masks accept Micro Height and Micro Normal anchors with intensity sliders and a texel radius. Painted or procedural relief then gets wear on its convex rim and dirt in its concave ring, as if it were baked geometry.
Use a height anchor to make scratches collect dirt, or share a mask between color and roughness layers. References can point above or below their layer as long as they do not form a loop. Select an anchor to see Used by N and jump to its consumers; the magnifier beside a consumer takes you back to the anchor.
Open Graph: the built-in node editor
More › Edit Nodes or the layer-row context menu opens Open Graph framed on the selected layer, mask or filter. It edits the same stack as the panels: layers and folders, mask chains, channel filters, composition links and anchor references. Selection stays synchronized.
- Search Nodes and Templates in the header, or Shift+A, finds layers, procedural fills, mesh masks, vector strokes, groups, filters and templates by name. The header's Channel selector chooses the channel for new filters and the fill controls shown on layer nodes.
- Drag an anchor output into a Published Input, channel-content or Micro Detail input to set a reference. Unpublished layer Output and folder Composite sockets publish when connected.
- Connect Coverage to Previous to reorder masks, or reorder filters within their channel. Layer Output to Backdrop changes layer order; a folder's Children input places a layer inside it.
- Deleting an anchor link clears its reference. Composition chains remain connected.
- Deleting a mask or filter node removes that item; painted masks and layers must be deleted in the Painter panel, and their nodes are otherwise recreated.
- Use a mask group's Members input to organize a nested mask stack. Moving a group moves its members with it; deleting the group keeps its masks.
Node bodies expose relevant layer, mask and filter controls. Sockets identify Material bundles, Color, Scalar, Normal and Coverage. Frame Selected, Full Graph and Auto Layout help navigation; manually placed nodes keep their positions across syncs.
Select consecutive sibling layer nodes and click Group to put them in a folder. Use Procedural Fill for coordinated color, roughness and height from a catalog source. On a Custom Graph mask, Edit Mask Graph enters its procedural nodes in the same editor; Tab returns to the texture set.
Start with a graph template
Choose Templates in the graph header or search for one by name. Each template creates a folder of connected layers, masks and filters you can edit immediately. They work before baking mesh maps, and each insertion is independent.
| Template | Starting point |
|---|---|
| Rough Plastic | Plastic grain across color, roughness and height. |
| Brushed Metal | Directional grain with roughness controls. |
| Chipped Paint | A metal substrate under paint with editable procedural coverage. |
| Layered Grunge | Broad stains and fine breakup combined in a nested mask group. |
| Shared Surface Detail | One published grain mask driving roughness and height. |
| Top Surface Dust | Upward-facing coverage broken up with particulate detail. |
| Noise → Ramp | A Mask Graph for adjustable noise coverage. |
| Cells → Ramp | A Mask Graph for patches built from Worley cells. |
| Layered Noise → Ramp | Two noise scales multiplied together before a ramp. |
The last three include editable Mask Graphs. Try Layered Noise → Ramp for dirt with broad patches and fine edges, then adjust its ramp to change the coverage.
Material modules
A module is a folder subtree with an identity and a version. Save any folder as a module, insert instances of it in any texture set, edit the instances freely, publish a new version and update the instances in place: your edits survive, the module's changes apply, and the few places where both changed keep your value and are listed.
| Action | Where | Effect |
|---|---|---|
| Save Folder as Module | Folder Inspector › Module (or Save Version on a module folder) | Writes <Name> v<n>.openpaintmaterial to the smart-material library; the folder becomes the origin instance. Saving again writes v n+1. |
| Insert Module | Add Layer › Module | Searches the library's modules (newest version each) and the built-in catalog modules, and inserts an instance above the selected layer. |
| Update / Update All | Folder Inspector | Three-way merge to the newest version for this instance or every non-detached instance in the set. Reports conflicts kept in your favour. |
| Replace with Library Version | Folder Inspector | Discards local edits. Needed when an instance's base snapshot is missing. |
| Detach | Folder Inspector | Keeps the provenance badge but excludes the folder from updates. |
| Situation on update | Result |
|---|---|
| The module changed a value you did not touch | Applied |
| You changed a value the module did not | Kept |
| Both changed the same value | Kept (yours wins), reported as a conflict |
| The module added or removed a layer, mask or filter | Added; removed unless you edited it |
| You added your own layers inside the instance | Kept |
| Painted images | Always yours — an instance's own paint is never replaced |
Instances show a package badge with their version in the layer list, and an update badge when a newer version is available. Installed smart modules also keep their authored master controls when duplicated, renamed, saved or updated. Every catalog smart material is a module instance of its recipe, and the built-in Damage module (Scratches, Edge Wear, Dirt, Rust) can be inserted directly or nested inside recipes.
Modules were introduced with format version 4 of the material format; Open Painter 0.14 and later save them as format 5. Team libraries install them like any other material. Reference: docs/material-modules.md, docs/anchor-points.md, docs/open-graph.md.