the hm photo engine

retouch.
cut out.
deliver.

HM GUI is the engine behind the HM photo suite: pro retouching, clean cut-outs and color-true edits on Mac and iPhone. Every edit is plain JSON that replays identically on every device.

HM GUI app icon
1.2 sfull one-tap portrait retouch on a 12 MP photo
13 msper GPU preview frame on iPhone-size images
< 0.1worst color difference (ΔE2000) between Mac and iOS engines
16-bitin means 16-bit out. Color profiles always embedded.

people first.

Built for the photos HM customers actually take: faces, events, guests.

healing that heals

Spot heal finds its own source. Content-aware fill rebuilds texture instead of smearing it. A patch tool is built in.

portrait tools

Skin that keeps its texture, blemish removal, eyes, teeth, under-eye and shine, each with its own strength slider.

one tap

An automatic portrait retouch that shows every step it took, so you can edit or undo any of it.

clean cut-outs

Hair-aware subject selection, background replace with light wrap, portrait-mode blur and sky swap.

hm camera crops

Print sizes, photo strips and social formats, with auto crop that never cuts a face, plus auto straighten and perspective fix.

layers, not damage

Every tool can put its result on its own layer. The original pixels are never overwritten.

one recipe.
every device.

An edit is a small JSON recipe, not a new pixel file. The Python engine and the Swift engine (HMCoreKit) read the same recipe, and golden tests prove they produce the same colors.

// look.json: made on the Mac, replayed on iPhone, identical
{
  "hm_recipe": 1,
  "name": "HM Portrait (natural)",
  "steps": [
    { "op": "spot_heal", "points": [[812, 640, 9]] },
    { "op": "smooth_skin", "strength": 0.35, "texture": 0.5 },
    { "op": "enhance_eyes", "strength": 0.25 },
    { "op": "white_balance", "temperature": 5600 },
    { "op": "curves", "points": [[0,0],[.5,.56],[1,1]] }
  ]
}

private by design.

Faces are analyzed on the device, and photos never leave it for editing. The engine needs no account and no network, and it tracks nothing.