Skip to main content

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 celestial bodies?


✨ Features

  • 🌌 Compute zodiac signs for planetary bodies

  • 🔭 Support for multiple time inputs:

    • datetime
    • MoonTime
    • 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

def example():
    from skyfield.api import load
    from datetime import datetime, timezone
    from moontime import MoonTime

    
    # Three different instances with different calibrations:

    a = AetherField()  # No calibration
    b = AetherField.load_calibration("my_calibration.json")  # Local calibration
    c = AetherField.load_calibration('AetherField')  # Hosted calibration

    # Works with dt
    dt = datetime.now(timezone.utc)

    print("No calibration:", a.sign(dt=dt, body="sun"))  # No calibration
    print("Local calibration:", b.sign(dt=dt, body="sun")) # Local calibration
    print("Hosted calibration:", c.sign(dt=dt, body="sun")) # Hosted calibration

    print("Full suite:", c.alignments(dt=dt))
    
    # Works with skyfield time
    ts = load.timescale()
    sf = ts.from_datetime(dt)

    print("From skyfield time:", c.sign(dt=sf, body="sun"))

    # Works with moontime
    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

af = AetherField()

Creates a baseline field with no calibration applied.


Calibration

Calibration adjusts how positions are interpreted.

af = af.load_calibration("AetherField")
  • Hosted: Pulled from my server

Sign Lookup

af.sign(dt, "neptune")

Returns the zodiac sign for a given celestial body.


Full Alignment

af.alignments(dt)

Returns all tracked bodies in a single call.


Longitude

af.longitude(dt, "mars")

Returns the raw longitude in degrees.

Supports:

  • Standard (tropical)
  • Draconic (nodes-based)

⏳ Time Input Flexibility

AetherField accepts multiple time formats seamlessly:

Python datetime

af.sign(datetime.now(), "saturn")

MoonTime

af.sign(MoonTime.now(), "venus")

Skyfield

ts = load.timescale()
sf = ts.from_datetime(dt)
af.sign(sf, "jupiter")

🧬 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


Download files

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

Source Distribution

aetherfield-0.6.5.tar.gz (22.6 kB view details)

Uploaded Source

Built Distribution

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

aetherfield-0.6.5-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file aetherfield-0.6.5.tar.gz.

File metadata

  • Download URL: aetherfield-0.6.5.tar.gz
  • Upload date:
  • Size: 22.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for aetherfield-0.6.5.tar.gz
Algorithm Hash digest
SHA256 b30935084f59703b4f9851fe7c94ec21fef5b259531eb0da81712c03c6d29439
MD5 2935d66c5c8394b91b41de25cc078e83
BLAKE2b-256 27159d24ecc145c3dc4b3ce69c4153c3bd01b3771edf61a7c89a9c00c6872564

See more details on using hashes here.

File details

Details for the file aetherfield-0.6.5-py3-none-any.whl.

File metadata

  • Download URL: aetherfield-0.6.5-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for aetherfield-0.6.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a68ef469ee209083af0d3fd13080eda4cfc3fa91993170b46234c60fb4fdeeb9
MD5 ef975776f67ce06d02c117999e923654
BLAKE2b-256 6b679786b45c970a2ccedbb1acf4f7f2aee3a313dec68faf4b9cb28cecb4dd32

See more details on using hashes here.

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