Using the railway network as a flatbed scanner
Transforming the Railway into a Giant Flatbed Scanner
By Philo | Published August 17th, 2026
For several months, I have been experimenting with an industrial linear scanning camera to capture ultra-wide panoramic photographs from the vantage point of ferries and trains. While the technical hurdles were significant, the visual output justifies the effort.
Example: A grayscale image captured on the San Francisco to Oakland ferry (Dimensions: 56,894 x 2,048 pixels). Scroll to zoom and drag to navigate.
I recently detailed this project during a presentation at EMFcamp 2026. You can view the recording or continue reading for a deep dive into the process.
🛠️ How It Works: The Concept
"What am I even looking at?"
To understand the imagery, you have to understand the capture method. Instead of a traditional rectangular sensor, the camera captures a single vertical slice of the world at a time.
By capturing these thin grayscale strips rapidly and stitching them side-by-side, a cohesive, massive image is formed. While the theory is simple, achieving a high-quality result is easy incredibly difficult.
📚 Background and Inspiration
In the 1990s, digital sensors couldn't compete with the resolution of large-format film. To bridge this gap, engineers created digital scanning backs. These devices didn't use a massive pixel grid; instead, they moved a small line of pixels (one for grayscale, three for RGB) across the film plane.
Comparison of Scanning Approaches
| Feature | 1990s Scanning Backs | Modern Large Sensors | Philo's "Railway" Method |
|---|---|---|---|
| Mechanism | Moving sensor over static subject | Static sensor | Moving sensor over static subject |
| Cost | Very High (even used) | High | Moderate (via eBay) |
| Resolution | Extremely High | High | Variable/Ultra-Wide |
| Setup | Mounted to camera | Integrated | Mounted to vehicle |
I had long considered building a scanning back for my own large-format camera, but the mounting logistics were too daunting. Furthermore, vintage units on eBay are prohibitively expensive and require ancient legacy computing environments to operate.
While watching a build by Gigawipf, a realization hit me: Why move the sensor across the subject when I can move the entire camera past the subject?
Loading film in Vermont, because I'm allergic averse to conventional photography.
I researched similar attempts—including the Scannoramic project, experiments by John Hikerbiker, Daniel Lawrence Lu's reversed camera, and Martin Liebscher's film work—but I felt there was room for improvement, specifically regarding motion speed compensation.
🛋️ Phase 1: "Slit Scanning My Sofa"
My first attempt was a late-night experiment involving my living room furniture. I placed my phone on an office chair and pushed it slowly across the room while recording video.
I wrote some "slapdash" code to extract the leftmost column of every frame:
# Hypothetical 'slapdash' extraction logic
for frame in video_stream:
slit = frame[:, 0] # Grab the leftmost column
final_image.append(slit)
Note: My code comments were filled with lyrics from The Beths' "Future Me Hates Me", which proved prophetic when I later had to write a post-processor for the actual camera.
The Result: The image was a distorted, squished version of my sofa. Even after doubling the columns to fix the aspect ratio, the image remained a mess because my pushing speed was inconsistent.
🚆 Phase 2: The Train Trials
I realized that speed measurement was the critical variable. I attempted to use a phone's accelerometer to track velocity.
- Tape phone to seat for accelerometer data.
- Hold second phone to window at 60 fps.
- Achieve clean velocity data.
The data was a disaster. If we assume the train's movement is along the -axis, the velocity should be the integral of acceleration :
However, the noise was so extreme that the data suggested the train was moving backward at the end of the trip.
During EMFcamp, I met Tim Jacobs (mitxela), who was also presenting on slit-scan cameras. While we started from the same place, he took a more artistic route, creating trippy animations by shifting the slit position within existing videos.
📷 The Hardware: Industrial Linear Cameras
To get the necessary resolution and speed, I upgraded to a Basler ruL2048-19gm. This camera is designed for industrial conveyor belts.
Technical Specifications:
- Sensor Size: pixels.
- Readout Speed: Nearly lines per second.
- Retail Price: \approx \700$ USD.
- Acquisition Cost: of retail (via eBay).
Because the exposure time is so short (minimum ), the system requires immense amounts of light. This limits my shooting to daylight hours; dark tunnels and dim stations are effectively off-limits.