orbit-studio / worker /src /config /satvis.core.yaml
moncefem's picture
Deploy Orbit Studio propagator
9f21d0a
Raw
History Blame Contribute Delete
7.14 kB
# Core satvis configuration: the GP groups served by the worker, plus the
# static per-satellite facts attached to their records at refresh time.
#
# Merged with every data/custom/*/satvis.yaml plugin config into
# satvis.generated.json by scripts/generate-groups.mjs at build time.
# The seven groups below are carved out of `active` by name instead of being
# fetched as their own CelesTrak group. `active` is already pulled for the plugin
# groups, and sources are deduped, so they cost nothing extra — dropping their own
# fetches took a refresh from ~12.2 MB to ~7.2 MB, against CelesTrak's 250 MB/day
# per-IP budget, and 15 sources down to 8.
#
# Verified against a same-cycle `active` snapshot on 2026-07-29. Every derivation
# below is a superset of the CelesTrak group — nothing upstream serves is lost:
#
# oneweb, globalstar, iridium-NEXT exact, record for record
# starlink +2 STARLINK-2401/47818, STARLINK-34343/64157
# planet +1 PELICAN-11/69871
# eutelsat +1 EUTELSAT 53A/40277
# spire +12 recent LEMUR-2s (66680, 67366, 68471-68493)
#
# The extras are objects CelesTrak keeps in `active` but not in the curated group.
# Most carry high (recent) NORAD ids, so they read as launches not yet folded into
# the group rather than deliberate exclusions — but EUTELSAT 53A is a 2014 craft,
# so some are genuine editorial drops. We serve them either way.
#
# `satellites` rows rather than plain select.noradIds for the members that carry no
# matching prefix: a row's upstreamName is checked against the record, so a rename
# or decay surfaces as a warning in /api/groups.json instead of silently shrinking
# the group.
#
# Still fetched as their own sources — editorial lists with no name pattern at all:
# gnss, science, resource, weather, cubesat, stations, last-30-days.
#
# Re-check a derivation before widening it. These are curated lists, and a pattern
# that fits today drifts as operators add product lines (planet needed PELICAN,
# TANAGER and EDDA appended to FLOCK/SKYSAT for exactly that reason).
groups:
- name: cubesat
sources: [{ celestrak: cubesat }]
- name: globalstar
sources: [{ celestrak: active }]
select: { namePattern: "^GLOBALSTAR" }
- name: gnss
sources: [{ celestrak: gnss }]
- name: iridium-NEXT
sources: [{ celestrak: active }]
select: { namePattern: "^IRIDIUM" }
- name: last-30-days
sources: [{ celestrak: last-30-days }]
- name: oneweb
sources: [{ celestrak: active }]
select: { namePattern: "^ONEWEB" }
- name: planet
sources: [{ celestrak: active }]
# FLOCK/SKYSAT are the original lines; PELICAN, TANAGER and EDDA are newer and
# share no prefix with them.
select: { namePattern: "^(FLOCK|SKYSAT|PELICAN|TANAGER|EDDA)" }
- name: resource
sources: [{ celestrak: resource }]
- name: science
sources: [{ celestrak: science }]
- name: spire
sources: [{ celestrak: active }]
select: { namePattern: "^LEMUR" }
# Spire craft that are not LEMURs.
satellites:
- { noradId: 66678, upstreamName: OTTER SDM }
- { noradId: 67364, upstreamName: TWILIGHT-1 OBJECT B }
- name: starlink
sources: [{ celestrak: active }]
select: { namePattern: "^STARLINK" }
- name: stations
sources: [{ celestrak: stations }]
- name: weather
sources: [{ celestrak: weather }]
- name: eutelsat
sources: [{ celestrak: active }]
select: { namePattern: "^EUTELSAT" }
# Eutelsat-operated, but catalogued under their Express names.
satellites:
- { noradId: 39612, upstreamName: EXPRESS-AT1 }
- { noradId: 39613, upstreamName: EXPRESS-AT2 }
# Static per-satellite facts, matched against a record's NORAD_CAT_ID alone.
# `name` is documentation only — it never takes part in matching.
#
# Swath extents are PER-SIDE cross-track distances (km) from the ground track to
# the swath edge, relative to flight direction (starboard = velocity bearing +
# 90°). They are NOT halves of a full swath width. Sides can differ: Sentinel-3's
# sensor is tilted to avoid sunglint (starboard-heavy in flight).
#
# Provenance: transcribed from an upstream prediction table whose extents were
# cross-checked against published sensor swaths and, where noted, calibrated against
# real product footprints. Entry order and grouping mirror that table, so a re-sync
# stays a readable diff. Only LEO imagers appear here — geostationary weather
# platforms have no moving ground-track swath.
#
# Satellites absent from this table fall back to the app defaults (see
# src/config/satelliteMetadata.ts).
satellites:
# MODIS (Terra/Aqua) — 2330 km nominal; footprints reach ~1170/side.
- { noradId: 25994, name: TERRA, swathStarboardKm: 1175, swathPortKm: 1175 }
- { noradId: 27424, name: AQUA, swathStarboardKm: 1175, swathPortKm: 1175 }
# VIIRS (JPSS) — 3040 km nominal; L1 footprints reach ~1556/side.
- { noradId: 37849, name: SUOMI NPP, swathStarboardKm: 1565, swathPortKm: 1565 }
- { noradId: 43013, name: NOAA 20 (JPSS-1), swathStarboardKm: 1565, swathPortKm: 1565 }
- { noradId: 54234, name: NOAA 21 (JPSS-2), swathStarboardKm: 1565, swathPortKm: 1565 }
# MSI (Sentinel-2) — 290 km nominal; L1C tiles reach ~149/side.
- { noradId: 40697, name: SENTINEL-2A, swathStarboardKm: 150, swathPortKm: 150 }
- { noradId: 42063, name: SENTINEL-2B, swathStarboardKm: 150, swathPortKm: 150 }
- { noradId: 60989, name: SENTINEL-2C, swathStarboardKm: 150, swathPortKm: 150 }
# SLSTR (Sentinel-3) — tilted against sunglint, so the sides differ.
# Side assignment verified empirically against real SLSTR granule footprints:
# the tilt points the sensor WEST on the descending day pass, i.e. starboard.
# Observed reach 995-998 / 499-502 km.
- { noradId: 41335, name: SENTINEL-3A, swathStarboardKm: 1000, swathPortKm: 500 }
- { noradId: 43437, name: SENTINEL-3B, swathStarboardKm: 1000, swathPortKm: 500 }
# TROPOMI (Sentinel-5P) — 2600 km nominal, nadir-pointing (no tilt, unlike
# Sentinel-3); NRTI footprints reach ~1366 both sides.
- { noradId: 42969, name: SENTINEL-5P, swathStarboardKm: 1375, swathPortKm: 1375 }
# OLI (Landsat) — 185 km total.
- { noradId: 39084, name: LANDSAT 8, swathStarboardKm: 92.5, swathPortKm: 92.5 }
- { noradId: 49260, name: LANDSAT 9, swathStarboardKm: 92.5, swathPortKm: 92.5 }
# AVHRR/3 (MetOp) — 2900 km total.
- { noradId: 38771, name: METOP-B, swathStarboardKm: 1450, swathPortKm: 1450 }
- { noradId: 43689, name: METOP-C, swathStarboardKm: 1450, swathPortKm: 1450 }
# MERSI (Fengyun-3) — 2900 km total.
# Only the satellites carrying a confirmed MERSI variant are listed; the older
# Fengyun 3A/3B/3C and the newer 3G/3H are deliberately absent (see ADR-0002).
- { noradId: 43010, name: FENGYUN 3D, swathStarboardKm: 1450, swathPortKm: 1450 }
- { noradId: 49008, name: FENGYUN 3E, swathStarboardKm: 1450, swathPortKm: 1450 }
- { noradId: 57490, name: FENGYUN 3F, swathStarboardKm: 1450, swathPortKm: 1450 }
# SGLI (GCOM-C) — 1150 km total.
- { noradId: 43065, name: GCOM-C (SHIKISAI), swathStarboardKm: 575, swathPortKm: 575 }