Nighttime lights / blackout detection

Blackout detection
from nighttime lights

Nighttime light anomalies across zones in the temporarily occupied territories of Ukraine. The method captures how far the power supply degrades and how quickly it recovers. It is not proof that any specific facility was hit.

Source — NASA BLACK MARBLE VNP46A2  ·  Window — 15 Feb 2026 — 14 Aug 2026  ·  Zones — 48
Complete satellite data ends 10 Aug 2026 — 4 days before the end of the stated window. The cause is not cloud: NASA publishes tiles with an 8–12-day lag, so the latest composites are based on one or two days out of seven rather than the full week. Everything called "dark" here refers to 10 Aug, not today.
ZONES MONITORED
48
EVENTS DETECTED
95
over 181 days
ZONES DARK
3
as of 10 Aug
DATA COVERAGE
86%
of zone-days had a valid composite

01 / Zone map

33°E34°E35°E36°E37°E38°E39°E45°N46°N47°N48°N49°NLysychanskSievierodonetskTokmakBilohirskYevpatoriaYaltaKerchMariupolSudakAlushtaFeodosiaSakyKrasnoperekopskSevastopolArmianskChornomorskeAlchevskLuhanskShcholkineVolnovakhaDzhankoiDovzhanskKadiivkaHorlivkaMelitopolAmvrosiivkaYasynuvataHenicheskStarobilskKhrustalnyiBerdianskEnerhodarChaplynkaSkadovskYakymivkaPrymorskSimferopolBakhchysaraiDonetsk100 KM
ONGOING AT WINDOW ENDHAD EVENTSNO EVENTSEXCLUDED — TOO DARKcircle size — absolute radiance

02 / Detected events

