Build a Raspberry Pi Film and Slide Digitizer
- Raspberry Pi HQ Camera Module
- C-Mount Macro Lens (for 1:1 or close to 1:1 reproduction of 35mm film)
- Raspberry Pi 5 (8GB recommended for smoother image review)
- Slim LED Light Panel (for even backlighting of the film)
- 35mm Negative and Slide Film Holder / Carrier
- NEMA 17 Stepper Motor (for automated frame advance)
- A4988 Stepper Driver Module
- Copy Stand or Camera Column (for consistent height and alignment)
- PLA Filament (for 3D-printed holder brackets and the film carriage)
- 5V 3A USB-C Power Supply for the Raspberry Pi 5
This site's darkroom timer project covers controlling exposure during analog printing, which assumes you're printing onto paper in a wet darkroom. This is the project for the much more common modern situation: you have boxes of old negatives or slides and you want them digitized, without paying a lab or buying a dedicated film scanner that costs more than the Pi setup described here. A Raspberry Pi with the HQ Camera module, a macro lens, a simple LED light table, and a stepper-driven film advance turns into a surprisingly capable batch digitizer.
How It Works
Rather than scanning line-by-line like a flatbed or dedicated film scanner, this is a camera-based "DSLR scanning" setup: a backlit film holder sits under a camera pointed straight down (or a camera on a copy stand pointed at a vertical holder), the light table provides even, diffused illumination through the film, and the camera captures each frame as a normal photo. A positive/negative inversion and color correction pass happens afterward in software. This is fast — capturing a frame takes a fraction of a second, versus the much slower pass of a true scanning sensor — which is what makes it practical for digitizing a large backlog of film rather than just a few treasured slides.
Parts List
- Raspberry Pi HQ Camera Module
- C-Mount Macro Lens (for 1:1 or close to 1:1 reproduction of 35mm film)
- Raspberry Pi 5 (8GB recommended for smoother image review)
- Slim LED Light Panel (for even backlighting of the film)
- 35mm Negative and Slide Film Holder / Carrier
- NEMA 17 Stepper Motor (for automated frame advance)
- A4988 Stepper Driver Module
- Copy Stand or Camera Column (for consistent height and alignment)
- PLA Filament (for 3D-printed holder brackets and the film carriage)
- 5V 3A USB-C Power Supply for the Raspberry Pi 5
Build Steps
- Build or print the frame. A 3D-printed bracket set holds the camera rigidly above the light panel at a fixed distance set by your macro lens's reproduction ratio, with the film carrier sitting directly on the light panel between them. Rigidity matters more than almost anything else here — any flex between captures throws off focus and framing consistency across a whole roll.
- Mount the stepper to the film carrier. For 35mm strip film, a small stepper-driven pinch roller or sprocket wheel advances the strip by one frame between shots; for mounted slides, a simpler stepper-driven slide tray advances a cassette-style magazine instead. Either way, the goal is a repeatable, consistent advance distance so each shot lands centered on the next frame.
- Wire the stepper driver to the Pi's GPIO following the same step/direction wiring pattern used throughout this site's stepper motor guides, and write a simple Python script (using gpiozero or lgpio, per this site's GPIO library comparison) that steps the motor a fixed number of steps between captures.
- Set up libcamera still capture at full resolution with manual exposure and white balance locked (not auto — you want every frame shot under identical conditions so your batch color-correction pass behaves consistently across the whole roll) and a short script that triggers a capture, waits, advances the film, and repeats.
- Dial in focus and framing once with a test strip before committing to a full roll — focus is fixed by the rigid mechanical setup, not refocused per frame, so getting it right once at the start saves you from reshooting later.
Post-Processing
Captured frames need inversion (for negatives) and a color-balance pass, since color negative film has an orange base that has to be corrected out, not just inverted directly. Free tools like Negative Lab Pro (a Lightroom plugin) or open-source alternatives handle this well; a simple approach for black-and-white negatives is a straight tonal inversion with a contrast curve adjustment. Batch-process the whole folder of captures rather than hand-tuning each frame, and spot-correct only the handful that need it.
Safety
This is a low-hazard build compared to most projects on this site — the main things worth noting are standard stepper-motor-driver precautions (double-check wiring polarity before powering on, since a miswired stepper driver can overheat), and general care with old film stock: very old nitrate-based film (pre-1950s movie film, not typical still-photo negatives) is flammable and should be handled by specialists, not digitized on a DIY rig.
Once built, this rig processes a roll of 35mm film in a few minutes rather than the slow single-frame pass of a proper flatbed scanner, making it realistic to work through a genuinely large box of old family negatives in an afternoon instead of a month.