✈ Contrail Formation Predictor

Atmospheric data at cruise altitudes • Schmidt-Appleman criterion • Updated 2026-06-30 14:15 UTC

Current Status — Major Cities
Columbus, OH
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
00:00–23:00 UTC (EPHEMERAL)
Denver, CO
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
00:00–23:00 UTC (EPHEMERAL)
Seattle, WA
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
06:00–19:00 UTC (PERSISTENT)
Chicago, IL
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
22:00–23:00 UTC (PERSISTENT)
New York, NY
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
18:00–20:00 UTC (PERSISTENT)
Miami, FL
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
20:00–21:00 UTC (PERSISTENT)
Los Angeles, CA
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
00:00–23:00 UTC (EPHEMERAL)
London, UK
Ephemeral
EPHEMERAL
right now
CONTRAIL WINDOW (48h)
21:00–22:00 UTC (PERSISTENT)
72-Hour Timeline — Columbus, OH

Each pixel = 1 hour. Hover for time + status.

2026-06-30T00:00 UTC: Ephemeral2026-06-30T01:00 UTC: Ephemeral2026-06-30T02:00 UTC: Ephemeral2026-06-30T03:00 UTC: Ephemeral2026-06-30T04:00 UTC: Ephemeral2026-06-30T05:00 UTC: Ephemeral2026-06-30T06:00 UTC: Ephemeral2026-06-30T07:00 UTC: Ephemeral2026-06-30T08:00 UTC: Ephemeral2026-06-30T09:00 UTC: Ephemeral2026-06-30T10:00 UTC: Ephemeral2026-06-30T11:00 UTC: Ephemeral2026-06-30T12:00 UTC: Ephemeral2026-06-30T13:00 UTC: Ephemeral2026-06-30T14:00 UTC: Ephemeral2026-06-30T15:00 UTC: Ephemeral2026-06-30T16:00 UTC: Ephemeral2026-06-30T17:00 UTC: Ephemeral2026-06-30T18:00 UTC: Ephemeral2026-06-30T19:00 UTC: Ephemeral2026-06-30T20:00 UTC: Ephemeral2026-06-30T21:00 UTC: Ephemeral2026-06-30T22:00 UTC: Ephemeral2026-06-30T23:00 UTC: Ephemeral2026-07-01T00:00 UTC: Ephemeral2026-07-01T01:00 UTC: Ephemeral2026-07-01T02:00 UTC: Ephemeral2026-07-01T03:00 UTC: Ephemeral2026-07-01T04:00 UTC: Ephemeral2026-07-01T05:00 UTC: Ephemeral2026-07-01T06:00 UTC: Ephemeral2026-07-01T07:00 UTC: Ephemeral2026-07-01T08:00 UTC: Ephemeral2026-07-01T09:00 UTC: Ephemeral2026-07-01T10:00 UTC: Ephemeral2026-07-01T11:00 UTC: Ephemeral2026-07-01T12:00 UTC: Ephemeral2026-07-01T13:00 UTC: Ephemeral2026-07-01T14:00 UTC: Ephemeral2026-07-01T15:00 UTC: Ephemeral2026-07-01T16:00 UTC: Ephemeral2026-07-01T17:00 UTC: Ephemeral2026-07-01T18:00 UTC: Ephemeral2026-07-01T19:00 UTC: Ephemeral2026-07-01T20:00 UTC: Ephemeral2026-07-01T21:00 UTC: Ephemeral2026-07-01T22:00 UTC: Ephemeral2026-07-01T23:00 UTC: Ephemeral2026-07-02T00:00 UTC: Ephemeral2026-07-02T01:00 UTC: Ephemeral2026-07-02T02:00 UTC: Ephemeral2026-07-02T03:00 UTC: Ephemeral2026-07-02T04:00 UTC: Ephemeral2026-07-02T05:00 UTC: Ephemeral2026-07-02T06:00 UTC: Ephemeral2026-07-02T07:00 UTC: Ephemeral2026-07-02T08:00 UTC: Ephemeral2026-07-02T09:00 UTC: Ephemeral2026-07-02T10:00 UTC: Ephemeral2026-07-02T11:00 UTC: Ephemeral2026-07-02T12:00 UTC: Ephemeral2026-07-02T13:00 UTC: Ephemeral2026-07-02T14:00 UTC: Ephemeral2026-07-02T15:00 UTC: Ephemeral2026-07-02T16:00 UTC: Persistent2026-07-02T17:00 UTC: Persistent2026-07-02T18:00 UTC: Persistent2026-07-02T19:00 UTC: Persistent2026-07-02T20:00 UTC: Persistent2026-07-02T21:00 UTC: Persistent2026-07-02T22:00 UTC: Persistent2026-07-02T23:00 UTC: Persistent06/3007/0107/02NOW
No contrails
Ephemeral (dissolve quickly)
Persistent (contrail cirrus)
48-Hour Detail — Columbus, OH (3 pressure levels)

T = temperature at pressure level • RH = relative humidity w.r.t. ice • [N/3] = persistent level count

