Illustration of a telescope dome on a mountain ridge under a night sky with a crescent Moon and a star's arc across the sky

Rozhen Observing Planner

Will a target be observable from the National Astronomical Observatory Rozhen (41.693° N, 24.739° E, 1750 m) on a given night — and what does the night itself look like: sunset and twilights, the Moon, the target's altitude hour by hour, and the cloud forecast over the Rhodopes.

Try: M31 · M42 · V1057 Cyg · HD 189733 · NGC 7000 · Vega · 3C 273  ·  ← previous night · next night →  ·  plan a whole night with several targets →  ·  best nights for this target over the next 30 →

ASTRONOMY
100/100
WEATHER
91/100
OVERALL
91/100
V1057 Cyg — Worth it
Best window 01:00–05:00 (4.0 h, good) · highest 87.3° at 00:15 · 6.28 quality-hours, peak 1.0
astronomy = 100 × min(1, 6.92 h ÷ 4 h) × peak 1.0 = 100  ·  overall = 100 × weather 0.91 = 91
A quality-hour is one hour at quality 1 (dark sky, target high, no Moon, clear); 5-minute slices of lower quality add up pro rata. Four such hours earn full marks; the peak caps it so a long mediocre night cannot score as a short perfect one.
What held it back: daylight and twilight cost 2.3 quality-hours; moonlight cost 0.7 quality-hours; cloud cover cost 0.6 quality-hours.
poor 20:40–21:20marginal 21:20–21:55good 21:55–00:00marginal 00:00–01:00good 01:00–05:00marginal 05:00–05:35poor 05:35–06:10 (good ≥ 0.6, marginal ≥ 0.3, poor > 0 — the product of darkness × altitude × Moon × clouds)
0°30°60°90°12:0014:0016:0018:0020:0022:0000:0002:0004:0006:0008:0010:0012:00local time (Europe/Sofia)terrain horizon along the target's pathMoontarget

Bands: daylight → civil → nautical → astronomical twilight → night. Dashed grey: the Moon. Dashed lines: 20° (airmass ~2.9) and 30° (airmass 2.0). Brown: the terrain horizon under the target's path.

Night of Saturday, 22 August 2026

Sun
  • Sunset 20:10 · sunrise 06:37
  • Civil twilight ends 20:39 · begins 06:08
  • Nautical ends 21:15 · begins 05:33
  • Astronomical night 21:52 → 04:55 (7.04 h)
Moon — waxing gibbous, 76% lit
  • Moonrise 17:02 · moonset 01:18
  • Moon-free dark time: 3.6 h of 7.04 h
Clouds over Rozhen

Mean cloud cover during astronomical night: 9%

ERA5 reanalysis — a historical reconstruction from a global model, not a measurement at the observatory.

20:00cloud cover % per hour (dark = night)07:00

Hour by hour

localsky target alt Moon alt cloud %low / mid / high RH %wind km/h rain mm °Cquality
21:00 nautical twilight 55° 19 10 0 / 1 / 9 65 3.2 0.0 17.4 poor 0.1
22:00 night 65° 18 2 0 / 1 / 1 63 2.4 0.0 17.2 good 0.77
23:00 night 76° 15 2 0 / 1 / 2 62 3.1 0.0 17.0 good 0.78
00:00 night 86° 10 38 0 / 3 / 37 64 5.0 0.0 16.4 marginal 0.47
01:00 night 82° 3 15 0 / 0 / 15 66 5.8 0.0 16.2 good 0.69
02:00 night 71° down 4 0 / 2 / 2 68 4.9 0.0 15.8 good 0.96
03:00 night 60° down 0 0 / 0 / 0 73 4.8 0.0 14.5 good 1.0
04:00 night 50° down 0 0 / 0 / 0 73 5.0 0.0 14.4 good 0.93
05:00 astronomical twilight 40° down 0 0 / 0 / 0 75 5.0 0.0 13.8 marginal 0.43
06:00 nautical twilight 30° down 0 0 / 0 / 0 76 4.2 0.0 13.6 poor 0.12

Weather: ERA5 reanalysis — what it was. RH above ~90 % with little wind is the fog signature on this ridge.  Download: hourly CSV · 5-minute track CSV · JSON

Terrain horizon around the observatory

0°5°10°NESWN

The Rhodope ridges as seen from the dome: highest 1.34° (azimuth 26°, 5.2 km away), mean 0.0°, from SRTM 30 m with refraction. Dots: the target's path below 15°. A target behind the ridge counts as not visible, whatever its altitude. JSON

Telescopes at Rozhen

The 20°/30° limits are the usual photometric ones (airmass ~2.9 / 2.0), not the mechanical limits of any instrument — those, the dome, and the observing schedule are the observatory's to confirm.


