vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
무료 GFS·ECMWF 날씨 모델 지도 240시간 제공, 온도·강수·풍향·MSLP·500/850 hPa·상층 습도·수분 흐름 포함
Free GFS and ECMWF weather model maps to 240 hours: temperature, precipitation, wind, MSLP isobars, 500/850 hPa charts, upper-air humidity and moisture flux.
데이터Python · TypeScriptGitHub @ringsaturn온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
❄️Smooth weather animation in browser
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Xue (雪, pronounced /ɕɥɛ/, roughly "shweh"), Chinese for snow.
Live weather models, radar and satellite, played back in the browser: https://xue.ringsaturn.me
The title in the top-left corner switches between sources.
There is no server behind it. Every run is a set of per-variable Zarr v3
stores laid out for playback (quantized single-byte planes, small spatial
tiles × six consecutive steps per chunk, one shard per variable;
docs/zarr-profile.md) with a STAC catalog,
published as static files on a CDN. The page reads them with HTTP Range
requests: a Rust WebAssembly worker decodes chunks on demand, and a WebGL2
layer projects and colours them on the GPU. The same stores open in
Python with xarray or the xuepy wheel. Code is MIT or Apache-2.0.
The earlier single-file container, .xue (docs/format.md),
is no longer published and every decoder still reads it.
| Source | Grid · cadence | Newest run (UTC) |
|---|---|---|
NOAA GFS (gfs) | 0.25° global · hourly to F120, 3-hourly to F240 | |
GFS surface flux (sflux) | ~13 km Gaussian global · as GFS | |
ECMWF IFS open data (ecmwf) | 0.25° global · 3-hourly to F144, 6-hourly to F240 | |
ECMWF IFS open data 0.1° (ifs) | 0.1° global · as ecmwf, two hours later | |
ECMWF AIFS Single (aifs) | 0.25° global · 6-hourly to F360 | |
ECMWF IFS HRES via Open-Meteo (ifshres) | 0.1° global · hourly to F090, then 3- and 6-hourly to F360; 00Z/12Z | |
NOAA HRRR (hrrr) | 0.03° contiguous US · hourly to F18, hourly cycles | |
DWD ICON-EU (iconeu) | 0.0625° Europe · hourly to F78, 3-hourly to F120 | |
Météo-France ARPEGE (arpege) | 0.25° global · hourly to F48, 3-hourly to F102 | |
Recast WOOF-WRF (woof) | 0.005° (500 m) nest over Mount Fuji · hourly from F1 | showcase cases only, no live run |
NOAA GEFS-Aerosols (gefsaero) | 0.25° global · 3-hourly to F120 | |
NCEP CFSv2 (cfs) | T126 Gaussian / 1° global · 6-hourly F6–F6552 (39 weeks); 00Z/12Z | |
NOAA MRMS radar (mrms) | 0.02° contiguous US · 2 min, rolling 4 h | |
JMA precipitation nowcast (jma) | 0.005° Japan · 5 min, rolling 3 h | |
CMA radar mosaic (cma) | 0.0439° China · 6 min, rolling 3 h | |
Himawari-9 (himawari) | 0.04° disk at 140.7°E · 10 min, rolling 6 h | |
Himawari-9 over Japan (himawarijp) | 0.01° Japan box, 24–46°N 122–148°E · 10 min, rolling 3 h | |
GOES-19 East (goeseast) | 0.04° disk at 75.2°W · 10 min, rolling 6 h | |
The last column reads the source's live pointer: a forecast's cycle, or
the hour a rolling window starts at. Variables, grids and caveats per
source are in docs/sources.md. ?model=geo is a
mosaic of the geostationary imagers, a view rather than a dataset.
Requirements: Python ≥ 3.14 with uv, Node.js
≥ 22, a Rust toolchain with wasm-pack, and GDAL ≥ 3.8 with the GRIB
driver. Some sources need more (eccodes, om2nc, credentials); see
docs/contribution/setup.md.
uv sync # creates .venv with NumPy and the xuepy wheel
make check # verifies tool versions
make mvp # builds the latest GFS run and the frontend
make mvp MODEL=ecmwf # or another forecast: ifs, aifs, ifshres, sflux, hrrr, gefsaero, cfs, iconeu, arpege
make serve # serves the result on 127.0.0.1
The public NOAA and ECMWF buckets need no credentials.
Everything is static files on https://dataset.ringsaturn.me/xue/, read
with HTTP Range requests.
STAC catalog: catalog.json at the data root, one Collection per
source with a stable live Item, an Item per run, and the showcase cases
(docs/stac.md). The root's index.html lists them.
Zarr stores: every bundle of a run is in one shared bundles.zarr/
(and bundles.half.zarr/, …), a standard Zarr v3 store with CF
scale_factor / add_offset / _FillValue and time / latitude /
longitude coordinates, so xarray.open_zarr reads physical values
(docs/zarr-profile.md).
import pystac, xarray as xr
run = next(pystac.Catalog.from_file("https://dataset.ringsaturn.me/xue/catalog.json").get_child("gfs").get_items())
ds = xr.open_zarr(run.assets["tmp2m"].get_absolute_href())["tmp2m"]
Data API (experimental: no compatibility, reliability or freshness
guarantee): a read-only JSON API at https://xue-api.ringsaturn.me
(/v1/catalog, /v1/sources/{source},
/v1/point?source=&lat=&lon=&variables= with an optional ISO 8601
time or a pinned run; OpenAPI at /openapi.json; contract in
docs/api.md). The site does not depend on it.
Decoders: pip install xuepy (import xue) and the
xue crate
(API docs) read both containers.
Point products: tropical cyclone tracks (), airport METAR / TAF () and radiosonde soundings (), each a pointer, an index and one file per issue.
| Parameter | Values |
|---|---|
model | a source id from the table (aliases such as ifs, hres, radar, goes-east), or geo |
type | the field: tmp2m, prate, wind10m, solar, radar, hgt500, tmp850 / t850, rh700, qflux850 / vapor850, … (each isobaric field names its own level) |
lines | a pressure surface drawn as contours over the field (pressure, hgt500) |
case | a showcase case id; pins its dataset and run |
res | half (alias low): smallest reduced tier; full (alias high): full resolution |
particles | off hides the wind particles (also remembered per browser) |
stations | snd, apt, snd,apt or off: sounding and airport marks |
tc, tcagency, tcmodel, tcmembers | a tropical cyclone (<id> or off) and which tracks to draw |
backend | xue reads the .xue container where a run still ships one |
use_h264 | true opts into the WebCodecs H.264 companions where a run ships them |
lang, theme | one of eleven locales; light or dark |
Values are case-insensitive and unrecognized ones fall back to defaults.
The camera is in the fragment, #map=<zoom>/<lat>/<lon>; a link without
one opens on the dataset's region. Clicking the map pins a point: the
field's value, a meteogram from the same run, a skew-T from a radiosonde
within 150 km and the METARs and TAF of an airport within 40 km.
/compare.html?lat=<deg>&lon=<deg> lays every live forecast model at one
point on one clock: a block per model, a row per field
(?fields=tmp2m,prate,wind10m), five days hourly or fifteen days
three-hourly (?span=360), with the nearest airport's METARs above. Each
value is the model's nearest grid cell, never interpolated. The viewer's
point probe links here.
Cases are past weather events cropped to their region and hours, listed at
/showcase.html and played at /?case=<id>. A case is a checked-in JSON
file under showcase/cases/, built with make showcase CASE=<id> and
published permanently. See showcase/README.md.
docs/format.md (container and
bundle metadata), docs/zarr-profile.md,
docs/stac.md, docs/api.md (data API),
docs/encoder.md
(native encoder), docs/satellite.md,
docs/tc.md, docs/airport.md,
docs/sounding.md.docs/sources.md.docs/contribution/
(architecture, pipeline, setup, testing, publishing, releasing).CONTRIBUTING.md.Three things are licensed separately.
docs/ (the
container, the Zarr profile, the STAC catalog, the point products, the
data API), are licensed under CC BY 4.0, as the Zarr
specifications are. Implement them in anything; credit "the Xue
specification (github.com/ringsaturn/xue)".https://dataset.ringsaturn.me/xue/ (the stores,
the catalog, pointers, indexes and point products) is derived from the
sources below and keeps each source's terms, which every STAC Collection
names under license and providers. Xue's own contribution to those
objects (the layout, the quantization, the catalog) is licensed under
CC BY 4.0: credit the source as it asks and add "via
Xue (xue.ringsaturn.me)", for example Contains modified ECMWF open data
(CC BY 4.0), via Xue.The sources. Weather data comes from
NOAA GFS,
NOAA GEFS (the
GEFS-Aerosols member) and
NCEP CFSv2 (all three works of
the United States government and so in the public domain; NOAA requests
attribution and does not endorse this use)
and ECMWF open data,
the IFS and the AIFS (CC BY 4.0, © European Centre for Medium-Range Weather
Forecasts; this project distributes converted derivatives: "Contains
modified ECMWF open data"). The IFS HRES surface fields (ifshres) are
ECMWF's ~9 km operational forecast as Open-Meteo
forwards it under CC BY 4.0: "Adapted from ECMWF IFS by ECMWF, licensed
under CC BY 4.0", via Open-Meteo. Neither ECMWF nor Open-Meteo endorses
this use.
The other sources:
ICON-EU (iconeu): Source: Deutscher Wetterdienst
open data, under CC BY 4.0; based on data from Deutscher Wetterdienst,
gridded data quantized and reproduced graphically.
ARPEGE (arpege): Source: Météo-France, the
data.gouv.fr ARPEGE 0.25° packages,
under the Licence Ouverte / Etalab 2.0; quantized derivative.
HRRR, MRMS, GOES-East / GOES-West imagery and the SWPC OVATION aurora model are NOAA products, works of the United States government in the public domain; NOAA requests attribution and does not endorse this use.
JMA precipitation nowcast: Source: Japan Meteorological Agency website (出典:気象庁ホームページ), regridded and reclassified by jma-radar.
CMA radar mosaic: a product of the China Meteorological Administration (中国气象局国家气象中心, www.nmc.cn).
Himawari-9 imagery is the Japan Meteorological Agency's, distributed by NOAA; reprojected here, no endorsement implied by either agency.
Meteosat: Contains modified EUMETSAT Meteosat data 2026 (the year of distribution is stamped wherever the attribution is shown). Only the hourly Level 1 cycle, released by EUMETSAT under CC BY 4.0, is published; no endorsement implied.
Radiosonde soundings are WMO core data under the WMO Unified Data Policy — free and unrestricted, attribution of the original source requested. The originating national meteorological and hydrological services are the source of every ascent; the WMO WIS2 Global Cache is the distribution.
Airport METARs and TAFs come from the NOAA Aviation Weather Center's cache files (public domain).
The basemap is Protomaps-hosted vector tiles, © OpenStreetMap contributors.
This project is built with Claude Code, supported by a Claude Max (20x) subscription provided through Anthropic's Claude for OSS program. Thank you.
GOES-18 West (goeswest) |
| 0.04° disk at 137°W · 10 min, rolling 6 h |
Meteosat-12 (meteosat) | 0.04° disk at 0° · hourly, rolling 24 h |
NOAA SWPC aurora (aurora) | 1° global · 5 min, rolling 12 h |
docs/tc.md