AetherField runtime ephemeris
Project description
AetherField
AetherField is a lightweight, modular system for computing astrological positions, signs, and alignments across multiple time representations. This is meant to replace the frozen or outdated zodiac libraries, with a dynamic stellar gazing tool.
It is designed to sit cleanly on top of my own temporal layer moontime while remaining flexible enough to integrate with external systems such as Skyfield.
At its core, AetherField answers a simple question:
Given a moment in time, where are the bodies — and what do they mean?
✨ Features
-
🌌 Compute zodiac signs for planetary bodies
-
🔭 Support for multiple time inputs:
datetimeMoonTime- Skyfield
Time
-
🧭 Longitude calculations (tropical + draconic)
-
🧬 Calibration system:
- No calibration (pure baseline)
- Local calibration (user-defined)
- Hosted calibration (auto-fetched)
-
🖥️ CLI interface with automatic calibration
📦 Installation
pip install aetherfield
🚀 Quick Example
from aetherfield import AetherField as af
def example():
from skyfield.api import load
from datetime import datetime, timezone
from moontime import MoonTime
dt = datetime.now(timezone.utc)
a = af() # No calibration
b = af.load_calibration(caled) # Local calibration
c = af.load_calibration('AetherField') # Hosted calibration
print("No calibration:", a.sign(dt=dt, body="sun"))
print("Local calibration:", b.sign(dt=dt, body="sun"))
print("Hosted calibration:", c.sign(dt=dt, body="sun"))
print("Full suite:", c.alignments(dt=dt))
ts = load.timescale()
sf = ts.from_datetime(dt)
print("From skyfield time:", c.sign(dt=sf, body="sun"))
mt = MoonTime.from_datetime(dt)
print("From moontime:", c.sign(dt=mt, body="sun"))
print("Longitude:", c.longitude(dt=mt, body="sun"))
print("Draconic:", c.longitude(dt=mt, body="ascending_node"))
if __name__ == "__main__":
example()
Example Output
No calibration: Gemini
Local calibration: Aries
Hosted calibration: Aries
Full suite: {
'sun': 'Aries',
'moon': 'Gemini',
'mercury': 'Pisces',
'venus': 'Aries',
'mars': 'Pisces',
'jupiter': 'Gemini',
'saturn': 'Pisces',
'uranus': 'Aries',
'neptune': 'Pisces',
'pluto': 'Capricorn',
'ascending_node': 'Aquarius',
'descending_node': 'Leo'
}
From skyfield time: Aries
From moontime: Aries
Longitude: 30.42190333085091
Draconic: 336.2217926416203
🧭 Core Concepts
AetherField Instance
a = af()
Creates a baseline field with no calibration applied.
Calibration
Calibration adjusts how positions are interpreted.
b = af.load_calibration("my_calibration.json") # Local calibration
c = af.load_calibration("AetherField") # Hosted calibration
- Local: Your own dataset or tuning
- Hosted: Pulled automatically from a remote source
Sign Lookup
c.sign(dt=dt, body="sun")
Returns the zodiac sign for a given celestial body.
Full Alignment
c.alignments(dt=dt)
Returns all tracked bodies in a single call.
Longitude
c.longitude(dt=dt, body="sun")
Returns the raw longitude in degrees.
Supports:
- Standard (tropical)
- Draconic (nodes-based)
⏳ Time Input Flexibility
AetherField accepts multiple time formats seamlessly:
Python datetime
c.sign(dt=datetime.now(timezone.utc), body="sun")
MoonTime
mt = MoonTime.from_datetime(dt)
c.sign(dt=mt, body="sun")
Skyfield
ts = load.timescale()
sf = ts.from_datetime(dt)
c.sign(dt=sf, body="sun")
🖥️ CLI Usage
AetherField includes a command-line interface.
aetherfield --body sun
Example
sun @ 2026-04-23T02:05:39.166446+00:00
Aether: 30.398 deg (Aries)
aetherfield --body moon
moon @ 2026-04-23T02:09:49.959350+00:00
Aether: 110.767 deg (Gemini)
The CLI automatically pulls hosted calibration when available.
🧬 Design Philosophy
AetherField is built to be:
- Composable → Works with external time systems
- Deterministic → Same input, same output
- Extensible → Calibration layers evolve without breaking core logic
- Decoupled → Time, data, and interpretation remain separate
🌙 Ecosystem
AetherField pairs naturally with:
moontime→ temporal framework- Skyfield → astronomical precision
🧪 Status
Early release. Core systems are stable, but APIs may evolve as calibration and data layers expand.
🕯️ Closing Note
AetherField doesn’t try to define meaning.
It provides structure — positions, alignments, relationships.
What you build on top of that… is entirely yours.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aetherfield-0.3.9.tar.gz.
File metadata
- Download URL: aetherfield-0.3.9.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8da363f12d47784a628a3f111ca3229667b0908a25e67135049c5b41a187f32
|
|
| MD5 |
e1ab45122b9237e92dc27751949a9866
|
|
| BLAKE2b-256 |
6fd35aa876a507c8c37347ecc55534b5f3c19b619bc902111818b97493cc8d0b
|
File details
Details for the file aetherfield-0.3.9-py3-none-any.whl.
File metadata
- Download URL: aetherfield-0.3.9-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb1f7e8b0bb9d663c6a984a8181213c850ed498ccd71faac4d76f66c26f5a1ed
|
|
| MD5 |
9f93d9ce97d79db5a18f6146fd073207
|
|
| BLAKE2b-256 |
a6ea898dc7d76ce97f692c494a390cbb337bec33ec718a04c62a666676e5a3bd
|