Time (UTC)200 hPa (FL387)250 hPa (FL344)300 hPa (FL295)Status
06-30 00:00 UTC-54.5°C / 38% RH_ice-45.0°C / 64% RH_ice-34.0°C / 61% RH_iceEphemeral
06-30 01:00 UTC-54.0°C / 21% RH_ice-44.5°C / 55% RH_ice-34.5°C / 58% RH_iceEphemeral
06-30 02:00 UTC-54.0°C / 21% RH_ice-45.0°C / 41% RH_ice-34.5°C / 50% RH_iceEphemeral
06-30 03:00 UTC-54.0°C / 25% RH_ice-44.5°C / 50% RH_ice-34.5°C / 47% RH_iceEphemeral
06-30 04:00 UTC-54.0°C / 25% RH_ice-45.0°C / 75% RH_ice-34.5°C / 56% RH_iceEphemeral
06-30 05:00 UTC-53.5°C / 30% RH_ice-45.0°C / 75% RH_ice-35.0°C / 67% RH_iceEphemeral
06-30 06:00 UTC-53.0°C / 24% RH_ice-44.5°C / 67% RH_ice-34.5°C / 67% RH_iceEphemeral
06-30 07:00 UTC-52.0°C / 16% RH_ice-44.0°C / 64% RH_ice-34.5°C / 72% RH_iceEphemeral
06-30 08:00 UTC-52.0°C / 16% RH_ice-44.0°C / 50% RH_ice-34.0°C / 66% RH_iceEphemeral
06-30 09:00 UTC-53.0°C / 29% RH_ice-44.0°C / 41% RH_ice-34.5°C / 61% RH_iceEphemeral
06-30 10:00 UTC-52.5°C / 29% RH_ice-43.0°C / 33% RH_ice-34.5°C / 58% RH_iceEphemeral
06-30 11:00 UTC-53.5°C / 38% RH_ice-42.5°C / 16% RH_ice-35.0°C / 42% RH_iceEphemeral
06-30 12:00 UTC-53.5°C / 38% RH_ice-41.5°C / 13% RH_ice-35.0°C / 31% RH_iceEphemeral
06-30 13:00 UTC-53.5°C / 38% RH_ice-41.0°C / 10% RH_ice-35.0°C / 28% RH_iceEphemeral
06-30 14:00 UTC-53.5°C / 38% RH_ice-41.0°C / 10% RH_ice-35.5°C / 45% RH_iceEphemeral
06-30 15:00 UTC-53.5°C / 38% RH_ice-41.0°C / 10% RH_ice-35.0°C / 34% RH_iceEphemeral
06-30 16:00 UTC-53.5°C / 33% RH_ice-41.0°C / 10% RH_ice-34.0°C / 22% RH_iceEphemeral
06-30 17:00 UTC-53.5°C / 33% RH_ice-41.0°C / 6% RH_ice-33.5°C / 22% RH_iceEphemeral
06-30 18:00 UTC-53.5°C / 33% RH_ice-41.5°C / 6% RH_ice-33.5°C / 19% RH_iceEphemeral
06-30 19:00 UTC-54.0°C / 33% RH_ice-41.5°C / 6% RH_ice-33.0°C / 25% RH_iceEphemeral
06-30 20:00 UTC-54.0°C / 33% RH_ice-41.5°C / 6% RH_ice-33.0°C / 33% RH_iceEphemeral
06-30 21:00 UTC-54.5°C / 33% RH_ice-42.0°C / 13% RH_ice-33.0°C / 41% RH_iceEphemeral
06-30 22:00 UTC-54.5°C / 33% RH_ice-42.0°C / 19% RH_ice-33.0°C / 44% RH_iceEphemeral
06-30 23:00 UTC-54.0°C / 30% RH_ice-42.5°C / 27% RH_ice-33.0°C / 44% RH_iceEphemeral
07-01 00:00 UTC-54.0°C / 30% RH_ice-43.0°C / 36% RH_ice-33.0°C / 44% RH_iceEphemeral
07-01 01:00 UTC-54.0°C / 25% RH_ice-43.0°C / 44% RH_ice-33.0°C / 41% RH_iceEphemeral
07-01 02:00 UTC-53.5°C / 30% RH_ice-43.0°C / 54% RH_ice-33.0°C / 41% RH_iceEphemeral
07-01 03:00 UTC-53.5°C / 25% RH_ice-43.0°C / 54% RH_ice-33.0°C / 38% RH_iceEphemeral
07-01 04:00 UTC-53.5°C / 25% RH_ice-43.0°C / 57% RH_ice-32.5°C / 36% RH_iceEphemeral
07-01 05:00 UTC-53.5°C / 25% RH_ice-43.0°C / 63% RH_ice-33.0°C / 33% RH_iceEphemeral
07-01 06:00 UTC-53.0°C / 24% RH_ice-42.5°C / 49% RH_ice-32.5°C / 30% RH_iceEphemeral
07-01 07:00 UTC-53.5°C / 25% RH_ice-42.5°C / 46% RH_ice-32.5°C / 27% RH_iceEphemeral
07-01 08:00 UTC-53.5°C / 30% RH_ice-42.5°C / 54% RH_ice-32.5°C / 30% RH_iceEphemeral
07-01 09:00 UTC-54.0°C / 30% RH_ice-42.5°C / 46% RH_ice-32.5°C / 27% RH_iceEphemeral
07-01 10:00 UTC-54.0°C / 30% RH_ice-42.5°C / 46% RH_ice-32.5°C / 27% RH_iceEphemeral
07-01 11:00 UTC-54.0°C / 30% RH_ice-42.5°C / 46% RH_ice-32.5°C / 27% RH_iceEphemeral
07-01 12:00 UTC-54.0°C / 30% RH_ice-42.5°C / 49% RH_ice-32.5°C / 30% RH_iceEphemeral
07-01 13:00 UTC-54.0°C / 33% RH_ice-42.5°C / 46% RH_ice-32.5°C / 30% RH_iceEphemeral
07-01 14:00 UTC-54.0°C / 30% RH_ice-42.5°C / 49% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 15:00 UTC-54.5°C / 25% RH_ice-43.0°C / 54% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 16:00 UTC-54.5°C / 30% RH_ice-43.0°C / 54% RH_ice-33.5°C / 30% RH_iceEphemeral
07-01 17:00 UTC-54.5°C / 30% RH_ice-42.5°C / 40% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 18:00 UTC-54.0°C / 33% RH_ice-42.5°C / 30% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 19:00 UTC-53.5°C / 33% RH_ice-42.5°C / 27% RH_ice-33.5°C / 30% RH_iceEphemeral
07-01 20:00 UTC-53.5°C / 33% RH_ice-42.0°C / 24% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 21:00 UTC-53.5°C / 33% RH_ice-42.5°C / 24% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 22:00 UTC-53.5°C / 33% RH_ice-42.0°C / 16% RH_ice-33.0°C / 30% RH_iceEphemeral
07-01 23:00 UTC-53.5°C / 30% RH_ice-41.5°C / 13% RH_ice-33.0°C / 30% RH_iceEphemeral
Validation — METAR High-Cloud Correlation (15-Day Hindcast)

