The Sun's coronal magnetic field in 3D for any date since May 2010, with the heliophysics fleet placed in it. Recent days are computed nightly on the server; any other date is computed in the browser from an HMI rotation map. A static site: plain ES modules and three.js, no build step. Companion to HelioFleet, which supplies the spacecraft positions.
What the page shows, for each day:
- the photospheric radial field (GONG zero-point-corrected synoptic map, or SDO/HMI when GONG is unreachable) on the Sun
- PFSS field lines, closed and open, with open lines coloured by polarity
- the source surface (2.5 R☉) coloured by Br, and its neutral line
- the heliospheric current sheet: the neutral line carried outward and wound into a Parker spiral at the chosen solar-wind speed
- planets and spacecraft, each with its Parker spiral back to the source surface and the PFSS field line from there to its photospheric footpoint
python3 -m http.server 8811Then open http://localhost:8811/. How to use the viewer, and how everything
is computed, is on the guide page: guide.html.
The URL holds the full state (date, v, layers, lines, ext, view or
cam, rmax, scale, ss, rotate, panel, theme), so any view can be linked.
scripts/build_history.py keeps data/history/: one HMI Carrington-rotation map
per rotation since CR 2096 (hmi.Synoptic_Mr_small, or hmi.Synoptic_Mr averaged
down where only that exists), stored as gzipped int16 on the 180 × 360 sin-latitude
grid (about 85 kB each, 18 MB in all), and the daily Carrington positions of Earth,
the planets and the spacecraft. A date without a daily product is solved in a Web
Worker by js/pfss.js: spherical harmonics to degree 40, a 36 × 90 × 180 field grid,
RK4 tracing, the source-surface neutral line and connectivity, in about a second.
On the GONG map of 2026-10-17 it matches the sunkit-magex pipeline to a
source-surface correlation of 0.9998, a neutral line within 0.6°, open flux within
2%, and footpoints within about 1°. The page asks before computing, because the
current field is cleared first.
PFSS makes the field radial at the source surface, so open lines are extended
beyond it without a second solve: straight out (ext=radial) or, by default, as
Parker spirals at the chosen wind speed, the same kinematic continuation as the
current sheet and spacecraft connectivity. Off by default (layers with ext).
Dark and light themes; one hue per role in both. The field colours (open +, open −,
closed, current sheet) were validated as an all-pairs set in each theme against
its background: protan/deutan ΔE ≥ 9.8 (OKLab × 100), normal-vision ΔE ≥ 17, and
≥ 3:1 contrast (WCAG 2.1 SC 1.4.11). Values and the reasoning are in js/theme.js
and the guide's colour section. Re-validate before changing any of them.
Save & share → Save PNG / Save PDF writes the current view with a title band and legend.
Add embed=1 to any link for the scene alone, with a slim date bar and a link to
the full site; controls=0 hides the bar too. Share → Copy embed code in the
panel writes the code for the current view:
<iframe src="https://sr-dash.github.io/heliofield/?date=latest&view=earth&embed=1"
title="HelioField: the Sun's coronal magnetic field in 3D"
width="100%" height="560" style="border:0;border-radius:12px"
loading="lazy" allowfullscreen></iframe>A host page can drive the frame without reloading it, and hears back after each change. A date without a product snaps to the latest one on or before it:
frame.contentWindow.postMessage(
{ type: "heliofield:set", date: "2026-10-17", v: 500, view: "earth" }, "*");
addEventListener("message", (e) => {
if (e.data?.type === "heliofield:state") console.log(e.data.date, e.data.source);
});pip install -r requirements.txt
python scripts/build_day.py # today (UTC)
python scripts/build_day.py --date 2026-10-01 --to 2026-10-17
python scripts/build_day.py --prune # thin old historyEach day writes data/<date>/ (about 340 kB):
| File | Content |
|---|---|
meta.json |
map provenance, Carrington rotation, L0/B0, open flux, HCS polylines, fleet positions, footpoints |
br.png |
photospheric Br, 360×180 equirectangular, 8-bit, ±20 G, north up, column j at Carrington longitude j+0.5° |
ss.png |
source-surface Br, same grid, ±ss_scale G |
lines.bin |
every polyline as little-endian int16 Carrington xyz in units of 10⁻⁴ R☉; lengths in meta.counts (field lines first, then one per meta.connect entry) |
Everything is in the Carrington frame, so the page does no coordinate transforms. Spacecraft positions are read from HelioFleet's published ephemerides (heliocentric J2000 ecliptic) and converted for the map time.
Model choices: PFSS by sunkit-magex on the native GONG grid (180×360, 40 radial shells, Rss = 2.5 R☉), monopole removed. 740 lines per day, seeded by equal area near the surface, by |Br|1.5, and on the source surface so open field is sampled evenly. Connectivity is ballistic: a body at (r, φ) maps to the source surface at φ + Ω(r − Rss)/v, with Ω the Carrington sidereal rate, for v = 300–800 km/s.
Input: the last GONG mrzqs map of the day. GONG's server does not answer
GitHub's cloud runners, so when it cannot be reached within 15 s the build uses
the SDO/HMI daily synoptic frame from JSOC
(hmi.Mrdailysynframe_small_720s_nrt), provided its record date is that day.
JSOC keeps only the latest frame at that path, so the fallback serves the
nightly build; backfills need GONG. The frame's header is rebuilt (its CUNIT2
is sin(deg), and CRVAL1 is Carrington time with longitude increasing along
x) and it is averaged 2×2 onto GONG's 180×360 grid. meta.source records which
was used and the page shows it as a badge beside the date. On 2026-10-17 the two
agree in longitude to within a pixel (r = 0.72 between the maps).
GONG maps do not start at Carrington longitude 0 (CRVAL1 moves with the map);
to_equirect rolls the columns using the map's own WCS, and the flux-weighted
seeds are offset the same way.
.github/workflows/daily.yml rebuilds yesterday and today at 23:40 UTC and
keeps every day for 120 days, then one per Carrington rotation.
If HelioField helps your research, please cite it:
Dash, S. (2026). HelioField: the Sun's coronal magnetic field in 3D (Version 1.0.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23487231
That DOI always resolves to the latest release. Each release also has its own DOI on the Zenodo record; 10.5281/zenodo.23487232 is version 1.0.0. GitHub's Cite this repository button (from CITATION.cff) and the guide give APA and BibTeX references. Please also cite the data and model the field is built from: NSO/GONG or SDO/HMI, and PFSS (see the guide's references).
Bug reports, feature requests and model or data requests go through the
issue forms; see
CONTRIBUTING.md, the code of conduct
and the security policy. HelioField is released under the
MIT licence; CITATION.cff gives the citation.
scripts/make_icons.py regenerates the icons and the social-preview image.
HelioField is the companion to HelioFleet, which maps the spacecraft around the Sun and supplies their positions here. Both are by Soumyaranjan Dash.
Magnetograms: NSO/GONG and SDO/HMI (JSOC; rotation maps and daily frames). Ephemerides: JPL Horizons via HelioFleet. PFSS: sunkit-magex (SunPy project).