Active Points #
Kerykeion supports 53 non-star chart points through active_points, plus fixed
stars through the separate active_fixed_stars parameter. This page shows
practical examples of both mechanisms.
For the full reference of all available points, see Active Points Reference.
Using the Traditional Preset #
The TRADITIONAL_ASTROLOGY_ACTIVE_POINTS preset includes only the 7 classical planets plus True lunar nodes (9 points total).
from kerykeion import AstrologicalSubjectFactory, ChartDataFactory
from kerykeion.settings.config_constants import TRADITIONAL_ASTROLOGY_ACTIVE_POINTS
# The preset belongs on from_birth_data: that is where the points are computed.
# Passing it only to create_natal_chart_data would narrow the chart while the
# subject kept its 14 defaults.
subject = AstrologicalSubjectFactory.from_birth_data(
"Traditional Chart", 1990, 6, 15, 12, 0,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False,
active_points=TRADITIONAL_ASTROLOGY_ACTIVE_POINTS,
)
chart_data = ChartDataFactory.create_natal_chart_data(subject)
# Only classical planets and nodes will appear
for point_name in ["sun", "moon", "mars", "jupiter", "saturn"]:
point = getattr(subject, point_name)
print(f"{point.name}: {point.sign} at {point.position:.2f}°")
Enabling Asteroids #
Add the four major asteroids to the default set:
from kerykeion import AstrologicalSubjectFactory, ChartDataFactory
from kerykeion.settings.config_constants import DEFAULT_ACTIVE_POINTS
# Add asteroids to the default list
points_with_asteroids = DEFAULT_ACTIVE_POINTS + ["Ceres", "Pallas", "Juno", "Vesta"]
# Pass active_points to from_birth_data so the subject computes them
subject = AstrologicalSubjectFactory.from_birth_data(
"With Asteroids", 1986, 4, 12, 8, 45,
lng=11.3426, lat=44.4949, tz_str="Europe/Rome", online=False,
active_points=points_with_asteroids,
)
chart_data = ChartDataFactory.create_natal_chart_data(
subject,
active_points=points_with_asteroids,
)
# Access asteroid data
print(f"Ceres: {subject.ceres.sign} at {subject.ceres.position:.2f}°")
print(f"Juno: {subject.juno.sign} at {subject.juno.position:.2f}°")
print(f"Vesta: {subject.vesta.sign} at {subject.vesta.position:.2f}°")
print(f"Pallas: {subject.pallas.sign} at {subject.pallas.position:.2f}°")
Enabling Arabic Parts #
Arabic Parts (Lots) are calculated points. Their formula reverses for night charts, using the is_diurnal field.
from kerykeion import AstrologicalSubjectFactory, ChartDataFactory
from kerykeion.settings.config_constants import DEFAULT_ACTIVE_POINTS
# Add Arabic Parts
points_with_lots = DEFAULT_ACTIVE_POINTS + [
"Pars_Fortunae",
"Pars_Spiritus",
"Pars_Amoris",
"Pars_Fidei",
]
# Pass active_points to from_birth_data so the subject computes them
subject = AstrologicalSubjectFactory.from_birth_data(
"With Arabic Parts", 1990, 3, 15, 14, 30,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False,
active_points=points_with_lots,
)
chart_data = ChartDataFactory.create_natal_chart_data(
subject,
active_points=points_with_lots,
)
print(f"Chart is diurnal: {subject.is_diurnal}")
print(f"Part of Fortune: {subject.pars_fortunae.sign} at {subject.pars_fortunae.position:.2f}°")
print(f"Part of Spirit: {subject.pars_spiritus.sign} at {subject.pars_spiritus.position:.2f}°")
Enabling All Points and Fixed Stars #
ALL_ACTIVE_POINTS enables all 53 non-star chart points. Fixed stars use the
separate active_fixed_stars parameter; combine both presets to enable the
complete built-in point set:
from kerykeion import AstrologicalSubjectFactory, ChartDataFactory
from kerykeion.charts.drawer import ChartDrawer
from kerykeion.settings.config_constants import ALL_ACTIVE_POINTS, DEFAULT_FIXED_STARS
from pathlib import Path
subject = AstrologicalSubjectFactory.from_birth_data(
"All Points", 1990, 6, 15, 12, 0,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False,
active_points=ALL_ACTIVE_POINTS,
active_fixed_stars=DEFAULT_FIXED_STARS,
)
chart_data = ChartDataFactory.create_natal_chart_data(subject)
print(f"Points on the chart: {len(chart_data.subject.active_points)}")
# 52, not 53: Earth is dropped in the default Apparent Geocentric perspective,
# where it has no position as seen from itself. The configured fixed stars are
# separate and are not counted here.
chart = ChartDrawer(chart_data=chart_data)
output_dir = Path("charts_output")
output_dir.mkdir(exist_ok=True)
chart.save_svg(output_path=output_dir, filename="all-points-chart")
Including Fixed Stars #
Fixed stars are configured via the active_fixed_stars parameter on from_birth_data. Stars are accessed through subject.fixed_stars (list) or subject.find_fixed_star(name) (lookup by name).
from kerykeion import AstrologicalSubjectFactory
# Specify which stars to compute
subject = AstrologicalSubjectFactory.from_birth_data(
"With Stars", 1990, 6, 15, 12, 0,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False,
active_fixed_stars=["Regulus", "Aldebaran", "Antares", "Fomalhaut"],
)
# Access via find_fixed_star (case-insensitive)
regulus = subject.find_fixed_star("Regulus")
print(f"Regulus: {regulus.sign} at {regulus.position:.2f}°")
print(f" Declination: {regulus.declination:.2f}°")
print(f" Speed: {regulus.speed:.4f}°/day")
# Or iterate over all computed stars
for star in subject.fixed_stars:
print(f"{star.name}: {star.sign} {star.position:.2f}°")
Switching Between True and Mean Nodes #
By default, Kerykeion uses True (oscillating) lunar nodes. To use Mean nodes instead:
from kerykeion import AstrologicalSubjectFactory, ChartDataFactory
mean_node_points = [
"Sun", "Moon", "Mercury", "Venus", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune", "Pluto",
"Mean_North_Lunar_Node", # instead of True_North_Lunar_Node
"Mean_South_Lunar_Node", # instead of True_South_Lunar_Node
"Chiron", "Mean_Lilith",
"Ascendant", "Medium_Coeli", "Descendant", "Imum_Coeli",
]
# The points must be calculated on the subject itself; ChartDataFactory can
# only ever *narrow* to points the subject already carries.
subject = AstrologicalSubjectFactory.from_birth_data(
"Mean Nodes", 1990, 6, 15, 12, 0,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False,
active_points=mean_node_points,
)
chart_data = ChartDataFactory.create_natal_chart_data(
subject,
active_points=mean_node_points,
)
print(f"Mean North Node: {subject.mean_north_lunar_node.sign}")