DEV Community

Antoine Mérino
Antoine Mérino

Posted on • Originally published at merinorus.com on

Identifying the manufacturer of your 35mm (and APS) films

In a previous article, I introduced how I was digitizing my 35mm film archive with my digital camera.

By digitizing the pictures, I wanted to save as much information as possible, including the film manufacturer and type, because this information impacts color post-processing.

Depending on whether you own the cassette or the film roll, and if they were made after the 1980s, you will most likely find enough information thanks to the DX codes.

A bit of history about the DX encoding system

The DX (Digital Index) encoding system was introduced by Kodak in the 1980s to simplify 35 mm film handling, both for consumers and photofinishers.

Three types of DX codes are used:

1. DX barcode

On the left cassette, the DX CAS code. On the right one, the DX barcode.

The DX barcode is printed directly on the film cassette. It is scanned by film-processing machines and contains 6 digits:

  • 1: Usually 0, but can be changed by the manufacturer to sell under another brand.
  • 2 to 5: Film manufacturer and type, which indirectly determines the developing process.
  • 6: Number of exposures (i.e., how many pictures a roll can contain).

Since the digits are directly written under the barcode, this is the easiest way to retrieve the manufacturer and the film type.

In the picture above, the DX barcode is 412503. With this 6-digit number, you can look for a match on the Big Film Database.

Note: this database might be shut down in the future, but the maintainer has published the source code. I am maintaining a modified version with additional features, though it is still experimental.

2. DX CAS code on the film's cassette

The DX CAS code is also on the film cassette, but it is used by the camera. Instead of a barcode, it consists of 12 gray (metallic, conductive) or black (insulated) squares:

  • 1 & 7: Reference contacts, always metallic.
  • 2 to 6: Emulsion sensitivity (ISO).
  • 8 to 10: Numbers of exposures.
  • 11 & 12: Exposure latitude.

The camera can automatically detect the film speed and adjust exposure. To make an analogy with modern digital cameras, it is similar to the aperture mode (A), but with fixed ISO: you set the aperture, ISO is fixed, and the camera adjusts the exposure time accordingly.

3. DX film edge barcode

If your film is already developed, there is a good chance you no longer have the cassette. In this case, you have to retrieve the information from the film roll itself. You might find the label in a human-readable format, but often, you will have to rely on the DX edge barcode.

A 35mm roll, with the DX film edge barcode

Like the cassette's barcode, it contains the film manufacturer and type (digits 2 to 5 of the cassette's DX barcode). This helps to automate the photofinishing process. For manually operated machines, a human-readable label might be written to help the operator, but it doesn't always give us the commercial name of the film.

In the 1990s, this barcode was extended with a "half-frame" number to indicate the current frame: 1, 1A, 2, 2A, 3, 3A... They are two barcodes per frame, which ensures that at least one complete barcode remains when the film roll is cut at the end of a frame.

A 35mm roll from 1998. These wider DX edge barcodes

I'm pretty sure some specialized machine or scanners read this code for color processing, but I haven't found any application or library that can read this kind of barcode. Probably because very few people need this.

In the meantime, I'll explain how to interpret this barcode manually.

DX edge barcode explained

This Kodak patent helped me understand how to read a DX edge barcode:

Illustration from [Kodak patent n°US4965628A](https://patents.google.com/patent/US4965628A/en), describing the fields of a DX edge film barcode.

There are two main parts:

  • The top part is the clock signal. It's a constant, predictable pattern that helps the machine determine where the signal starts and ends.
  • The bottom part is the data signal. It contains the actual data we need to decode.

The barcode is binary: a black bar is 1, and a white (or empty) bar is 0. Let's detail each part:

DX edge barcode fields.

DXN1 (red) Space DXN2 (orange) Frame number (green) Half-frame flag (cyan) Space Parity bit (rose)
1110000 0 0001 001010 1 0 1
  • DX number part 1, i.e. Product code number (7 bits): 0b1110000 = 112
  • Blank space (1 bit)
  • DX number part 2, i.e. Generation code (4 bits): 0b0001 = 1
  • Frame number (6 bits): 0b001010 = 6
  • Half frame flag (1 bit): 0b1 = yes (this is the second half of the frame)
  • Blank space (1 bit)
  • Parity bit (1 bit): 0b1 = 1, which means the sum of the previous bits should be odd (0 is even, 1 is odd), which is the case.

Notes:

  • The frame number was added in 1990, so older negatives have a shorter barcode without this information.
  • If you use a half-frame camera (i.e. two 18x24 mm frames per 24x36 mm roll frame), multiply the frame number by two and add the half-frame flag. For example, frames 0, 0A, 1, 1A... -> half-frames 0, 1, 2, 3...
  • When reading the barcode on a real negative, you must read on the shiny side, not the matte side. Like the machine, you can use the clock signal: the start pattern is 5 bits long, while the end pattern is 3 bits long.

We now have enough information to query our film database, which tells us this film (112-1) is probably a Kodak Vericolor III, Type S. Very cool, isn't it?

If you have a lot of negatives to scan, this can be a daunting and error-prone task. I would love to have an application that automates this process. I've been working on adding support in ZXing C++, an open-source library to implement reading DX film edge barcodes. You can check out the source code, but the updated library has not been released yet. Stay tuned!

Top comments (0)