Skip to main content

Real-sky astrology birth chart CLI.

Project description

Hoshi

A CLI for astrological charting, with a focus on real-sky astrology. Inspired by Nuastro.

Traditional astrology divides the sky into 12 equal 30° signs. Real-sky astrology uses the actual IAU constellation boundaries — 13 unequal signs along the ecliptic, including Ophiuchus — which makes charting by hand significantly more difficult. Hoshi handles the calculation, using JPL-grade ephemerides (Skyfield DE421 for planets, JPL Horizons for Chiron and the lunar nodes).

Setup

Requires Python 3.11+ and uv.

uv sync
uv tool install --editable .     # puts `hoshi` on your PATH (~/.local/bin/hoshi)

--editable means source changes take effect immediately. If you change pyproject.toml dependencies, re-run with --reinstall. To remove: uv tool uninstall hoshi.

On first run, Skyfield downloads de421.bsp (~17 MB) into the current directory. Chiron and lunar (node/Lilith) lookups hit JPL Horizons and are cached in ~/.cache/hoshi/.

Commands

hoshi chart add      NAME DATE [TIME] [--lat LAT] [--lon LON] [--tz TZ] [--mode MODE] [--houses SYS]
                                      [--details] [--aspects] [--group-by category|sign|house]
                                      [--cusps] [--force]
hoshi chart show     NAME|DATE [TIME] [--lat LAT --lon LON] ...
                                      [--format table|json] [--compare-houses]
hoshi chart cusps    NAME|DATE [TIME] [--lat LAT --lon LON] ... [--mode MODE] [--houses SYS]
hoshi chart transits NAME [DATE [TIME]] [--tz TZ] [--mode MODE] [--houses SYS]
                                        [--details] [--aspects] [--natal]
hoshi chart compare  NAME1 NAME2        [--mode MODE] [--houses SYS] [--aspects] [--details]
hoshi chart list
hoshi chart delete   NAME [--yes]

NAME|DATE — pass a saved chart name, or a YYYY-MM-DD date with --lat/--lon for a one-off chart.

--lat and --lon are optional for chart add — omit either or both if the birth location is unknown. If time is also omitted, only the date is stored. Placements computed from unknown inputs are shown in yellow with a warning; angles and houses are omitted entirely when time or location is unknown.

Options

--mode

Mode Description
realsky (default) IAU real-sky boundaries — 13 unequal signs including Ophiuchus
tropical Standard 12 equal 30° signs from the vernal equinox
vedic Sidereal: tropical longitudes minus the Lahiri ayanamsa

--houses

System Description
porphyry (default) Trisects the quadrants
equal Equal 30° houses from the Ascendant
placidus Time-based Placidus division
arc13 13-arc wheel with widths matching the IAU constellation boundaries

--details

Expands the display to include all six angles (Asc, MC, IC, Dsc, Vertex, Antivertex), true lunar nodes, Black Moon Lilith, seven Hermetic lots, planetary dignities, and element/modality tallies.

--aspects

Prints aspect tables grouped by type (Major / Minor / Micro). Without --details, aspects are computed for planets + Ascendant only; with --details, all chart bodies are included.

--group-by sign|house

Alternative layout grouping bodies by zodiac sign or house instead of category. --group-by house labels each house with its cusp sign and includes empty houses.

--format json

Outputs a mode-specific JSON summary instead of the Rich table. Includes body placements, house assignments, and cusp longitudes. Useful for scripting or piping into other tools. When time or location is unknown, the JSON includes a "warnings" array and an "approximate": true flag on affected body entries.

Bodies

Planets

Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Chiron

Angles

Ascendant, Midheaven (MC), Imum Coeli (IC), Descendant, Vertex, Antivertex

Calculated points

  • N.Node / S.Node — True (osculating) lunar nodes from JPL Horizons
  • Lilith — True Black Moon Lilith: ascending node + argument of perigee + 180°

Hermetic lots

Fortune, Spirit, Eros, Necessity, Courage, Victory, Nemesis

Aspects

Class Aspects Orb
Major Conjunction (0°), Opposition (180°), Trine (120°), Square (90°), Sextile (60°)
Minor Inconjunct (150°), Semi-sextile (30°), Semi-square (45°), Sesquiquadrate (135°)
Micro Quintile (72°), Bi-quintile (144°), Septile (360°/7)

