This article talks about using negative2positive script to automate the conversion of raw Kodak Portra 400 negatives to positive TIFFs, ready for post-processing using Darktable. The sample above is BEFORE and further post-processing in Darktable…just a direct conversion from negative to positive. Not bad? Read on to learn how…

Main Body

I write to you as a frustrated and bewildered photographer who only recently attempted home colour development of Kodak Portra 400 film. Like many of us, I have developed and scanned black and white for years, but I always sent my Kodak Portra 400 to my preferred lab for development and scanning. They do a great job of developing it and, crucially for this article, scanning it.

Having successfully developed the 10 roles of medium format Kodak Portra 400 using the quite splendid Tetenal C-41 kit, and after leaving my negatives to dry, I hurried up to my Epson V550 to scan them using my preferred tool of choice, VueScan, with the intention of then using DarkTable, as usual, to export final JPEGs. I was immediately met by failure. The Vuescan presets for colour film looked awful and seem out of date. So I switched it to generic colour negative and set colour balance etc to none. Repeated a scan with no adjustments for levels or colour but it still looked awful. No matter what I did, it looked awful. I thought I must be doing something wrong because Vuescan is awesome.

So I attempted a standard negative scan instead of a positive conversion to try and covert the raw negative using Darktable and the “invert” module that comes with it, but even though I attempted to get the colour of the film base with it I still had the same issue – result looked awful.

So then I tried RawTherapee and it’s “film simulation” option, only to discover I needed some some other files and so on, which I went and found and downloaded but that didn’t work either. I will have done something wrong most likely, and didn’t spend time reading up on it really so my bad. I’m not even sure I was doing it right but either way, I got the feeling is was not going to be any easier than using Darktable. All that “RGB switching” and reversing and profile switching looked like too much bother. UPDATE : v5.7 includes a “film negative” tool in the RAW tab, but it seems it only applies to digital images captured of a negative uisng a DSLR, so still not suitable for me as I don’t have a DSLR.

I then Googled the issue. Found loads of people have the same problem; it’s not so much Vuescan but the diffiuclty with just scanning Kodak Portra and that’s why thousands of people are using Negative Lab Pro that is a plugin for LightRoom. Well I don’t have Lightroom, and I don’t use Windows anyway even if I wanted to use Lightroom. So as good as NLP is reported to be, I was convinced that there must be an easier way than converting my operating system to Windows (or virtualising it and then trying to get my scanner to talk to the virtual machine…there’s a night work right there!) and buying in to Adobe Creative Cloud and THEN buying NLP for an extra $100 on top! I mean come on…it’s 2019! There must be an easier and more affordable way within Linux to simply get a decent positive from a Kodak Portra negative? Well, it turns out, my pedigree chums, that of course, there is, though it is still not perfect. But it is a good start.

I read several articles and typed various Google search strings. I found this, which subsequently led me to what I thought was going to be the answer which was NegFix8. Tried that, and hoped for the best. Still ended up with awful output. Then I kept reading the first article by ‘Old Good Light’, and scrolled down, and down, and down. Eventually I noticed subtle mention of something developed by Fred Weinhaus called “Negative2Positive“. Negative2Positive is largely your answer to converting Kodak Portra 400 negatives to fine digital positives with one easy syntax in Linux, without needing Adobe Lightroom and the Negative Lab Pro plugin (I do, for the record, have a lot of respect for the NLP – I see how it has helped many photographers and their hybrid workflows and I suspect a lot of hard work has gone into creating it…having gone through this, I’d probably consider buying it myself, except I don’t use Lightroom):

> negative2positives YourTiffFile.tiff YourOutputFile.tiff

That will take your input TIFF and create an output TIFF, nicely converted and seemingly fairly accurate to how I remember seeing most of the scenes. There is some variance of course, and some negatives converted better than others. There’s loads of additional switches if you want to try them. But I found just by default many came out OK. The trick is to ensure that when you scan the negative with VueScan, ensure the source is “File”, so that it captures a raw negative scan (instead of the converted Positive which you get when you choose “Colour Negative”), and apply no other settings like sharpen, no restore colours or fading, no colour balance. And when you select your scan area, MAKE SURE you include the orange film mask around the edge of your image; at least 20 pixels worth or more if you can. This way, negative2positive knows the colour base of your film, and from there, it just seems to work its magic, which, amusingly, is a complex and varied appliance of the Imagemagick tool via scripting processes, which you can actually adjust if you know where to look or need to do so. Once it has finished, then you can pull all your new tiffs to DarkTable and edit as usual from there. This isn’t an article about “How to scan with Vuescan” though, so be sure to take some time to read up on that if you are unfamiliar. I have the pro licensed version, and basically I just use the defaults except I ensure the output is uncompressed TIFF, I use 48-bit RGB, I scan at 1,600 dpi upwards, I apply as little auto-corrections as possible, and use Media type as “Image” and Mode as “Transparancy” for this technique.

