Jekyll2018-03-18T22:54:10-04:00/Film Lab, the app for digitizing filmFilm Lab!
February update part 1: FilmLab beta 0.3 and roadmap2018-02-19T12:00:08-05:002018-02-19T12:00:08-05:00/filmlab/2018/02/19/filmlab-february-update<p>It’s been six weeks since my last update (still working on <a href="/filmlab/2017/12/31/filmlab-2017-year-in-review.html#goals">my goal to be
a better communicator in 2018</a>), and although I know there hasn’t been
much to see from the outside, I’ve been making some really exciting progress
on FilmLab. In an effort to keep all my updates from being ridiculously long,
I’m going to break this one into series of shorter parts. Here’s part 1.</p>
<h3 id="getting-color-conversion-code-production-ready">Getting color conversion code production-ready</h3>
<p>In my last update, I talked about the work I’ve been doing developing a new color
conversion engine. In the time since, I’ve been working on getting that code (which was
running inside a small test app on my desktop so I could test changes quickly)
ready for use on mobile. That
was a bit of a challenge, since it has to work at 30 frames per second on devices
with less processing power, but it’s looking good now. And I’ve been gaining
useful knowledge about optimizing image processing.</p>
<p>I’ve also been integrating with native color management frameworks (first on iOS,
with Android coming up next). This lets FilmLab read more accurate input colors
from the device camera (and from files with embedded ICC profiles), and generate
output files with wide-gamut colors that accurately reflect the beautiful tones of
film prints and slides. There’s a whole lot
more to say about color, so I’ll cover that topic in detail in the next
installment.</p>
<h3 id="improving-automatic-exposure-and-color-balance">Improving automatic exposure and color balance</h3>
<p>Having good color conversion still doesn’t get you all the way to having
good looking results. You still need to pick exposure and color balance settings
for the digital “print” being made from the negative. FilmLab is going to allow
you to do this manually, but for ease of use it needs to have good automatic settings too.
The initial implementation I did for FilmLab 0.1 was barely adequate, so I’ve
been developing
new automatic exposure and color balance algorithms to go with the new color
conversion.</p>
<p>This is one of those tasks where there’s probably a never-ending
number of improvements that could be made. Like, wouldn’t it be cool to have
automatic face detection, and then choose settings to optimize the skin tones
in faces?
But I don’t want to go down that rabbit hole just yet. I think what’s there now
will be good enough to get to version 1.0, and I can always
spend more time on it in the future.</p>
<h3 id="filmlab-beta-03">FilmLab beta 0.3</h3>
<p>With these changes in place, it’s FINALLY almost time to get another release into
the hands of testers. The next FilmLab beta will be version 0.3, the first
in what will be a series of 0.3.x releases. The 0.3 series is going to be all
about image editing, with a secondary focus on fixing Android bugs. In version 0.3.0,
the new color conversion code will be running inside the existing editing UI, but
there’s a whole new editing UI on the way after that. Before we move on to version 0.4
I want to have the image editing UI completely finished.</p>
<h3 id="ui-stories-wanted">UI stories wanted</h3>
<p>Image editing on mobile is an interesting UI problem. How do you provide
access to lots of powerful editing controls, while still keeping the UI out of
the way so the user can focus on their image? I’ve been doing a lot
of thinking and sketching, and evaluating how other image editing apps solve
similar problems. And I want to take this chance to reach out to the community and ask
for your opinions too.</p>
<p>So tell me: what mobile image editing apps are your favorite to use, and why? Are there some
user interfaces you find a joy to use? Which UIs are the most frustrating? Please
let me know. Hearing your experiences will help me make better decisions as I build
out the FilmLab editing interface.</p>
<h3 id="roadmap">Roadmap</h3>
<p>FilmLab 0.3.0 will be released for iOS next week, and for Android the week after that.
From there, it will be a few more weeks of iterating on version 0.3.x as I build out
all the UI controls, and work to get FilmLab running reliably on all Android devices.</p>
<p>Once 0.3.x is complete, I’ll start working on the 0.4.x series, which will be all
about better live preview, automatic frame recognition, and capture. This is something
I’ve been looking forward to getting back to for a long time, and I’m full of ideas
that I’m excited to put into action.</p>
<p>I mentioned in my last
post how I’ve been thinking about using machine learning to develop intelligent
frame recognition. I still think that’s the right approach in the long run, but
I don’t think it worth holding up FilmLab 1.0 while I work on that. So I’ve
come up with a few ideas for simpler frame-recognition techniques, which hopefully
will work well enough to let me ship FilmLab 1.0.</p>
<h3 id="consulting-availability">Consulting availability</h3>
<p>To continue to pay my bills while working on FilmLab, I’m considering taking on
a small amount of consulting or short-term programming projects. I don’t want to
stray far from my main project of FilmLab, though, so I’m limiting myself
to projects involving photography, image processing, and analog media digitization.
I will have a few consulting/programming weeks available over the coming months. So if you have an
interesting project involving technology and photography, and you’d like to hire a
programmer who’s been living, breathing, and bleeding analog film for the past
year, drop me a line at <a href="mailto:abe@filmlabapp.com">abe@filmlabapp.com</a>.</p>
<h3 id="next-time">Next time</h3>
<p>Next week, in the FilmLab February update part 2: What I’ve learned about film
negatives and color, in 5,000 words or less. And with pictures!</p>It’s been six weeks since my last update (still working on my goal to be a better communicator in 2018), and although I know there hasn’t been much to see from the outside, I’ve been making some really exciting progress on FilmLab. In an effort to keep all my updates from being ridiculously long, I’m going to break this one into series of shorter parts. Here’s part 1. Getting color conversion code production-ready In my last update, I talked about the work I’ve been doing developing a new color conversion engine. In the time since, I’ve been working on getting that code (which was running inside a small test app on my desktop so I could test changes quickly) ready for use on mobile. That was a bit of a challenge, since it has to work at 30 frames per second on devices with less processing power, but it’s looking good now. And I’ve been gaining useful knowledge about optimizing image processing. I’ve also been integrating with native color management frameworks (first on iOS, with Android coming up next). This lets FilmLab read more accurate input colors from the device camera (and from files with embedded ICC profiles), and generate output files with wide-gamut colors that accurately reflect the beautiful tones of film prints and slides. There’s a whole lot more to say about color, so I’ll cover that topic in detail in the next installment. Improving automatic exposure and color balance Having good color conversion still doesn’t get you all the way to having good looking results. You still need to pick exposure and color balance settings for the digital “print” being made from the negative. FilmLab is going to allow you to do this manually, but for ease of use it needs to have good automatic settings too. The initial implementation I did for FilmLab 0.1 was barely adequate, so I’ve been developing new automatic exposure and color balance algorithms to go with the new color conversion. This is one of those tasks where there’s probably a never-ending number of improvements that could be made. Like, wouldn’t it be cool to have automatic face detection, and then choose settings to optimize the skin tones in faces? But I don’t want to go down that rabbit hole just yet. I think what’s there now will be good enough to get to version 1.0, and I can always spend more time on it in the future. FilmLab beta 0.3 With these changes in place, it’s FINALLY almost time to get another release into the hands of testers. The next FilmLab beta will be version 0.3, the first in what will be a series of 0.3.x releases. The 0.3 series is going to be all about image editing, with a secondary focus on fixing Android bugs. In version 0.3.0, the new color conversion code will be running inside the existing editing UI, but there’s a whole new editing UI on the way after that. Before we move on to version 0.4 I want to have the image editing UI completely finished. UI stories wanted Image editing on mobile is an interesting UI problem. How do you provide access to lots of powerful editing controls, while still keeping the UI out of the way so the user can focus on their image? I’ve been doing a lot of thinking and sketching, and evaluating how other image editing apps solve similar problems. And I want to take this chance to reach out to the community and ask for your opinions too. So tell me: what mobile image editing apps are your favorite to use, and why? Are there some user interfaces you find a joy to use? Which UIs are the most frustrating? Please let me know. Hearing your experiences will help me make better decisions as I build out the FilmLab editing interface. Roadmap FilmLab 0.3.0 will be released for iOS next week, and for Android the week after that. From there, it will be a few more weeks of iterating on version 0.3.x as I build out all the UI controls, and work to get FilmLab running reliably on all Android devices. Once 0.3.x is complete, I’ll start working on the 0.4.x series, which will be all about better live preview, automatic frame recognition, and capture. This is something I’ve been looking forward to getting back to for a long time, and I’m full of ideas that I’m excited to put into action. I mentioned in my last post how I’ve been thinking about using machine learning to develop intelligent frame recognition. I still think that’s the right approach in the long run, but I don’t think it worth holding up FilmLab 1.0 while I work on that. So I’ve come up with a few ideas for simpler frame-recognition techniques, which hopefully will work well enough to let me ship FilmLab 1.0. Consulting availability To continue to pay my bills while working on FilmLab, I’m considering taking on a small amount of consulting or short-term programming projects. I don’t want to stray far from my main project of FilmLab, though, so I’m limiting myself to projects involving photography, image processing, and analog media digitization. I will have a few consulting/programming weeks available over the coming months. So if you have an interesting project involving technology and photography, and you’d like to hire a programmer who’s been living, breathing, and bleeding analog film for the past year, drop me a line at abe@filmlabapp.com. Next time Next week, in the FilmLab February update part 2: What I’ve learned about film negatives and color, in 5,000 words or less. And with pictures!The first 12 months of FilmLab: 2017 year in review2017-12-31T12:00:08-05:002017-12-31T12:00:08-05:00/filmlab/2017/12/31/filmlab-2017-year-in-review<p>I will remember 2017 as the year when FilmLab went from an idea
to something real. I’d been thinking about
the concept of a film viewing / scanning app for
a couple of years, although more from the perspective of
thing I wished I had to use, than as a
a viable business idea. But during 2016, I started taking the idea more seriously, and talking about
it with my wife and business partner <a href="http://knitbot.com">Hannah</a>.</p>
<p>If I was ever going to work on the film scanning app idea,
the time seemed right. Film photography was making a comeback,
but almost all the local photo labs had gone out of business,
so many film shooters had started developing and scanning
their own film at home. Existing film scanning software
was designed for desktop computers, and some of it was
no longer being updated and only ran on old operating systems.
Meanwhile, more and more computing was moving to mobile
devices. Smartphone camera capabilities had been improving
rapidly, with features like manual controls and raw
capture available to developers for the first time. Didn’t
it make sense that there should be smartphone software
for viewing and capturing film?</p>
<p>Hannah and I decided it made sense for me to work on the app for a month or two, as an experiment. If it turned out to be too much
work, or there wasn’t enough interest, we’d move on
to other projects. But it was time to give the idea a try.</p>
<!--more-->
<h3 id="january-to-march-bootstrapping-the-prototype">January to March: Bootstrapping the Prototype</h3>
<p>On January 25, I checked in the first bit of code for what
would become FilmLab. It didn’t actually run on a phone,
just on my computer, and it didn’t have any user interface
at all. But it did load a JPEG “scan” of
some film I’d taken with my camera phone, and attempt
to find the outlines of the film frames.</p>
<p>By early Feburary, I had the code running in iOS on my iPhone 7. This required a bunch of computer plumbing:
all the FilmLab image processing is written in C++, a classic albeit boring programming language, while
the iOS user interface code is written in Apple’s modern computer language Swift. But Swift can’t talk to C++ directly, so I had to write a bridge layer between the two in an older Apple programming language
called Objective-C. Fortunately there were some helpful tutorials
online about how to do this.</p>
<p>On Febrary 9, the app started to do something useful.
If you pointed it at some black and white film with clearly
defined borders, it would identify the frames and draw an outline around the one closest to the middle. Then if you tapped the frame, it would take a full resolution photo, extract the frame, invert it to a positive, and display the result.</p>
<p>I made my first demo video and put it up on Instagram. (Apparently by that point I’d settled
on the name FilmLab, since I mention it in the post description).
I was really curious to know what other film
shooters thought of the idea. I think I only had about 40 followers at the time, but there were
enough positive comments to make me feel encouraged.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/BQTxNi4gyfD/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.125% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BQTxNi4gyfD/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">I&#39;ve started working on an app for scanning film, which I&#39;m calling FilmLab. There&#39;s a lot of work left to do, but I&#39;m really excited about my progress so far! Modern smartphones have great cameras and lots of processing power, and I think it will be possible to make an app that&#39;s a lot faster and more fun than using a dedicated film scanner, while still producing good quality results. Film shooters: is this something you&#39;d find useful? #filmlabapp</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/abefettig/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Abe Fettig</a> (@abefettig) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-02-09T23:14:08+00:00">Feb 9, 2017 at 3:14pm PST</time></p></div></blockquote>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<!--_-->
<p>The rest of February was spent improving the automatic frame detection, initially targeting 35mm film, 120 film, and slides.
(I ended up setting slide support aside, and still haven’t
gotten back to it, although it’s still on my to-do list).</p>
<p>On March 10, I posted another demo video showing an updated prototype that could detect multiple frames, in different
types of film, simultaneously. It still had obvious bugs: the
frame borders were jumpy, and the color was way off (check
out those super-saturated blues), but it had come a long
way from the previous month.</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/BReXvzAhiUO/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.125% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BReXvzAhiUO/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Here&#39;s a demo of the latest build of FilmLab, the film scanning app I&#39;ve been working on. Check out the frame detection goodness! It can tell the difference between color and black and white film, and it gives you a real time preview of all the frames it found, with individual color correction applied to each frame. Still a little glitchy, but it&#39;s getting there! #filmlabapp</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/abefettig/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Abe Fettig</a> (@abefettig) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-03-10T22:34:40+00:00">Mar 10, 2017 at 2:34pm PST</time></p></div></blockquote>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<!--_-->
<h3 id="april-to-june-the-kickstarter-campaign">April to June: The Kickstarter Campaign</h3>
<p>In early April, I spent a couple of days doing the first
real UI work on FilmLab. I added the ability to zoom in on
a frame to focus (which you had to do by moving the phone
closer to or farther from the negative, since autofocus
wasn’t working yet), and buttons to capture and save/export
the image. This meant that, for the first time, I could
actually save an image I’d scanned with FilmLab! It was
starting to feel like a real app. I posted
another Instagram demo video:</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/BQ1122LhW9r/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.125% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BQ1122LhW9r/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">Over the past few days I&#39;ve made some progress on FilmLab. Now you get a live preview of the negative-to-positive conversion (instead of waiting until after you pick a frame to scan) which is really nice for quickly viewing a sheet of negs. And I added preliminary support for color negatives, as you can see in this video. I&#39;m still working on improving the code that automatically detects frame boundaries, but it&#39;s getting better—here it&#39;s able to correctly capture the individual 35mm frame I tapped. I&#39;ve been thinking about the future of this project, and one thing it&#39;s definitely going to need (besides a whole lot of coding and design work) is an audience. If you could help spread the word by tagging a friend or two who shoots film, I&#39;d really appreciate it!</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/abefettig/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Abe Fettig</a> (@abefettig) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-02-23T04:48:55+00:00">Feb 22, 2017 at 8:48pm PST</time></p></div></blockquote>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<!--_-->
<p>At this point I had been working on FilmLab close to full time for about four
months. I was excited about the possibilities of the app
from a technical standpoint, and I was getting an increasing
amount of positive feedback about the idea from film shooters. But at the same time, I could see that it was going to be a big project, with months more work before I’d have something I’d be able to sell on the App Store. I’d need some financing to afford to be able to invest that much time in development.</p>
<p>I had never pictured myself doing a Kickstarter project, but
FilmLab just seemed like a perfect product to crowd fund. Film
shooters are a passionate community, and based on my own
experience I thought it was going to meet a real need that people
would be willing to pay for. And if I was going to owe something
to investors, I liked the idea of answering to the people
who were actual users of the product – it felt like our interests
would be aligned. Plus, I hoped the Kickstarter project
itself would get some press and help spread the word about FilmLab.</p>
<p>I wanted to start spreading the word ahead of time,
so I decided to bite the bullet and get in front of the camera (not something I was looking forward to) and make a YouTube
video about the project. I bought an audio
recorder and a mic, set up my digital camera on a tripod,
and tried to find an angle in our small house where
the background wouldn’t be distracting (I ended up
sitting at the dining room table with the living room
behind me). After many takes, I managed to record this
video:</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/BNriOTIjb7g?rel=0" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen=""></iframe>
<p>If you look closely, you can see that at the end of the video
it’s getting dark outside, and Hannah is patiently sitting
in the car in the driveway waiting for me to be done so she
can come inside. I think one of my repeated phrases this year
was “it took longer than I thought it would.”</p>
<p>The rest of April and early May were a whirlwind of Kickstarter preparations.
There were app features to finish, a video to make, bank
accounts to open, music to license, and press to reach out to.
I had to move back the launch date a couple of times, and by
the end I was physically and emotionally exhausted. Finally,
everything was ready, and at noon on May 11 it was time
to push the launch button.</p>
<iframe width="640" height="360" src="https://www.kickstarter.com/projects/175814937/filmlab-an-app-for-viewing-and-digitizing-analog-f/widget/video.html" frameborder="0" scrolling="no"> </iframe>
<p>At the moment the Kickstarter campaign went live, I was feeling
excited but also very nervous. I had invested five months in this project, more than we had originally planned on, and now it was going to sink or swim based on how people responded to it. I
believed in it, but it definitely wasn’t a sure thing, and
the possibility of massive public failure felt very real.</p>
<p>Thankfully, there was a great response to the Kickstarter campaign. In the end, thousands of people came forward to
donate to the project. The campaign ended up almost doubling
its funding goal (which
has proved useful since then, since development has
ended up taking longer than I thought it would). I carry
a huge debt of gratitude toward everybody who supported the
Kickstarter project, especially the people who jumped in to
pledge on the first day to help the campaign get some momentum. It’s a cliche to
say “I couldn’t have done it without you”, but in this
case it’s literally true. If it wasn’t for the Kickstarter
backers, I don’t think FilmLab could have had a chance to
succeed. Many thanks to everybody who supported it!</p>
<p>Looking back on my Kickstarter campaign now, there are
a couple things I would changes if I was doing it over again. First, I cringe at my “three to six month” estimate for
completing version 1.0 of FilmLab. That was overly optimistic. “More than six months” would have been more accurate. <sup id="fnref:1"><a href="#fn:1" class="footnote">1</a></sup></p>
<p>Second, I wish I hadn’t used the word “beta” to describe
the early releases I’d be delivering to testers. A “beta”
release is usually an almost-finished product, which may
still have bugs but which has all major features completed.
But with FilmLab, I promised
to deliver in-progress snapshots of the app starting only
a month after the Kickstarter campaign ended. Calling
these “beta” set expectations too high. I was trying to
keep things simple by using a word people are familiar
with, but I chose the wrong word. If I could do it over
I’d call these “sneak peek preview builds” or something
along those lines.</p>
<p>All things considered, though, I’m super happy with how the Kickstarter campaign went. And in the months since then, the community of backers have been great to work
with. They’re an extremely supportive, understanding, and helpful group.
They’ve provided much more than just financial backing, and
FilmLab is going to be a better product because of them.</p>
<h3 id="july-to-september-the-core-of-a-cross-platform-app">July to September: The core of a cross platform app</h3>
<p>After the Kickstarter campaign ended, I started working on a
new version of FilmLab, with some major changes from the
existing prototype version. This new version would be cross-platform: it would
have a flexible core that could run on both iOS and Android
(and be adapted for other platforms and uses in the future).
And it would also be designed to work in the messy, complicated
real world. Instead of only needing to work with my personal model
phone, using my light box and the film stocks I usually shoot,
it would need to support all the different phone models
and light sources and film stocks in the real world.</p>
<p>The first step was to get the Android version bootstrapped.
Up to this point, my personal experience developing Android apps was minimal, so it was a bit of a learning curve to get
up to speed. And like the iOS app, there was some additional
plumbing work necessary to get the Android UI (written in Java) talking to FilmLab’s C++ image processing layer. I learned
a lot about Android JNI layer and how to efficiently
pass image data around.</p>
<p>On August 1st, I released the first preview build of FilmLab for iOS, followed by an Android build on August 9. These builds
were made available to Kickstarter backers
(as part of their reward for supporting the project), and they immediately started trying out the app and giving
feedback, even posting some of their FilmLab scans on
Instagram. It was an exciting moment the first time I saw a FilmLab-scanned image in the wild:</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/BXUTWaiFXNY/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BXUTWaiFXNY/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">For the first time ever, I&#39;m reposting a photo somebody else scanned with FilmLab! Thanks to @ryanpoorman for trying out the first beta release of FilmLab for iOS and posting this lovely cat photo. Seeing it pop up in my Instagram feed was an exciting moment. Beta update: The first Android beta should be going out to Kickstarter backers tomorrow. Shortly after that will be a second iOS beta release with bug fixes for some of the common issues people have been reporting. Thanks to everyone who&#39;s been trying out the beta and sharing their results. There&#39;s a ton of work still ahead, but I&#39;m happy to have reached this milestone of having FilmLab running on other people&#39;s phones. #filmlabapp #scannedwithfilmlab</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/abefettig/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Abe Fettig</a> (@abefettig) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-08-03T03:52:12+00:00">Aug 2, 2017 at 8:52pm PDT</time></p></div></blockquote>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<!--_-->
<p>As summer went on, and I kept working on improving the iOS and Android app builds, I realized the app could be thought of
as a set of separate components that work together. First, there’s an augmented reality
camera, which analyzes the video stream coming from
your phone’s camera, detects film, and gives you a real-time
preview of negatives as positives. Second, there’s still
image capture, which has the job of controlling the
exposure and focus of the device camera,
capturing the negative data in as high resolution as possible,
and processing raw files. Third, there’s the film processing engine,
which takes negatives as input and simulates the analog printing
process to produce positive output. And finally, there’s the
UI, which gives you the ability to see and control what the app is doing. I’m building that part separately for each platform like iOS and Android, so the user interface can have a
native look and feel.</p>
<p>The challenge was (and continues to be) deciding how to split my time between these different components. Ultimately they all
have to get done, so in a sense the order I work on them
doesn’t really matter. But since people are actively using
the preview releases, I hoped to work on the components in
an order that helped the app become useful even while it
was incomplete.</p>
<p>I decided to focus first on still image capture, the film processing engine, and the UI for editing captured images. My thinking was that this way, even if the automatic film detection wasn’t working yet, people could still use FilmLab as an editor for their film scans (even those captured through other means like DSLRs with macro lenses). I was able to make some progress in these areas during September, even while much of my time ended up being spent working through device-specific issues on Android. (It turns out that Android camera capture is quite complicated, and there are a lot of differences between phone models). On October 12, I posted this demo video to Instagram, showing the currently available tools for editing a captured negative on Android:</p>
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/BaIeXO8lHqy/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.125% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BaIeXO8lHqy/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">I just released FilmLab preview version 0.2 for Android to Kickstarter backers for testing! This is a huge update, which brings the Android version fully in line with the iOS version, and even adds some additional lossless editing tools that haven’t made it into the iOS build yet. For full release notes, see link in profile. 🤖❤️🎞 #filmlabapp</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/abefettig/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Abe Fettig</a> (@abefettig) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-10-12T03:33:43+00:00">Oct 11, 2017 at 8:33pm PDT</time></p></div></blockquote>
<script async="" defer="" src="//platform.instagram.com/en_US/embeds.js"></script>
<!--_-->
<h3 id="october-to-december-tackling-the-hard-problem-of-accurate-color">October to December: Tackling the Hard Problem of Accurate Color</h3>
<p>Before I moved on to improving the other components
of FilmLab, I wanted to both finish the image editor and
improve the quality of negative-to-postive color conversion.
In Filmlab, these two things really go hand in hand. One of my goals has been to make an app that’s grounded in the analog
techniques and technology of film. I want the colors and tones of images
produced with FilmLab to look like what you’d get if you
made your prints with chemicals in a lab. And I want the
creative controls available in FilmLab to be based on
what a skilled darkroom printer would have been able to do.
There will always be other image editors available for
digital postprocessing, but FilmLab’s editing is all about
controlling the negative-to-positive process.</p>
<p>This turned out to be way more work than I thought it was
going to be. I had a lot to learn about color, and there
were a bunch of hard problems to solve to make FilmLab’s
color conversion accurate, good-looking, and fast. In
particular, I struggled to properly emulate the
subtractive CMY color of chromogenic paper dyes. This work
involved a lot of math and algorithms, which aren’t my
strongest suit as a developer, and when things went wrong
it was hard to debug. It was easy to see when the results
looked bad (and they often did), but harder to figure out
exactly what was wrong, mathematically, with the digital
output, and then trace it back to a specific step in
the system. And even after isolating a problem, there would be questions: Was my mental model of how the analog process
worked wrong, or was my code buggy? Or both? It ended
up being as much a research problem as it was a coding
problem.</p>
<p>All of that took a lot of time, which has made me worry that, from the outside, it looks like FilmLab development
has stalled out. That’s not the case at all - I’m really
excited about the work I’ve been doing, and I think it’s important
for the future of FilmLab. I want people to be really happy with the output colors and tones in FilmLab, and now I think
they will be. And the underlying technology is super cool. It’s recreating the whole analog process in software, and I think
will open the door to interesting possibilities in the future.</p>
<h3 id="looking-forward-to-2018">Looking forward to 2018</h3>
<p>What’s in store for FilmLab in 2018? First up will be preview
release 0.3, coming in January. This will include the new
print simulation code for negative to positive conversion,
as well as a new editing UI which gives more manual controls
based on traditional film processes. I’m excited about it.</p>
<p>After that, my goal is to work towards releasing FilmLab
1.0 by the end of the first quarter (that’s the end of March,
three months from now.) Most of the remaining work
is already designed and planned out, but there is
one significant piece that I haven’t quite figured out
yet. Which is:</p>
<h4 id="smarter-frame-detection">Smarter frame detection</h4>
<p>Since the very first preview release of FilmLab went
out to backers at the beginning of August, I haven’t
spent any time working on improving automatic detection
of film frames. This is a core feature of FilmLab, and
having this part unfinished makes the whole app feel kind
of broken. So I’m really looking forward to improving it.
However, before I get back to work on it, I have a big
technical decision to make.</p>
<p>There’s a revolution happening in software development,
which is the use of machine learning to solve problems. In the
past, the job of the software developer was to write
super-specific instructions, telling the program exactly
what to do in every possible situation it might encounter.
But with machine learning, the developer teaches a system
how to do a task in a looser way, similar to how you might
teach another person:
by providing it with lots of examples to learn from, and giving feedback so it can learn from its mistakes. Surprisingly,
this turns out to work better than traditional programming
for many types of problems, including computer vision
(teaching a computer to recognize and differentiate objects).</p>
<p>Machine learning seems super promising for FilmLab’s film
detection, but I personally don’t have any experience with it,
so it’s hard to know how long it will take to get working,
and just how much better the results could be than if I use
more traditional computer vision techniques. Probably what
I’ll do is give myself a week or two to experiment with machine
learning and see how far I can get. I’m pretty sure that
machine learning represents the future of computer vision,
and FilmLab will adopt it eventually, but I don’t want
to delay the version 1.0 release if another solution can be
made to work in less time. If anybody out there has experience
implementing machine learning for this kind of problem, please
feel free to get in touch – I’d love to chat!</p>
<p><a name="goals"></a></p>
<h4 id="my-goals-for-the-new-year">My goals for the new year</h4>
<p>My number one goal for 2018 is to be better at communication,
especially through the FilmLab mailing list / blog and on social
media. As a one-man development team, my tendency is
to feel like the most important thing I can do at the current
moment is work on developing the app. But I also need to
prioritize time for communication, because communication is
important.
Everybody who backed FilmLab expects (and deserves) updates
about how development is going. And for FilmLab to be successful in the future, after the 1.0 launch, the pool of people who
know about it
needs to keep growing. So part of my job is to keep
talking about FilmLab and posting samples and demos to show
what it’s currently capable of.</p>
<p>In addition, I’m going to try to do better at staying on
top of email. I try to respond to everyone who writes,
but sometimes the email piles up and then days or weeks
go by before I get to the bottom of it. Hopefully sometime
in the future I’ll be able to hire a support person who
can focus on answering questions quickly. But for now, my goal
is going to be to respond within 1 business day. In any
case, please know that I do read and appreciate all email
(and DMs on social media). Please keep in touch, and I
apologize if I don’t get back to you as quickly as I wish
I could.</p>
<p>If you’re read this far, thanks for taking the time!
Writing this year-in-review has been a helpful exercise
for me, in that it’s helped me get some perspective. I’ve
been neck-deep in this project, focusing on what needs to get done today or this week. It’s refreshing to step back
and consider the progress on a larger time scale. A year ago, FilmLab didn’t exist. Now it does. It’s not finished yet, but it’s well on its way. 2017 was a huge year for FilmLab, but I think 2018 is going to be even better. Thanks
to all of you for your continued support!</p>
<p>-Abe</p>
<h5 id="footnotes">Footnotes</h5>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>I fell into a known software development trap, which is believing that you’ve solved all the hard problems in the course of getting a basic version of your program working. In reality, that’s never true. In <em>The Mythical Man-Month</em>, the classic 1975 book on software development, Fred Brooks estimated that making an existing program usable for other people represents a 3X increase in time and expense, and that making a program integrate reliably with other software is another 3X increase in time and expense. He wrote that, compared to the initial program, the finished software “costs nine times as much. But it is the truly useful object, the intended product of most system programming efforts.”</p>
<p>As a software developer, once you get the basic program working you tend to feel like the hard part is over. But according to Brooks you’re only one-ninth of the way there. There are a lot of engineering challenges that only become clear after software starts to deal with the complexity of the real world.&nbsp;<a href="#fnref:1" class="reversefootnote">&#8617;</a></p>
</li>
</ol>
</div>I will remember 2017 as the year when FilmLab went from an idea to something real. I’d been thinking about the concept of a film viewing / scanning app for a couple of years, although more from the perspective of thing I wished I had to use, than as a a viable business idea. But during 2016, I started taking the idea more seriously, and talking about it with my wife and business partner Hannah. If I was ever going to work on the film scanning app idea, the time seemed right. Film photography was making a comeback, but almost all the local photo labs had gone out of business, so many film shooters had started developing and scanning their own film at home. Existing film scanning software was designed for desktop computers, and some of it was no longer being updated and only ran on old operating systems. Meanwhile, more and more computing was moving to mobile devices. Smartphone camera capabilities had been improving rapidly, with features like manual controls and raw capture available to developers for the first time. Didn’t it make sense that there should be smartphone software for viewing and capturing film? Hannah and I decided it made sense for me to work on the app for a month or two, as an experiment. If it turned out to be too much work, or there wasn’t enough interest, we’d move on to other projects. But it was time to give the idea a try.FilmLab Beta 0.2 for Android release notes2017-06-06T01:00:08-04:002017-06-06T01:00:08-04:00/filmlab/2017/06/06/filmlab-0.2-android-release-notes<p>FilmLab for Android 0.2 release notes</p>
<p><em>Since the FilmLab Kickstarter campaign ended, I’ve been keeping my head down,
working away at the FilmLab preview releases, which are being used and tested
by Kickstarter backers. I have not, however, been doing a good job updating
this blog. So I thought it would be a good idea to start posting updates
about beta progress here, so anybody who’s interested can follow along.</em></p>
<!--more-->
<p>Our story so far: In early August I shipped FilmLab 0.1 for iOS and Android.
Getting a basic Android version of FilmLab up and running felt like a major accomplishment, since my prototype had been iOS-only. But there was still a lot
of work to be done to the Android version to get it fully caught up to iOS.
In September I released version 0.2 for iOS, and then set to work on the
equivalent 0.2 release for Android. This time around I wanted to make sure
I took the time to get the Android build fully caught up to iOS, so they can
be equals going forward. There was a lot of work to do, and I had a lot to learn,
but version 0.2 for Android is finally being released to testers today.</p>
<h3 id="filmlab-02-for-android-release-notes">FilmLab 0.2 for Android release notes</h3>
<p>I’m very happy to introduce FilmLab preview version 0.2 for Android! This update includes a lot of improved technology under the hood, and also has some new features that I hope will make FilmLab more useful to you, even in its current incomplete state.</p>
<h4 id="whats-new">WHAT’S NEW</h4>
<p>Camera initialization, speed and autofocus - I’ve tried to fix the issues some people were having with slow frame rates, lack of autofocus, or complete camera failure on certain Android devices. However, I won’t know for sure how successful these fixes are until this build gets tested on lots of different devices in the wild. If the camera doesn’t work, runs slowly, or doesn’t focus, please let me know right away and I’ll see what I can do to fix FilmLab on your device!</p>
<p>Manual Crop/Perspective tool: Now you can manually adjust the part of the image you want FilmLab to capture. This will let you fix things when FilmLab doesn’t properly detect the frame you tapped on, or do creative things like combining two half-frame images together. To use the crop/perspective tool, first capture or load an image, and then tap the crop icon on the toolbar. To adjust the area being processed, drag the corners. To save your adjustments, tap the crop icon again. This tool still needs work, it’s a little jumpy and hard to make fine-grained adjustments for now, but it does get the job done in a pinch.</p>
<p>Rotation tool - rotate your captures! This is an Android-first features, I haven’t added it to the iOS build yet.</p>
<p>Flip tool - flip/mirror captured images (helpful if you scan an negative with the emulsion side up). Also a feature that’s coming first to Android! None of these have been optimized for speed yet (they’re working on the full size image instead of one that’s been resized for your device), so they’re slow. This will improve in future builds.</p>
<p>Device orientation / rotation support: Now you can rotate your device without breaking the FilmLab UI. Yay!</p>
<p>Raw support. If you’re using a Android device that supports raw capture, FilmLab will capture a raw DNG and use that as the source for adjustments. For now, the only difference this makes is that your image won’t have as much noise reduction and smoothing applied to it, and will have slightly better dynamic range. Future builds will add support for combining multiple raw captures to reduce noise and improve resolution.</p>
<p>Improved JPEG support. For devices that don’t support raw, FilmLab will attempt to dial down the smoothing applied to JPEGs to keep more detail in the image.</p>
<p>Zooming in captured image: You can pinch to zoom when viewing/editing an image. However, you can’t yet drag to pan around in the image, so this is of limited utility. A better zoom-and-pan implementation will be coming.</p>
<p>Negative mode all the time: Previously, the camera would switch between positive and negative mode as it tried to detect what was in the scene. But since positive/slide film isn’t actually supported yet, this only made things worse. So for now, I’ve made it stay in negative mode all the time, which feels a lot better. Full support for positives will be added in a future build.</p>
<p>Requests permission for saving - now FilmLab will ask permission the first time you try to save an image, so you no longer have to manually turn the permission on in settings.</p>
<h4 id="known-bugs-and-issues">KNOWN BUGS AND ISSUES</h4>
<ul>
<li>This build doesn’t include any improvements to frame detection.</li>
<li>Camera doesn’t yet show a live preview of detected frames.</li>
<li>Black and white film is still being treated as color film.</li>
<li>Positive/slide film isn’t yet supported.</li>
<li>Positive to negative conversion is overexposing highlights.</li>
<li>Crop/perspective tool UI still needs work.</li>
<li>Capture happens without checking for whether the image is in focus or not, so it’s possible to capture an out-of-focus negative.</li>
<li>Output is still limited to 8-bit JPEG, even if raw capture was used.</li>
<li>Manual control over film type, exposure, contrast, and color balance isn’t implemented yet.</li>
</ul>
<p>The 0.1 and 0.2 beta releases have been pretty huge, involving many weeks of
works and lots of major architectural work under the hood. Now that the core
app infrastructure is up and running on both iOS and Android, I hope to be
able to move to a schedule of smaller, more frequent beta releases moving forward. Thanks again to all the Kickstarter backers who supported this project, and who
are helping test the beta builds!</p>
<p>-Abe</p>FilmLab for Android 0.2 release notes Since the FilmLab Kickstarter campaign ended, I’ve been keeping my head down, working away at the FilmLab preview releases, which are being used and tested by Kickstarter backers. I have not, however, been doing a good job updating this blog. So I thought it would be a good idea to start posting updates about beta progress here, so anybody who’s interested can follow along.Progress report, with full size sample images2017-06-06T01:00:08-04:002017-06-06T01:00:08-04:00/filmlab/2017/06/06/progress-report-sample-images<style>
.demo-image {
float: left;
margin: 10px;
font-size: 80%;
}
.demo-image img {
max-width: 500px;
max-height: 600px;
display: block;
}
p {
clear: left;
}
</style>
<p>
Hi everyone!
</p>
<p><i><a href="https://www.kickstarter.com/projects/175814937/filmlab-an-app-for-viewing-and-digitizing-analog-f?ref=user_menu">The FilmLab Kickstarter campaign</a> is in its final stretch: only 36 hours to go as I
write this! If you're planning to use FilmLab, but haven't yet backed the project,
I encourage you to do so today. You'll get early beta access several months
before FilmLab is released to the public, and you'll also save some money
on FilmLab Pro when it's released. Go check it out!</i>
<p>
<p>
I wanted to give everybody
a little progress report on current FilmLab image quality, and show some full-size
images and side-by side comparisons with dedicated scanners. So I scanned
in a bunch of test images last night, using an iPhone 7 Plus running the current
alpha build of FilmLab.
</p>
<p>
Before we get to the images, a couple of disclaimers. First, this isn't a
competition (and if it was, FilmLab would lose).
Pro scanners are awesome tools, and FilmLab complements them
rather than replacing them. The reason I'm showing side-by-side images is to
provide a frame of reference for the FilmLab scans. You can see the difference
in resolution between a pro scanner and a smartphone camera, also see where
FilmLab's color conversion code is working well and where it needs to improve.
</p>
<p>
Second, FilmLab is very much still a work in progress. There's lots more work
to be done to increase sharpness, reduce noise, improve color balance,
and offer manual controls over exposure and contrast.
</p>
<p>
OK, disclaimers done - let's take a look! (You can click any image below
to download the original, full-resolution version.)
</p>
<h4>Pro lab scans</h4>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1224.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1224.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/0074_28050021.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/0074_28050021.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
<!--more-->
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1234.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1234.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/0014_16430018.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/0014_16430018.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1222.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1222.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/0074_28050017.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/0074_28050017.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1236.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1236.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/0076_28070019.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/0076_28070019.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1240.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1240.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/0008_19710033.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/0008_19710033.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1238.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1238.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/01170026.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/01170026.jpg" />
</a>
Pro lab scan (Noritsu)
</div>
</p>
<p>
The images above are all 35mm. The output files from FilmLab are about 3000x2000, or 6 megapixel.
They're not very sharp, and could probably be downsized to 2-4 megapixels without really
losing any information. I'm going to keep the 6-megapixel output size for 35mm film for now,
and hopefully increase the sharpness and decrease the noise (a lot of the lack of sharpness
is actually digital noise from the small image sensor in my iPhone causing a loss of detail).
</p>
<p>
Compared to the pro lab scans, you can see the reduced detail. The colors are also
quite different, and I think there are some good and bad points about FilmLab's
colors compared to the Noritsu scanner. FilmLab colors are a little more true-to-life,
in my opinion, although both show some color casts. That first photo was taken indoors
next to an open window with daylight coming in, and the wall in the background is gray.
The Noritsu has a significant yellow-green cast, whereas to my eye the FilmLab
image is a little magenta.
</p>
<p>
One positive thing FilmLab has going for it is that it captures the entire frame.
Looking at the side-by-side comparisons, you can see that the lab scans have
been cropped a bit. That makes FilmLab useful as a proofing tool: what you see
is what you get.
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1228.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1228.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/77580011.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/77580011.jpg" />
</a>
Pro lab scan (Unknown scanner)
</div>
</p>
<p>
All the color scans above were from film I sent into pro labs, and where I paid extra for what are typically
called "medium" resolution scans (6 megapixel, or 3000x2000). The next comparison
is a black and white image, and in this case I saved a few bucks by opting for
low-res (1500x1000) scans. Compared to the low-res scan, FilmLab is a little more
competitive. It's still noticeably softer, but I suspect the lab scan has had
quite a bit of sharpening applied to it. With some additional work, FilmLab
might be able to get similar results.
</p>
<h4>Epson v700 scans</h4>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1253.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1253.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/img075-frame1-edit-200.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/img075-frame1-edit-200.jpg" />
</a>
Epson v700 scan
</div>
</p>
<p>This first image is a half-frame 35mm black-and-white image (taken with a
Olympus Pen F). The smaller the negative, the less information Filmlab is able
to collect from a smartphone camera - it's limited by the minimum focal distance.
So this image is only 1500x1000, and it's starting to get noisy. The v700
fares better.
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1250.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1250.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/yale.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/yale.jpg" />
</a>
Epson v700 scan
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1251.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1251.jpg" />
</a>
FilmLab capture, 3171 x 2134.
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/Image137.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/Image137.jpg" />
</a>
Epson v700 scan
</div>
</p>
<p>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/IMG_1245.jpg">
<img src="/assets/images/examples/june2017/small/IMG_1245.jpg" />
</a>
FilmLab capture
</div>
<div class="demo-image">
<a href="/assets/images/examples/june2017/fullsize/img143.jpg">
<img class="demo" src="/assets/images/examples/june2017/small/img143.jpg" />
</a>
Epson v700 scan
</div>
<p>
In these last three images, you can see some real differences in color conversion
between FilmLab and the v700. In general, FilmLab's color is less saturated,
which sometimes is for the better and sometimes not. The last photo in particular
looks much better on the v700. In the first photo, on the other hand, the v700
color balance is way off, giving a strong blue cast.
</p>
<p>
So that's the state of FilmLab image quality today. While there's still a
lot of work to do, I'm happy to have made it to this point. One of my
goals when I started this project was to be able to make scans with my
phone that were good enough to post on Instagram, and for my purposes
I'd say FilmLab is pretty much there.
</p>
<p>
Next time: sample images captured with a digital camera and macro lens and
processed in FilmLab.
</p>
<p>&nbsp;</p>
</p></p></p></p>Hi everyone! The FilmLab Kickstarter campaign is in its final stretch: only 36 hours to go as I write this! If you're planning to use FilmLab, but haven't yet backed the project, I encourage you to do so today. You'll get early beta access several months before FilmLab is released to the public, and you'll also save some money on FilmLab Pro when it's released. Go check it out! I wanted to give everybody a little progress report on current FilmLab image quality, and show some full-size images and side-by side comparisons with dedicated scanners. So I scanned in a bunch of test images last night, using an iPhone 7 Plus running the current alpha build of FilmLab. Before we get to the images, a couple of disclaimers. First, this isn't a competition (and if it was, FilmLab would lose). Pro scanners are awesome tools, and FilmLab complements them rather than replacing them. The reason I'm showing side-by-side images is to provide a frame of reference for the FilmLab scans. You can see the difference in resolution between a pro scanner and a smartphone camera, also see where FilmLab's color conversion code is working well and where it needs to improve. Second, FilmLab is very much still a work in progress. There's lots more work to be done to increase sharpness, reduce noise, improve color balance, and offer manual controls over exposure and contrast. OK, disclaimers done - let's take a look! (You can click any image below to download the original, full-resolution version.) Pro lab scans FilmLab capture Pro lab scan (Noritsu)Kickstarter update: halfway through, 135% funded!2017-05-25T13:00:08-04:002017-05-25T13:00:08-04:00/filmlab/2017/05/25/kickstarter-update-halfway<p>
<a href="https://www.kickstarter.com/projects/175814937/filmlab-an-app-for-viewing-and-digitizing-analog-f">The FilmLab Kickstarter campaign</a>
runs until the end of June 7. That means that today is the halfway point: there were thirteen days in the campaign before today,
and there are thirteen days left.
</p>
<p>
So how's the campaign going? Amazingly great! We're already well past the original funding goal,
and so far more than 1,400 people have backed the project. And those numbers are
still going up every day. I'm thrilled to see such an enthusiastic response to FilmLab,
and I'm really excited to be able to work on it as my full-time project and get the app
ready for all the backers to start using.
</p>
<!--more-->
<p>
So far the iOS beta program (which now includes the ability to upgrade to
the release of FilmLab Pro for only $4.99 when version 1.0 is released) has been
the most popular reward. In fact, if it keeps up at the current pace I may
run out of iOS beta slots before the end of the campaign - they're currently
more than half gone!
</p>
<p>
This was my first time launching a project on Kickstarter, and I didn't realize just how much
communication it would involve. During the first week of the
campaign, probably 90% of my work time was spent answering questions, responding
to email, and having phone/video conversations and interviews. I've had a chance
to talk to so many smart and interesting people from the film photography
community, and I'm learning a lot. If you're one of those who reached out
to ask questions, offer to help, or just chat, thanks!
<p>
<p>
Over the last few days I've had a chance to get back to working on the FilmLab
code again, which felt good. One of the things that's been bugging me is that
some of the images coming out of FilmLab had definite color casts, so I worked
on fixing bugs in the image processing and automatic color balance. Things
are looking quite a bit better now. Here are a couple of before-and-afters.
<p>
Last week (blue cast):<br />
<img src="/assets/images/IMG_0568.jpg" width="600px" /><br />
This week:<br />
<img src="/assets/images/IMG_1148.jpg" width="600px" /><br />
</p>
<p>
Last week (blue cast):<br />
<img src="/assets/images/IMG_0563.jpg" width="400px" /><br />
This week:<br />
<img src="/assets/images/IMG_1150.jpg" width="400px" /><br />
</p>
<p>
If you look closely, you might also notice that the images from this week
are looking a little sharper. There's still quite a lot of room for improvement
on that front, so next week my focus is going to be on improving sharpness
and resolution. Once I make some progress on that, I'll post some full-size
examples, and also show some comparisons between FilmLab and other
image capturing methods like lab scanners and flatbeds.
<p>
<p>
I can't say it enough: Thanks for supporting my work on this project! I'm
having a lot of fun working on it, and it's only possible because of
all of you who are backing the Kickstarter campaign and helping spread
the word about FilmLab. I really appreciate it! And I'm looking forward to
having a great second half of the Kickstarter campaign. Thirteen days to go!
</p>
</p></p></p></p></p>The FilmLab Kickstarter campaign runs until the end of June 7. That means that today is the halfway point: there were thirteen days in the campaign before today, and there are thirteen days left. So how's the campaign going? Amazingly great! We're already well past the original funding goal, and so far more than 1,400 people have backed the project. And those numbers are still going up every day. I'm thrilled to see such an enthusiastic response to FilmLab, and I'm really excited to be able to work on it as my full-time project and get the app ready for all the backers to start using.The FilmLab Kickstarter campaign is live!2017-05-11T13:00:08-04:002017-05-11T13:00:08-04:00/filmlab/2017/05/11/kickstarter-is-live<p>
<a href="https://www.kickstarter.com/projects/175814937/filmlab-an-app-for-viewing-and-digitizing-analog-f"><img style="max-width: 400px" src="/assets/images/kickstarter-logo-light.png" /></a>
</p>
<p>
It's happening! <a href="https://www.kickstarter.com/projects/175814937/filmlab-an-app-for-viewing-and-digitizing-analog-f">The FilmLab Kickstarter campaign</a> is up and running.
If you'd like to help me get FilmLab finished and released into the
world, please support the campaign and help spread the word!
</p>It's happening! The FilmLab Kickstarter campaign is up and running. If you'd like to help me get FilmLab finished and released into the world, please support the campaign and help spread the word!FilmLab Walkthrough Video Now on YouTube2017-04-06T21:54:08-04:002017-04-06T21:54:08-04:00/filmlab/2017/04/07/filmlab-walkthrough-video<p>Hey film shooters!</p>
<p>The basic foundational parts of of FilmLab have progressed to the point
where I was able to spend some time this week working on the user interface,
which was a lot of fun. Now it’s starting to feel like a real app!</p>
<p>To show off the current state of things, I put together a YouTube video
with a walkthrough of FilmLab in action. I also got in front of the camera
(always nerve-racking!) to introduce myself and explain where the idea for
FilmLab came from and where the project is going:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/BNriOTIjb7g" frameborder="0" allowfullscreen=""></iframe>
<p>As mentioned toward the end of the video, I’m putting together a Kickstarter
for FilmLab! Full details to follow in the coming days.</p>Hey film shooters!FilmLab Build #32017-03-10T17:34:40-05:002017-03-10T17:34:40-05:00/filmlab/2017/03/10/filmlab-build-3<p>Here’s a demo of the latest build of FilmLab, the film scanning app I’ve been working on. Check out the frame detection goodness! It can tell the difference between color and black and white film, and it gives you a real time preview of all the frames it found, with individual color correction applied to each frame. Still a little glitchy, but it’s getting there!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/IYeMjJyaz48" frameborder="0" allowfullscreen=""></iframe>
<!--more-->Here’s a demo of the latest build of FilmLab, the film scanning app I’ve been working on. Check out the frame detection goodness! It can tell the difference between color and black and white film, and it gives you a real time preview of all the frames it found, with individual color correction applied to each frame. Still a little glitchy, but it’s getting there!FilmLab Build #22017-02-22T23:48:55-05:002017-02-22T23:48:55-05:00/filmlab/2017/02/23/filmlab-build-2<p>Over the past few days I’ve made some progress on FilmLab. Now you get a live preview of the negative-to-positive conversion (instead of waiting until after you pick a frame to scan) which is really nice for quickly viewing a sheet of negs. And I added preliminary support for color negatives, as you can see in this video. I’m still working on improving the code that automatically detects frame boundaries, but it’s getting better—here it’s able to correctly capture the individual 35mm frame I tapped.</p>
<p>Technically, this is a big step forward. In my first demo, I was showing the
video feed from the iOS camera directly, and drawing red lines on top of it
to show the frames. Now I’m fully processing the video in real time and
generating new video frames as output from the FilmLab engine. And it works!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/kTCoYJV0QA4" frameborder="0" allowfullscreen=""></iframe>Over the past few days I’ve made some progress on FilmLab. Now you get a live preview of the negative-to-positive conversion (instead of waiting until after you pick a frame to scan) which is really nice for quickly viewing a sheet of negs. And I added preliminary support for color negatives, as you can see in this video. I’m still working on improving the code that automatically detects frame boundaries, but it’s getting better—here it’s able to correctly capture the individual 35mm frame I tapped.FilmLab Build #12017-02-09T18:14:08-05:002017-02-09T18:14:08-05:00/filmlab/2017/02/09/filmlab-build-1<p>Hello world!</p>
<p>I’ve started working on an app for scanning film, which I’m calling FilmLab. There’s a lot of work left to do, but I’m really excited about my progress so far. Modern smartphones have great cameras and lots of processing power, and I think it will be possible to make an app that’s a lot faster and more fun than using a dedicated film scanner, while still producing good quality results.</p>
<p>In this prototype demo, you can see FilmLab detecting film frames as I move my phone over the light box. Then when I tap the screen, it takes a full-res picture, pulls out the selected frame, and converts it from negative to positive.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/77F_tyFS3-Y" frameborder="0" allowfullscreen=""></iframe>Hello world!