Lee Hardy Dydo

Bust Symmetry

October 18, 2026 · Bust Symmetry

Three versions of a terracotta clay bust of a woman on a wooden stand: built from its left half twice, as shot, and built from its right half twice
The app's example bust: its left half doubled, as shot, and its right half doubled. The bust is generated, seeded from a photo of Menan's.

The tool is live at bust-symmetry.dydomite.com. It runs in the phone's browser, and photos never leave the phone.

1Menan's bust

My wife Menan is a ceramic artist, and she's sculpting a bust in clay, working from a drawing on an easel beside it. A face is the hardest thing to get symmetric, because everyone is an expert at looking at faces. One eye a little high or one cheek a little full and the whole thing reads as off, even when you can't say why.

My first idea was big: three cameras, front, side and top, feeding something that measures her symmetry. My second was the question I try to ask about everything: what's the smallest version of this?

2Borrowing the duck's overlay

In the Diablo duck project, I fit a 3D duck to photos of my rubber duck with a script that traced both outlines and overlaid them: white where they agreed, green where only the photo had duck, magenta where only the model did. A bust's symmetry is the same problem with one picture: lay the photo over its own mirror image and color where they disagree.

So the smallest version was one phone photo of the front, in a web page that flips it and draws the overlay. I built it in Next.js with Claude Code, put it on a dydomite.com subdomain on Vercel, and about ten minutes after the idea it was on my phone.

3An engineer's app

It worked, and it was an engineer's app for sure: four view modes, a midline slider, a tilt slider, a background threshold with an Auto button, and an "Even out lighting" checkbox. That last one mattered. Menan's studio light comes from a window, and a cheek in shadow would read as "different" from a cheek in light. The fix compares each pixel with the average of its neighborhood instead of comparing raw brightness, so the comparison follows the shape.

Leaving the page to take a photo was too many taps, so I added a live camera with the overlay drawn as you aim. On my phone the controls ended up below the picture, out of reach, and the lighting fix amplified the camera's grain into streaks. Both got fixed, and it was still too fiddly. What I wanted was: take a shot straight on, and the rest is handled.

4One shot, the rest handled

The rework took most of the controls away. You take the photo, and the code searches for the center line: it tries line positions and small tilts on a small copy of the photo and keeps the fold where the two halves match best. On the example the line lands on the nose with no adjustment. The sliders are still there, folded under "Adjust the center line," for the times it misses.

The views became pictures instead of modes: the bust built from its left half twice, as shot, from its right half twice, and the color overlay. Then I added a button you hold down to see one side doubled, and let go to snap back, because flicking between two states is how you see a difference instantly. Looking at a static overlay, you have to work it out.

5My face, doubled

Three versions of a selfie of Lee lying on an orange cushion: left half doubled, as shot with a dashed center line, right half doubled
The test subject on hand. Left half doubled, as shot, right half doubled.

I tested it on the face I had: mine, in a selfie. The center line landed where it should. But one doubled face came out too narrow and the other too wide, and both looked a little fishy. That turned out to be mostly the camera. If the phone isn't square to the face, even by a few degrees, the half that's turned away shrinks, and doubling it makes a narrow face while doubling the other makes a wide one. Holding the phone at arm's length makes it worse, because a close wide lens bulges whatever is nearest.

One photo can't tell camera angle from a lopsided face. That's a limit of the method, not a bug I could fix.

6What the research says

I looked for research on this and found more than I expected:

Two things changed after that. Flip became the main button, with the doubled views kept as illustrations. And I stopped worrying about my selfie, because that isn't how I'd shoot a bust anyway.

7Five times zoom

When I photograph something I care about, I stand back and use the 5x lens. Phones expose each of their back cameras to the browser separately, so the camera screen now has the same chips as the Camera app: 0.5x, 1x, 2x and 5x. 2x on our phones is a center crop of the main camera, which is also how Apple's Camera app does it. The camera screen opens on the lens used last, since Menan might prefer 2x.

The example image used to be a cartoon head drawn in code, which looked silly. The new one came from OpenAI's image model, seeded with a frame from a video Menan sent me of her bust: same terracotta, stand and choker, with a new face. One of the two outputs came back as a content-policy error, flagged for the bust's bare chest.

8Her source picture

That video also showed what I'd been missing: the drawing on the easel is her source. A symmetry check tells her whether the two sides agree. Her source tells her whether the face is the right face.

So she can add her source picture once, and it's stored on her phone. Google's face-landmark model, running on the phone, locates the eyes in both pictures, and the code scales and rotates the source so its eyes sit on the bust's eyes. I wasn't sure a model trained on photos of people would return landmarks for a clay face at all. It did for both: the generated example, and Menan's bust in her video, where it detected the bust rather than the drawing behind it. In a test with the same bust turned 5 degrees and shrunk 20%, the overlay came out as one crisp image. If no face is detected, the page names the picture that failed and leaves the source for her to drag and pinch into place.

9One rule for every button

The Bust Symmetry app on a phone: the example bust with a dashed center line, a Flip button, an Add her source picture link, and four view thumbnails
The app as it stands.

The source started as a 50% onion skin, and I wanted 100% too, and maybe off, without crowding the screen. Where it landed is one rule for every control: tap and it stays, hold to peek, let go and it snaps back.

[ Flip ]   [ 50% | 100% ]
   Change source picture

Tapping 100% on and off is a blink comparison, the trick astronomers used to find what moved between two photographs of the same sky: whatever jumps is the difference. 50% is the onion skin. Tapping the lit one again hides it, so there's no Off button.

10Next

Menan hasn't used it yet, and she's the test that counts. Whatever she does now to check symmetry, stepping back, squinting, a mirror, is what this should speed up. If photos ever stay ambiguous, the bigger version is a 3D scan compared against its own mirror, which takes camera angle out of it entirely.

Sources: Leonardo, Notebooks, item 529 · Seyama and Nagayama 2006 · chimeric faces, Frontiers 2018 · selfie distance, JAMA Facial Plastic Surgery 2018 · 2D vs 3D asymmetry · clay head scan, FME Transactions 2019