Skip to content

PSD Adjustment Layers

Video tutorial — coming soon

Photoshop adjustment layers are not artwork — they are instructions. OSA reads them out of the .psd and turns the ones that have a Harmony equivalent into real effect nodes, with their values.

The ones that have no equivalent become a line in the import report, never a mystery empty drawing.

The crossing table

Every row here was measured against a Harmony 24 install with a probe — including a negative control, because the first run of that probe answered "exists" for 18 of 18 candidates, invented names included.

Photoshop Harmony node Verdict
Brightness/Contrast BRIGHTNESS_CONTRAST translates — values come across
Hue/Saturation HUE_SATURATION translates — the Master trio comes across
Levels COLOR_LEVELS translates — the RGB composite record comes across
Curves COLOR_CURVES ⚠️ node created; the curve points are read but not yet written
Solid Color COLOR_CARD ✅ generator, colour included
Gradient Fill GRADIENT-PLUGIN ⚠️ generator, two stops only
Black & White COLOR2BW a different effect — one desaturation slider against Photoshop's six hue sliders
Colour Balance ❌ does not exist in Harmony
Photo Filter ❌ does not translate

The rule behind the list is short: translates? in. Doesn't translate but is useful and heavily used? in. That second clause is why Tone and Highlight are in the effect catalogue at all.

What comes across, exactly

Brightness/Contrast — brightness and contrast, as integers, straight into the node's two fields.

Hue/Saturation — hue, saturation and lightness from the Master entry. The six per-colour ranges are not read: they are three more sliders each, and the honest place to author them is Harmony.

Levels — input black and white, gamma, output black and white, from the RGB composite record. The per-channel records (Red, Green, Blue, Alpha) are not read.

Curves — the control points are decoded, but writing them into COLOR_CURVES needs a measurement OSA does not have yet: how many points the node accepts and how it resamples. Until then the node is created and the values go to the report, because a curve written half-right is worse than a curve written not at all.

Values in the tree, values in Harmony — two different questions

The values above land in the staging tree, so you see and correct them in the preflight. Writing the composite attributes into the Harmony node (Hue/Saturation's ranges, Levels' channels) is a separate step still pending measurement — the import report says so per layer, instead of letting you assume it happened.

Layer masks become mattes

An adjustment layer with a layer mask in Photoshop reads as "this correction applies only here". OSA carries that across: the mask is extracted as its own drawing and wired into the effect's matte port, the same port the Cutter uses.

Clipped layers

A clipped adjustment layer attaches to the layer below it, exactly as it reads in Photoshop — the effect lands on that layer's slot rather than on the group.

An unclipped one applies to the whole group, and lands on the parent slot.

The report

Anything partial or refused becomes a line you can read after the import, naming the Photoshop layer and what happened to it:

Hue/Saturation values read into the node; they are not written to Harmony yet (composite attributes) Gradient has 3 or more stops; Harmony's gradient takes two

That is the house rule for this whole area: warn rather than stay silent. An adjustment layer that quietly does nothing is indistinguishable from a bug, and you would find out at the worst moment — in a render.

What never happens

An empty layer is never pruned. A blank layer with an empty bounding box is a legitimate placeholder in many pipelines. OSA stages it as an empty drawing rather than deciding on your behalf that it was a mistake.