Neotkotour

§6 — Colour

The ColorStitch Painter

A Sandwich in the settings applies to the whole object. The Painter breaks that apart: save recipes as profiles, then flood-fill them onto individual faces. Every step of a staircase can carry a different one, and the weave is drawn on the model while you work.

  • no gate
  • print-verified
  • reworked in 2.4.0

Where Left-side gizmo toolbar›ColorStitch Painter

Not the same tool as Color Painting

Orca has its own multi-material painter, the Color Painting gizmo, which assigns raw filaments to triangles. This is a different icon in the same toolbar, and it paints Sandwich recipes rather than filaments. Both can be used on the same object; Painter Pro Mode is the set of precision add-ons bolted onto the stock one.

What breaks without it

Put one recipe on a whole object and every surface gets it. Print a staircase and every tread gets the same treatment, which is fine until you want the top step gold and the rest of them to fade through a gradient. The only other way to do that is to cut the mesh into separate objects, which changes how everything slices and creates seams you did not ask for.

Without it

One recipe per object. Different effects means different objects, or a mesh split into parts that then have to be reassembled.

With the Painter

Click a face, it fills with the active recipe. One mesh, as many recipes as you have flat surfaces, all of it saved inside the 3MF.

The tools

ToolWhat it does
SelectClick objects in the scene to choose which ones you can paint. Shift click removes one.
Paint (smart fill)Click a flat face and the coplanar region floods with the active profile.
EraserThe same smart fill, removing paint under the cursor.
Pick (eyedropper)Reads the recipe under the cursor and makes it the active colour.
StickerPlaces a loaded SVG on a flat top or bottom face. Load SVG… appears next to it. More below.

Left-click paints, erases or picks with whatever tool is active. Right-click is camera only, so you never lose work by orbiting. Shift + left-click is a one-shot erase whatever tool you are holding.

Painting several objects 2.4.0

Open the Painter with nothing selected and it starts in Select so you can click the objects you want. Open it with a selection and those are already picked. While painting, moving the cursor onto another chosen object switches to it, and clicking an object that is not in the set adds it. That first click adopts the object; the one after paints it.

The active colour tells you its state 2.4.0

BadgeMeaning
slot NThe colour already owns a paint slot on this object. Painting applies it right away.
readyA colour is chosen. It takes a slot the first time you actually paint with it.
no colourNothing is selected. Clicking the model will not paint, and will not erase either.

This badge exists because of a long-standing trap: the swatch kept showing a colour that had quietly stopped being paintable after a slice or a tab change, so clicks did nothing until you re-picked it from the palette, with no way to tell why.

The four departments

Since 2.4.6 the panel reads top to bottom the same way in every department: a card for the active colour, the tools, four tabs, and under them the department you picked, with Brush & view and the warnings at the end. Point at anything in the map and the box beside it says what it is for.

diagram Where everything is in the panel point at anything · the tabs switch
A diagram of the 2.4.6 panel, drawn in HTML after the C++ that builds it (GLGizmoColorStitchPainter.cpp) with its own icons (draw_glyph). Two things in it are computed: the stripe bars come from the port of SurfaceColorMix.cpp, and the Result, the active colour card and the swatches from the port of ColorSci.cpp, so moving a TD slider really changes them. A PathBlend pass is simplified to a cap that thickens from floor to ramp end over the other filament. In Pro the pass buttons work; buttons that open dialogs in the app do nothing here.

The same four departments in the app, with a different recipe loaded:

