Skip to main content

A floor below for tuning to what's above

Project description

ThresholdFloor

ThresholdFloor is a geolocated simulation of light, shadow, and sky.

It answers a very old question:

If I stand here, what is the sky doing right now?

Where MoonTime tracks cycles, and AetherField tracks positions, ThresholdFloor brings those movements down to Earth — into light, into shadow, into place.


🌍 What It Does

ThresholdFloor creates a virtual “floor” at a real location on Earth and lets you observe:

  • ☀️ The Sun’s angle across the sky
  • 🌗 The shifting length and direction of shadows
  • 🌅 Sunrise and sunset behavior
  • 🌞 Seasonal turning points (equinoxes, solstices)
  • 🌌 Zodiac regions above and below the horizon

It turns celestial motion into something physical:

light touching ground


🧭 Core Idea

In many ancient systems, knowledge of time and season did not come from clocks.

It came from:

  • shadows on the ground
  • the angle of light
  • where the sun rose and set

ThresholdFloor recreates that perspective computationally.

Instead of asking:

What time is it?

You can ask:

Where is the light?


🚀 Quick Example

from thresholdfloor import ThresholdFloor as tf

def test_one():

    tfloor = tf(
        name="meow meow tehran",
        latitude=35.6892,
        longitude=51.3890,
        tz="Asia/Tehran"
    )

    print(tfloor.get_phase())  # Shadow-based phase

    tfloor.sigil()  # Visual representation of current state

    hkfloor = tf(
        "meow meow hongkong",
        22.3027,
        114.1772,
        "Asia/Hong_Kong",
        elevation_m=958
    )

    sigil = hkfloor.sigil(show=False)

    print(hkfloor.get_sunrise())  # Sunrise angle

    bfloor = tf(
        "meow meow beijing",
        39.9075,
        116.3972,
        "Asia/Shanghai",
        elevation_m=50
    )

    print(bfloor.as_above())  # Zodiac above horizon
    print(bfloor.so_below())  # Zodiac below horizon

    tofloor = tf(
        "meow meow tokyo",
        35.68972,
        139.69222,
        "Asia/Tokyo"
    )

    print(tofloor.now())      # Local MoonTime
    print(tofloor.observe())  # Current solar geometry

🌞 Solar Cycle Example

def test_two():

    jfloor = tf(
        "Jericho",
        latitude=31.871,
        longitude=35.443,
        tz="Asia/Jerusalem"
    )

    # Configure observation point
    jfloor.configure_gatehouse(31.8720, 35.4440, -245.0, bearing_deg=90.7)

    # Compute solstice anchors
    summer, winter = jfloor.compute_solstice_anchors()

    # Lay out solar markers across the year
    jfloor.auto_layout_gate_posts_across_solar_range(
        start_date=winter,
        days=366,
        num_pegs=7,
    )

    # Scan solar cycle into months
    result = jfloor.scan_solar_cycle_for_months(winter, days=366)

    for m in range(1, 13):
        print(f"Month {m}: first hit on {result['first_hits'][m]}")

🧩 Core Concepts

Floor

A Floor is a fixed location defined by:

  • latitude
  • longitude
  • timezone
  • optional elevation

It represents a real place on Earth.


Observation

tfloor.observe()

Returns the current solar position relative to the floor:

  • altitude
  • azimuth
  • light direction

Phase

tfloor.get_phase()

A shadow-based phase derived from solar geometry.


Sigil

tfloor.sigil()

Generates a visual encoding of the current state of the floor.

This is an evolving feature and may expand in future releases.


Horizon Mapping

tfloor.as_above()
tfloor.as_below()

Maps zodiac regions relative to the local horizon.


Local Time

tfloor.now()

Returns the current moment expressed relative to the floor.


🌌 Design Philosophy

ThresholdFloor is built around a simple inversion:

Modern systems:

  • abstract time
  • global reference
  • detached observation

ThresholdFloor:

  • grounded time
  • local reference
  • embodied observation

It does not ask you to synchronize with a global clock.

It lets you observe what is happening where you are.


🧬 Ecosystem

ThresholdFloor builds on:

  • moontime → temporal cycles
  • aetherfield → celestial positions

Together they form:

  • Time → MoonTime
  • Sky → AetherField
  • Ground → ThresholdFloor

🧪 Status

Alpha release.

Core functionality is in place, but APIs and visual systems (such as sigils) are still evolving.


🕯️ Closing Note

There was a time when people did not need instruments to understand the day.

They could look at a shadow and know:

  • how far the sun had traveled
  • what season they were in
  • where they stood in the cycle

ThresholdFloor is an attempt to rebuild that intuition.

Not by replacing modern systems —

but by letting light and shadow speak again.

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

thresholdfloor-0.3.1.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

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

thresholdfloor-0.3.1-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

File details

Details for the file thresholdfloor-0.3.1.tar.gz.

File metadata

  • Download URL: thresholdfloor-0.3.1.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for thresholdfloor-0.3.1.tar.gz
Algorithm Hash digest
SHA256 0082260bc2c8bc6a42ceb5a43807d020a1bbf7532889fc0e894fb21bf95e7c72
MD5 70b48322cdf131f23bd37eac80492cc0
BLAKE2b-256 209294c83d2e7ed72d1020d556bd048b21bf75b96966a190c65a968190e6568f

See more details on using hashes here.

File details

Details for the file thresholdfloor-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: thresholdfloor-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for thresholdfloor-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 be5f901a269bedd5d8db9204a2387543dafeb29b1ec8d990eb723cd39c8a943d
MD5 8821dc026f07dc88072394e8a54fce03
BLAKE2b-256 0c79b2d6ac8845f14eaab8a0f457a18645c266986ff7d610d38ed3eeaab7288e

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