logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·31.10.26
← Back to news

Using the railway network as a flatbed scanner

Original article
philo.gay|284 points|49 comments|by otherayden|Aug 18, 2026

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.

Container Port Image 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

Feature1990s Scanning BacksModern Large SensorsPhilo's "Railway" Method
MechanismMoving sensor over static subjectStatic sensorMoving sensor over static subject
CostVery High (even used)HighModerate (via eBay)
ResolutionExtremely HighHighVariable/Ultra-Wide
SetupMounted to cameraIntegratedMounted 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?

Large Format Camera 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 yyy-axis, the velocity vvv should be the integral of acceleration aaa: Position=∫(∫a dt)dt\text{Position} = \int \left( \int a \, dt \right) dtPosition=∫(∫adt)dt

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: 1×20481 \times 20481×2048 pixels.
  • Readout Speed: Nearly 19,00019,00019,000 lines per second.
  • Retail Price: \approx \700$ USD.
  • Acquisition Cost: 1/10th1/10\text{th}1/10th of retail (via eBay).

Because the exposure time is so short (minimum 1/100s1/100\text{s}1/100s), the system requires immense amounts of light. This limits my shooting to daylight hours; dark tunnels and dim stations are effectively off-limits.