CleanHour

India's grid is cleanest at noon.

Grid-India publishes all-India generation by fuel every 15 minutes. CleanHour turns that into carbon intensity per hour, and schedules heavy AI jobs into the cleanest (and, on the power exchange, cheapest) window.

Every hour of the last 30 days

Each cell is one hour. Darker means more CO₂ per kWh. The pale band through the middle of every day is solar.

CleanerDirtier

The average day

Mean carbon intensity by hour of day, with the 10th–90th percentile range across the month.

Mean gCO₂/kWh10th–90th percentile

Why: what's generating

Average all-India generation by hour, GW.

Coal & ligniteSolarWind, hydro, nuclearGas & other

And it's cheaper

Average IEX Day-Ahead Market price by hour, ₹/kWh.

₹/kWh, IEX DAM clearing price

The scheduler

Give it a job length and a deadline. It forecasts the next 24 hours from the same hour over the past week, uses real IEX prices where the day-ahead market has already cleared, and starts the job in the best window.

Forecast gCO₂/kWh, next 24hChosen 2-hour window
$ python -m cleanhour plan --hours 2 --kwh 50
Best window : Fri 30 Oct 11:00 -> 13:00  ~511 gCO2/kWh, Rs 0.88/kWh

$ python -m cleanhour run --hours 2 --within 24 -- python train.py
[cleanhour] cleanest 2h window starts Sat 11:00 (~506 gCO2/kWh); waiting 0.8h
[cleanhour] starting: python train.py

Does the forecast work? Backtest

A job was submitted at every hour of the month. The scheduler could only see the past. We then scored the window it picked using what actually happened.

One real job, measured

Method & caveats