ZONEREGIONSTARTDAYSMIN LEVELDEPTHRECOVERYOBSERVEDTELEGRAM
TokmakZaporizhzhia22 Jul 202680.01TOTALONGOING22
LysychanskLuhansk25 Jul 202690.01TOTALONGOING3
SievierodonetskLuhansk25 Jul 202680.01TOTALONGOING2
YakymivkaZaporizhzhia19 Feb 2026110.13TOTAL12 d5
ChaplynkaKherson23 Jun 2026100.07TOTAL11 d4
ArmianskCrimea28 Jun 202670.01TOTAL12 d14
KrasnoperekopskCrimea06 Jul 2026100.01TOTAL11 d45
YevpatoriaCrimea08 Jul 2026100.06TOTAL11 d44
ChornomorskeCrimea08 Jul 2026110.01TOTAL12 d5
AlushtaCrimea19 Jul 2026130.04TOTAL13 d73
YasynuvataDonetsk20 Jul 2026100.00TOTAL11 d3
SudakCrimea21 Jul 2026120.04TOTAL12 d6
ChaplynkaKherson22 Jul 2026120.04TOTAL13 d6
YaltaCrimea22 Jul 202670.09TOTAL8 d15
HenicheskKherson27 Jul 2026110.06TOTAL12 d5
TokmakZaporizhzhia23 Feb 202690.23SEVERE10 d3
StarobilskLuhansk04 Mar 2026100.38SEVERE10 d4
PrymorskZaporizhzhia23 Mar 2026110.37SEVERE12 d5
TokmakZaporizhzhia05 Apr 202680.35SEVERE9 d2
MelitopolZaporizhzhia08 Apr 2026130.39SEVERE14 d78
BerdianskZaporizhzhia14 Apr 2026110.32SEVERE12 d54
KadiivkaLuhansk04 May 2026110.35SEVERE12 d5
RovenkyLuhansk04 May 2026110.34SEVERE12 d5
ChaplynkaKherson05 May 202690.39SEVERE9 d3
HenicheskKherson09 May 2026140.19SEVERE14 d5
EnerhodarZaporizhzhia15 May 202690.31SEVERE10 d33
EnerhodarZaporizhzhia01 Jun 2026100.30SEVERE11 d43
MariupolDonetsk06 Jun 2026110.20SEVERE12 d54
SkadovskKherson18 Jun 202690.30SEVERE10 d32
HenicheskKherson23 Jun 202680.29SEVERE9 d22
YakymivkaZaporizhzhia26 Jun 202690.31SEVERE10 d2
BilohirskCrimea06 Jul 202680.27SEVERE9 d2
HorlivkaDonetsk09 Jul 2026100.36SEVERE11 d43
SievierodonetskLuhansk13 Jul 2026110.31SEVERE11 d5
StarobilskLuhansk21 Jul 202690.34SEVERE10 d3
AmvrosiivkaDonetsk23 Jul 202680.24SEVERE8 d2
BerdianskZaporizhzhia28 Jul 202690.17SEVERE10 d34
MelitopolZaporizhzhia20 Feb 202680.50MODERATE9 d27
AlchevskLuhansk21 Feb 202680.48MODERATE8 d23
HorlivkaDonetsk23 Feb 202680.63MODERATE9 d26
KhartsyzkDonetsk23 Feb 202690.58MODERATE9 d3
ChystiakoveDonetsk23 Feb 202670.59MODERATE8 d1
YasynuvataDonetsk23 Feb 2026100.56MODERATE10 d4
TokmakZaporizhzhia07 Mar 202670.56MODERATE8 d1
LysychanskLuhansk15 Mar 202670.62MODERATE8 d1
HenicheskKherson01 Apr 2026100.51MODERATE11 d42
YakymivkaZaporizhzhia09 Apr 202670.59MODERATE8 d1
DovzhanskLuhansk17 Apr 202680.51MODERATE9 d2
LuhanskLuhansk18 Apr 202690.58MODERATE10 d3
EnerhodarZaporizhzhia27 Apr 202690.43MODERATE10 d3
AntratsytLuhansk03 May 2026110.45MODERATE12 d5
AlchevskLuhansk04 May 2026100.53MODERATE11 d4
BerdianskZaporizhzhia12 May 202670.51MODERATE7 d12
PrymorskZaporizhzhia12 May 202670.45MODERATE7 d1
VolnovakhaDonetsk14 May 2026100.42MODERATE10 d4
MelitopolZaporizhzhia15 May 2026100.46MODERATE10 d43
SkadovskKherson24 May 2026100.44MODERATE10 d4
KhartsyzkDonetsk25 May 202680.65MODERATE9 d2
BerdianskZaporizhzhia10 Jun 202670.60MODERATE8 d14
VolnovakhaDonetsk12 Jun 202670.62MODERATE8 d1
BerdianskZaporizhzhia13 Jun 202680.62MODERATE9 d24
ArmianskCrimea14 Jun 2026130.41MODERATE14 d73
ChaplynkaKherson14 Jun 202670.54MODERATE8 d1
BilohirskCrimea16 Jun 202680.61MODERATE9 d2
FeodosiaCrimea17 Jun 2026100.57MODERATE11 d43
KrasnoperekopskCrimea21 Jun 202680.57MODERATE9 d25
YakymivkaZaporizhzhia23 Jun 202670.53MODERATE8 d1
KerchCrimea07 Jul 202670.56MODERATE8 d18
VolnovakhaDonetsk09 Jul 202680.59MODERATE9 d24
YasynuvataDonetsk11 Jul 202680.56MODERATE8 d2
ChystiakoveDonetsk12 Jul 202670.55MODERATE7 d1
LysychanskLuhansk14 Jul 202690.52MODERATE9 d3
YaltaCrimea15 Jul 2026100.58MODERATE11 d45
MariupolDonetsk20 Jul 202680.41MODERATE8 d22
KadiivkaLuhansk25 Jul 2026100.48MODERATE11 d4
AlushtaCrimea19 Feb 202680.69MINOR8 d22
ShakhtarskDonetsk23 Feb 202670.67MINOR8 d1
ShcholkineCrimea23 Feb 202670.66MINOR7 d1
AntratsytLuhansk24 Feb 202670.67MINOR8 d1
SevastopolCrimea28 Mar 202670.68MINOR8 d13
TokmakZaporizhzhia29 Mar 202670.67MINOR8 d1
DzhankoiCrimea30 Mar 202670.65MINOR8 d1
LysychanskLuhansk01 Apr 202680.68MINOR8 d2
SievierodonetskLuhansk01 Apr 202680.68MINOR8 d22
ChaplynkaKherson11 Apr 202670.67MINOR7 d1
PrymorskZaporizhzhia07 May 202670.66MINOR7 d1
ChornomorskeCrimea16 Jun 202690.66MINOR10 d3
SakyCrimea21 Jun 202680.67MINOR9 d24
KerchCrimea23 Jun 202670.68MINOR7 d14
KhrustalnyiLuhansk04 Jul 202680.66MINOR9 d25
AmvrosiivkaDonetsk07 Jul 202670.65MINOR8 d1
BerdianskZaporizhzhia19 Jul 202670.70MINOR8 d12
MelitopolZaporizhzhia23 Jul 202670.70MINOR8 d13
VolnovakhaDonetsk30 Jul 202670.66MINOR7 d1
HorlivkaDonetsk04 Aug 202670.69MINOR8 d13

03 / Telegram — independent layer

Over the period, 2923 power-related messages from 36 public channels in the occupied territories. Testimony is counted by text, not by channel — the same bulletin forwarded by three channels is one witness, otherwise a lone repost would clear the threshold on its own. Reports of damage override "scheduled maintenance": if the text mentions a strike or damage, it is not a schedule. Scheduled-outage reports (886) add nothing to the strength score, and neither do restoration reports (438) — they only mark the end of an episode.

