Haze

Generative · WebGL · Side project

A year of Dubai's air,
as 365 posters.

Every morning at 6am it reads the city's air quality and renders that day as a print. Nobody chooses the colours. The air does.

JanAprJulOctDec

The prints

Same code, 365 different mornings.

Each poster is generated from one number: that day's AQI reading. It sets the palette, the density of the haze bands, and how much of the sun disc survives the murk. August prints thicken with summer dust. January prints come out nearly clear.

How it works

One number in, one poster out.

// 06:00 GST, every day

const aqi = await readings.dubai()

render({
  palette: band(aqi),        // 6 bands
  density: aqi / 450,      // haze layers
  sun:     1 - aqi / 500,  // what's left
  seed:    dayOfYear
})
  • Readings come from the city's public monitoring stations, averaged across the ones reporting that morning.
  • The seed is the day of the year, so a given date always regenerates the identical print.
  • Colour bands follow the official AQI scale, so the palette is a data legend rather than a mood choice.
  • Started as an excuse to learn WebGL. The shader work turned out to be the easy part; sourcing clean data was not.

Prints

Pick a date.
Take the air home.

Any of the 365 available as an A2 print. Birthdays are popular. The bad ones are more popular than you would expect.