Palette department: the active colour card and toolbar on top, the Library with its group chip, a grid of swatches with corner marks, the In use on this object row, Stickers folded, Brush and view open with two sliders and three switches, and one amber warning at the bottom
Palette. The Library with its group chips, a grid where every swatch shows its effect, a notch if it is not saved and a dot if it is on this object, then In use on this object, Stickers and Brush & view. The amber line at the bottom is the warnings tray.
Generator department: three cards, Gradient ramp, Flat color and ColorStitch Pattern Color, each a grid of eight swatches per row, two of them with an A and B row of numbered filament chips
Generator. Gradient ramp, Flat color and ColorStitch Pattern Color as three cards, each with its A › B pair where it needs one and a grid of eight per row. Every swatch shows, with no scrolling sideways.
Pro department: the zones stacked at the top with their real stripes next to a large Result swatch, then a card for Top with one ColorStitch pass, an empty Penultimate with its Add penultimate button, a card for Bottom with one ColorStitch pass, Options with Perimeter override, and a grey tip in the tray
Pro. The composer, and the Pro panel is the active colour. At the top, the zones as they sit in the part with each pass drawn with its real stripes, next to the Result. Then one card per zone in printing order. Editing here rewrites the linked profile in place, everywhere it is already painted.
Object and TD department: one Transmission distance slider per filament, then the MixedFilament Object switch greyed out with the reason written under it
Object & TD. One TD row per filament, the only place TD lives since 2.4.6, and the MixedFilament Object switch. It is greyed out in this shot, with the reason under it, because the object's extruder is not a MixedFilament.

Pass rows in Pro 2.4.6

Each zone is a card: its icon, the name, how many passes it has out of three, and how thick the zone is. The icon is a block with that zone's layer lit, because zones have no colour of their own any more. Amber is kept for warnings, so Bottom stopped being "the orange one".

  • A pass reads in three lines. The first has its number and four icons for the type: Solid, ColorStitch, PB Half and PB Full. Bottom shows three, because PathBlend there is always Full, and a type that would break the zone's limits is dimmed. Move up, move down and remove close the line, in their own well.
  • The second line has what the type needs: filament chips for Solid, the two real tool numbers and Pattern… for ColorStitch, ramp and cap for PathBlend. The fill angle sits at the right end for all three, and an angle left on auto reads auto in violet, the same violet as the outline in the 3D view.
  • The third line is the stripe bar. It reads from right to left, like the 3D view and the slice, so in a gradient the start is on the right. Scroll the wheel over it to turn the angle, and right click it for Duplicate, Move up / down and Delete. The clone splits the original's thickness in half so nothing else in the stack moves.
  • PathBlend adds a fourth line with floor and ramp end, the ramp mode, and Profile…, which carries a teal dot once the ramp has been shaped.
  • The thickness bar on the left shows each pass with its millimetres. Drag the teal notch between two passes to move thickness from one to the other.
  • Add pass is a dashed button at the end of the zone. It goes away once the zone has three passes, or when it holds a PathBlend.
  • A !CS or !PB button appears on a Solid pass still carrying a leftover ColorStitch or PathBlend payload from an older build. The engine slices it as Solid (the kind wins) but the recipe looks like an effect, so the preview came out flat. Click it to restore the pass. New ones cannot be created; switching a pass to Solid now clears its payload.
  • Copy sits in the zone's header and opens a small menu with the two other zones. The whole zone travels, ColorStitch pattern included, translated to the destination zone's keys, and a stack landing on Bottom is trimmed to the Bottom rules: max 2 Solid, max 1 ColorStitch, PathBlend forced to Full. Penultimate and Bottom also have a bin that empties them.
  • Warnings no longer pop up between the controls. They all sit in a tray at the bottom of the panel, amber when something is wrong and grey when it is a tip.
Dragging got quiet

Dragging a divider or a number in Pro used to schedule a slice again on every frame of the drag. The heavy work is now committed once, when you let go, the same rule the TD sliders already followed. The Result at the top of Pro still updates live while you drag.

Painting one, step by step

The panel in these shots is older than 2.4.0, so they still show the old Top Surface / Bottom Surface switch and the TD grid inside Pro. The workflow is the same; for the current layout see the map and the four department shots above.