So, having got all your scans done, what if you have dozens, or hundreds, or thousands of raw TIFF negatives scanned, and you want to convert them all easily to positives using negative2postive? Well I’ve written this basic script to help automate the process for you just using the defaults. Before you can run it, you will need to have ImageMagick installed, by the way:

> sudo apt-get install imagemagick

Once that is installed (if it is not already on your system), copy and paste the text below to a text file called whatever you like as long as it has the extension ‘sh’, e.g. Then make sure it has executable permissions in the terminal by using chmod :

The following assumes all files are in the same folder so copy and paste and save as (or whatever you want to call it) :

for file in *.tif; do "./negative2positive" "$file" "${file/%tif/tif}"; done

Save the file, then make it executable as follows :

> chmod +x

If you have downloaded the negative2positive script to the same folder that is holding all your TIFF files and your file, then just ensure the file contains the following text (noting your file extension might be ‘TIF’ or ‘TIFF’ – substitute as appropriate; vuescan creates files with ‘.tif’.) and if your negative2postive file is stored somewhere else, edit the path to it accordingly.

Then in the terminal, navigate to where all your files and the negative2positives script, along with your file, and just execute it as follows :


and all your TIFF files will be converted from negative TIFF’s to positive TIFF’s by negative2positive default settings (maybe do a backup of them all first, so you have the original unconverted scans to return to, because this will actually convert the negative TIFF to a positive TIFF). Then import them all into Darktable, do your horizontal flipping as required, crop out the film base border if you don’t want or need it, and any further adjustments including potentially further white balance changes, then select all and export as JPEG. Done.

However, you might find that some are not quite to your taste, and this is where you might want to tweak the settings. The problem I have is that I home developed all 10 rolls, and so the base colour varies slightly between one roll and the next. I did some experiments with colour balance and such and I found the following worked well for me overall, though with a smaller set I’d tweak them per image probably:

./negative2positive -c green -cb both -a s

-c is the colour. It defaults to yellow, but you can try blue and green. I found green looked a bit nicer.

-cb is the colour balance. It defaults to auto but the other options are : level, gray, white, both, or none. I tried it with “both” and slightly preferred the look.

-a is the autostretch of the image channels. It defaults to seperate but you can try “none” (n) and “together” (t)

Putting the arguments into a script is a little trickier and needs variables and such, but you can just as easily paste the following direct into the terminal, and change any of the arguments as presented :

for file in *.tif; do ./negative2positive -c green -cb both -a s "$file" "${file/%tif/tif}"; done

Any tips you give me? Use the comments below. Maybe together we can build a great workflow for home scanning of Kodak Portra 400, and other C-41 negative emulsions. Perhaps we can find the sweet spot for negative2positive settings for Kodak Portra 400…our very own NLP! The results I have got for my batch were not perfect, but they are the best start I could get, for further tweaking in Darktable.

UPDATE : I sent one of the ten rolls to my usual professional lab, and asked them to use their pro scanning setup to see how their results differed from mine. Suffice to say, it was considerably different (theirs was better!). I attach some samples below. The differences are obvious. So, whilst on the one hand it is possible to achieve satisfactory results in the way I describe above, and no doubt much better than my results with some fine detail tweaking, I have learned important lesson. The lesson is this : developing colour at home is certainly possible, and not too difficult thanks to the Tetenal C-41 kit and bucket of warm water. But scanning it requires a) a good scanner (I think my V550 is enough but a v700 or v800 is better) and b) the finesse of tools like Lightroom and that NLP etc. Both of which are beyond my reach. So from now on, I am going to stick to black and white only at home. In future, all my colour work is going to The Darkroom, as I’ve always done. I wish, with hindsight, I’d just sent al ten rolls to them in the first place. It would have cost me about £130 to have it developed and scanned, and it would not have used any of my time. Doing it myself cost me £35 for the kit, and about 5 evenings of developing and scanning. For the £90 saving, and the lack of quality scans, I’d have rather paid the extra £90. You live, and you learn.