ℹ️ How it is computed, and how far to trust it
  • Sun and Moon from Meeus' Astronomical Algorithms: low-precision solar position (~1′) and a truncated lunar series (~0.3°). Rise/set use the standard horizons (−0.833° Sun, +0.125° Moon); times are good to a minute or two, which is all a plan needs.
  • Target altitude is plain spherical trigonometry from the coordinates precessed to the date (Meeus 21.3) and local sidereal time, every 5 minutes; airmass is Kasten & Young. Nutation, refraction at the target and proper motion are left out: together under 3′ for anything above 20°, nothing on a chart whose fields are degrees wide. Altitudes shown are geometric.
  • Cross-checked against astropy (ERFA) on 24 dates from 1962 to 2037 in the test suite: Sun within 1′, Moon within 0.5°, star altitudes within 0.1°, precession within 10″, sidereal time within 2 s, and the computed sunset / astronomical-dark moments put astropy's Sun at −0.833° / −18° within 2′. astropy is a test dependency only — the planner itself stays standard library.
  • Three marks. Astronomy multiplies darkness × target altitude × moonlight (illumination × closeness × height) per 5 minutes and integrates over the night, scaled by the peak; 100 = four hours at perfect geometry, and ten marginal hours cannot pass for a perfect night. Weather is the cloud factor (1 − cover/90, zero at ≥ 80 %) weighted by when the sky is actually useful for this target. Overall = astronomy × weather — and simply Unknown when there is no forecast or history, so a fine geometry is never mistaken for a promise of a clear night. Cloud ≥ 80 % zeroes a sample outright; the Moon only dims. The reasons line says which factor cost the most. Calculation version 2026-10-10.1.
  • Names go to CDS Sesame (SIMBAD / NED / VizieR). Solar-system bodies are not resolved — give coordinates for the night from JPL Horizons.
  • Weather comes from Open-Meteo, and the page always says which kind:
    sourcekind of datawhen
    Open-Meteo forecastmodel prediction, hourly, refreshed every 30 minthe last week to 4 days ahead
    ERA5 reanalysishistorical reconstruction from a global model and observations — not a measurement at the observatory1940 → about 5 days ago
    noneastronomy only; overall mark Unknownfurther ahead, or Open-Meteo down
    Both are for the observatory's coordinates and altitude; mountain weather is local, and neither knows about the Rhodope fog in the valley below. How far the forecast can be trusted is measured, not assumed: forecast accuracy for Rozhen.

All times are local (Europe/Sofia). The night runs from local noon to the next local noon.

💡 Show API usage examples (cURL)
curl -sS "https://devops.majbase.com/rozhen-planner/api?target=M31&date=2026-08-22"
curl -sS "https://devops.majbase.com/rozhen-planner/api?target=83.63+22.01"      # RA Dec in degrees
curl -sS "https://devops.majbase.com/rozhen-planner/api"                          # just the night (Sun, Moon, clouds)

Response shape

{
  "night_date": "2026-10-09",
  "site": {"name": "NAO Rozhen", "lat": 41.693, "lon": 24.739, "elev_m": 1750},
  "night": {"sunset": "…Z", "sunrise": "…Z", "twilight": {"civil": {…}, "nautical": {…}, "astronomical": {…}},
            "dark_from": "…Z", "dark_to": "…Z", "dark_hours": 9.55,
            "moonrise": "…Z", "moonset": "…Z", "moon": {"illumination": 0.007, "phase": "new moon", "waxing": false},
            "moon_free_dark_hours": 9.55},
  "target": {"ra": 10.68, "dec": 41.27, "ra_of_date": 11.03, "dec_of_date": 41.41,
             "transit": {"t": "…Z", "alt": 89.6, "az": 187.9, "airmass": 1.0},
             "good_hours": 9.58, "usable_hours": 9.58, "moon_separation": 144.4,
             "verdict": "good", "summary": "…", "resolved": {"name": "M31", "common_name": "Andromeda Galaxy", "type": "AGN"},
             "track": [{"t": "…Z", "alt": 12.3, "az": 41.0, "airmass": 4.6}, …]},
  "assessment": {"score": 84, "verdict": "good", "headline": "Worth it",
                 "score_astronomy": 92, "verdict_astronomy": "good", "score_weather": 71, "weather_known": true,
                 "quality_hours": 3.4,
                 "best_window": {"label": "good", "start_local": "22:30", "end_local": "02:15", "hours": 3.75, "mean_quality": 0.82},
                 "windows": [{"label": "marginal", "start_local": "20:30", "end_local": "22:30", …}, …],
                 "hourly": [{"time": "21:00", "sky": "night", "alt": 45, "moon_alt": -12, "cloud": 20, "low": 5, "mid": 0, "high": 20,
                             "rh": 71, "wind": 9.4, "precip": 0, "temp": 6.1, "q": 0.78, "label": "good"}, …],
                 "reasons": ["cloud cover cost 2.1 quality-hours"], "hard_limit": null, "cost": {…}},
  "forecast": [...hourly rows...], "forecast_source": "forecast", "forecast_updated_at": "…Z",
  "calculation_version": "2026-10-10.1", "warnings": []
}

Errors are never silent: an unreadable date is HTTP 400 {"error": "…", "code": "invalid_date"}, never a quiet fallback to tonight. Three marks: score_astronomy (darkness × altitude × Moon, always known), score_weather (clouds over the dark hours; null without a forecast or history) and score, the overall — null with verdict: "unknown" when the weather is not known, never a geometry-only number dressed up as a promise. Errors: {"error": "…", "code": "target_unresolved"} with HTTP 400 when a target is given but cannot be resolved; date is the evening the night starts on, as 2026-10-09, 2026.10.09 or 09.10.2026; omitted = tonight. The response carries night (sunset/sunrise, twilights, dark window, Moon), target (coordinates, transit, dark hours above the limits, Moon separation, verdict of good / marginal / poor / none / never, and the 5-minute track of altitude, azimuth and airmass) and forecast (hourly rows for the night). Times are ISO 8601 UTC.