The object is selected and the ColorStitch Painter is picked from the gizmo toolbar
1Select the object, open the Painter from the gizmo toolbar.
Generator department showing a gradient ramp between a Start A and End B filament pair, with a hovered swatch reporting T3 and T4 at 0.09 and 0.11 mm
2Generator: a ramp between a Start (A) and End (B) pair. Hovering a swatch shows the two tools and their real thicknesses.
A swatch is chosen as the active colour and painted onto the top face of a cube
3Pick a swatch, click the top face. That is the whole painting gesture.
Pro department showing the recipe behind that colour: two solid passes, T3 then T4, with Recipe and Result previews
4Pro shows what is behind that colour: two Solid passes, T3 then T4.
A third solid pass has been added and the painted face updates to the new predicted colour
5Add a third pass. The painted face updates to the new predicted colour immediately.
Changing a pass kind: the dropdown offers Solid, ColorStitch, PB Half and PB Full
6Any pass can change kind: Solid, ColorStitch, PB Half, PB Full.
Pass one switched to ColorStitch: the top face now shows the two-tool per-line pattern while passes two and three stay solid underneath
7Pass 1 switched to ColorStitch. The face shows the real per-line pattern, with the Solid passes still underneath.

Slots, and what an unpainted face gets

Painting spends slots. Each object has up to 254 of them (slot 0 is unpainted), and a slot holds the mapping from a painted region to a recipe. It is worth seeing what happens to the faces you leave alone, because that changed in 2.4.6.

demo Paint some faces and watch the slot table leave one face unpainted
A diagram of the slot bookkeeping, not a port. The rule it shows, and the garbage collection of unused colours, are real.
SituationWhat applies
Object with zero painted facetsNo effect. Up to 2.4.5 the Sandwich editor's recipe applied here; since 2.4.6 an old project moves it into the palette when it opens.
Painted areaThe painted profile applies.
Unpainted areaNo effect.

Up to 2.4.5 that last row caught everybody once. An object could carry a recipe from the Sandwich editor in the print settings, and painting a single face switched it off on every other surface. Since 2.4.6 there is no recipe in the settings any more, so an unpainted face simply prints plain, and "paint the bit I care about and leave the rest" does exactly what it says.

Working colours and saved palettes

Colours you paint with are working colours: created on demand, deduplicated, and garbage collected when no face uses them any more. In the palette they carry a light notch in the corner until you save them. Just browsing palettes does not consume anything.

Saved palettes are deliberate and named, they travel in the 3MF, and they are organised into up to 10 global groups. Save all promotes every unsaved working colour into the active group at once, which is the thing to do before an Erase all so nothing is left dangling. Painting and the slot-to-profile mapping are both recorded for undo and redo within the session.

Two bugs worth knowing about because they explain odd twins in old projects. Save used to drop the Bottom zone: a recipe was carried as Top plus Penultimate, and Save built the saved palette from those two, silently losing a Bottom in the very gesture meant to preserve your work. Bottom now travels with the colour and counts when Save looks for an identical existing palette, because two recipes that match on top and differ underneath are different colours. And the list used to reshuffle under the cursor, because "is this colour occupying a slot" was checked against the active object, which changes on simple hover. It now counts every chosen object, so the grid stays put.

The weave, drawn on the model

Painted top surfaces show the actual ColorStitch weave on the mesh, not a flat swatch. The preview is built from the same per-line sequence the slicer produces, so the filament colours, the density and the pattern match the G-code. The same builder draws the stripe bar under each pass in Pro, so the bar and the 3D view cannot drift apart. One catch since 2.4.6: the slicer now places everything by position, and this preview has not caught up yet, so on a surface with holes, or with stripes in mm, a band can start in a slightly different place. Check the G-code in RealColor when it has to be exact.

  • Scale is real. The stripe pitch comes from the resolved top line width, and the gradient is scaled to the painted region's own extent, computed per island. Each flat zone is detected as a connected component using edge adjacency, so zones that only touch at a corner stay separate and each gets its own ramp, exactly like the slice.
  • Orientation matches for a fixed angle. Set the angle by scrolling the wheel over the pass preview bar and the bar, the model and the print all rotate together. On auto the slicer alternates every layer, so no static preview can match. The angle then reads auto in violet, and Mark bands with no angle outlines those bands on the model in the same violet.
  • Bottom is previewed too (2.4.0). Upward-facing facets show the Top recipe, downward-facing ones show the Bottom, each with its own islands and scale. A Bottom made only of Solid passes has no weave to draw, so it gets its own composed colour instead of borrowing the Top's.
  • Where you can paint follows the recipe. A recipe with Top or Penultimate content keeps upward-facing facets; one with Bottom content keeps downward-facing ones; one with both keeps both. Side walls are never painted, because the effect would not print there anyway.

