Transit Nebula I
A technical account of how planetary positions are calculated, how scores are derived, and where the precision of this implementation sits relative to professional-grade ephemeris tools. Written for astrologers and technically curious visitors.
Transit Nebula I works with two sets of planetary positions: a natal chart (the sky at the moment and place of your birth) and a transit chart (the sky at the current moment, recalculated every time the page loads).
For each of 8 planetary bodies, we compare natal position against current position using angular separation. That separation becomes a score between 0 and 1, which drives both the color weight of your nebula and the energy level shown in your daily reading. This is the core logic of transit astrology — comparing the moving sky against a fixed birth snapshot.
We track 8 bodies, each mapped to a life domain. All positions are computed as ecliptic longitudes (0–360°).
| Body | Domain | Color |
|---|---|---|
| ☀ Sun | Vitality, identity, self-expression | #ff8c0d |
| 🌙 Moon | Intuition, emotion, inner life | #66a6ff |
| ☿ Mercury | Mind, communication, perception | #00f2f2 |
| ♀ Venus | Love, beauty, desire, values | #ff3399 |
| ♂ Mars | Drive, action, will, conflict | #e61900 |
| ♃ Jupiter | Abundance, expansion, philosophy | #1ad64d |
| ♄ Saturn | Structure, discipline, limits | #8019ff |
| ⛢ Uranus | Awakening, disruption, originality | #cc00ff |
Neptune, Pluto, Chiron, and the lunar nodes are not currently included. Their omission is a scope decision, not a statement about their astrological significance.
For each planetary body, we compute the angular difference between its natal longitude and its current transit longitude. The angular separation is reduced to the 0–180° range (i.e., we take the shorter arc). This is then mapped linearly to a score:
angularDiff = min(|transitLon − natalLon|, 360 − |transitLon − natalLon|)
score = clamp(1.0 − angularDiff / 180.0, 0, 1)
This produces a score of 1.0 at exact conjunction (0° separation), 0.5 at square (90°), and 0.0 at opposition (180°). The score is a continuous linear measure of proximity — it does not apply orbs, aspect weights, or dignity weighting. It is intentionally simple: closer = more activated.
This approach treats all separations as equally meaningful along a gradient. A professional interpretation would weight conjunctions and oppositions differently, apply orbs, and consider whether aspects are applying or separating. We acknowledge these omissions — the scoring is designed for generative art, not chart analysis.
Planetary positions are calculated entirely client-side using mathematical algorithms derived from Jean Meeus, Astronomical Algorithms (2nd ed.) — a widely used reference for computing celestial mechanics without a live ephemeris service.
All computation runs in JavaScript in the visitor's browser. There is no server, no external API call, and no third-party astrology service involved. Every page load independently recalculates all positions from scratch using new Date() for the current moment.
The Meeus approximations are accurate for artistic purposes but are not a substitute for professional-grade ephemeris software. For comparison:
The professional standard is the Swiss Ephemeris (developed by Astrodienst, used by Co-Star, TimePassages, astro.com, and most serious astrology software). It achieves sub-arcsecond accuracy across millennia. The tradeoff here was zero external dependencies and a self-contained HTML file — worthwhile for a generative art context, but worth noting for anyone using this as an astrological reference.
Transit Nebula I is a work of generative art, not a chart service. The astrological framework is the conceptual and mathematical spine of the piece — the intent is sincere, even where the implementation is simplified.
If you practice astrology and have thoughts on the scoring approach, the choice of axes, or how the methodology could be improved or more accurately described, we'd genuinely welcome that conversation. This page exists specifically to be transparent enough to make that dialogue possible.
The work is by Chuck, at chuck.neoteric.art.