The shelf
Each record is one NASA visualization. Choose one, then play.
Now playing
City Lights
Loading the first frame.
Press play to hear this side described, bar by bar.
What the pixels became
Values are scaled within this side, not across all records.
The bar, written out
Notes appear here as the bar plays.
Liner notes
Method
The jukebox never invents a note. Every sound traces back to a number measured from a real NASA frame, printed in the table below. What this page adds is judgement: which measurement drives which musical parameter, and the constraints that keep eighteen bars of satellite data listenable as music.
1 · Fetch
Each record is a published NASA visualization. Frames are sampled evenly across the sequence, skipping title cards and fades, and stored locally so the page runs offline. The live tuner instead requests one WMS render per date from NASA GIBS.
2 · Measure
Every second pixel is read straight out of the canvas: luminance, saturation, a circular mean hue, Hasler–Süsstrunk colourfulness, position along the record's own colour bar, gradient texture via a Sobel pass, and sixteen vertical columns plus six horizontal bands of activity. Around 230,000 samples per frame, in about eight milliseconds.
3 · Calibrate
Space is black. A night-lights frame and an aerosol frame both average under ten percent luminance, so absolute readings would trap every record in the bottom octave. Each feature is therefore stretched between its own 10th and 90th percentile within the side, and the raw value is kept for display.
4 · Compose
Measurements become one bar: a drone, a chord, a bass line, sixteen melodic steps and percussion. Three constraints keep eighteen bars of data listenable: every pitch is drawn from a fixed mode, so no measurement can produce a wrong note; tempo moves at most seven BPM per bar; and the chord walks toward the degree the colour bar asks for one scale step at a time, so harmony is a progression rather than a series of jumps.
5 · Play
A Web Audio lookahead scheduler places events about 120 ms ahead of the clock, so the pulse stays steady while the page animates. The export path renders the same graph through an OfflineAudioContext: the WAV is the performance, not an approximation of it.
| Measured | Becomes | Why |
|---|---|---|
| Mean luminance | Register (octave) | A luminous frame sings high, a dark one answers low. |
| Position along the colour bar | Scale degree (target) | The legend becomes a pitch axis: low end low, high end high. The chord walks to the target one step per bar rather than leaping. |
| Colourfulness | Chord size | Saturated frames hold four notes; monochrome frames hold three. |
| Gradient texture | Subdivision, hat density | Busy texture earns sixteenths; smooth ocean holds long notes. |
| Six horizontal bands of texture | Voicing spread | Activity across the whole height opens the chord; activity in one latitude band keeps it closed. |
| Change since the previous frame | Tempo | The pulse quickens when the planet is visibly rearranging. |
| Sixteen vertical columns | Sixteen-step phrase | Reading the map left to right is heard as a melody crossing the stereo field. |
| Horizontal centre of energy | Stereo position | Energy in the west leans left in the headphones. |
| Highlights (bright clusters) | Transients | City lights and lightning strikes are events, not textures. |
| Dominant hue | Timbre | Blue fields sound glassy, warm fields reedy. |
| Sensor coverage | Rest | Where the satellite saw nothing, the piece is silent. |
| Position in the side | Arrangement | Artistic: intro, body, chorus and outro shape the eighteen bars. |
| Bar index | Voicing inversion | Artistic: the chord rotates so a repeated degree does not stagnate. |
Rows marked artistic are composition, not measurement, and are listed so the line between the two stays visible. Everything above them is a direct reading of the frame's pixels.