Two limits in this version: the stripe scale uses the painted area's projected extent rather than the exact line count after perimeters and gap fill are subtracted, so it can be off by a line or two. And islands wider than about 64 lines coarsen in the preview, because the shader uses a 64-entry lookup. Gradients lose resolution; patterns still tile at real width.

Paint stays visible with the gizmo closed 2.4.0

Until 2.4.0 a painted Sandwich only existed while the Painter was open. Close it and the object went back to one flat colour, so nothing on the plate told you which parts were painted or with what. Plate thumbnails had the same blind spot.

Painted objects are now drawn painted in the normal 3D view, with the full weave, composed against the object's real base colour and TD. It is the same code doing the drawing in both places. Two differences worth knowing: the lighting is not the same (inside the gizmo it is the painter's own shader, outside it is the normal one or Libre Mode's realistic shading), and small leftover facets print flat here, taking the slot's composed colour rather than falling back to a whole-object weave. A switch in Brush & view, Keep paint visible outside this gizmo, turns it off; it is on by default and applies to the whole project.

The MMU painter draws your Sandwich painting too, with the full weave, so you can decide where MMU paint goes without working blind. Where the two meet, MMU is drawn on top, which is exactly what the slicer does: where you painted MMU, MMU rules, and that surface prints plain in its own filament with no Sandwich effect. Both painters tell you in amber how much of your paint is affected when it actually happens.

Known limitation: where a surface is split, by MMU paint or anything else, each piece restarts its gradient instead of continuing it. The line spacing stays continuous across the boundary; the colours restart.

Highlight active colour 2.4.0

The panel always knew which colour was active. The 3D view never said where that colour already is, and with two similar colours on one plate there was no answer to that beyond squinting. The Highlight active colour switch in Brush & view draws the outline of the painted region for one slot, boundary edges only so it frames the area without covering the weave, plus a faint box around each island and a badge carrying the slot number. The outline is drawn twice, solid on the surface and as a ghost through the object, so a zone facing away from you still shows without orbiting blind.

Each badge shows the slot number, a disc in the colour of the slot and a ring plus a wedge in the zone colour: the wedge points up for a top island and down for a bottom one, and bottom badges sit under their island. The counter next to the switch reads sN — 137 or sN — not painted here, and that distinction matters, because "the colour is active and I see nothing" has two very different causes.

By default it highlights the active colour. Hovering a swatch in the palette grid, or a row of In use on this object, highlights that one instead. On a multi-instance object only the first instance is highlighted, and a bottom outline can be hidden by the build plate, which is what the badge under the island is for.

MixedFilament Object mode beta

A MixedFilament can be assigned to a whole object as its extruder, the same way you would assign any normal filament. This mode is a single switch that makes that object's top surface, penultimate layer and bottom surface actually look like that MixedFilament's colour.

Turning it on auto-generates a small sandwich of up to three solid passes that approximates the MixedFilament's colour using your other loaded filaments and their TD values, with the same colour-matching maths the Studio uses. It also turns Perimeter override on, so the walls get reprinted to match.

And it locks out manual painting for that object. The palette, the zone editors and the Perimeter override switch grey out, and since 2.4.0 the lock covers the brush in the 3D view as well. Before that, the controls greyed out but clicking the model still painted: slots were spent and re-slices scheduled for paint the engine then ignored, which is work lost with no warning. Placing a sticker is blocked for the same reason. Select and the eyedropper keep working. Turning the mode off restores whatever was painted before.