15 Feb7 Mar27 Mar16 Apr6 May26 May15 Jun5 Jul25 Jul14 AugTELEGRAM — OUTAGE REPORTS (MAX 58)SATELLITE — ANOMALOUS ZONES (MAX 12)

Sampling depth is stable across the period — 30–34 channels are active each month, so a change in bar height reads as a change in reality, not as a change in sampling. But mind the attention bias: Sevastopol and Donetsk are written about many times more than Yakymivka — bar height reflects both the blackout itself and the number of Telegram channels covering a town. Channel silence does not mean the lights were on.

Most-reported zones
Sevastopol460
Melitopol161
Donetsk116
Horlivka96
Makiivka85
Kerch76
Simferopol73
Berdiansk71
Alchevsk60
Prymorsk55
Enerhodar55
Feodosia54
Yevpatoria50
Alushta44
Episodes by strength of testimony
ZONESTARTDAYSWITNESSES
Sevastopol18 Jun 20264817
Donetsk10 Aug 2026311
Sevastopol07 Feb 20262810
Donetsk05 Apr 202629
Kerch27 Jul 202629
Melitopol09 Apr 202658
Kerch12 Jul 202638
Makiivka08 Aug 202638
Melitopol14 Feb 202657
Luhansk16 Feb 202627
Luhansk30 Mar 202617
Donetsk14 Jul 202657
Horlivka16 Feb 202616
Kerch07 Jul 202626
Makiivka14 Jul 202636
Yenakiieve14 Jul 202626
Alchevsk30 Mar 202615
Melitopol03 Apr 202635

04 / Cross-check: satellite × Telegram

Satellite events
95
in window
Corroborated
41%
39 of 95
Telegram episodes
200
≥2 witnesses
Confirmed by satellite
31%
62 of 200
These are not accuracy figures for the detector. Telegram is not ground truth but a second biased witness: Mariupol is written about many times more than Yakymivka, occupation-run channels downplay outages, pro-Ukrainian ones overstate them. Channel silence does not mean the lights were on. So the figures above measure agreement between two independent observers within ±7 days — nothing more. A mismatch is a reason to investigate, not a verdict on the satellite.

The ±7-day tolerance is not arbitrary: the composite spans seven days, so the satellite cannot date an event more precisely than the window it averaged over.

05 / Daily data coverage

How many of the 48 zones were measurable each day. The dips are caused by cloud cover. This is the method's principal limitation, not a pipeline failure.

15 Feb9 Mar31 Mar22 Apr14 May5 Jun27 Jun19 Jul10 Aug

06 / Per-zone time series

YenakiieveCLEAR
Donetsk
Amvrosiivka3 DAYS
Donetsk
Volnovakha8 DAYS
Donetsk
Horlivka7 DAYS
Donetsk
DokuchaievskCLEAR
Donetsk
DonetskCLEAR
Donetsk
MakiivkaCLEAR
Donetsk
Mariupol7 DAYS
Donetsk
SnizhneCLEAR
Donetsk
Khartsyzk5 DAYS
Donetsk
Chystiakove2 DAYS
Donetsk
Shakhtarsk1 DAY
Donetsk
Yasynuvata9 DAYS
Donetsk
Berdiansk13 DAYS
Zaporizhzhia
Enerhodar10 DAYS
Zaporizhzhia
Melitopol14 DAYS
Zaporizhzhia
Prymorsk7 DAYS
Zaporizhzhia
TokmakONGOING
Zaporizhzhia
Yakymivka9 DAYS
Zaporizhzhia
Yevpatoria4 DAYS
Crimea
Alushta9 DAYS
Crimea
Armiansk8 DAYS
Crimea
BakhchysaraiCLEAR
Crimea
Bilohirsk4 DAYS
Crimea
Dzhankoi1 DAY
Crimea
Kerch2 DAYS
Crimea
Krasnoperekopsk6 DAYS
Crimea
Saky2 DAYS
Crimea
Sevastopol1 DAY
Crimea
Sudak6 DAYS
Crimea
SimferopolCLEAR
Crimea
Feodosia4 DAYS
Crimea
Chornomorske8 DAYS
Crimea
Shcholkine1 DAY
Crimea
Yalta5 DAYS
Crimea
Alchevsk6 DAYS
Luhansk
Antratsyt6 DAYS
Luhansk
Dovzhansk2 DAYS
Luhansk
Kadiivka9 DAYS
Luhansk
LysychanskONGOING
Luhansk
Luhansk3 DAYS
Luhansk
Rovenky5 DAYS
Luhansk
Starobilsk7 DAYS
Luhansk
SievierodonetskONGOING
Luhansk
Khrustalnyi2 DAYS
Luhansk
Henichesk16 DAYS
Kherson
Skadovsk7 DAYS
Kherson
Chaplynka15 DAYS
Kherson

07 / How to read this