The Colour of Days
This artwork reimagines the sky above your favorite city as a digital mosaic — a tapestry woven from a year's worth of cloud cover. Each image holds 365 days, 8,760 hours, every one a pixel of sky.
Bright white for clouds. Sky blue for clarity. Together, these shifting tones map an entire year into a single image — part data, part portrait.
It is a record and an homage: the soul of a city distilled into light and shadow, pixel by pixel, hour by hour.
Gallery ...
Amsterdam
Athina
Barcelona
Berlin
Bruxelles
Firenze
Lisboa
London
Madrid
Milano
Technical Architecture
1.8 million data points — five stages — one pipeline.
Data Acquisition
Open-Meteo Archive APIHourly weather data fetched for 244+ cities worldwide — cloud cover & apparent temperature — spanning January to November 2024. Roughly 7,600 data points per city.
Data Processing
Python · JSONValues are extracted, null-filtered, and normalized to a 0–1 scale. Cloud cover is intentionally inverted so a clear sky reads as light and overcast reads as dark.
Color Mapping
Spectra · config.jsonEach normalized value maps to a color gradient — sky, sun, RdBu and more — via Spectra interpolation. A single heatmap can contain 100–200+ distinct shades.
Grid Rendering
SVG · CairoSVG7,600<rect>elements arranged in a 72-column grid at A3 resolution (3508 × 4961 px). CairoSVG converts the vector output to a crisp, print-ready PNG.
Batch Processing
Docker · BashA containerised Python 3.9 image runs heatmap.py for every city sequentially. Volume mounts handle I/O. One command regenerates all 244 cities reproducibly.
Stack at a glance
Open-Meteo API
Weather data source
Python 3.9
Core processing
Spectra
Color interpolation
CairoSVG
SVG → PNG export