Dignities

The Planets table in --details shows a dignity indicator per planet:

Symbol Dignity
Domicile
Exaltation
Detriment
Fall

Assignments follow standard conventions adapted for the 13-sign real-sky scheme (Chiron domicile = Ophiuchus).

Transits

hoshi chart transits person               # current moment vs natal
hoshi chart transits person 2026-01-01    # specific date (noon UTC)
hoshi chart transits person 2026-01-01 14:30 --tz America/Chicago
hoshi chart transits person --natal       # side-by-side natal vs transit table
hoshi chart transits person --aspects     # inter-aspects (natal × transit)

Computes current (or specified date) planetary positions and places them against the saved natal chart. The house column (H) always shows which natal house each transiting planet falls in, using the natal chart's cusps.

--natal adds a side-by-side table showing each body's natal sign/degree alongside its current transit sign/degree. --details and --aspects work the same as in other commands.

Synastry

hoshi chart compare person1 person2 --aspects
hoshi chart compare person1 person2 --aspects --details

Computes inter-aspects between two saved charts. Body selection respects --details the same way single-chart aspects do.

Accuracy notes

Reference frame

All ecliptic longitudes are in the equinox of date frame, matching standard astrological convention. Skyfield's ecliptic_latlon() defaults to J2000, so epoch=t is passed explicitly. The IAU constellation boundaries are J2000-fixed; Hoshi applies the precession offset at lookup time so sign assignments stay consistent with the of-date planet positions.

Per-body accuracy

  • Planets: Skyfield + JPL DE421 — sub-arcsecond
  • Chiron: Horizons OBSERVER ephemeris, cached per minute
  • Nodes / Lilith: Horizons ELEMENTS API (Moon osculating elements), cached per minute
  • Angles / cusps: standard formulas with a linear obliquity model — accurate to under 1′ for 20th–21st century dates
  • Lahiri ayanamsa: linear approximation anchored at J2000 — adequate for chart display

Project layout

hoshi/
  ephemeris.py   Skyfield positions, Horizons fetch, JSON cache helpers
  zodiac.py      IAU real-sky boundaries, tropical and sidereal placements
  houses.py      Placidus, Porphyry, Equal, Arc-13 cusps; angles
  points.py      True lunar nodes, Black Moon Lilith, Hermetic lots
  chart.py       Chart.build() — assembles all bodies
  aspects.py     Aspect detection (single-chart and inter-chart)
  dignities.py   Dignities table, element/modality tallies
  store.py       JSON persistence for named charts (./charts/)
  cli.py         Typer entry point

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hoshi_astro-1.10.0.tar.gz (397.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hoshi_astro-1.10.0-py3-none-any.whl (59.2 kB view details)

Uploaded Python 3

File details

Details for the file hoshi_astro-1.10.0.tar.gz.

File metadata

  • Download URL: hoshi_astro-1.10.0.tar.gz
  • Upload date:
  • Size: 397.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hoshi_astro-1.10.0.tar.gz
Algorithm Hash digest
SHA256 7b3fb38d9de3023ff4e407cdc8c5172ed044b8d55e14424a04305f07a9e1e4f9
MD5 358da7eeaa88f5f94f0a1165db216354
BLAKE2b-256 cea12f23c5217d59279367bc31627504a8385598bafe483115aa015155dd3e10

See more details on using hashes here.

Provenance

The following attestation bundles were made for hoshi_astro-1.10.0.tar.gz:

Publisher: release.yml on trey-gonsoulin/hoshi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hoshi_astro-1.10.0-py3-none-any.whl.

File metadata

  • Download URL: hoshi_astro-1.10.0-py3-none-any.whl
  • Upload date:
  • Size: 59.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hoshi_astro-1.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf771942a2345ac7e098df893e2c6ca2c0a9676b3651c36c42c3c643084c30cf
MD5 0252cf75faa7817e87ad45ae59b0b1ad
BLAKE2b-256 b8ea29ed1b6fcfa8df37bb184166c1afc1d96ddcf26eb08f5f157759d3b1af9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for hoshi_astro-1.10.0-py3-none-any.whl:

Publisher: release.yml on trey-gonsoulin/hoshi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page