The sky picks the cards. The number of qualifying transits picks the shape.
User asks: "draw me a tarot spread from my current transits", "what tarot cards are the sky pulling for me right now", "transit tarot reading", or any variant of let the transits dictate a tarot pull. This is not a generic daily-card skill — it's specifically transit-driven and uses decan correspondences.
For a written transit reading without cards → astral-transit-snapshot.
For decan ↔ tarot mapping reference → concepts/decan-tarot-correspondences.md in astro-sources-wiki.
For each qualifying aspect:
exact_diff_deg = target_aspect_angle - current_angular_separation # signed
hours_to_exact = (exact_diff_deg / transit_speed_deg_per_day) * 24 # signed: + applying, - separating
score = abs(hours_to_exact) if applying else abs(hours_to_exact) * 1.5
Sort ascending by score. Lowest = position 1 in the spread.
This natively combines (a) how close the aspect is to exact and (b) how fast the transiting body is moving, because a fast planet covers a 1° orb in hours while Saturn takes weeks. Moon at 1° orb applying ≈ a few hours; Saturn at 1° orb applying ≈ ~2 weeks. The Moon wins position 1.
Separating aspects are penalized 1.5× because they are fading rather than building.
Layouts are not abstract geometry — each count maps to a recognized classical spread, with named slots. Rank order maps to slot order below (rank-1 hit → slot 1).
| N | Spread | Slot 1 | Slot 2 | Slot 3 | Slot 4 | Slot 5 | Slot 6 | Slot 7 | Slot 8 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Daily Draw | the signal | |||||||
| 2 | Side-by-side pair | left | right | ||||||
| 3 | Past / Present / Future (row) | past (L) | present (C) | future (R) | |||||
| 4 | Four-card cross | situation (L) | obstacle (R) | advice (bottom) | outcome (top) | ||||
| 5 | Five-card cross with center | situation (center) | unconscious infl. (L) | conscious infl. (R) | way through (bottom) | outcome / resolution (top) | |||
| 6 | Two rows of three | top-L | top-C | top-R | bot-L | bot-C | bot-R | ||
| 7 | Horseshoe arc | past | present | hidden | obstacles | external | advice | outcome | |
| 8 | Two rows of four | top-1 | top-2 | top-3 | top-4 | bot-1 | bot-2 | bot-3 | bot-4 |
Positions ascend in rank order — the lowest-score (fastest-to-exact-and-tightest) aspect always lands in slot 1.
Captions on the composite image show the slot label, the card name, the transit aspect, and the orb.
astral-tenant-kb (default = self).curl -sS https://transit-list-demo.apps.poofc.com/api/transits/current — includes speed.concepts/decan-tarot-correspondences.md:
- decan index = floor(degree_in_sign / 10) → I (0), II (1), III (2)
- Look up card + asset path from the table.scripts/compose_spread.py (see scripts/). Output → /tmp/transit-tarot-spread-<timestamp>.png.**N. <Card>** — <Transit planet> <aspect> natal <body> · orb <X>°<Y>′ · <applying|separating> · exact in ~<hours/days>
- One short paragraph: what this constellation of cards is saying (lead with position 1).
- MEDIA:/tmp/transit-tarot-spread-<timestamp>.png so the image renders./home/avalon/apps/alexTarot/public/cards/<wNN|cNN|sNN|pNN>.jpg. Card metadata source of truth: /home/avalon/apps/alexTarot/public/tarot-images.json./home/avalon/apps/alexTarot/public/cards/.