Method: 15-day hindcast via Open-Meteo + IEM ASOS hourly sky conditions. High cloud = any sky layer ≥ 20,000 ft (FEW/SCT/BKN/OVC) in the METAR report of the nearest major airport. The table shows: when we predict PERSISTENT or EPHEMERAL, how often does the METAR show high-altitude cloudiness?


Note: METAR high cloud ≠ contrail observation. Natural cirrus and contrail cirrus are indistinguishable. London EGLL uses automated ceilometers (NCD = No Cloud Detected) that cannot detect thin cirrus — excluded from aggregate. Miami shows equal high-cloud rates for both classes due to tropical convective cirrus (not sensitive to upper-tropospheric humidity). This is a directional sanity check, not a precision/recall measurement.

City Predicted Hours High Cloud When Predicted
Columbus, OHPERSISTENT6162%
Columbus, OHEPHEMERAL28740%
Denver, COPERSISTENT3686%
Denver, COEPHEMERAL31256%
Seattle, WAPERSISTENT7478%
Seattle, WAEPHEMERAL27436%
Chicago, ILPERSISTENT4070%
Chicago, ILEPHEMERAL30859%
New York, NYPERSISTENT4185%
New York, NYEPHEMERAL30770%
Miami, FLPERSISTENT8685%
Miami, FLEPHEMERAL26285%
Los Angeles, CAPERSISTENT3020%
Los Angeles, CAEPHEMERAL3181%
London, UKPERSISTENT187 (63% NCD — ceilometer blind to thin cirrus)
London, UKEPHEMERAL173 (87% NCD — ceilometer blind to thin cirrus)
All US citiesPERSISTENT36873%
All US citiesEPHEMERAL206849%

6/7 US cities show higher high-cloud agreement for PERSISTENT than EPHEMERAL. Aggregate: PERSISTENT = 73% vs EPHEMERAL = 49% (Δ = +24pp, ex-London). Miami is a special case: tropical convective cirrus saturates both classes at ~85%. Full satellite validation (Google OpenContrails dataset) pending Kaggle API access.

The Physics

Contrails form when the mixing line between hot engine exhaust and cold ambient air passes through or above the ice saturation curve — the Schmidt-Appleman criterion.


The critical temperature Tc is the ambient temperature below which contrails must form. Whether they persist depends on whether the air is supersaturated with respect to ice (RHice ≥ 100%). Open-Meteo reports RH w.r.t. liquid water, so we convert: RHice = RHliq × (esat,liq / esat,ice). At −45°C this factor is ~1.53 — meaning 65% RH (liquid) is already supersaturated w.r.t. ice.


Engine parameters used: EIH₂O = 1.25 kg/kg • LHV = 43.2 MJ/kg • η = 0.30


PressureAltitudeG (Pa/K)Tc (contrails form below)
200 hPa~11.8 km / FL3871.334 Pa/K-44.1°C
250 hPa~10.5 km / FL3441.668 Pa/K-41.8°C
300 hPa~9.0 km / FL2952.002 Pa/K-39.9°C
350 hPa~7.9 km / FL2592.335 Pa/K-38.2°C