{"id":49671864,"url":"https://github.com/alexmensch/stellata","last_synced_at":"2026-07-19T11:01:56.301Z","repository":{"id":354830977,"uuid":"1223453941","full_name":"alexmensch/stellata","owner":"alexmensch","description":"Explore the universe. An observational 3D model spanning planets to the Local Group, with every object from a published catalogue. ~330k stars with live apparent magnitudes and physical-size discs, ~120 dwarf galaxies, 3D interstellar dust extinction, live solar-system ephemerides, volumetric Milky Way. WebGL2 + Three.js on Cloudflare Workers.","archived":false,"fork":false,"pushed_at":"2026-07-17T17:57:51.000Z","size":88829,"stargazers_count":4,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-17T19:28:22.423Z","etag":null,"topics":["astronomy","cloudflare-workers","data-visualization","star-catalog","three-js","typescript","webgl2"],"latest_commit_sha":null,"homepage":"https://stellata.xyz","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexmensch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"alexmensch"}},"created_at":"2026-04-28T10:40:30.000Z","updated_at":"2026-07-17T15:18:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alexmensch/stellata","commit_stats":null,"previous_names":["alexmensch/starfield","alexmensch/stellata"],"tags_count":147,"template":false,"template_full_name":null,"purl":"pkg:github/alexmensch/stellata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmensch%2Fstellata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmensch%2Fstellata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmensch%2Fstellata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmensch%2Fstellata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexmensch","download_url":"https://codeload.github.com/alexmensch/stellata/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmensch%2Fstellata/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35650226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-19T02:00:06.923Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astronomy","cloudflare-workers","data-visualization","star-catalog","three-js","typescript","webgl2"],"created_at":"2026-05-07T00:02:09.990Z","updated_at":"2026-07-19T11:01:56.249Z","avatar_url":"https://github.com/alexmensch.png","language":"TypeScript","funding_links":["https://github.com/sponsors/alexmensch"],"categories":[],"sub_categories":[],"readme":"# Stellata\n\nA browser-based interactive 3D star catalog viewer. Loads the classic-IDs\nsubset of the [AT-HYG catalog](https://codeberg.org/astronexus/athyg)\n(~313k stars) and renders it on the GPU with per-frame, camera-relative\napparent magnitude, filterable by distance, magnitude, spectral class,\nand constellation.\n\nStack: TypeScript, Three.js (WebGL2), Vite, Cloudflare Workers.\n\n## Features\n\n- All 313k stars rendered on the GPU as instanced quads. Each frame, each\n  star's apparent magnitude is recomputed from the current camera position.\n- **Physical-size rendering at close range.** Stars' rendered size blends\n  between a brightness-based point glow (distant) and a resolved disc\n  whose radius comes from the catalog absmag + spectral class via Stefan–\n  Boltzmann. Supergiants like Betelgeuse fill up to 50% of the viewport\n  at maximum zoom-in; white dwarfs render as crisp small points. Discs\n  are opaque and occlude anything behind them; distant stars still\n  accumulate additively so dense fields stay bright.\n- **Luminosity-class visual differentiation.** Halo falloff and disc edge\n  softness scale with the MK luminosity class — crisp edges for white\n  dwarfs, fuzzy extended atmospheres for hypergiants.\n- **Variable-star pulsation.** ~3,700 stars cross-matched with the GCVS\n  catalogue. Pulsate both in apparent-magnitude-driven point size (distant)\n  and physically in disc radius (close). Time compressed so Cepheids cycle\n  in a few seconds, Miras in ~minute, Betelgeuse takes ~8 minutes.\n- **Binary-system rendering.** Two-pass flagging surfaces ~13k visual\n  doubles for chart mode. Geometric inference catches catalog pairs\n  within ~1030 AU of each other (~14 systems where AT-HYG carries both\n  components, e.g. α Cen). The Hipparcos CCDM × MultFlag cross-match\n  catches the rest — Sirius, Mizar, Castor, Albireo, γ And, ε Lyr,\n  Algol, 70 Oph, Polaris, … — using the published double-multiple\n  cross-reference filtered to physical components (`MultFlag ∈ {C, G,\n  O}`) so wide line-of-sight optical pairs (Vega, Pollux, …) don't\n  flag. When focused on a geometrically-paired binary member,\n  `minDistance` bumps so both components stay in the viewport.\n- Filter by distance from Sol, maximum apparent magnitude (with `naked eye` /\n  `binoculars` / `all` presets), spectral class, and constellation. The\n  presets carry physically calibrated angular star sizes (Gaussian-PSF\n  detection-threshold model with √Δm scaling) plus magnitude limits — m ≤\n  6.5 for naked eye, 10.5 for 7×50 binoculars, 15 for the catalog\n  ceiling. Manual size/dynamic-range tweaks survive preset switches and\n  viewport resizes; per-section reset buttons snap each field back to\n  the active preset.\n- User-tunable camera FOV (default 50° vertical, slider 10°–120°). Star\n  sizes recompute against the new arcsec-per-pixel ratio so they stay\n  proportional to the volumetric Milky Way bulge regardless of FOV or\n  screen size.\n- User-tunable star-size exaggeration (slider, 1=Realistic to 20=Extreme).\n  Drives the scale on the eye PSF used to compute angular star sizes,\n  per magnitude preset (defaults: naked-eye = 12, binoculars = 9,\n  all = 5 — wider catalogs use a smaller K so the denser star population\n  doesn't wash out the field). The slider drives whichever preset is\n  currently active. At low values the sky reads close to literal physics\n  (most stars go sub-pixel and are floored to 1 px); at high values the\n  brightest stars dominate the frame.\n- Click a star to focus; click another to draw a measured distance vector\n  (chevron-marked, clipped when the destination goes off-screen); click the\n  far tip to travel there instantly, or hover the distance label and click\n  the \"→ Warp\" affordance (or press `W`) for an animated flight between the\n  two stars.\n- **Star chart mode** (observe-only). Press `M` while in observe mode\n  to flip the scene to a paper-chart aesthetic inspired by Sky Atlas\n  2000.0 — flat hard-edged star discs sized linearly by magnitude\n  across the visible range, and a per-frame label engine that draws\n  proper-named stars, every Bayer-letter Greek glyph, and constellation\n  Latin names (outline-style overlay typography that's allowed to\n  overlap) with greedy collision avoidance. Variable stars get an outer\n  ring around an inner pulsing disc; double / multiple stars get short\n  horizontal wings through the disc. Disabled automatically when\n  leaving observe mode.\n- Two camera modes via the navigate / observe pill in the top-right card.\n  **Navigate** is the default orbit camera. **Observe** parks the camera\n  at the focused star (the star's disc itself is hidden; you're standing\n  on it) and switches to a custom look-around controller — drag to yaw +\n  pitch (clamped at the poles, FPS-style), wheel adjusts FOV, two-finger\n  roll still tilts the horizon. The optional **head-up display** adds a\n  translucent screen-centred ring (sized in angular units, so it scales\n  with FOV) and Sol / Galactic-Centre locator arrows that tangent the\n  ring rim and swivel as you look around; the focus ring smoothly morphs\n  into the HUD ring through the navigate↔observe transition so the\n  arrow attachment slides instead of popping. Picking a new \"Location\"\n  while in observe re-uses the warp animation to fly to the new anchor;\n  on arrival, the camera slerps back to the same celestial direction it\n  was facing at warp start, so the user sees the same patch of sky from\n  a different vantage with all the parallax that implies.\n- Per-star \"approach distance\" — the camera's near-star landing distance\n  (warp arrival, observe-exit, orbit-min clamp) is computed per-star so\n  the disc renders at a uniform on-screen size regardless of stellar\n  radius. Supergiants land much further away than dwarfs but read the\n  same visual size at parking. Single tunable in `stellata.ts`\n  (`TARGET_APPROACH_DISC_PX`).\n- Dual search inputs: one for focusing, one for measurement destination.\n  Matches proper names (fuzzy), Bayer designations (`α Cen` / `Alpha Cen` /\n  `Alf Cen` all work), Flamsteed numbers (`58 Ori`), and numeric catalog\n  IDs (`HIP 27989`, `HD 39801`, `HR 2061`, `Gl 559A`) via direct lookup.\n- Hover any star for a detailed tooltip — name, constellation, distance,\n  full spectral classification (preserving composite/peculiar markers like\n  `K0III+K7V`), and, for variables, period + magnitude amplitude.\n- Constellation overlay draws the classical stick-figure asterism lines\n  (sourced from Stellarium's HIP-indexed sky culture data). The figure\n  deforms in true 3D as the viewpoint moves away from Sol, leaves a\n  gap around every figure-star, and is masked behind a close-range\n  resolved disc so lines appear to pass behind the star rather than on top.\n- **Per-star interstellar dust extinction.** Edenhofer 2023's 3D dust map\n  resampled onto a 512³ ICRS voxel grid (~1.25 kpc cube), served as 64\n  chunks via Git LFS and progressively uploaded to a `Data3DTexture` on\n  the client. The vertex shader raymarches camera-to-star at run time\n  and dims + reddens stars by line-of-sight A_V — so stars behind dense\n  dust look fainter and redder, exactly as you'd see them.\n- **Galactic reference layers** to anchor the local catalog against the\n  Milky Way's geometry: an always-on translucent disc outline (15 kpc\n  midplane + bulge wireframe) that fades in as the camera pulls away\n  from Sol, plus a toggleable galactic coordinate sphere (equator + lat\n  circles every 10° + meridians every 10°). The Sol / Galactic-Centre\n  locator arrows live on the head-up display (its own toggle), with live\n  distance labels — clickable to slerp the camera toward the named\n  object.\n- **Milky Way volumetric background.** A bounded raymarch through two\n  galactic-scale proxy meshes (a flattened disc + an oblate bulge,\n  both anchored at the galactic centre) produces an integrated\n  surface-brightness band that responds correctly to camera position\n  from anywhere in the galaxy — fly past the GC and the band reorients\n  with proper parallax, not as a painted backdrop. Includes analytical\n  mid-plane dust with wavelength-dependent reddening so the dark dust\n  lane reads correctly.\n- Scale bar in the bottom-left adapts to the current zoom in round pc or ly\n  units.\n- URL state sync: all settings plus camera pose are packed into a single\n  opaque `?v=…` query param, so any view is bookmarkable and shareable.\n  Typical share links are 25–40 characters; default state has no `?v=`\n  at all.\n- Top-left brand surface with always-visible **About** and **Credits**\n  modals (data sources, citations, licence) — both reuse the welcome-modal\n  styling.\n- First-visit welcome modal with a \"Don't show this again\" opt-out\n  (persisted to `localStorage`).\n- Mobile-friendly responsive layout (pure CSS flex, no breakpoints). The\n  settings panel collapses as a whole and each section (Navigation /\n  Stars / Overlays / Camera) collapses independently; both states persist\n  per-group across visits.\n- Constellation picker is a typeahead — type the name or 3-letter IAU\n  code, or focus the empty field to browse the full alphabetised list.\n  A \"None\" entry at the top of the list clears the highlight.\n- Targeted reset buttons next to star size, dynamic range, field of\n  view, and exaggeration controls.\n- Two-finger rotate gesture to roll the view around the center of the\n  screen. See [Gesture support](#gesture-support) for platform notes.\n- **Keyboard shortcuts** for power users. `?` opens a help overlay\n  listing the full set; highlights: `G` opens a centred picker that\n  mirrors the topbar search (focus / destination / observe-location\n  depending on context), `C` does the same for constellations (double-tap\n  to toggle the constellation lines on or off), `O` switches to observe\n  mode when a star is focused, `M` toggles chart mode (observe only),\n  `H` / `S` toggle\n  the HUD and galactic-coordinate sphere, `+` / `-` / `=` step the\n  magnitude limit by 0.5 or reset to naked-eye, `R` resets the camera\n  sliders, and `Esc` steps back through observe → destination →\n  focus.\n\n## Prerequisites\n\n- Node 20+\n- [Git LFS](https://git-lfs.com/) installed — the catalogue source files\n  are tracked via LFS. A clone without LFS will check out pointer stubs\n  instead of the real content and the preprocessor will fail.\n\n## Setup\n\n```bash\ngit lfs install        # one-time, if you haven't already\ngit clone \u003cthis-repo\u003e\ncd stellata\nnpm install\n```\n\nAll catalogue source files (AT-HYG, GCVS, Stellarium, Zucker, Edenhofer\ndust) are included in the repo — no manual downloads needed. The dust\nvoxel chunks (~120 MiB total) and stellar catalogue ride on Git LFS, so\nmake sure that's installed before cloning.\n\n## Running\n\n```bash\nnpm run dev\n```\n\nThis runs the preprocessor (regenerating `public/catalog.bin` if the source\nCSV has changed) and starts Vite on \u003chttp://localhost:5173\u003e.\n\n### Other commands\n\n| Command                  | What it does                                          |\n| ------------------------ | ----------------------------------------------------- |\n| `npm run build:catalog`  | Regenerate `public/catalog.bin` from the CSV          |\n| `npm run build:clouds`   | Regenerate `public/clouds.json` from the Zucker tables |\n| `npm run build:dust-sync`| Mirror `data/dust/` voxel chunks to `public/dust/`    |\n| `npm run build`          | Full production build into `dist/`                    |\n| `npm run typecheck`      | `tsc --noEmit` over everything                        |\n| `npm test`               | Run the vitest regression suite                       |\n| `npm run test:coverage`  | Vitest run with v8 coverage report                    |\n| `npm run deploy`         | `wrangler deploy` (requires Cloudflare auth)          |\n\n## Deploying to Cloudflare Workers\n\n`wrangler.toml` is configured to serve `dist/` via the Workers static-assets\nbinding. After authenticating wrangler:\n\n```bash\nnpm run build\nnpm run deploy\n```\n\nNo additional services (R2, KV, D1) are used — the ~13 MB catalog binary\nand the ~13 MB JSON search index ship as static assets alongside the\nHTML/JS. Both compress well (~2 MB each gzipped), so the wire transfer\nis moderate even on mobile networks.\n\n## Data sources\n\n| File | Purpose | Source | Size |\n| --- | --- | --- | --- |\n| `data/athyg_33_classic_ids.csv` | Stellar catalogue | [AT-HYG v3.3 subsets on Codeberg](https://codeberg.org/astronexus/athyg/src/branch/main/data/subsets) | ~64 MB, LFS |\n| `data/gcvs5.txt` | Variable-star periods + amplitudes | [GCVS 5.1 · Sternberg Astronomical Institute](http://www.sai.msu.su/gcvs/gcvs/index.htm) | ~14 MB, LFS |\n| `data/crossid.txt` | GCVS ↔ Hip/HD cross-references | same as above | ~12 MB, LFS |\n| `data/stellarium-modern-skyculture.json` | Classical constellation stick figures | [Stellarium modern sky culture](https://github.com/Stellarium/stellarium/tree/master/skycultures/modern) | ~200 KB |\n| `data/dust/chunk_*.bin` + `manifest.json` + `particles.bin` | Resampled 3D interstellar-dust grid for per-star extinction | [Edenhofer et al. 2023](https://doi.org/10.5281/zenodo.8187943) (Zenodo) — fetched via the `dustmaps` Python package and resampled by `scripts/build-dust.py` | ~120 MiB total, LFS |\n\nThe larger catalogue files are tracked via Git LFS so they don't balloon\nthe git pack. Small files (Stellarium JSON) stay as regular blobs.\nBuilds are fully self-contained — refresh from upstream is a manual,\ninfrequent step, not a build dependency.\n\nThe AT-HYG **classic-IDs** subset selects stars that have at least one\nclassical designation (IAU proper name, Bayer, Flamsteed, HIP, HD, HR, or\nGliese/Jahreiss) — ~317k stars.\n\n## Input data format\n\nThe preprocessor (`scripts/build-catalog.ts`) expects an AT-HYG v3.3\nclassic-IDs CSV, as produced by the\n[AT-HYG project](https://codeberg.org/astronexus/athyg). The columns it\nreads:\n\n| Column        | Required | Purpose                                                              |\n| ------------- | -------- | -------------------------------------------------------------------- |\n| `x0, y0, z0`  | yes      | Parsecs, equatorial, Sol at origin                                   |\n| `absmag`      | yes      | Absolute magnitude — drives the physical-radius computation          |\n| `dist`        | no       | Used only for the `dist \u003e 50,000 pc` outlier filter                  |\n| `ci`          | no       | B–V colour index (defaults to 0.65 when missing)                     |\n| `spect`       | no       | Parsed into spectral class, subclass, and luminosity class; full string carried for tooltip display |\n| `con`         | no       | 3-letter IAU constellation code (case-insensitive)                   |\n| `proper`      | no       | Human-readable star name                                             |\n| `bayer`       | no       | Bayer designation short code (e.g. `Alp`, `Alp-2`)                   |\n| `flam`        | no       | Flamsteed number                                                     |\n| `hip`         | no       | Hipparcos ID — also used for GCVS cross-match and Stellarium figures |\n| `hd`          | no       | Henry Draper ID — searchable, and GCVS cross-match fallback          |\n| `hr`          | no       | Yale Bright Star ID                                                  |\n| `gl`          | no       | Gliese / GJ ID                                                       |\n\nRows are dropped when any of `x0`, `y0`, `z0`, or `absmag` is missing, or\nwhen `dist` exceeds 50,000 parsecs.\n\nVariability data is cross-matched from GCVS at preprocessing time. Each\ncatalog star's HIP (then HD as fallback) is looked up in the GCVS cross-\nreference file to find its GCVS designation, which is then looked up in\nthe main GCVS file for period (days) and magnitude amplitude. Stars\nwithout a known period (constant, supernova, irregular variables) simply\ndon't pulse.\n\nThe renderer-facing `catalog.bin` carries positions, absmag, colour index,\nspectral + luminosity class, computed physical radius in solar radii, a\nbinary-companion pointer, variability period/amplitude, and the proper\nname. The search layer is a separate `search-index.json` carrying the\nfull identifier set per star plus the raw spectral string. Loaded in\nparallel at startup. See `CLAUDE.md` for the binary layout.\n\n## Browser requirements\n\n- **WebGL2** — the vertex shader uses GLSL ES 3.00 with `uint` uniforms and\n  bitwise operators for the spectral-class mask. All browsers from 2018\n  onward support this (Safari 15+, Chrome 56+, Firefox 51+).\n- Works on desktop and mobile. On narrow viewports the display-settings\n  panel collapses by default and floats above the scene.\n\n## Gesture support\n\nThe two-finger rotate gesture (roll the view around the screen center) is\navailable on:\n\n- **Mobile / touch** — iOS Safari, Android Chrome, any browser that exposes\n  multi-touch `touchmove` events.\n- **Desktop Safari** — via the macOS trackpad two-finger rotate gesture,\n  detected through Safari's non-standard `gesturechange` event.\n\nChrome and Firefox on desktop do **not** expose a rotate gesture (they\nconsume two-finger trackpad input for scroll/pinch only), so roll is\nunavailable in those browsers by design. All other navigation (orbit, zoom,\npan) works the same everywhere.\n\n## Known limitations\n\n- **Visible position jitter** when orbiting at the minimum distance from\n  stars that are far from the world origin — a float32 precision issue in\n  the vertex shader. Workaround: zoom out slightly.\n- **No IAU constellation *boundary* dataset.** The stick-figure asterism\n  lines are included (from Stellarium); the 1930 IAU region boundaries are\n  not.\n- **No proper motion over time.** Stars are rendered at their catalog\n  positions; they don't move as you'd see over astronomical timescales.\n- **Distance cap at 50,000 pc** — anything farther is treated as bad data\n  and dropped. The Milky Way is only ~30 kpc across, so this is fine for\n  anything in-galaxy, but it excludes catalogued extragalactic objects.\n- **Constellation assignments reflect the view from Sol.** The 3-letter\n  code is the IAU region the star appears in from Earth; stars in the same\n  \"constellation\" can be physically far apart.\n- **Variable-star pulsation uses a constant-temperature model.** Real\n  pulsating variables (Miras, Cepheids) split their brightness change\n  between radius change and temperature change; we model it as\n  `R ∝ √L` which over-attributes the swing to radius. Visually more\n  dramatic than real life, but simpler and single-model.\n- **Only ~3.7k variables pulse** — those successfully cross-matched\n  between AT-HYG (via HIP or HD) and the GCVS. Known variables that\n  lack a HIP/HD cross-reference, or whose entry in GCVS lacks a parseable\n  period, render as non-variable.\n- **Most secondaries aren't separately positioned** — the chart-mode\n  CCDM cross-match (above) flags ~13k primaries as visual doubles, so\n  the canonical naked-eye list (Sirius, Mizar, Castor, γ And, Albireo,\n  Algol, ε Lyr, 70 Oph, Polaris, …) all carry the binary glyph. But\n  AT-HYG only stores the *primary's* position for most of these, so\n  apart from α Cen-style cases caught by the geometric pass the\n  secondary doesn't render as its own disc — the wings glyph is the\n  only visible cue that the star is a multiple. Spectroscopic binaries\n  (components never separately catalogued) carry the wings glyph if\n  CCDM lists them but otherwise render as singletons.\n\n## Releases\n\nTagged releases live on the\n[Releases page](https://github.com/alexmensch/stellata/releases); each\nrelease page is the canonical changelog (auto-generated from merged\nPRs). The cut-a-release runbook is in [`RELEASING.md`](./RELEASING.md).\n\n## Licence\n\nThe code in this repository is licensed under AGPL-3.0-only. See [`LICENSE`](./LICENSE).\n\nThe **AT-HYG v3.3** catalog data used by this project is made available\nby David Nash under a CC-BY-SA-4.0 license. The generated `catalog.bin`\nand `search-index.json` are derivatives of that data and carry the same\nlicence. See the [AT-HYG repository](https://codeberg.org/astronexus/athyg)\nfor attribution requirements.\n\nThe **General Catalogue of Variable Stars (GCVS 5.1)** is maintained by\nSamus et al at the Sternberg Astronomical Institute, Lomonosov Moscow\nState University, and is free for research and educational use with\nattribution. See [http://www.sai.msu.su/gcvs/gcvs/](http://www.sai.msu.su/gcvs/gcvs/)\nfor citation details.\n\nThe **Hipparcos Main Catalogue** (ESA SP-1200, 1997) supplies the\nHIP↔CCDM↔MultFlag cross-reference used to flag visual doubles.\nHipparcos data is in the public domain; see\n[https://cdsarc.cds.unistra.fr/viz-bin/cat/I/239](https://cdsarc.cds.unistra.fr/viz-bin/cat/I/239)\nfor the CDS-hosted release notes. CCDM (Catalog of the Components of\nDouble and Multiple stars) is by Dommanget \u0026 Nys (1994).\n\nThe classical **constellation stick-figure** lines are taken from\n[Stellarium's modern sky culture](https://github.com/Stellarium/stellarium/tree/master/skycultures/modern).\nThe line data is MIT-licensed (illustrations, which this project does not\nuse, are separately under the Free Art License).\n\nThe **Edenhofer et al. 2023 3D dust map** is published on Zenodo under\nCC-BY-4.0 (DOI [10.5281/zenodo.8187943](https://doi.org/10.5281/zenodo.8187943)).\nThe resampled voxel grid in `data/dust/` is a derivative work and\ncarries the same licence; see the dataset page for citation details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmensch%2Fstellata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexmensch%2Fstellata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmensch%2Fstellata/lists"}