Nodes · Atelier
BS_Painterly
Atelierv1coreNeeds full inputForge
Overview
Repaints the frame as brush strokes that stay put on the surface: stroke particles seeded from the position pass ride camera moves and deformation without boiling, oriented by the picture's own flow, sized by distance, painted far to near. Cadence (on twos) and a rationed boil are the artistic time controls.
How to
How-to
- Wire a render with a position pass (a plate works, as paper strokes).
- Start from a preset (Oil, Impasto, Gouache…), then
spacing— the biggest control — andlength,hardness,color_jitter. - Lock the lattice: type the reported auto
cell_sizein so strokes stay anchored to the world across the shot. cadence = 2for on-twos;boilfor rationed life; ⚒ Bake frames when done.
Inputs
| Input | What it takes |
|---|---|
| in | the image this node works on |
Outputs
| Output | Type |
|---|---|
| out | Image |
Parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
| spacing | Float | 12.0 | Wanted stroke spacing on screen, px, at the octave that fits. The single biggest look control. |
| cell_size | Float | 0.0 | The lattice's cell size in the render's world units — the scale strokes are anchored at. 0 = auto from this frame, which drifts with the shot; the node reports the value it used — set it to that to LOCK the strokes across the shot. |
| octaves | Int | 3 | How many lattice scales (each twice the last). More = strokes keep a sensible size over a wider depth range. |
| density | Int | 3 | Strokes per lattice cell. Overlap is what makes a canvas read as paint rather than a grid of dabs. |
| flatten | Float | 0.0 | A Kuwahara flattening of the picture before the strokes take their colour (radius px, 0 = off): flat fields, kept edges — the oil-painting base. |
| baked | Text | The frames ⚒ Bake frames wrote. While set, every frame that exists in the sequence is READ instead of computed. | |
| baked_hash | Text | The look fingerprint the bake was made from; the panel says ⚠ stale when a knob or the upstream has moved. | |
| status | Text | What the node found: the lattice's cell size (auto or locked), the passes it anchored to, and whether it plays from a ⚒ Bake. | |
| length | Float | 2.4 | Stroke length as a multiple of its spacing. |
| aspect | Float | 0.32 | Stroke width as a fraction of its length. 1 = round dots. |
| angle_jitter | Float | 9.0 | Random turn per stroke, degrees, seeded (the same stroke turns the same way every frame). |
| orientation | Choice | flow | What strokes follow: the picture's flow (edge tangents — the painter's choice), the normal pass, or one fixed angle. flownormalfixed |
| angle | Float | 0.0 | The fixed angle, degrees, for orientation = fixed. |
| flow_smooth | Float | 4.0 | How far the flow field is smoothed, px. Larger = calmer, longer sweeps. |
| detail | Float | 0.04 | Fine strokes paint only where the coarser layer left at least this much contrast behind (0 = everywhere). Hertzmann's coarse-to-fine. |
| opacity | Float | 0.95 | Per-stroke opacity. |
| hardness | Float | 0.85 | Dab edge: 0 soft, 1 hard. |
| bristles | Float | 0.5 | Ridges of lighter and darker paint along the stroke (colour, never transparency). |
| grain | Float | 0.2 | Paper grain through the paint — from the coherent (world-anchored) noise when there is a position pass. |
| jitter | Float | 0.8 | How far a stroke sits from its cell's centre, 0 (a grid) to 1. |
| color_jitter | Float | 0.15 | Seeded per-stroke value and hue drift — what lets neighbouring dabs read as separate dabs. |
| overhang | Float | 0.35 | How far strokes may reach past their object's silhouette: 0 clipped, 1 free (Meier's loose edges). |
| min_stroke | Float | 2.0 | Strokes shorter than this on screen are dropped and the plate shows: distant surfaces become fewer strokes, not noise. |
| paper_fill | Choice | on | Pixels with no object (sky, void) get screen-space paper strokes so the whole frame is one painting. They slide under a camera move — as a painted backdrop does. onoff |
| cadence | Choice | 1 | Stylize on ones, twos, threes or fours: the INPUT is held at the stepped frame, so strokes and picture step together (no motion blur in the styled layer). 1234 |
| boil | Float | 0.0 | How far strokes re-jitter at each boil tick (0 = still). Deliberate, rationed life in the media — the strokes that exist never change. |
| boil_rate | Float | 8.0 | Boil ticks per second (8–12 is the hand-drawn feel). |
| fps | Float | 24.0 | The shot's frame rate, for boil_rate. |
| seed | Int | 1 | The lattice's seed: a different set of strokes, same everything else. |
| background | Choice | plate | What the strokes paint over: the plate, transparency, or a flat colour. platetransparentcolour |
| background_colour | Color | [0.92, 0.9, 0.85, 1.0] | The flat colour for background = colour. |
| disabled | Bool | false | Bypass: the node passes its first input through untouched (D in the graph). The knobs keep their values for when it comes back. |
| label | Text | A note shown under the node in the graph — what this node is FOR. Never affects the render or the cache. | |
| hide_input | Bool | false | Draw the node without its input wire — a tidy graph for a node whose source is obvious (a Dot, a viewer tap). |