Every few months I get a message from someone whose Photoshop action is breaking at the brush step. The dodge-and-burn sequence runs fine, the curves adjustment layers drop in perfectly, but the moment the action tries to paint with a custom brush, something goes wrong. Wrong size, wrong opacity, wrong texture entirely. I know exactly what’s happening because I made the same mistake for two years before I figured out what Photoshop is actually doing when it records a brush stroke.
The short answer: it records more than you think, and it’s more fragile than you’d expect.
Why Brush Data Inside Actions Is Not What It Looks Like
When Photoshop records a brush stroke in an action, it doesn’t save a reference to a brush preset by name. It saves the full parameter state of the brush engine at the moment of recording. That includes your diameter, hardness, spacing, opacity, flow, blending mode, and every active dynamic setting in the Brush Settings panel. If you built your brush with Shape Dynamics tied to pen pressure, that gets baked in too.
The problem is that this recorded state is sensitive to context. Playback on a document with a different resolution, or on a machine where the brush preset doesn’t exist under the exact same name, can produce completely different results. The action isn’t broken. It’s playing back exactly what you recorded. It’s just that what you recorded was messier than you realized.
This is why brush creation for use inside actions requires a different approach than building brushes for freehand painting.
Building the Brush Source File the Right Way
Start with a new document at 2500 x 2500 pixels, 300 PPI, grayscale, 16-bit. That resolution gives you headroom. The brush tip image is downsampled by Photoshop when you define the preset, so starting large preserves edge quality when you use the brush at smaller sizes. Grayscale matters because Photoshop reads luminosity to define the brush tip shape. Pure black becomes 100% opaque. Pure white is transparent. Every shade of gray lands somewhere between.
Paint your tip shape on a white background using only the hard round brush at 100% opacity and 100% hardness. No anti-aliasing unless you specifically want soft edges. Soft, anti-aliased tips are harder to control at variable sizes because the feathering compresses unpredictably.
Once the shape is done, go to Edit, Define Brush Preset. Name it with a version number and the resolution it was built at. I use a naming convention like “BB-Dodge-v3-2500” because when I’m scanning a preset list six months later, I need to know exactly what I’m looking at without opening it.
Locking Down Settings for Consistent Playback
Open the Brush Settings panel before you record a single stroke. Turn off every Shape Dynamic. Turn off Scattering, Texture, Dual Brush, Color Dynamics, Transfer, and Smoothing unless your specific use case requires them. The fewer active dynamics, the fewer variables that can drift on playback.
Set your spacing manually. The default is 25%, which is fine for painting but creates inconsistencies if your action applies multiple strokes programmatically. I use 1% for solid coverage and 15% for textures I want to breathe a little. Whatever you choose, set it explicitly. Don’t leave it at a value that got inherited from a previous brush.
Opacity and flow should be set in the Options Bar, not in the Brush Settings panel. This matters because the Options Bar values are what get written into the action step parameters. I keep opacity at 15% to 30% for most of my dodge-and-burn actions. Subtle enough to build gradually, strong enough to be worth recording.
Recording the Action Step Without Surprises
Before you start recording, create the exact layer conditions the action expects. If the brush step is supposed to paint on a blank layer above the image layer, build that now. Set the foreground color to the exact value you want. Photoshop records the foreground color at the time of painting, so RGB 128, 128, 128 in the action log means that exact value gets reapplied on playback regardless of what the user has set.
Make one stroke. Keep it short and controlled. Stop recording immediately after the stroke. Then test playback on three different files at different resolutions before you trust it.
I track every action in a spreadsheet, including the date built, the document conditions it was tested under, and the brush preset name it depends on. It sounds excessive until you’re three years into a library of 200-plus actions and a client calls because something broke after a system migration. That spreadsheet has saved me more than once.
The Preset Distribution Problem Nobody Talks About
If you’re building actions for other people, brush dependency is a real delivery issue. The action file doesn’t carry the brush preset with it. If your client or team member doesn’t have that preset installed, the action will fail silently or fall back on whatever brush was last active.
The solution is to bundle your brush presets with your action files as a package and include an installation step in your documentation. I distribute mine as a folder with the .atn file, the .abr brush export, and a one-page PDF that walks through exactly where to place each file. It takes an extra thirty minutes to build that package once and saves hours of support messages afterward.
The single most valuable thing I can tell you about brush creation for actions is this: treat every setting as a variable that will be tested under conditions you didn’t anticipate, and lock down every variable you can control before you press record.
Comments (5)
Solid advice. Especially the part about taking your time with it.
Love this. I referenced a similar technique in one of my recent posts. Always good to see other perspectives.
I've been looking for exactly this kind of tutorial. Perfect timing.
Great breakdown. The step-by-step approach really helps.
Clear and practical. No fluff. Appreciate that.
Leave a Comment