Holding the Spectrum Up to the Window
My hobby is collecting hobbies, and hobby number five is RF Waterfall Lithophanes. The concept arrived while watching static scroll down an SDR waterfall at 2 AM: what if I could freeze that moment, carve it into plastic, and hold it up to a window? This is a technical walkthrough of exactly that — turning radio frequency spectrograms into backlit 3D-printed reliefs.
What a Lithophane Actually Is
The lithophane technique predates photography. Baron Paul de Bourgoing patented it in France in 1827 — thin porcelain carved to varying thicknesses, so backlighting reveals an image through differential light transmission. Thin areas glow bright; thick areas stay dark. The firing failure rate for porcelain was 60% because the thinnest regions cracked. We have better materials now, but the principle is identical: encode brightness as thickness.
For RF waterfalls, the source image is a spectrogram — frequency on one axis, time on the other, signal strength as pixel intensity. The waterfall I captured in Generative Soundscape Composition was ephemeral, just data feeding a patch. A lithophane makes it permanent.
The Pipeline
SDR capture → PNG export → inversion → height map → STL → print → backlight
Each stage has a specific failure mode. Here’s the detail:
1. Capture the Waterfall
Use rtl_power or export directly from GQRX/SDR++. The critical point: export raw dB values, not the prettified colour display. Rainbow and fire colour maps look dramatic but discard amplitude relationships. Export greyscale or raw CSV.
rtl_power -f 144M:148M:5k -g 40 -i 1 -e 1h waterfall.csv
This captures the 2-metre ham band for one hour at 5 kHz resolution, one row per second.
2. Convert to a Greyscale PNG
If you have CSV data, a small Python script maps it to pixels:
import numpy as np
from PIL import Image
data = np.loadtxt('waterfall.csv', delimiter=',', usecols=range(6, -1))
data = (data - data.min()) / (data.max() - data.min()) * 255
Image.fromarray(data.astype(np.uint8)).save('waterfall.png')
3. Invert the Image
This is the most common beginner mistake. In SDR waterfalls, bright pixels mean strong signals. In lithophanes, thin areas transmit light. If you skip inversion, your signals appear as dark bands instead of glowing ridges.
inverted = 255 - data
4. Generate the STL
Tools like 3dp.rocks/lithophane or ItsLitho accept a greyscale image and produce an STL where pixel brightness maps to surface height. Key settings:
- Maximum thickness: 3.0–3.2 mm (blocks light completely)
- Minimum thickness: 0.8 mm (transmits light without breaking)
- Positive or negative image: confirm this matches your inversion step
The height map math is simple: each pixel’s grey value (0–255) maps linearly to a Z height between min and max thickness.
5. Print Orientation
Print the lithophane vertically, standing on edge. Layer lines running parallel to the viewing surface create visible striations that destroy the image. Vertical orientation stacks layers perpendicular to the light path, producing smooth gradients.
Settings that matter:
- Layer height: 0.1 mm or finer
- Infill: 100% (no gaps to scatter light)
- Material: white or natural PLA transmits cleanly; coloured filaments tint the result
- Speed: slow (40 mm/s or less) to avoid vibration artefacts
6. Backlight It
Hold the print against a window, or mount it in a light box with diffused LEDs. The RF patterns emerge: FM broadcast carriers as steady vertical lines, pager bursts as dotted streaks, repeater activity as rhythmic pulses. The 2-metre band makes particularly beautiful patterns because of the mix of FM voice, packet data, and APRS bursts.
Why This Works
A spectrogram is already a height map in disguise — amplitude is the Z axis, just rendered as colour. The conversion to physical depth is a one-to-one mapping. What surprised me was the texture: the grain of local RF activity has a rhythm that only becomes visible when you freeze it in plastic. The steady carrier of a weather station. The staccato of ADS-B at 1090 MHz. A neighbour’s garage door opener, brief and bright.
The lithophane holds an hour of invisible activity. Backlit, it glows like a city skyline drawn in radio.