Custom dynamics
Beyond the built-in pressure/tilt/velocity behavior baked into every stroke, Formo has a full binding system for wiring up exactly what drives a stroke's shape — closer to authoring a custom instrument than adjusting a fixed set of settings.
Opening it
Click Dynamics in the contextual panel while a paint tool is active (the same panel covered in Brush & Freehand Drawing). A popover opens with a live sample stroke at the top and a list of your current bindings underneath. It's empty by default, since dynamics are opt-in on top of the brush's normal pressure/tilt behavior, not a replacement for it.
Each binding connects a source (the input driving it) to a target (the thing it controls). A binding is shown as two lines: the first is the routing (source → target, plus a button to remove that binding entirely), the second is how the response is shaped (a curve, an invert toggle, and a min/max range).
The three targets:
- Size: the stroke's width.
- Ratio: the nib's width ratio, how flattened or calligraphic it reads.
- Angle: the nib's rotation.
The available sources, grouped by what kind of signal they are:
Hardware input:
- Pressure and pressure (max): how hard you're pressing, on real stylus hardware.
- Tilt elevation and tilt azimuth: how far the pen is leaning, and which direction it's leaning toward.
- Barrel twist: rotation of the pen along its own axis, on hardware that reports it.
Derived from the ink's actual path, not your hand directly (measured from the resulting stroke geometry, after stabilization, so these reflect what actually got drawn, not the raw unfiltered gesture):
- Velocity: how fast the ink is moving at each point.
- Direction: which way the stroke is currently heading.
- Turn rate: how sharply the path is curving right now, measured as angular velocity over a short window. High at a sharp corner, low along a straight or gentle curve, useful for automatically thickening or thinning at corners.
- Arc length: how far along the stroke's total path you currently are, by distance.
- Attack angle: the angle between the pen's tilt and the direction the stroke is actually moving, a calligraphy signal (borrowed from the same idea MyPaint uses): a chisel-nib's "bite" depends on this relationship, not tilt alone.
- Fade: position along the stroke measured by sample count rather than distance, useful for a deliberate fade-in or fade-out right at a stroke's start or end regardless of how long the stroke ends up being.
Randomness:
- Random per sample: a new random value at every point along the stroke, for texture/noise-like variation within one line.
- Random per stroke: one random value picked once per stroke, so repeated strokes with the same gesture don't all come out identical, without adding noise within a single line.
Shaping the response
Each binding's second line holds three controls:
A curve. An easing shape controlling how the source value maps onto the target, not just a straight linear response, and it's drawn from the exact same family of easing curves used throughout Formo's animation system (linear, ease-in/out/in-out in sine, quad, and cubic flavors). It's deliberately a narrower set than the full Timeline easing picker, though: a transfer curve like this is meant to stay monotone — steadily increasing or decreasing as its source does — so bouncy, elastic, or overshoot-style curves that momentarily reverse direction are left out on purpose. A stroke's width or angle responding to pressure should track pressure predictably, not overshoot past where the source value actually is.
An invert toggle. Flips the direction of the whole mapping: with it off, more of the source produces more of the target; switch it on, and more of the source produces less. Useful for a source that reads backwards from what feels intuitive for a given target (turning a stroke thinner as it speeds up, say, instead of thicker) without having to redo the curve or range to compensate.
A range. The min/max the target is allowed to swing between as the source varies, so a binding's effect stays within bounds you chose rather than however far the raw source value happens to travel.
Stacking bindings. More than one binding can target the same property — Pressure and Turn Rate can both drive Size, for instance — and when they do, they combine by multiplying together rather than one overriding the other.
The live sample stroke
At the top of the panel, a sample gesture runs through the stroke-commit pipeline with your current bindings applied, redrawing on every single edit. A binding list is just numbers until you see the shape it produces, so this is what turns authoring dynamics from guessing into something you can actually see and tune.
Removing a binding
The "×" next to a binding's routing line removes it entirely, instantly returning that target to its normal, non-dynamic behavior.