If the object's extruder is not a MixedFilament the switch is greyed out, and the reason is written right under it. One known rough edge: the swatch shows the colour only, not a preview of the passes that will print.

Profiles and the 3MF

In the Painter, the icons on the active colour card do the work: Save puts the active recipe in the saved Profiles library, Duplicate makes an independent copy to edit, and right clicking a swatch gives you Duplicate, Save to palette and Delete. A project that used the old Sandwich editor opens with its recipe already saved, as From Sandwich editor. Deleting a profile that still has painted areas raises a non-critical slicing warning; the slice continues and those areas simply get no effect until you re-paint or re-create the profile.

Everything lives inside the 3MF: the profile library as project-level base64 JSON, the per-volume slot tables mapping slot to profile id, and the per-triangle paint, mirroring how MMU painting is stored. Opening a 3MF restores all three. There is no cross-project library, so the way to reuse a set of profiles is to keep a template 3MF and start from it.

PathBlend is Top-only for now

The penultimate PathBlend has a gradient-direction bug on multi-stair objects, so the pass is restricted to the Top zone. The engine supports penu PathBlend; it comes back when the bug is fixed.

Assembled objects

On an object made of several parts, painting a colour that already had a slot used to record the facets but not the colour itself on the other parts. The part sliced correctly while the painter showed it grey, the eyedropper read no recipe there, and the highlight had nothing to light up. Paint slots are per part, and the profile is what identifies a colour across parts. That is now respected everywhere, and objects already in this state are repaired when the object is opened in the painter: orphan paint recovers its colour from the sibling part that still had it.

Stickers experimental

Stickers have their own page now: a step by step from an SVG to a pattern, with the example project to download and a demo to play with.

Pick the Sticker tool, press Load SVG… next to it, and click the object. A sticker is not geometry: the SVG becomes a 2D mask carrying Sandwich recipes, resolved at slice time. Stack several and the topmost wins where they overlap; it covers rather than blends. Since 2.4.8 they have their own Stickers tab, where you place and recolour them (see NEOTKOCM_RELEASE_2_48.md).

  • Multicolour SVGs. Every colour of the drawing gets its own recipe from your four filaments, Flat or ColorStitch. Backgrounds are dropped, see-through shapes are merged, CSS colours are read and linear gradients print as bands (or as one ColorStitch ramp).
  • Top or bottom. A sticker sits on the top face or on the bottom one (the face on the bed, or the underside of an overhang). The click lands on the flat face of that side at the spot you pick. Bottom recipes are worked out as seen from the bed.
  • Editing a sticker. Edit on a layer opens its controls right under the layers, in the same tab. Place (side, rotate, size, mirror, restore its proportion if the object was scaled unevenly) and Colours, in one column: what the SVG asks for over what your filaments give, a row of squares with every colour, each colour's recipe drawn as in Pro, the closest other recipes, Edit in Pro (with Back to sticker to return), and a cap on how many recipes the sticker may use.
  • You can see them. Every sticker shows in the painter and in the normal 3D view, cut to the face it sits on.

What to keep in mind:

  • A sticker covers everything under it. Hand-painted zones and MMU paint both: it is applied last, over whatever is there.
  • The 3D preview draws each colour as a flat swatch. A ColorStitch weave or a smooth gradient shows in the recipe and in the slice, not yet on the model.
  • Wall-recolouring recipes don't recolour walls on a sticker. The sticker's Place tab warns.
  • Bottom on the bed face: the wipe tower plans the first tool change in the wrong place (the print does it at the start). The part prints fine; it is on the list for the tower.
  • Sliced and checked in the G-code; not yet proven over many prints.

The catch

  • Editing in Pro rewrites the profile in place, everywhere it is already painted. That is usually what you want. When it is not, use Duplicate to get an independent copy first.
  • Profiles do not leave the project. No global library. Keep a template 3MF.
  • Deleting a profile leaves painted areas orphaned. The slice warns and carries on with no effect in those areas.