FilmLab Beta 0.3 for iOS

For the past few weeks I’ve been working on the 0.3 beta version of FilmLab. I just released version 0.3.2 for iOS, and version 0.3 for Android should be ready for testing soon.

The biggest change in this release is a completely new image processing engine built from the ground up for working with negatives. I’m overdue to write a full-length post about it, but in short, the code in FilmLab is now simulating an entire color (and soon, black and white) darkroom. Instead of just working with the digital RGB channels, it models the full spectrum of light coming from an enlarger bulb, going through filters and the film negative, and shining onto photo paper. Then it models the response of photo paper to that light, and the formation of CMY dyes in developing. And then it shows you what the resulting photo print would look like under typical lighting.

I’m still working on tweaking various parts of this process, but you can already see that the results have improved noticeably from previous builds of FilmLab. Here are a few examples, taken with the same phone and the same light source:

Old version (0.2.3)
Current version:

Old version (0.2.3):
Current version:

Old version (0.2.3):
Current version:

I’m so happy to see these promising results. I believed all along that if I could just figure out the math and code involved in simulating each part of the process, the resulting images would look good. But until the system was done, that was more of a leap of faith than a proven reality. I’d be lying if I said that I wasn’t a bit nervous that the whole thing was going to be a fiasco. When I finally got the code up and running on my phone, and saw it running at 30 frames per second and looking good, it was a huge relief.

The cool thing about having an image processing engine that works this way is that it’s going to be possible give users manual controls that are very similar to what they could do in a darkroom. And the way the output image changes in response to develop settings should be faithful to the analog printing process. Hopefully this can make the experience of post-processing film images more enjoyable, as well as giving more natural looking results.

Besides the improved colors, you might also notice that the new images are a bit sharper. A common problem with the old version was that when you tapped the screen to capture, your tap would cause your device to shake a little right at the moment it was capturing the image. Now when you tap to capture, FilmLab uses the sensors in your phone to observe its movement, and waits for it to become still again before it takes the photo. (Thanks to Mauro Bonecchi for pointing out this issue!)

There’s one more bug to fix in the iOS release of 0.3, which is a memory leak that makes FilmLab crash after a few minutes of typical use. I’ll get a fix for that up early next week. And I’m working on bringing these changes over to Android as well. Thanks for your patience, Android users! I now have access to a larger pool of Android test devices, and my goal for the 0.3 series is to eliminate the remaining device-specific issues that have been breaking FilmLab on certain phone models.