Building Normalize

Download Normalize

Instagram certainly isn’t new, and it’s actually an app I enjoy, but every now and again, I encounter a picture in the “real world” (AKA, any site outside of Instragram) where someone decides it’s a good idea to use it when trying to take a picture of something they’re legitimately trying to show. Something had to be done. And, as usual, simply running it through photoshop’s Auto Levels or Apple’s magic wand did nothing (or nothing of value). So, I wrote Normalize.

“Wait, isn’t that practically the same reason you wrote Auto Adjust? Because Auto Contrast doesn’t always work? Why’d you make two apps you greedy bastard!”

Originally I didn’t want to, but I don’t want to compromise either. Auto Adjust is literally an app that lets you adjust an image or let an algorithm set the adjustments for you. Everything the “Auto” algorithm does is shown to you. If the Auto algorithm screws up (or didn’t exist) Auto Adjust is still a perfectly usable app because it has all the manual controls.

The new algorithm for Normalize has four times as many variables. Adding sliders for those started to get too messy so I instead decided to go the control-less “Magic” route. The only problem with this is that it would dumb down Auto Adjust. I was burned by Apple when they did this with Final Cut Pro X. I’m not going to do it to my users.

With great power comes great complexity.

Does that mean Auto Adjust won’t gain the new algorithm or Normalize won’t ever have manual controls? No, but they are two apps with different aims. Whether they grow together or not is not being planned. Each will gain the features I think it needs. So what are the differences as of Auto Adjust 3.3 and Normalize 1.0?

Auto Adjust

  • VGA/HDMI/AirPlay Support
  • Manual levels controls
  • Manual color balancing
  • Manual saturation
  • Legacy Support (iOS 3.1.3 on Original iPhone, iPod Touch, 4.2 on iPhone 3G)
  • Optimized for very large images (5MP ,8MP, even 12MP)
  • Optimized for raw photos taken with iPhones
  • Intended for YOUR photos; typical import > adjust > export workflow


  • Advanced Automatic Color Correction
  • Optimized for smaller (3MP) images. (All image sizes supported however)
  • Optimized for photos with filters applied or raw photos
  • Intended for others’ photos; more “disposable” feel; saving/exporting not necessarily part of workflow (although obviously implemented).

Here’s how it works:

Because I can’t put this in the iTunes description: the top “Other App” is the Magic Wand in Apple’s supplied Photos app, and the bottom is desktop photoshop’s “Auto Tone”. It’s worth noting they both do something, something different in fact, but both fail. Here’s why:

The obviously-intentionally-screwed-up-by-Instagram blue channel has some noise in it that confuses the crap out of Photoshop’s Auto Levels and Apple’s Magic Wand. Both normalize images by crawling in from the edges to the first non-zero value in the histogram. Mathematically, it’s the right thing to do, but a human would obviously ignore the noise.

It’s tempting to blame it on the black border. If we crop that we get a better histogram:

But the image still isn’t right. The whitepoint is still wrong (still too bluish – though maybe hard to see if not using a Cinema Display – look at the background shadows).

Without inadvertently open-sourcing my algorithm, I can say the secret lies with doing what a human would. Here’s the original, uncropped, pre-Instagram.

And the reconstruction

There are limitations of course. Since we don’t have floating point images without bounds, once a pixel or region is darkened beyond #000000 or whitened beyond #FFFFFF that information is essentially erased, and all the manipulation you do in Photoshop isn’t going to bring it back unless you start drawing.

You can see the original has more detail available in the shadows and on the black locomotive. The sky has also been over lightened so attempting to restore its color merely through level adjustment starts to turn other things blue. Since the original is also a little underexposed and not pre-balanced there are additional discrepancies. Still, it’s hard to argue that the reconstructed image isn’t clearer than the Instagram’d version.

Download Normalize