Processing and Archiving 35mm Film

Call me old-school, but I just have an SLR without the D. I roll, shoot, and develop my own 35mm film. Mostly, I process color C-41 negatives and E-6 slide film, but I am known to shoot black-and-white from time to time. On this page, I detail how I process my film, from opening the package through digitization.


35mm film is what I shoot because it is convenient, and camera bodies are cheap. My favorite films are Kodak Ektachrome, Portra 160, and good ‘ol Gold 400. I also like Arista 400 because it comes 100-feet per roll, and saves me lots of money. I roll that using re-usable canisters. Freestyle Photo is my favorite place for photographic supplies because they have reasonable prices, ship quickly, and usually have my favorite consumables in-stock. I also prefer not to order from Amazon for ideological reasons.


I won’t go into any details about composition since that is art and this article is technical. However, I do record information about each frame shot. Mostly, I use a roll entirely through, but sometimes I switch them out mid-way. I write the date about the frames right on the canister with permanent marker, like so:

Roll 1
1→10 2019-08-12
11→24 2019-08-13
25 2019-08-15
26→36 2019-08-16

When I am done with a roll, I mark a large X on the canister’s lid, and throw it into a plastic zip bag at the bottom of my fridge.


When that bag has 12 rolls of C-41 or 6 rolls of E-6 film, I begin processing using fresh chemicals from Freestyle. I have always followed the included instructions, and have great results. I use an electronic timer for measuring development time, but I also keep a close eye on my watch because sometimes the timer fails, like when it accidentally gets wet.

After developing and fixing the film, I use a freshly-mixed stabilizer of my own recipe. Formalin is getting hard to find, but there are still online suppliers and a 1 L bottle will likely last most my lifetime.

Stabilizer Recipe
980 mL distilled water
10 mL formalin solution (66% formaldehyde and 33% methane)
10mL Kodak PhotoFlo

After stabilizing, I hang the film to dry in a humid bathroom closet. During the stop bath, after fixing, is a good time to crank up the shower to get it steamy. The moisture will condense on particles in the air, dragging them to the floor. The humidity is also good to prevent film curling for slide films (but not too humid).

Scanning and Processing

After the film has dried, I cut it into strips 6-frames long. This length matches my archival sleeves (6 frames by 7 strips per sleeve), in which I’ve organized my entire film library. These fit into an oversize, dust-preventing binder and are sorted chronologically. On each sleeve, I rewrite the information from the canister: a description of the roll, and mark the dates of each frame.


I use a Plustek OptiFilm 8200ai and have had good results. Unfortunately, it does not work with Free software, so it is connected to a Mac Mini. I use a remote desktop (a VNC server is included with macOS) to access this machine from my workstation.

Over this scanner, I drape a plastic sheet to prevent dust from settling on the negatives. I am unhappy tthat this scanner ingests film horizontally-aligned on the X-axis, and wish it used a vertical-alignment on the Z-axis like Nikon scanners.

To blow dust from the negatives, I use a lovely little Hitachi air compressor which is very quiet and sits beneath my workbench. Over the intake port is an air filter, and inline with the output hose is a water trap. These ensure the air blowing over the film is clean. A pistol-grip end makes blowing them easy, and they are quickly transferred into the scanner.


I used a purchased copy of VueScan (VS), which works well with this scanner. While there is a Linux version of VS available, that version does not support this scanner. One day, I have plans to sniff the USB traffic while performing a capture, and re-implement a driver for SANE. Until then, I use VS on my Mac Mini over VNC, and transfer the scans to my primary workstation over the network.

Using VS, I scan each frame at the following settings. I do not use any color correction, and make certain that my output color profile matches the input profile.

Scan Settings
3600 DPI
16-bits per channel, 4-channel RGBI
2 exposures per frame
Input, output color profile: sRGB
Maximum crop border
Output as VueScan uncompressed raw files (TIF)

The first (or zeroth) frame is a capture of the roll’s leader, which I use as a calibration frame. This is a partially-exposed frame: half of it was exposed, and the other half wasn’t. Later, VS can ingest this to get a color profile of the film, and accurately negate the rest of the roll’s images.

The rest of the frames are scanned, and the strips meticulously cataloged in the archival binder.

After all are scanned, I make an archival copy of this directory as a compressed BZIP2 file. This has about-the-same compression ratio as if each frame were individually output as losslessly-compressed, but is easier to work with and makes me less-afraid of one bit error screwing it all up later.

To process these captures, I re-open the leader-half.tif file, select the unexposed area, and use VS’s film profiling tool. Then, I import the rest of the frames in-batch, processing them as Film Negative type, and re-output them to a ‘tif’ directory with color correction and dust-removal (flecks are captured on the infrared channel) as 48-bit RGB TIFs.

These TIFs are basically ready-to-view, but are not easy to share, using about 150 MB each. So, I do further processing with ImageMagick to convert them to 25%-resolution 8-bit compressed JPGs, which occupy about 500 kB each. That is rapidly completed with GNU Parallel, and can be performed like so:

find tif/ -name “*.tif” | parallel –eta convert {} -resize 25% -quality 8 jpg/{/.}.jpg

The folder heirarchy I use for each roll is organized as-follows:

JPGs are re-named to include the roll identifier (starting date) so that it is never a wonder where a file came from.

Go home