{"id":"7db202a8-7ec0-4c07-b238-67ae8edba0fb","entityType":"agent","slug":"clawhub-dynamicsalex-astro-natal-chart","name":"Astro Natal Chart","canonicalUrl":"https://www.xpersona.co/agent/clawhub-dynamicsalex-astro-natal-chart","canonicalPath":"/agent/clawhub-dynamicsalex-astro-natal-chart","generatedAt":"2026-10-10T07:53:43.761Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":null},"description":"Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Skill: Astro Natal Chart Owner: dynamicsalex Summary: Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Tags: astrology:2.1.0, latest:4.3.7, natal-chart:2.1.0, swiss-ephemeris:2.1.0, windows:2.1.0 Version history: v4.3.7 | 2026-06-24T19:02:11.286Z | user QR code now renders by default; --frame no longer require","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17f1j49zad5p9q8z82sw3me2d87esv0:astro-natal-chart","sourceUrl":"https://clawhub.ai/dynamicsalex/astro-natal-chart","homepage":"https://clawhub.ai/dynamicsalex/skills/astro-natal-chart","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/dynamicsalex/astro-natal-chart","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/dynamicsalex/skills/astro-natal-chart","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Sk"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":null},"stars":null,"forks":null,"downloads":1809,"packageName":null,"latestVersion":"4.3.7","tractionLabel":"1.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T01:21:34.510Z","lastCrawledAt":"2026-10-10T01:21:34.510Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T01:21:34.510Z","lastVerifiedAt":null,"highlights":[{"version":"4.3.7","createdAt":"2026-06-24T19:02:11.286Z","changelog":"QR code now renders by default; --frame no longer required","fileCount":12,"zipByteSize":2923909},{"version":"4.3.6","createdAt":"2026-06-11T11:13:45.273Z","changelog":"v4.3.6: fix QR code transparency - RGBA frame images now preserve alpha channel when pasted onto chart","fileCount":12,"zipByteSize":2923732},{"version":"4.3.5","createdAt":"2026-06-11T10:09:15.071Z","changelog":"v4.3.5: move divider above ClawHub link and QR code, add bundled frame_small.png.dat","fileCount":12,"zipByteSize":2923583},{"version":"4.3.4","createdAt":"2026-06-05T11:50:36.411Z","changelog":"- Removed the redundant `skill-card.md` file. - No changes to user-facing features or behavior. - Internal documentation cleanup only.","fileCount":12,"zipByteSize":2891237},{"version":"4.3.3","createdAt":"2026-06-05T11:04:29.199Z","changelog":"- Removed the skill-card.md file. - Updated metadata in _meta.json. - No user-facing feature changes; this update is maintenance/metadata only.","fileCount":12,"zipByteSize":2891270},{"version":"4.3.2","createdAt":"2026-06-02T19:35:03.739Z","changelog":"v4.3.2: move aspects & configurations to info panel with descriptions, add text labels to aspect legend (symbol + name), restore AI conclusion block at bottom of interp panel","fileCount":12,"zipByteSize":2891314},{"version":"4.3.1","createdAt":"2026-06-02T18:50:52.368Z","changelog":"v4.3.1: fix aspect symbol rendering — use seguisym.ttf for aspect symbols (☌☍□△✶⚹⚺∠), replace text abbreviations in legend with Unicode symbols","fileCount":12,"zipByteSize":2891232},{"version":"4.3.0","createdAt":"2026-06-02T18:05:40.092Z","changelog":"v4.3.0: add --conclusion FILE flag for AI-generated chart summary, 3-phase OpenClaw workflow","fileCount":12,"zipByteSize":2890627}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17f1j49zad5p9q8z82sw3me2d87esv0:astro-natal-chart","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:53:43.759Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dynamicsalex-astro-natal-chart/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":null},"readme":"Skill: Astro Natal Chart\n\nOwner: dynamicsalex\n\nSummary: Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required.\n\nTags: astrology:2.1.0, latest:4.3.7, natal-chart:2.1.0, swiss-ephemeris:2.1.0, windows:2.1.0\n\nVersion history:\n\nv4.3.7 | 2026-06-24T19:02:11.286Z | user\n\nQR code now renders by default; --frame no longer required\n\nv4.3.6 | 2026-06-11T11:13:45.273Z | user\n\nv4.3.6: fix QR code transparency - RGBA frame images now preserve alpha channel when pasted onto chart\n\nv4.3.5 | 2026-06-11T10:09:15.071Z | user\n\nv4.3.5: move divider above ClawHub link and QR code, add bundled frame_small.png.dat\n\nv4.3.4 | 2026-06-05T11:50:36.411Z | auto\n\n- Removed the redundant `skill-card.md` file.\n- No changes to user-facing features or behavior.\n- Internal documentation cleanup only.\n\nv4.3.3 | 2026-06-05T11:04:29.199Z | auto\n\n- Removed the skill-card.md file.\n- Updated metadata in _meta.json.\n- No user-facing feature changes; this update is maintenance/metadata only.\n\nv4.3.2 | 2026-06-02T19:35:03.739Z | user\n\nv4.3.2: move aspects & configurations to info panel with descriptions, add text labels to aspect legend (symbol + name), restore AI conclusion block at bottom of interp panel\n\nv4.3.1 | 2026-06-02T18:50:52.368Z | user\n\nv4.3.1: fix aspect symbol rendering — use seguisym.ttf for aspect symbols (☌☍□△✶⚹⚺∠), replace text abbreviations in legend with Unicode symbols\n\nv4.3.0 | 2026-06-02T18:05:40.092Z | user\n\nv4.3.0: add --conclusion FILE flag for AI-generated chart summary, 3-phase OpenClaw workflow\n\nv4.2.0 | 2026-06-02T17:37:10.998Z | user\n\nv4.2.0: 3-column layout (Info 1/3 + Interp 2/3), fixed text wrapping, renamed ТОЛКОВАНИЕ→ИНТЕРПРЕТАЦИЯ\n\nv4.1.0 | 2026-06-01T19:43:30.450Z | user\n\nv4.1.0: Bilingual RU/EN interpretation, extended house descriptions, aspect interpretation block, output filename includes person name (e.g. Anna_full_natal_en.png)\n\nv4.0.0 | 2026-06-01T19:42:03.617Z | user\n\nv4.0.0: Bilingual RU/EN, extended houses, aspects block, named output files\n\nv3.12.0 | 2026-06-01T18:37:59.811Z | user\n\nHeader layout fix: removed title from above wheel, kept above interpretation panel only. Name moved below title. ClawHub link moved to bottom of right panel.\n\nv3.11.0 | 2026-06-01T18:30:29.139Z | user\n\nLayout redesign: removed right zodiac circle, merged into single 3600px interpretation panel. Added chart title + --name parameter. Full interpretation: Sun/Moon/ASC, dominant element, stelliums, retrogrades, all 12 houses with meanings and planets. ClawHub link under legends. RU/EN language support.\n\nv3.10.0 | 2026-06-01T15:55:43.549Z | user\n\nFonts shipped as .ttf.dat to bypass ClawHub file filter: draw_wheel.py auto-restores them on first run via shutil.copy2. Ensures correct rendering after ClawHub install without manual font setup.\n\nv3.9.0 | 2026-06-01T15:48:42.094Z | user\n\nBundled fonts shipped with skill: seguisym.ttf (zodiac symbols) + segoeuisl.ttf (cyrillic/latin) — no need to copy from system Fonts folder. Ensures consistent rendering on all Windows machines.\n\nv3.8.0 | 2026-06-01T14:00:48.512Z | auto\n\nastro-natal-chart 3.8.0\n\n- Improved: Updated scripts/draw_wheel.py (details not provided).\n- Cleanup: Removed the file skill-card.md.\n- Documentation: SKILL.md unchanged except for version number (still shows 3.7.0).\n- No breaking changes to usage or output formats.\n\nv3.7.0 | 2026-06-01T11:06:36.031Z | auto\n\n- Major graphical chart overhaul: new 5760×2880 px composite format featuring separate Natal Wheel, Essential Data, and Zodiac Circle sections.\n- draw_wheel.py now supports bundled per-character font selection for accurate rendering of zodiac symbols and Cyrillic/Latin text.\n- Updated SKILL.md documentation with new image layout, font handling, and precise output details.\n- Output files have updated resolutions: english/russian PNGs are now 5760×2880 px.\n\nv3.6.0 | 2026-06-01T10:02:32.588Z | auto\n\nastro-natal-chart 3.6.0\n\n- Updated scripts/draw_wheel.py with unspecified changes.\n- No changes to documentation (SKILL.md remains at version 3.4.0).\n- All core features (natal chart calculation, interpretation, rendering) are retained.\n\nv3.4.0 | 2026-06-01T09:16:02.428Z | auto\n\nastro-natal-chart 3.4.0\n\n- Updated documentation in SKILL.md for improved clarity and completeness.\n- No changes to calculation or rendering logic; core functionality remains unchanged.\n\nv3.3.0 | 2026-06-01T08:52:53.278Z | auto\n\nVersion 3.3.0\n\n- Improved and expanded skill documentation in SKILL.md for clarity and completeness.\n- No functional changes to core logic; this is a documentation and minor update release.\n\nv3.2.0 | 2026-06-01T08:25:48.547Z | auto\n\nVersion 3.2.0\n\n- Updated documentation in SKILL.md with minor clarifications and formatting changes.\n- No user-facing functional changes or new features.\n\nv3.1.0 | 2026-06-01T08:12:25.882Z | auto\n\n**Rendering pipeline redesigned for single-source accuracy in all chart outputs.**\n\n- All astrological calculations are centralized in `natal_chart_swe.py` to eliminate mismatches between text and graphics.\n- `draw_wheel.py` now retrieves precomputed JSON with birth info and chart data by invoking `natal_chart_swe.py --json` (no direct calculation).\n- New CLI usage: you can specify birth data and language directly for both text and graphics generation.\n- Updated documentation to reflect single-source workflow and changes to dependencies.\n- Removed legacy/inconsistent calculation pathways and documentation files for clarity.\n\nv3.0.0 | 2026-06-01T06:45:44.786Z | auto\n\nastro-natal-chart 3.0.0\n\n- Major update: Adds graphical natal chart rendering with full-featured wheel chart and integrated interpretation panel, using Pillow.\n- New script `scripts/draw_wheel.py` generates a PNG chart with sign sectors, house lines, planet markers, aspects, and detailed text.\n- Wheel/interpretation output supports both English and Russian via `--lang en` / `--lang ru` CLI flag.\n- Pillow 12.x added as a required dependency (`pip install pillow`).\n- Updated documentation highlighting image layout, drawing details, and localization.\n- Removed deprecated skill-card.md.\n\nv2.1.0 | 2026-05-28T15:44:31.657Z | user\n\n### v2.1.0 (2026-05-28)\n- Fixed .pyd.dat loading on Windows — auto-copy to temp .pyd before import\n- Added Microsoft Visual C++ Redistributable 2015-2022 (x64) as explicit requirement\n- Requires Python 3.14.x (bundled .pyd compiled for CPython 3.14 ABI)\n- Added Requirements section to SKILL.md with installation instructions\n- Tested on Windows 10 x64, Python 3.14.5, VC++ Redist 14.51\n\nv2.0.2 | 2026-05-28T11:58:49.744Z | user\n\n%CH%\n\nv2.0.1 | 2026-05-28T11:45:15.383Z | auto\n\nNo changes detected in this version.\n\nv2.0.0 | 2026-05-28T08:30:57.098Z | user\n\n%CH%\n\nv1.0.0 | 2026-05-26T10:19:21.645Z | auto\n\nInitial release: Astrology natal chart calculation and interpretation.\n\n- Calculates positions of planets, zodiac signs, aspects, and houses based on date, time, and place of birth.\n- Provides detailed output structure, including summary and interpretation sections.\n- Includes key words for signs, planetary meanings, and house descriptions in Russian.\n- Lists aspect types and orbs used for aspect calculation.\n- Offers clear instructions for cases when birth time is unknown.\n\nArchive index:\n\nArchive v4.3.7: 12 files, 2923909 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (34633b), scripts/frame_small.png.dat (32356b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), skill-card.md (2842b), SKILL.md (25691b)\n\nFile v4.3.7:SKILL.md\n\n---\r\nname: astro-natal-chart\r\nversion: 4.3.7\r\ndescription: Natal chart calculation, interpretation, and graphical visualization using Swiss Ephemeris (pyswisseph) + Pillow. 3-column layout: wheel + essential data (1/3) + interpretation panel (2/3). AI conclusion via --conclusion flag. Planets, zodiac signs, aspects, houses, wheel chart rendering with bilingual interpretation (RU/EN). Input: birth date, time, and location. Language --lang ru/en (default en), filename includes person name. Windows-compatible with bundled .pyd binary.\r\nmetadata:\r\n  openclaw:\r\n    requires:\r\n      bins:\r\n        - python3\r\n    emoji: \"✨\"\r\n    homepage: https://github.com/dynamicsAlex/astro-natal-chart\r\n---\r\n\r\n# Astrology — Natal Chart\r\n\r\n## Engine: Swiss Ephemeris (pyswisseph 2.10.3.2) + Pillow (PIL)\r\n\r\nThis skill uses **pyswisseph 2.10.3.2** for astrological computation and **Pillow 12.x** for graphical chart rendering.\r\n\r\n## ⚠️ Requirements\r\n\r\n| Requirement | Details |\r\n|---|---|\r\n| **OS** | Windows (x64) — tested on Windows 10/11 |\r\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\r\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** — required for the bundled native extension |\r\n| **Pillow** | **12.x** — `pip install pillow` (for graphical wheel chart rendering) |\r\n\r\nInstallation steps:\r\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\r\n2. Install [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) (`winget install Microsoft.VCRedist.2015+.x64`)\r\n3. Install Pillow: `pip install pillow`\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nAll astrological calculations flow through a single source of truth:\r\n\r\n```\r\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\r\n                                  ↕\r\n                          natal_chart_swe.py  →  text output\r\n```\r\n\r\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\r\n\r\n---\r\n\r\n## Text Output (Swiss Ephemeris)\r\n\r\n### Usage\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n```\r\n\r\n### JSON Output (for renderers)\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date> <time> <city> --json\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\nJSON structure:\r\n```json\r\n{\r\n  \"date\": \"14.12.1991\", \"time\": \"18:30\", \"city\": \"Ижевск\",\r\n  \"city_full\": \"Ижевск, Россия\",\r\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\r\n  \"tz_offset\": 4, \"jd\": 2448605.104167,\r\n  \"planets\": {\r\n    \"Sun\":     {\"lon\": 262.097, \"speed\": 1.017, \"retro\": false},\r\n    \"Moon\":    {\"lon\": 354.459, \"speed\": 12.461, \"retro\": false},\r\n    ...\r\n  },\r\n  \"houses\": [116.94, 130.43, ...],\r\n  \"asc\": 116.94, \"mc\": 352.89,\r\n  \"planet_houses\": {\"Sun\": 6, \"Moon\": 10, ...},\r\n  \"aspects\": [\r\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5},\r\n    ...\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## Graphical Chart Rendering (Pillow)\r\n\r\nThe skill includes `scripts/draw_wheel.py` — a full-featured natal chart wheel renderer that produces a composite PNG image.\r\n\r\n**Important:** `draw_wheel.py` does NOT perform its own astrological calculations. It calls `natal_chart_swe.py --json` and renders the returned data. This eliminates data discrepancies between text and graphical output.\r\n\r\n### Usage\r\n\r\n```bash\r\n# English (default)\r\npython scripts/draw_wheel.py\r\n\r\n# Russian\r\npython scripts/draw_wheel.py --lang ru\r\n\r\n# Arbitrary birth data\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru\r\n\r\n# Explicit English\r\npython scripts/draw_wheel.py --lang en\r\n```\r\n\r\n### Output\r\n\r\n| File | Language |\r\n|---|---|\r\n| `natal_full.png` | English chart (5760×2880) |\r\n| `natal_full_ru.png` | Russian chart (5760×2880) |\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```n+------------------+---------------------------+------------------+\r\n|                  |                           |                  |\r\n|   NATAL WHEEL    |     ESSENTIAL DATA        |  ZODIAC CIRCLE   |\r\n|   (2160×2160)    |     (1440×2880)           |  (2160×2160)     |\r\n|                  |                           |                  |\r\n|  - Sign sectors  |  - Date, time, place      |  - Sign sectors  |\r\n|  - House cusps   |  - Coordinates, timezone  |  - Planet marks  |\r\n|  - Planet marks  |  - ASC / MC positions     |  - ASC/DSC/MC    |\r\n|  - Aspect lines  |                           |  - Same size as  |\r\n|  - ASC/MC lines  |                           |    natal wheel   |\r\n|                  |                           |                  |\r\n|  --- Legends --- |                           |                  |\r\n|  Planet|Element  |                           |                  |\r\n|  |Aspect       |                           |                  |\r\n+------------------+---------------------------+------------------+\r\n```\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```\r\n+------------------+---------------------------------------------+\r\n|                  |                                             |\r\n|   NATAL WHEEL    |          INTERPRETATION PANEL               |\r\n|   (2160×2160)    |            (3600×2880)                      |\r\n|                  |                                             |\r\n|  - \"NATAL CHART\" |  - Date, time, place, coordinates, tz       |\r\n|    title + name  |  - ASC / MC positions                       |\r\n|  - Sign sectors  |  - Sun/Moon/ASC sign interpretation         |\r\n|  - House cusps   |  - Dominant element, stelliums, retrogrades |\r\n|  - Planet marks  |  - All 12 houses with cusp positions,       |\r\n|  - Aspect lines  |    house meanings, and planets in each      |\r\n|  - ASC/MC lines  |                                             |\r\n|                  |                                             |\r\n|  --- Legends --- |                                             |\r\n|  Planet|Element  |                                             |\r\n|  |Aspect       |                                             |\r\n|  | ClawHub link |                                             |\r\n+------------------+---------------------------------------------+\r\n```\r\n```\r\n\r\n### Font Handling\r\n\r\nTwo bundled fonts in `scripts/`:\r\n\r\n| Font | Purpose | Glyphs |\r\n|---|---|---|\r\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + latin |\r\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits, punctuation |\r\n\r\nThe `rtext()` function selects fonts **per character**: zodiac symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. This ensures correct rendering of mixed content like \"♈ Овен AR\".\r\n\r\n**Why not a single font?** No standard Windows font contains both zodiac symbols AND cyrillic. `seguisym.ttf` has zodiac but no cyrillic. `segoeui.ttf` has cyrillic but no zodiac. Per-character selection is the solution.\r\n\r\n### Pillow Dependencies\r\n\r\n`draw_wheel.py` uses these Python modules:\r\n\r\n| Module | Purpose | Install |\r\n|---|---|---|\r\n| `PIL` (Pillow) | Image creation, drawing (circle, ellipse, line, pieslice, text) | `pip install pillow` |\r\n| `math` | Trigonometric calculations (cos, sin, radians) | Stdlib |\r\n| `json` | Parse natal_chart_swe.py JSON output | Stdlib |\r\n| `subprocess` | Call natal_chart_swe.py --json | Stdlib |\r\n| `os`, `sys` | File path operations | Stdlib |\r\n| `argparse` | CLI argument parsing (`--lang en/ru`) | Stdlib |\r\n\r\nNote: `draw_wheel.py` does NOT import `swisseph` directly. It receives all planetary data from `natal_chart_swe.py --json`.\r\n\r\n---\r\n\r\n## Standard Text Output Format\r\n\r\n```\r\n🌟 NATAL CHART  [Swiss Ephemeris vX.XX]\r\n📅 Date: [date]  ⏰ Time: [time]  📍 Place: [city]\r\n🌍 Coordinates: [lat], [lon]  🕐 Timezone: [tz] (UTC+/-offset)\r\n📊 JD: [julian_day]\r\n\r\n⬆️ ASC — [sign] [degrees]′\r\n🜨 MC — [sign] [degrees]′\r\n\r\nPLANETS:\r\n☀️ Sun — [sign] [degrees]′ [house] [℞] (speed °/day)\r\n🌙 Moon — [sign] [degrees]′ [house]\r\n...\r\n\r\nHOUSES:\r\nI house — [sign] [degrees]′\r\n... (all 12 houses)\r\n\r\nMAJOR ASPECTS:\r\n☌ Conjunction: [planet]-[planet] (orb: X.X°)\r\n...\r\n\r\nINTERPRETATION:\r\n[detailed interpretation]\r\n```\r\n\r\n## Aspect Orbs\r\n\r\n| Aspect | Symbol | Orb |\r\n|--------|--------|-----|\r\n| Conjunction | ☌ | ±8° |\r\n| Opposition | ☍ | ±8° |\r\n| Square | □ | ±7° |\r\n| Trine | △ | ±7° |\r\n| Sextile | ✶ | ±5° |\r\n| Semisextile | ⚺ | ±2° |\r\n| Quincunx | ⚹ | ±2° |\r\n| Semisquare | ∠ | ±2° |\r\n\r\n## Zodiac Signs — Keywords\r\n\r\n- ♈ Aries: initiative, energy, impulsiveness\r\n- ♉ Taurus: stability, sensuality, stubbornness\r\n- ♊ Gemini: sociability, intellect, curiosity\r\n- ♋ Cancer: emotionality, nurturing, intuition\r\n- ♌ Leo: creativity, leadership, pride\r\n- ♍ Virgo: analytical, practical, perfectionist\r\n- ♎ Libra: harmony, diplomacy, partnership\r\n- ♏ Scorpio: depth, transformation, intensity\r\n- ♐ Sagittarius: optimism, philosophy, freedom\r\n- ♑ Capricorn: ambition, discipline, responsibility\r\n- ♒ Aquarius: originality, independence, innovation\r\n- ♓ Pisces: intuition, compassion, dreaminess\r\n\r\n## Planets — Meanings\r\n\r\n- **Sun** — ego, essence, vitality, father\r\n- **Moon** — emotions, subconscious, mother, instincts\r\n- **Mercury** — thinking, communication, learning\r\n- **Venus** — love, beauty, values, finances\r\n- **Mars** — energy, action, aggression, sexuality\r\n- **Jupiter** — expansion, luck, wisdom, growth\r\n- **Saturn** — limitations, discipline, karma, structure\r\n- **Uranus** — change, rebellion, innovation, suddenness\r\n- **Neptune** — illusion, spirituality, creativity, dissolution\r\n- **Pluto** — transformation, power, death/rebirth\r\n\r\n## Houses — Life Areas\r\n\r\n1. **I (ASC)** — personality, appearance, self-presentation\r\n2. **II** — money, values, resources\r\n3. **III** — communication, siblings, learning\r\n4. **IV (IC)** — home, family, roots\r\n5. **V** — creativity, children, romance\r\n6. **VI** — health, work, routine\r\n7. **VII (DSC)** — partnership, marriage\r\n8. **VIII** — transformation, shared resources, intimacy\r\n9. **IX** — philosophy, travel, higher education\r\n10. **X (MC)** — career, reputation, goals\r\n11. **XI** — friends, hopes, groups\r\n12. **XII** — solitude, subconscious, karma\r\n\r\n## Interpretation Guidelines\r\n\r\nWhen interpreting, consider:\r\n1. **Sun** — core personality\r\n2. **Moon** — emotional nature\r\n3. **Ascendant** — mask, first impression\r\n4. **MC** — career aspirations\r\n5. **Stelliums** (3+ planets in one sign/house)\r\n6. **Retrograde planets** — energy turned inward\r\n7. **Major aspects** — personality dynamics\r\n8. **Dominant elements** (fire, earth, air, water)\r\n\r\n## Disclaimer\r\n\r\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial predictions based on astrological readings.\r\n\r\n---\r\n\r\n## Scripts Reference\r\n\r\n| Script | Purpose | Dependencies |\r\n|---|---|---|\r\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\r\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG | subprocess, json, math, os, argparse, Pillow |\r\n| `scripts/seguisym.ttf` | **Zodiac symbol font.** Bundled for correct ♈♉♊... rendering. ~2.4 MB. | — |\r\n| `scripts/segoeuisl.ttf` | **Cyrillic/latin font.** Bundled for cyrillic, digits, latin text. ~854 KB. | — |\r\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\r\n\r\n### draw_wheel.py — Quick Reference\r\n\r\n```bash\r\n# Generate chart with interpretation (English, default Matvey's data)\r\npython scripts/draw_wheel.py\r\n\r\n# Generate for any person (Russian)\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Алексей\"\r\n\r\n# Generate for any person (English)\r\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en\r\n\r\n# Options:\r\n#   --name \"Person Name\"  — name shown above the wheel\r\n#   --lang ru|en          — language of interpretation (default: en)\r\n#   --conclusion FILE     — path to text file with AI-generated conclusion\r\n#   --frame FILE          — path to .png.dat image (QR code). Default: bundled frame_small.png.dat\r\n\r\n# Output files:\r\n#   natal_full.png     — English version\r\n#   natal_full_ru.png  — Russian version\r\n\r\n# AI Conclusion workflow (for OpenClaw agents):\r\n#   Step 1: python scripts/natal_chart_swe.py <date> <time> <city> --json\r\n#   Step 2: AI analyzes JSON and writes conclusion to a file\r\n#   Step 3: python scripts/draw_wheel.py <date> <time> <city> --lang ru --name \"Name\" --conclusion <file>\r\n```\r\n\r\n### natal_chart_swe.py — Quick Reference\r\n\r\n```bash\r\n# Text chart\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n\r\n# JSON export (used by draw_wheel.py)\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n### v4.3.7 (2026-06-24)\r\n- **QR code now renders by default** — --frame now defaults to bundled \frame_small.png.dat instead of being optional\r\n- Updated .gitignore to exclude runtime-generated .png files\r\n- SKILL.md: updated --frame documentation\r\n\r\n### v4.3.6 (2026-06-11)\r\n\r\n### v4.3.6 (2026-06-11)\r\n- **Fixed QR code transparency**: RGBA frame images now preserve alpha channel when pasted onto the chart (was converting to RGB, causing black background behind transparent QR codes)\r\n- SKILL.md version bumped to 4.3.6\r\n\r\n### v4.3.5 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.5\r\n\r\n### v4.3.4 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.4\r\n\r\n### v4.3.3 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel, improving visual separation from the aspects block\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.3\r\n\r\n### v4.3.2 (2026-06-02)\r\n- **Moved aspects & configurations to Info panel**: detailed aspect list with descriptions (from interp panel) now appears in the middle Info panel, below planet/house tables\r\n- **Added text labels to aspect legend**: wheel legend now shows Unicode symbol + text abbreviation (☌ Conj, □ Sqr, △ Trine, etc.)\r\n- **Restored AI conclusion block**: \"ЗАКЛЮЧЕНИЕ\" / \"CONCLUSION\" block at bottom of Interpretation panel (was accidentally removed during refactoring)\r\n- SKILL.md version bumped to 4.3.2\r\n\r\n### v4.3.1 (2026-06-02)\r\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf` via extended `is_z()` check\r\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols from `seguisym`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.3.0 (2026-06-02)\r\n- **`--conclusion FILE` flag**: draw_wheel.py accepts a path to a text file with an AI-generated conclusion\r\n  - Conclusion appears at the bottom of the Interpretation panel, after the houses section\r\n  - Decorative gold separator lines frame the conclusion block\r\n  - Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU)\r\n  - Multi-paragraph text is wrapped to panel width (2400px)\r\n  - Works with any AI-generated summary — not rendered if flag is omitted\r\n- **3-phase workflow for OpenClaw agent**: (1) `natal_chart_swe.py --json` → (2) AI generates conclusion → (3) `draw_wheel.py ... --conclusion file.txt`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.2.0 (2026-06-02)\r\n- **3-column layout**: right panel split into Info (1/3 = 1200px) and Interpretation (2/3 = 2400px)\r\n  - **Info panel (1/3)**: essential data (date, time, place, coordinates, timezone), ASC/MC, planet table with houses, house cusp table, compact aspect list\r\n  - **Interpretation panel (2/3)**: Sun/Moon/ASC interpretation, dominant element, stelliums, retrograde planets, aspects with descriptions, houses with full planet meanings\r\n- **Text wrapping fixed**: `wrap_text()` now uses per-panel width (1200px for Info, 2400px for Interp) — long descriptions properly wrap instead of being clipped\r\n- **Renamed 'ТОЛКОВАНИЕ' → 'ИНТЕРПРЕТАЦИЯ'** in Russian mode (was already 'INTERPRETATION' in English)\r\n- **Vertical dividers** between all three columns\r\n- SKILL.md version bumped to 4.2.0\r\n\r\n### v4.0.0 (2026-06-01)\r\n- **Bilingual interpretation**: all interpretation text available in both Russian and English\r\n  - Default language: English (`--lang en`)\r\n  - Russian: `--lang ru`\r\n  - Separate interpretation data module: `scripts/interp_data.py`\r\n  - Includes `HOUSE_TEXTS_RU/EN`, `PLANET_MEANING_RU/EN`, `SIGN_KEYWORDS_RU/EN`, `ASPECT_MEANING_RU/EN`\r\n- **Extended house descriptions**: each house now has a detailed 3-sentence description covering multiple life areas\r\n- **Aspect interpretation block**: all aspects listed with orb values and brief interpretation\r\n- **Filename includes person name**: output format is now `{Name}_full_natal_{lang}.png` (e.g. `Анна_full_natal_ru.png`, `Anna_full_natal_en.png`)\r\n- **Fixed planet meaning context bug**: planet meanings now correctly reference the planet itself (not the Sun's sign)\r\n- **Separated interpretation data**: `interp_data.py` contains all text constants, `draw_wheel.py` contains rendering logic\r\n- SKILL.md updated with new CLI flags and output file naming\r\n\r\n### v3.8.0 (2026-06-01)\r\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors (Fire showed as Earth's green, Air as Water's blue, etc.). Replaced `pieslice()` with `draw.polygon()` using explicit `aof(d) = radians(90-d)` coordinate math, which is consistent with planet/symbol positioning.\r\n- **Sector boundaries aligned to zodiac signs**: sectors now start from the beginning of each sign (e.g. 270° for Capricorn), not from the ASC degree. This ensures clean 30° sign sectors regardless of ASC position.\r\n- **Bundled fonts**: `seguisym.ttf` (2.4 MB, zodiac symbols) and `segoeuisl.ttf` (854 KB, cyrillic/latin) are both included in `scripts/` and published with the pack.\r\n- SKILL.md changelog updated.\r\n\r\n### v3.7.0 (2026-06-01)\r\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\r\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\r\n- **Dual-font rendering**: `seguisym.ttf` for zodiac symbols (large, 44pt), `segoeuisl.ttf` for cyrillic/latin/digits — bundled in `scripts/`\r\n- **Per-character font selection**: `rtext()` automatically picks the right font per character — no more tofu\r\n- **Zodiac planet circle**: same planet orbit radius (RP=648) and planet size (r=18) as main wheel\r\n- **Essential data panel**: date, time, place, coordinates, timezone, ASC/MC between the wheels\r\n- **Roman numerals** for house cusps (I–XII)\r\n- **ASC/DSC/MC lines** on zodiac circle\r\n- **Planet, element, aspect legends** below the left wheel\r\n- Bundled fonts: `seguisym.ttf` (zodiac) + `segoeuisl.ttf` (cyrillic/latin) in `scripts/`\r\n\r\n### v3.4.0 (2026-06-01)\r\n- **Fixed zodiac symbol rendering**: all font loading now uses a single TrueType font (Segoe UI) with guaranteed Unicode zodiac + Cyrillic support. Symbols like ♈♉♊ render correctly everywhere — wheel, legend, and interpretation text.\r\n- **Unified font system**: replaced separate `get_symbol_font()`/`get_font()` with single cached `font()` function that scans fallback chain and verifies glyph coverage\r\n- **Element legend added**: color-coded legend showing Fire/Earth/Air/Water with colored rectangles\r\n- **Legends fully below wheel**: planet, element, and aspect legends placed at `cy + R_OUTER + 50`, guaranteed zero overlap with the circular chart\r\n\r\n### v3.3.0 (2026-06-01)\r\n- **4K resolution**: canvas is now 3840×2160 (was 2840×1800), all elements scaled proportionally\r\n- **Legend moved below wheel**: planet legend, element legend, and aspect legend are now placed entirely below the circular chart area — zero overlap with the wheel\r\n- **Zodiac symbols in all text**: interpretation text uses ♈♉♊... instead of TA/SG/AR/etc. abbreviations\r\n- **Element color legend**: added visual legend showing Fire/Earth/Air/Water color coding used in sign sectors\r\n- Layout: wheel area 2160×2160, text area 1680×2160, legends below wheel in left panel\r\n\r\n### v3.2.0 (2026-06-01)\r\n- **Zodiac symbols instead of text abbreviations**: wheel now shows ♈♉♊♋♌♍♎♏♐♑♒♓ instead of AR/TA/GE/etc.\r\n- **2x resolution**: canvas is now 2840×1800 (was 1420×900), all fonts and elements scaled proportionally\r\n- **Planet legend moved to bottom-left**: no longer overlaps the chart wheel; placed below info box\r\n- **Full interpretation fits**: larger text panel (1040px) with bigger fonts ensures all 12 houses + aspects render without truncation\r\n- Added get_symbol_font() helper: uses Segoe UI Symbol for reliable zodiac glyph rendering\r\n- Version bumped: 3.1.0 → 3.2.0\r\n\r\n### v3.1.0 (2026-06-01)\r\n- **Unified calculation architecture**: `draw_wheel.py` removed all duplicate astrological calculation code\r\n  - Now calls `natal_chart_swe.py --json` via subprocess for all planetary/house/aspect data\r\n  - Guarantees text and graphical output always match (single source of truth)\r\n- **Added `--json` flag to natal_chart_swe.py**: exports all calculated data (planets, houses, aspects, metadata) as parseable JSON\r\n- **draw_wheel.py now accepts CLI arguments**: `draw_wheel.py [date] [time] [city] [--lang en/ru]`\r\n  - Default: Matvey's chart (14.12.1991 18:30 Ижевск)\r\n  - Custom: any date/time/city combination\r\n- **Generated interpretation**: stelliums, key configurations, house-by-house now auto-detected from JSON data rather than hardcoded\r\n- Updated SKILL.md: architecture diagram, JSON format docs, scripts reference\r\n- Version bumped: 3.0.0 → 3.1.0\r\n\r\n### v3.0.0 (2026-06-01)\r\n- **Added graphical chart renderer** (`scripts/draw_wheel.py`) using Pillow (PIL)\r\n  - Composite 3840×2160 PNG (4K): circular wheel (left) + house interpretation (right)\r\n  - 12 sign sectors colored by element (fire/earth/air/water)\r\n  - Planet markers with retrograde(℞) indication\r\n  - House cusp lines with numbered divisions\r\n  - ASC/MC highlighted lines\r\n  - Aspect lines color-coded by type (conj/sqr/trine/sext/opp/quinc)\r\n  - Info box with ASC/MC positions and aspect legend\r\n  - Planet legend panel\r\n  - Full house-by-house textual interpretation on the right panel\r\n- **Localization support** (`--lang en` / `--lang ru`)\r\n  - English (default) and Russian output\r\n  - All labels, headers, and interpretation text localized\r\n- **Added Pillow dependency** (installed via `pip install pillow`)\r\n- **Pillow drawing API documented** in SKILL.md\r\n- **Scripts reference table** added to SKILL.md\r\n- Version bumped: 2.1.0 → 3.0.0\r\n- Description updated to mention graphical visualization\r\n\r\n### v2.1.0 (2026-05-28)\r\n- **Fixed `.pyd.dat` loading on Windows** — `importlib.util.spec_from_file_location` does not recognize non-standard extensions; added auto-copy to temporary `.pyd` before loading\r\n- **Added Microsoft Visual C++ Redistributable as explicit requirement** — bundled `.pyd` compiled with MSVC 14.44 requires `vcruntime140.dll` and friends\r\n- **Requires Python 3.14.x** — binary extension compiled for CPython 3.14 ABI\r\n- Added Requirements section to SKILL.md with installation instructions\r\n- Updated metadata: version bumped to 2.1.0, description mentions Windows compatibility\r\n- Tested on Windows 10 (10.0.19045, x64) with Python 3.14.5 and VC++ Redist 14.51.36231.0\r\n\r\n### v2.0.0 (2026-05-28)\r\n- **Switched to Swiss Ephemeris** (pyswisseph 2.10.3.2) as the primary calculation engine — replaces simplified analytical formulas\r\n- Replaced hardcoded positions with `swe.calc_ut()` using NASA JPL DE431 ephemerides\r\n- House calculation now uses `swe.houses_ex()` (exact iterative Placidus) instead of analytical approximations\r\n- Added retrograde detection via `FLG_SPEED` flag (velocity sign)\r\n- Bundled `swisseph.cp314-win_amd64.pyd` (2 MB) in `scripts/` — no system-wide pip installation required\r\n- Version detection: `swe.__version__` returns int `20230604` — formatted as `vYY.MM.BLD` string\r\n- Expanded city database to 50+ cities with coordinates and timezone data\r\n- Added proper Julian Day conversion through `swe.julday()`\r\n- Removed legacy scripts: `natal_chart.py`, `placidus_iterative.py`, `placidus_meeus.py` and all debug/fix scripts (11 files)\r\n- SKILL.md rewritten in English with full documentation\r\n\r\n### v1.x (earlier)\r\n- Initial release using simplified analytical formulas\r\n- Separate iterative and Meeus-based Placidus implementations\r\n- Planet positions calculated with approximate algorithms (0.5–15° error range)\n\nFile v4.3.7:README.md\n\n# ✨ Astro Natal Chart\n\nAn [OpenClaw](https://github.com/openclaw/openclaw) skill — natal chart calculation, interpretation, and graphical visualization using **Swiss Ephemeris** and **Pillow**.\n\nGenerates a full-featured 5760×2880 px PNG chart (3 columns): natal wheel + essential data + detailed interpretation. Supports Russian and English languages.\n\n## Features\n\n- **Precise calculation** via Swiss Ephemeris (pyswisseph 2.10.3.2) — NASA JPL DE431 ephemerides\n- **10 planets**: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto\n- **12 houses** in Placidus system (exact iterative calculation)\n- **8 aspect types**: conjunction, opposition, trine, square, sextile, quincunx, semisextile, semisquare\n- **Retrograde detection** via planet velocity sign\n- **Bilingual interpretation**: Russian (`--lang ru`) and English (`--lang en`)\n- **3-column layout**: wheel (2160px) + data (1200px) + interpretation (2400px)\n- **50+ cities** with coordinates and timezones in the built-in database\n\n## Layout\n\n```\n+------------------+------------------+---------------------------+\n|                  |                  |                           |\n|    NATAL         |    ESSENTIAL     |    INTERPRETATION         |\n|    WHEEL         |    DATA          |   (2400px = 2/3)          |\n|   (2160px)       |   (1200px = 1/3) |                           |\n|                  |                  |   - Sun/Moon/Ascendant    |\n|  - Sign sectors  |   - Date, time,  |   - Dominant element      |\n|  - House cusps   |     place        |   - Stelliums             |\n|  - Planet marks  |   - Coordinates  |   - Retrograde planets    |\n|  - Aspect lines  |   - ASC / MC     |   - Aspects with          |\n|  - ASC / MC      |   - Planet table |     descriptions          |\n|                  |   - House table  |   - 12 houses with        |\n|  --- Legends --- |   - Aspects      |     meanings & planets    |\n|  Planets|Elements|                  |                           |\n|  Aspects         |                  |                           |\n+------------------+------------------+---------------------------+\n```\n\n## Requirements\n\n| Requirement | Details |\n|---|---|\n| **OS** | Windows (x64) — tested on Windows 10/11 |\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** |\n| **Pillow** | **12.x** — `pip install pillow` |\n\nInstallation steps:\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\n2. Install [VC++ Redist x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n3. Install Pillow: `pip install pillow`\n\n## Architecture\n\n```\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\n                                  ↕\n                          natal_chart_swe.py  →  text output\n```\n\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\n\n## Installation\n\n### Via ClawHub (recommended)\n\n```bash\nopenclaw skills install \"clawhub:astro-natal-chart\"\n```\n\n### From repository\n\n```bash\ngit clone https://github.com/dynamicsAlex/astro-natal-chart.git\ncd astro-natal-chart\npip install pillow\n```\n\n## Usage\n\n### Text calculation\n\n```bash\n# Basic usage\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск\n\n# JSON export (for renderers)\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск --json\n```\n\n### Graphical chart (PNG 5760×2880)\n\n```bash\n# Default (English)\npython scripts/draw_wheel.py\n\n# Russian language\npython scripts/draw_wheel.py --lang ru\n\n# Custom birth data\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Alexey\"\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en --name \"Natalya\"\n```\n\n**Options:**\n- `--name \"Name\"` — name displayed above the wheel\n- `--lang ru|en` — interpretation language (default: `en`)\n- `--conclusion FILE` — path to text file with AI-generated conclusion (optional)\n\n**Output files:**\n- `{Name}_full_natal_en.png` — English version\n- `{Name}_full_natal_ru.png` — Russian version\n\n### AI Conclusion workflow\n\nThe `--conclusion` flag enables a 3-phase workflow for AI-assisted chart analysis:\n\n```bash\n# Step 1: Get chart data as JSON\npython scripts/natal_chart_swe.py 25.10.1985 21:35 Можга --json\n\n# Step 2: AI analyzes JSON and writes conclusion to a file\n# (agent writes analysis to /tmp/conclusion.txt)\n\n# Step 3: Render chart with AI conclusion embedded\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang ru --name \"Natalya\" --conclusion /tmp/conclusion.txt\n```\n\nThe conclusion appears at the bottom of the Interpretation panel, after the houses section, framed by decorative gold separator lines. Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU). Multi-paragraph text is auto-wrapped to panel width (2400px).\n\nWithout `--conclusion` the chart renders normally (no AI summary block).\n\n### JSON structure\n\n```json\n{\n  \"date\": \"24.04.1983\", \"time\": \"06:00\", \"city\": \"Ижевск\",\n  \"city_full\": \"Ижевск, Россия\",\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\n  \"tz_offset\": 4, \"jd\": 2447273.75,\n  \"planets\": {\n    \"Sun\":     {\"lon\": 38.333, \"speed\": 0.985, \"retro\": false},\n    \"Moon\":    {\"lon\": 143.317, \"speed\": 12.19, \"retro\": false}\n  },\n  \"houses\": [5.83, 37.47, 69.12, ...],\n  \"asc\": 5.83, \"mc\": 341.25,\n  \"planet_houses\": {\"Sun\": 12, \"Moon\": 6, ...},\n  \"aspects\": [\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5}\n  ]\n}\n```\n\n## Text output format\n\n```\n🌟 NATAL CHART  [Swiss Ephemeris v20.23]\n📅 Date: 24.04.1983  ⏰ Time: 06:00  📍 Place: Ижевск, Россия\n🌍 56.8519°N, 53.2114°E  🕐 Europe/Samara (UTC+4)\n📊 JD: 2447273.75\n\n⬆️ ASC — Gemini 1°50′\n🜨 MC  — Capricorn 24°45′\n\nPLANETS:\n☀️ Sun     — Taurus 3°20′  [12 house]  (+0.985°/d)\n🌙 Moon    — Virgo 22°19′   [6 house]   (+12.19°/d)\n...\n\nHOUSES:\nI house — Gemini 1°50′\n...\nXII house — Pisces 19°46′\n\nMAJOR ASPECTS:\n☌ Conjunction: Mercury-Venus (orb: 0.5°)\n...\n\nINTERPRETATION:\n[detailed interpretation]\n```\n\n## Aspects and orbs\n\n| Aspect | Symbol | Orb |\n|---|---|---|\n| Conjunction | ☌ | ±8° |\n| Opposition | ☍ | ±8° |\n| Square | □ | ±7° |\n| Trine | △ | ±7° |\n| Sextile | ✶ | ±5° |\n| Semisextile | ⚺ | ±2° |\n| Quincunx | ⚹ | ±2° |\n| Semisquare | ∠ | ±2° |\n\n## Font rendering\n\nTwo bundled fonts in `scripts/`:\n\n| Font | Purpose | Glyphs |\n|---|---|---|\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols + aspect symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + ☌☍□△✶⚹⚺∠ |\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits |\n\nThe `rtext()` function selects fonts **per character**: zodiac and aspect symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. No tofu, no missing glyphs.\n\n## Scripts\n\n| Script | Purpose | Dependencies |\n|---|---|---|\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG. Supports `--conclusion FILE` for AI-generated summary | subprocess, json, math, os, argparse, Pillow |\n| `scripts/interp_data.py` | Interpretation data (RU/EN): houses, planets, signs, aspects | — |\n| `scripts/seguisym.ttf` | Zodiac symbol font (~2.4 MB) | — |\n| `scripts/segoeuisl.ttf` | Cyrillic/latin font (~854 KB) | — |\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\n\n## Interpretation guidelines\n\n1. **Sun** — core personality\n2. **Moon** — emotional nature\n3. **Ascendant** — mask, first impression\n4. **MC** — career aspirations\n5. **Stelliums** (3+ planets in one sign/house)\n6. **Retrograde planets** — energy turned inward\n7. **Major aspects** — personality dynamics\n8. **Dominant elements** (fire, earth, air, water)\n\n## Changelog\n\n### v4.3.1 (2026-06-02)\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf`\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols\n\n### v4.3.0 (2026-06-02)\n- **`--conclusion FILE` flag**: AI-generated conclusion can be embedded in the chart\n- 3-phase workflow: JSON → AI analysis → rendered chart with conclusion\n- Conclusion appears at the bottom of the Interpretation panel with gold separator lines\n\n### v4.2.0 (2026-06-02)\n- **3-column layout**: right panel split into Essential Data (1/3 = 1200px) and Interpretation (2/3 = 2400px)\n- **Fixed text wrapping**: `wrap_text()` now uses per-panel width (1200px for Data, 2400px for Interp) — descriptions wrap properly instead of being clipped\n- **Renamed «ТОЛКОВАНИЕ» → «ИНТЕРПРЕТАЦИЯ»** in Russian mode\n- Vertical dividers between all three columns\n\n### v4.0.0 (2026-06-01)\n- **Bilingual interpretation**: Russian and English languages\n- Extended house descriptions (3 sentences per house)\n- Aspect interpretation block\n- Person's name in output filename\n- Fixed planet meaning context bug\n- Separated interpretation data (`interp_data.py`) from rendering logic\n\n### v3.x (2026-06-01)\n- Fixed element coloring for sign sectors\n- Two equal-size wheels, panoramic 5760×2880 layout\n- Bundled fonts (zodiac + Cyrillic)\n- Zodiac symbols instead of text abbreviations\n- Legends below wheel — no overlap\n\n### v2.x (2026-05-28)\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2)\n- Placidus system (exact iterative)\n- Retrograde detection via `FLG_SPEED`\n- 50+ city database\n- Windows compatibility with bundled `.pyd`\n\n## Disclaimer\n\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial decisions based on astrological readings.\n\n## Author\n\n- GitHub: [@dynamicsAlex](https://github.com/dynamicsAlex)\n- ClawHub: [astro-natal-chart](https://clawhub.ai/dynamicsalex/astro-natal-chart)\n\n## License\n\nMIT\n\nFile v4.3.7:_meta.json\n\n{\n  \"ownerId\": \"kn775k2zzav7y8rpwwm218x0b587f0hj\",\n  \"slug\": \"astro-natal-chart\",\n  \"version\": \"4.3.7\",\n  \"publishedAt\": 1782327731286\n}\n\nFile v4.3.7:CHANGELOG.md\n\n# Changelog\n\n## v3.12.0 (2026-06-01)\n\n- **Header layout fix**: removed \"NATAL CHART\" title from above the wheel, kept it only above the interpretation panel\n- **Name placement**: person's name now shown below the \"NATAL CHART\" title in the right panel\n- **ClawHub link moved**: relocated from under the wheel legends to the bottom of the right interpretation panel\n\n## v3.11.0 (2026-06-01)\n\n- **Layout redesign**: removed right zodiac circle, merged center+right into single 3600px interpretation panel\n- **Chart header**: added \"NATAL CHART\" title above left wheel + optional `--name` parameter for person's name\n- **Full interpretation panel**: Sun/Moon/ASC sign descriptions, dominant element, stelliums, retrograde planets, all 12 houses with cusp positions, house meanings, and planets in each house\n- **ClawHub link**: added skill repository URL under the legends below the wheel\n- Language-aware: interpretation text in Russian (`--lang ru`) or English (`--lang en`)\n- Cleaned up debug files\n\n## v3.10.0 (2026-06-01)\n\n- **Fonts shipped as .ttf.dat to bypass ClawHub filter**: ClawHub silently strips `.ttf` files from skill packages. Fonts are now bundled as `seguisym.ttf.dat` (2.4 MB) and `segoeuisl.ttf.dat` (854 KB). `draw_wheel.py` auto-detects and restores them to `.ttf` on first run via `shutil.copy2`.\n- This ensures the skill renders correctly on all machines after ClawHub installation without any manual font setup.\n\n## v3.9.0 (2026-06-01)\n\n- **Attempted bundled fonts**: included `seguisym.ttf` and `segoeuisl.ttf` directly in `scripts/`. ClawHub silently filtered them out — not present in the published package.\n\n## v3.8.0 (2026-06-01)\n\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors. Replaced with `draw.polygon()` using explicit coordinate math.\n- **Sector boundaries aligned to zodiac signs**: sectors start from the beginning of each sign, not from the ASC degree.\n- Bundled fonts reference added (deferred to v3.9.0 for actual inclusion).\n\n## v3.7.0 (2026-06-01)\n\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\n- **Dual-font rendering** with per-character font selection\n- **Zodiac planet circle**: same planet orbit radius and size as main wheel\n\n## v2.1.0 (2026-05-28)\n\n- Fixed `.pyd.dat` loading on Windows\n- Added Microsoft Visual C++ Redistributable requirement\n- Requires Python 3.14.x\n\n## v2.0.0 (2026-05-28)\n\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2) as primary calculation engine\n- House calculation via `swe.houses_ex()` (exact iterative Placidus)\n- Added retrograde detection via `FLG_SPEED` flag\n\n## v1.x (earlier)\n\n- Initial release using simplified analytical formulas\n\nFile v4.3.7:skill-card.md\n\n## Description:\n\nCalculates natal charts from birth date, time, and city, then produces bilingual text, JSON chart data, and high-resolution PNG wheel visualizations with optional AI conclusion text.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dynamicsalex](https://clawhub.ai/user/dynamicsalex)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to generate educational or entertainment natal chart readings from birth details, including calculated planet, house, and aspect data. Agents can also pass chart JSON through an AI interpretation step and embed that conclusion into the rendered PNG.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill bundles a native Windows extension for Swiss Ephemeris.\n\nMitigation: Review and run the skill in an isolated Windows environment before trusting generated output or deploying it for broader use.\n\nRisk: The renderer attempts to install Pillow at runtime when the package is missing.\n\nMitigation: Install Pillow explicitly in a controlled environment before execution and avoid relying on runtime package installation.\n\nRisk: The default chart render embeds a bundled QR/frame image.\n\nMitigation: Inspect generated PNG files before sharing them, or pass a reviewed frame asset when rendering charts.\n\nRisk: Birth details and optional AI conclusion files can contain personal or sensitive information.\n\nMitigation: Process only data that users have consented to share, and avoid retaining generated chart data or conclusion files longer than needed.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/dynamicsalex/skills/astro-natal-chart)\n- [Publisher profile](https://clawhub.ai/user/dynamicsalex)\n- [Astro Natal Chart source repository](https://github.com/dynamicsAlex/astro-natal-chart)\n- [OpenClaw](https://github.com/openclaw/openclaw)\n- [Python 3.14 release](https://www.python.org/downloads/release/python-3145/)\n- [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, image files, guidance]\n\n**Output Format:** [Plain text, JSON, and PNG image files with optional embedded conclusion text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Windows x64, CPython 3.14, Pillow 12.x, and a bundled Swiss Ephemeris native extension; chart rendering includes a bundled frame image by default.]\n\n## Skill Version(s):\n\n4.3.7 (source: server release evidence and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v4.3.6: 12 files, 2923732 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (34543b), scripts/frame_small.png.dat (32356b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), skill-card.md (2698b), SKILL.md (25402b)\n\nFile v4.3.6:SKILL.md\n\n---\r\nname: astro-natal-chart\r\nversion: 4.3.6\r\ndescription: Natal chart calculation, interpretation, and graphical visualization using Swiss Ephemeris (pyswisseph) + Pillow. 3-column layout: wheel + essential data (1/3) + interpretation panel (2/3). AI conclusion via --conclusion flag. Planets, zodiac signs, aspects, houses, wheel chart rendering with bilingual interpretation (RU/EN). Input: birth date, time, and location. Language --lang ru/en (default en), filename includes person name. Windows-compatible with bundled .pyd binary.\r\nmetadata:\r\n  openclaw:\r\n    requires:\r\n      bins:\r\n        - python3\r\n    emoji: \"✨\"\r\n    homepage: https://github.com/dynamicsAlex/astro-natal-chart\r\n---\r\n\r\n# Astrology — Natal Chart\r\n\r\n## Engine: Swiss Ephemeris (pyswisseph 2.10.3.2) + Pillow (PIL)\r\n\r\nThis skill uses **pyswisseph 2.10.3.2** for astrological computation and **Pillow 12.x** for graphical chart rendering.\r\n\r\n## ⚠️ Requirements\r\n\r\n| Requirement | Details |\r\n|---|---|\r\n| **OS** | Windows (x64) — tested on Windows 10/11 |\r\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\r\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** — required for the bundled native extension |\r\n| **Pillow** | **12.x** — `pip install pillow` (for graphical wheel chart rendering) |\r\n\r\nInstallation steps:\r\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\r\n2. Install [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) (`winget install Microsoft.VCRedist.2015+.x64`)\r\n3. Install Pillow: `pip install pillow`\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nAll astrological calculations flow through a single source of truth:\r\n\r\n```\r\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\r\n                                  ↕\r\n                          natal_chart_swe.py  →  text output\r\n```\r\n\r\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\r\n\r\n---\r\n\r\n## Text Output (Swiss Ephemeris)\r\n\r\n### Usage\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n```\r\n\r\n### JSON Output (for renderers)\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date> <time> <city> --json\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\nJSON structure:\r\n```json\r\n{\r\n  \"date\": \"14.12.1991\", \"time\": \"18:30\", \"city\": \"Ижевск\",\r\n  \"city_full\": \"Ижевск, Россия\",\r\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\r\n  \"tz_offset\": 4, \"jd\": 2448605.104167,\r\n  \"planets\": {\r\n    \"Sun\":     {\"lon\": 262.097, \"speed\": 1.017, \"retro\": false},\r\n    \"Moon\":    {\"lon\": 354.459, \"speed\": 12.461, \"retro\": false},\r\n    ...\r\n  },\r\n  \"houses\": [116.94, 130.43, ...],\r\n  \"asc\": 116.94, \"mc\": 352.89,\r\n  \"planet_houses\": {\"Sun\": 6, \"Moon\": 10, ...},\r\n  \"aspects\": [\r\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5},\r\n    ...\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## Graphical Chart Rendering (Pillow)\r\n\r\nThe skill includes `scripts/draw_wheel.py` — a full-featured natal chart wheel renderer that produces a composite PNG image.\r\n\r\n**Important:** `draw_wheel.py` does NOT perform its own astrological calculations. It calls `natal_chart_swe.py --json` and renders the returned data. This eliminates data discrepancies between text and graphical output.\r\n\r\n### Usage\r\n\r\n```bash\r\n# English (default)\r\npython scripts/draw_wheel.py\r\n\r\n# Russian\r\npython scripts/draw_wheel.py --lang ru\r\n\r\n# Arbitrary birth data\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru\r\n\r\n# Explicit English\r\npython scripts/draw_wheel.py --lang en\r\n```\r\n\r\n### Output\r\n\r\n| File | Language |\r\n|---|---|\r\n| `natal_full.png` | English chart (5760×2880) |\r\n| `natal_full_ru.png` | Russian chart (5760×2880) |\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```n+------------------+---------------------------+------------------+\r\n|                  |                           |                  |\r\n|   NATAL WHEEL    |     ESSENTIAL DATA        |  ZODIAC CIRCLE   |\r\n|   (2160×2160)    |     (1440×2880)           |  (2160×2160)     |\r\n|                  |                           |                  |\r\n|  - Sign sectors  |  - Date, time, place      |  - Sign sectors  |\r\n|  - House cusps   |  - Coordinates, timezone  |  - Planet marks  |\r\n|  - Planet marks  |  - ASC / MC positions     |  - ASC/DSC/MC    |\r\n|  - Aspect lines  |                           |  - Same size as  |\r\n|  - ASC/MC lines  |                           |    natal wheel   |\r\n|                  |                           |                  |\r\n|  --- Legends --- |                           |                  |\r\n|  Planet|Element  |                           |                  |\r\n|  |Aspect       |                           |                  |\r\n+------------------+---------------------------+------------------+\r\n```\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```\r\n+------------------+---------------------------------------------+\r\n|                  |                                             |\r\n|   NATAL WHEEL    |          INTERPRETATION PANEL               |\r\n|   (2160×2160)    |            (3600×2880)                      |\r\n|                  |                                             |\r\n|  - \"NATAL CHART\" |  - Date, time, place, coordinates, tz       |\r\n|    title + name  |  - ASC / MC positions                       |\r\n|  - Sign sectors  |  - Sun/Moon/ASC sign interpretation         |\r\n|  - House cusps   |  - Dominant element, stelliums, retrogrades |\r\n|  - Planet marks  |  - All 12 houses with cusp positions,       |\r\n|  - Aspect lines  |    house meanings, and planets in each      |\r\n|  - ASC/MC lines  |                                             |\r\n|                  |                                             |\r\n|  --- Legends --- |                                             |\r\n|  Planet|Element  |                                             |\r\n|  |Aspect       |                                             |\r\n|  | ClawHub link |                                             |\r\n+------------------+---------------------------------------------+\r\n```\r\n```\r\n\r\n### Font Handling\r\n\r\nTwo bundled fonts in `scripts/`:\r\n\r\n| Font | Purpose | Glyphs |\r\n|---|---|---|\r\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + latin |\r\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits, punctuation |\r\n\r\nThe `rtext()` function selects fonts **per character**: zodiac symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. This ensures correct rendering of mixed content like \"♈ Овен AR\".\r\n\r\n**Why not a single font?** No standard Windows font contains both zodiac symbols AND cyrillic. `seguisym.ttf` has zodiac but no cyrillic. `segoeui.ttf` has cyrillic but no zodiac. Per-character selection is the solution.\r\n\r\n### Pillow Dependencies\r\n\r\n`draw_wheel.py` uses these Python modules:\r\n\r\n| Module | Purpose | Install |\r\n|---|---|---|\r\n| `PIL` (Pillow) | Image creation, drawing (circle, ellipse, line, pieslice, text) | `pip install pillow` |\r\n| `math` | Trigonometric calculations (cos, sin, radians) | Stdlib |\r\n| `json` | Parse natal_chart_swe.py JSON output | Stdlib |\r\n| `subprocess` | Call natal_chart_swe.py --json | Stdlib |\r\n| `os`, `sys` | File path operations | Stdlib |\r\n| `argparse` | CLI argument parsing (`--lang en/ru`) | Stdlib |\r\n\r\nNote: `draw_wheel.py` does NOT import `swisseph` directly. It receives all planetary data from `natal_chart_swe.py --json`.\r\n\r\n---\r\n\r\n## Standard Text Output Format\r\n\r\n```\r\n🌟 NATAL CHART  [Swiss Ephemeris vX.XX]\r\n📅 Date: [date]  ⏰ Time: [time]  📍 Place: [city]\r\n🌍 Coordinates: [lat], [lon]  🕐 Timezone: [tz] (UTC+/-offset)\r\n📊 JD: [julian_day]\r\n\r\n⬆️ ASC — [sign] [degrees]′\r\n🜨 MC — [sign] [degrees]′\r\n\r\nPLANETS:\r\n☀️ Sun — [sign] [degrees]′ [house] [℞] (speed °/day)\r\n🌙 Moon — [sign] [degrees]′ [house]\r\n...\r\n\r\nHOUSES:\r\nI house — [sign] [degrees]′\r\n... (all 12 houses)\r\n\r\nMAJOR ASPECTS:\r\n☌ Conjunction: [planet]-[planet] (orb: X.X°)\r\n...\r\n\r\nINTERPRETATION:\r\n[detailed interpretation]\r\n```\r\n\r\n## Aspect Orbs\r\n\r\n| Aspect | Symbol | Orb |\r\n|--------|--------|-----|\r\n| Conjunction | ☌ | ±8° |\r\n| Opposition | ☍ | ±8° |\r\n| Square | □ | ±7° |\r\n| Trine | △ | ±7° |\r\n| Sextile | ✶ | ±5° |\r\n| Semisextile | ⚺ | ±2° |\r\n| Quincunx | ⚹ | ±2° |\r\n| Semisquare | ∠ | ±2° |\r\n\r\n## Zodiac Signs — Keywords\r\n\r\n- ♈ Aries: initiative, energy, impulsiveness\r\n- ♉ Taurus: stability, sensuality, stubbornness\r\n- ♊ Gemini: sociability, intellect, curiosity\r\n- ♋ Cancer: emotionality, nurturing, intuition\r\n- ♌ Leo: creativity, leadership, pride\r\n- ♍ Virgo: analytical, practical, perfectionist\r\n- ♎ Libra: harmony, diplomacy, partnership\r\n- ♏ Scorpio: depth, transformation, intensity\r\n- ♐ Sagittarius: optimism, philosophy, freedom\r\n- ♑ Capricorn: ambition, discipline, responsibility\r\n- ♒ Aquarius: originality, independence, innovation\r\n- ♓ Pisces: intuition, compassion, dreaminess\r\n\r\n## Planets — Meanings\r\n\r\n- **Sun** — ego, essence, vitality, father\r\n- **Moon** — emotions, subconscious, mother, instincts\r\n- **Mercury** — thinking, communication, learning\r\n- **Venus** — love, beauty, values, finances\r\n- **Mars** — energy, action, aggression, sexuality\r\n- **Jupiter** — expansion, luck, wisdom, growth\r\n- **Saturn** — limitations, discipline, karma, structure\r\n- **Uranus** — change, rebellion, innovation, suddenness\r\n- **Neptune** — illusion, spirituality, creativity, dissolution\r\n- **Pluto** — transformation, power, death/rebirth\r\n\r\n## Houses — Life Areas\r\n\r\n1. **I (ASC)** — personality, appearance, self-presentation\r\n2. **II** — money, values, resources\r\n3. **III** — communication, siblings, learning\r\n4. **IV (IC)** — home, family, roots\r\n5. **V** — creativity, children, romance\r\n6. **VI** — health, work, routine\r\n7. **VII (DSC)** — partnership, marriage\r\n8. **VIII** — transformation, shared resources, intimacy\r\n9. **IX** — philosophy, travel, higher education\r\n10. **X (MC)** — career, reputation, goals\r\n11. **XI** — friends, hopes, groups\r\n12. **XII** — solitude, subconscious, karma\r\n\r\n## Interpretation Guidelines\r\n\r\nWhen interpreting, consider:\r\n1. **Sun** — core personality\r\n2. **Moon** — emotional nature\r\n3. **Ascendant** — mask, first impression\r\n4. **MC** — career aspirations\r\n5. **Stelliums** (3+ planets in one sign/house)\r\n6. **Retrograde planets** — energy turned inward\r\n7. **Major aspects** — personality dynamics\r\n8. **Dominant elements** (fire, earth, air, water)\r\n\r\n## Disclaimer\r\n\r\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial predictions based on astrological readings.\r\n\r\n---\r\n\r\n## Scripts Reference\r\n\r\n| Script | Purpose | Dependencies |\r\n|---|---|---|\r\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\r\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG | subprocess, json, math, os, argparse, Pillow |\r\n| `scripts/seguisym.ttf` | **Zodiac symbol font.** Bundled for correct ♈♉♊... rendering. ~2.4 MB. | — |\r\n| `scripts/segoeuisl.ttf` | **Cyrillic/latin font.** Bundled for cyrillic, digits, latin text. ~854 KB. | — |\r\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\r\n\r\n### draw_wheel.py — Quick Reference\r\n\r\n```bash\r\n# Generate chart with interpretation (English, default Matvey's data)\r\npython scripts/draw_wheel.py\r\n\r\n# Generate for any person (Russian)\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Алексей\"\r\n\r\n# Generate for any person (English)\r\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en\r\n\r\n# Options:\r\n#   --name \"Person Name\"  — name shown above the wheel\r\n#   --lang ru|en          — language of interpretation (default: en)\r\n#   --conclusion FILE     — path to text file with AI-generated conclusion\r\n#   --frame FILE          — path to .png.dat image (QR code) embedded after ClawHub link\r\n\r\n# Output files:\r\n#   natal_full.png     — English version\r\n#   natal_full_ru.png  — Russian version\r\n\r\n# AI Conclusion workflow (for OpenClaw agents):\r\n#   Step 1: python scripts/natal_chart_swe.py <date> <time> <city> --json\r\n#   Step 2: AI analyzes JSON and writes conclusion to a file\r\n#   Step 3: python scripts/draw_wheel.py <date> <time> <city> --lang ru --name \"Name\" --conclusion <file>\r\n```\r\n\r\n### natal_chart_swe.py — Quick Reference\r\n\r\n```bash\r\n# Text chart\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n\r\n# JSON export (used by draw_wheel.py)\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n### v4.3.6 (2026-06-11)\r\n- **Fixed QR code transparency**: RGBA frame images now preserve alpha channel when pasted onto the chart (was converting to RGB, causing black background behind transparent QR codes)\r\n- SKILL.md version bumped to 4.3.6\r\n\r\n### v4.3.5 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.5\r\n\r\n### v4.3.4 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.4\r\n\r\n### v4.3.3 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel, improving visual separation from the aspects block\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.3\r\n\r\n### v4.3.2 (2026-06-02)\r\n- **Moved aspects & configurations to Info panel**: detailed aspect list with descriptions (from interp panel) now appears in the middle Info panel, below planet/house tables\r\n- **Added text labels to aspect legend**: wheel legend now shows Unicode symbol + text abbreviation (☌ Conj, □ Sqr, △ Trine, etc.)\r\n- **Restored AI conclusion block**: \"ЗАКЛЮЧЕНИЕ\" / \"CONCLUSION\" block at bottom of Interpretation panel (was accidentally removed during refactoring)\r\n- SKILL.md version bumped to 4.3.2\r\n\r\n### v4.3.1 (2026-06-02)\r\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf` via extended `is_z()` check\r\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols from `seguisym`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.3.0 (2026-06-02)\r\n- **`--conclusion FILE` flag**: draw_wheel.py accepts a path to a text file with an AI-generated conclusion\r\n  - Conclusion appears at the bottom of the Interpretation panel, after the houses section\r\n  - Decorative gold separator lines frame the conclusion block\r\n  - Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU)\r\n  - Multi-paragraph text is wrapped to panel width (2400px)\r\n  - Works with any AI-generated summary — not rendered if flag is omitted\r\n- **3-phase workflow for OpenClaw agent**: (1) `natal_chart_swe.py --json` → (2) AI generates conclusion → (3) `draw_wheel.py ... --conclusion file.txt`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.2.0 (2026-06-02)\r\n- **3-column layout**: right panel split into Info (1/3 = 1200px) and Interpretation (2/3 = 2400px)\r\n  - **Info panel (1/3)**: essential data (date, time, place, coordinates, timezone), ASC/MC, planet table with houses, house cusp table, compact aspect list\r\n  - **Interpretation panel (2/3)**: Sun/Moon/ASC interpretation, dominant element, stelliums, retrograde planets, aspects with descriptions, houses with full planet meanings\r\n- **Text wrapping fixed**: `wrap_text()` now uses per-panel width (1200px for Info, 2400px for Interp) — long descriptions properly wrap instead of being clipped\r\n- **Renamed 'ТОЛКОВАНИЕ' → 'ИНТЕРПРЕТАЦИЯ'** in Russian mode (was already 'INTERPRETATION' in English)\r\n- **Vertical dividers** between all three columns\r\n- SKILL.md version bumped to 4.2.0\r\n\r\n### v4.0.0 (2026-06-01)\r\n- **Bilingual interpretation**: all interpretation text available in both Russian and English\r\n  - Default language: English (`--lang en`)\r\n  - Russian: `--lang ru`\r\n  - Separate interpretation data module: `scripts/interp_data.py`\r\n  - Includes `HOUSE_TEXTS_RU/EN`, `PLANET_MEANING_RU/EN`, `SIGN_KEYWORDS_RU/EN`, `ASPECT_MEANING_RU/EN`\r\n- **Extended house descriptions**: each house now has a detailed 3-sentence description covering multiple life areas\r\n- **Aspect interpretation block**: all aspects listed with orb values and brief interpretation\r\n- **Filename includes person name**: output format is now `{Name}_full_natal_{lang}.png` (e.g. `Анна_full_natal_ru.png`, `Anna_full_natal_en.png`)\r\n- **Fixed planet meaning context bug**: planet meanings now correctly reference the planet itself (not the Sun's sign)\r\n- **Separated interpretation data**: `interp_data.py` contains all text constants, `draw_wheel.py` contains rendering logic\r\n- SKILL.md updated with new CLI flags and output file naming\r\n\r\n### v3.8.0 (2026-06-01)\r\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors (Fire showed as Earth's green, Air as Water's blue, etc.). Replaced `pieslice()` with `draw.polygon()` using explicit `aof(d) = radians(90-d)` coordinate math, which is consistent with planet/symbol positioning.\r\n- **Sector boundaries aligned to zodiac signs**: sectors now start from the beginning of each sign (e.g. 270° for Capricorn), not from the ASC degree. This ensures clean 30° sign sectors regardless of ASC position.\r\n- **Bundled fonts**: `seguisym.ttf` (2.4 MB, zodiac symbols) and `segoeuisl.ttf` (854 KB, cyrillic/latin) are both included in `scripts/` and published with the pack.\r\n- SKILL.md changelog updated.\r\n\r\n### v3.7.0 (2026-06-01)\r\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\r\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\r\n- **Dual-font rendering**: `seguisym.ttf` for zodiac symbols (large, 44pt), `segoeuisl.ttf` for cyrillic/latin/digits — bundled in `scripts/`\r\n- **Per-character font selection**: `rtext()` automatically picks the right font per character — no more tofu\r\n- **Zodiac planet circle**: same planet orbit radius (RP=648) and planet size (r=18) as main wheel\r\n- **Essential data panel**: date, time, place, coordinates, timezone, ASC/MC between the wheels\r\n- **Roman numerals** for house cusps (I–XII)\r\n- **ASC/DSC/MC lines** on zodiac circle\r\n- **Planet, element, aspect legends** below the left wheel\r\n- Bundled fonts: `seguisym.ttf` (zodiac) + `segoeuisl.ttf` (cyrillic/latin) in `scripts/`\r\n\r\n### v3.4.0 (2026-06-01)\r\n- **Fixed zodiac symbol rendering**: all font loading now uses a single TrueType font (Segoe UI) with guaranteed Unicode zodiac + Cyrillic support. Symbols like ♈♉♊ render correctly everywhere — wheel, legend, and interpretation text.\r\n- **Unified font system**: replaced separate `get_symbol_font()`/`get_font()` with single cached `font()` function that scans fallback chain and verifies glyph coverage\r\n- **Element legend added**: color-coded legend showing Fire/Earth/Air/Water with colored rectangles\r\n- **Legends fully below wheel**: planet, element, and aspect legends placed at `cy + R_OUTER + 50`, guaranteed zero overlap with the circular chart\r\n\r\n### v3.3.0 (2026-06-01)\r\n- **4K resolution**: canvas is now 3840×2160 (was 2840×1800), all elements scaled proportionally\r\n- **Legend moved below wheel**: planet legend, element legend, and aspect legend are now placed entirely below the circular chart area — zero overlap with the wheel\r\n- **Zodiac symbols in all text**: interpretation text uses ♈♉♊... instead of TA/SG/AR/etc. abbreviations\r\n- **Element color legend**: added visual legend showing Fire/Earth/Air/Water color coding used in sign sectors\r\n- Layout: wheel area 2160×2160, text area 1680×2160, legends below wheel in left panel\r\n\r\n### v3.2.0 (2026-06-01)\r\n- **Zodiac symbols instead of text abbreviations**: wheel now shows ♈♉♊♋♌♍♎♏♐♑♒♓ instead of AR/TA/GE/etc.\r\n- **2x resolution**: canvas is now 2840×1800 (was 1420×900), all fonts and elements scaled proportionally\r\n- **Planet legend moved to bottom-left**: no longer overlaps the chart wheel; placed below info box\r\n- **Full interpretation fits**: larger text panel (1040px) with bigger fonts ensures all 12 houses + aspects render without truncation\r\n- Added get_symbol_font() helper: uses Segoe UI Symbol for reliable zodiac glyph rendering\r\n- Version bumped: 3.1.0 → 3.2.0\r\n\r\n### v3.1.0 (2026-06-01)\r\n- **Unified calculation architecture**: `draw_wheel.py` removed all duplicate astrological calculation code\r\n  - Now calls `natal_chart_swe.py --json` via subprocess for all planetary/house/aspect data\r\n  - Guarantees text and graphical output always match (single source of truth)\r\n- **Added `--json` flag to natal_chart_swe.py**: exports all calculated data (planets, houses, aspects, metadata) as parseable JSON\r\n- **draw_wheel.py now accepts CLI arguments**: `draw_wheel.py [date] [time] [city] [--lang en/ru]`\r\n  - Default: Matvey's chart (14.12.1991 18:30 Ижевск)\r\n  - Custom: any date/time/city combination\r\n- **Generated interpretation**: stelliums, key configurations, house-by-house now auto-detected from JSON data rather than hardcoded\r\n- Updated SKILL.md: architecture diagram, JSON format docs, scripts reference\r\n- Version bumped: 3.0.0 → 3.1.0\r\n\r\n### v3.0.0 (2026-06-01)\r\n- **Added graphical chart renderer** (`scripts/draw_wheel.py`) using Pillow (PIL)\r\n  - Composite 3840×2160 PNG (4K): circular wheel (left) + house interpretation (right)\r\n  - 12 sign sectors colored by element (fire/earth/air/water)\r\n  - Planet markers with retrograde(℞) indication\r\n  - House cusp lines with numbered divisions\r\n  - ASC/MC highlighted lines\r\n  - Aspect lines color-coded by type (conj/sqr/trine/sext/opp/quinc)\r\n  - Info box with ASC/MC positions and aspect legend\r\n  - Planet legend panel\r\n  - Full house-by-house textual interpretation on the right panel\r\n- **Localization support** (`--lang en` / `--lang ru`)\r\n  - English (default) and Russian output\r\n  - All labels, headers, and interpretation text localized\r\n- **Added Pillow dependency** (installed via `pip install pillow`)\r\n- **Pillow drawing API documented** in SKILL.md\r\n- **Scripts reference table** added to SKILL.md\r\n- Version bumped: 2.1.0 → 3.0.0\r\n- Description updated to mention graphical visualization\r\n\r\n### v2.1.0 (2026-05-28)\r\n- **Fixed `.pyd.dat` loading on Windows** — `importlib.util.spec_from_file_location` does not recognize non-standard extensions; added auto-copy to temporary `.pyd` before loading\r\n- **Added Microsoft Visual C++ Redistributable as explicit requirement** — bundled `.pyd` compiled with MSVC 14.44 requires `vcruntime140.dll` and friends\r\n- **Requires Python 3.14.x** — binary extension compiled for CPython 3.14 ABI\r\n- Added Requirements section to SKILL.md with installation instructions\r\n- Updated metadata: version bumped to 2.1.0, description mentions Windows compatibility\r\n- Tested on Windows 10 (10.0.19045, x64) with Python 3.14.5 and VC++ Redist 14.51.36231.0\r\n\r\n### v2.0.0 (2026-05-28)\r\n- **Switched to Swiss Ephemeris** (pyswisseph 2.10.3.2) as the primary calculation engine — replaces simplified analytical formulas\r\n- Replaced hardcoded positions with `swe.calc_ut()` using NASA JPL DE431 ephemerides\r\n- House calculation now uses `swe.houses_ex()` (exact iterative Placidus) instead of analytical approximations\r\n- Added retrograde detection via `FLG_SPEED` flag (velocity sign)\r\n- Bundled `swisseph.cp314-win_amd64.pyd` (2 MB) in `scripts/` — no system-wide pip installation required\r\n- Version detection: `swe.__version__` returns int `20230604` — formatted as `vYY.MM.BLD` string\r\n- Expanded city database to 50+ cities with coordinates and timezone data\r\n- Added proper Julian Day conversion through `swe.julday()`\r\n- Removed legacy scripts: `natal_chart.py`, `placidus_iterative.py`, `placidus_meeus.py` and all debug/fix scripts (11 files)\r\n- SKILL.md rewritten in English with full documentation\r\n\r\n### v1.x (earlier)\r\n- Initial release using simplified analytical formulas\r\n- Separate iterative and Meeus-based Placidus implementations\r\n- Planet positions calculated with approximate algorithms (0.5–15° error range)\n\nFile v4.3.6:README.md\n\n# ✨ Astro Natal Chart\n\nAn [OpenClaw](https://github.com/openclaw/openclaw) skill — natal chart calculation, interpretation, and graphical visualization using **Swiss Ephemeris** and **Pillow**.\n\nGenerates a full-featured 5760×2880 px PNG chart (3 columns): natal wheel + essential data + detailed interpretation. Supports Russian and English languages.\n\n## Features\n\n- **Precise calculation** via Swiss Ephemeris (pyswisseph 2.10.3.2) — NASA JPL DE431 ephemerides\n- **10 planets**: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto\n- **12 houses** in Placidus system (exact iterative calculation)\n- **8 aspect types**: conjunction, opposition, trine, square, sextile, quincunx, semisextile, semisquare\n- **Retrograde detection** via planet velocity sign\n- **Bilingual interpretation**: Russian (`--lang ru`) and English (`--lang en`)\n- **3-column layout**: wheel (2160px) + data (1200px) + interpretation (2400px)\n- **50+ cities** with coordinates and timezones in the built-in database\n\n## Layout\n\n```\n+------------------+------------------+---------------------------+\n|                  |                  |                           |\n|    NATAL         |    ESSENTIAL     |    INTERPRETATION         |\n|    WHEEL         |    DATA          |   (2400px = 2/3)          |\n|   (2160px)       |   (1200px = 1/3) |                           |\n|                  |                  |   - Sun/Moon/Ascendant    |\n|  - Sign sectors  |   - Date, time,  |   - Dominant element      |\n|  - House cusps   |     place        |   - Stelliums             |\n|  - Planet marks  |   - Coordinates  |   - Retrograde planets    |\n|  - Aspect lines  |   - ASC / MC     |   - Aspects with          |\n|  - ASC / MC      |   - Planet table |     descriptions          |\n|                  |   - House table  |   - 12 houses with        |\n|  --- Legends --- |   - Aspects      |     meanings & planets    |\n|  Planets|Elements|                  |                           |\n|  Aspects         |                  |                           |\n+------------------+------------------+---------------------------+\n```\n\n## Requirements\n\n| Requirement | Details |\n|---|---|\n| **OS** | Windows (x64) — tested on Windows 10/11 |\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** |\n| **Pillow** | **12.x** — `pip install pillow` |\n\nInstallation steps:\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\n2. Install [VC++ Redist x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n3. Install Pillow: `pip install pillow`\n\n## Architecture\n\n```\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\n                                  ↕\n                          natal_chart_swe.py  →  text output\n```\n\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\n\n## Installation\n\n### Via ClawHub (recommended)\n\n```bash\nopenclaw skills install \"clawhub:astro-natal-chart\"\n```\n\n### From repository\n\n```bash\ngit clone https://github.com/dynamicsAlex/astro-natal-chart.git\ncd astro-natal-chart\npip install pillow\n```\n\n## Usage\n\n### Text calculation\n\n```bash\n# Basic usage\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск\n\n# JSON export (for renderers)\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск --json\n```\n\n### Graphical chart (PNG 5760×2880)\n\n```bash\n# Default (English)\npython scripts/draw_wheel.py\n\n# Russian language\npython scripts/draw_wheel.py --lang ru\n\n# Custom birth data\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Alexey\"\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en --name \"Natalya\"\n```\n\n**Options:**\n- `--name \"Name\"` — name displayed above the wheel\n- `--lang ru|en` — interpretation language (default: `en`)\n- `--conclusion FILE` — path to text file with AI-generated conclusion (optional)\n\n**Output files:**\n- `{Name}_full_natal_en.png` — English version\n- `{Name}_full_natal_ru.png` — Russian version\n\n### AI Conclusion workflow\n\nThe `--conclusion` flag enables a 3-phase workflow for AI-assisted chart analysis:\n\n```bash\n# Step 1: Get chart data as JSON\npython scripts/natal_chart_swe.py 25.10.1985 21:35 Можга --json\n\n# Step 2: AI analyzes JSON and writes conclusion to a file\n# (agent writes analysis to /tmp/conclusion.txt)\n\n# Step 3: Render chart with AI conclusion embedded\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang ru --name \"Natalya\" --conclusion /tmp/conclusion.txt\n```\n\nThe conclusion appears at the bottom of the Interpretation panel, after the houses section, framed by decorative gold separator lines. Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU). Multi-paragraph text is auto-wrapped to panel width (2400px).\n\nWithout `--conclusion` the chart renders normally (no AI summary block).\n\n### JSON structure\n\n```json\n{\n  \"date\": \"24.04.1983\", \"time\": \"06:00\", \"city\": \"Ижевск\",\n  \"city_full\": \"Ижевск, Россия\",\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\n  \"tz_offset\": 4, \"jd\": 2447273.75,\n  \"planets\": {\n    \"Sun\":     {\"lon\": 38.333, \"speed\": 0.985, \"retro\": false},\n    \"Moon\":    {\"lon\": 143.317, \"speed\": 12.19, \"retro\": false}\n  },\n  \"houses\": [5.83, 37.47, 69.12, ...],\n  \"asc\": 5.83, \"mc\": 341.25,\n  \"planet_houses\": {\"Sun\": 12, \"Moon\": 6, ...},\n  \"aspects\": [\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5}\n  ]\n}\n```\n\n## Text output format\n\n```\n🌟 NATAL CHART  [Swiss Ephemeris v20.23]\n📅 Date: 24.04.1983  ⏰ Time: 06:00  📍 Place: Ижевск, Россия\n🌍 56.8519°N, 53.2114°E  🕐 Europe/Samara (UTC+4)\n📊 JD: 2447273.75\n\n⬆️ ASC — Gemini 1°50′\n🜨 MC  — Capricorn 24°45′\n\nPLANETS:\n☀️ Sun     — Taurus 3°20′  [12 house]  (+0.985°/d)\n🌙 Moon    — Virgo 22°19′   [6 house]   (+12.19°/d)\n...\n\nHOUSES:\nI house — Gemini 1°50′\n...\nXII house — Pisces 19°46′\n\nMAJOR ASPECTS:\n☌ Conjunction: Mercury-Venus (orb: 0.5°)\n...\n\nINTERPRETATION:\n[detailed interpretation]\n```\n\n## Aspects and orbs\n\n| Aspect | Symbol | Orb |\n|---|---|---|\n| Conjunction | ☌ | ±8° |\n| Opposition | ☍ | ±8° |\n| Square | □ | ±7° |\n| Trine | △ | ±7° |\n| Sextile | ✶ | ±5° |\n| Semisextile | ⚺ | ±2° |\n| Quincunx | ⚹ | ±2° |\n| Semisquare | ∠ | ±2° |\n\n## Font rendering\n\nTwo bundled fonts in `scripts/`:\n\n| Font | Purpose | Glyphs |\n|---|---|---|\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols + aspect symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + ☌☍□△✶⚹⚺∠ |\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits |\n\nThe `rtext()` function selects fonts **per character**: zodiac and aspect symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. No tofu, no missing glyphs.\n\n## Scripts\n\n| Script | Purpose | Dependencies |\n|---|---|---|\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG. Supports `--conclusion FILE` for AI-generated summary | subprocess, json, math, os, argparse, Pillow |\n| `scripts/interp_data.py` | Interpretation data (RU/EN): houses, planets, signs, aspects | — |\n| `scripts/seguisym.ttf` | Zodiac symbol font (~2.4 MB) | — |\n| `scripts/segoeuisl.ttf` | Cyrillic/latin font (~854 KB) | — |\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\n\n## Interpretation guidelines\n\n1. **Sun** — core personality\n2. **Moon** — emotional nature\n3. **Ascendant** — mask, first impression\n4. **MC** — career aspirations\n5. **Stelliums** (3+ planets in one sign/house)\n6. **Retrograde planets** — energy turned inward\n7. **Major aspects** — personality dynamics\n8. **Dominant elements** (fire, earth, air, water)\n\n## Changelog\n\n### v4.3.1 (2026-06-02)\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf`\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols\n\n### v4.3.0 (2026-06-02)\n- **`--conclusion FILE` flag**: AI-generated conclusion can be embedded in the chart\n- 3-phase workflow: JSON → AI analysis → rendered chart with conclusion\n- Conclusion appears at the bottom of the Interpretation panel with gold separator lines\n\n### v4.2.0 (2026-06-02)\n- **3-column layout**: right panel split into Essential Data (1/3 = 1200px) and Interpretation (2/3 = 2400px)\n- **Fixed text wrapping**: `wrap_text()` now uses per-panel width (1200px for Data, 2400px for Interp) — descriptions wrap properly instead of being clipped\n- **Renamed «ТОЛКОВАНИЕ» → «ИНТЕРПРЕТАЦИЯ»** in Russian mode\n- Vertical dividers between all three columns\n\n### v4.0.0 (2026-06-01)\n- **Bilingual interpretation**: Russian and English languages\n- Extended house descriptions (3 sentences per house)\n- Aspect interpretation block\n- Person's name in output filename\n- Fixed planet meaning context bug\n- Separated interpretation data (`interp_data.py`) from rendering logic\n\n### v3.x (2026-06-01)\n- Fixed element coloring for sign sectors\n- Two equal-size wheels, panoramic 5760×2880 layout\n- Bundled fonts (zodiac + Cyrillic)\n- Zodiac symbols instead of text abbreviations\n- Legends below wheel — no overlap\n\n### v2.x (2026-05-28)\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2)\n- Placidus system (exact iterative)\n- Retrograde detection via `FLG_SPEED`\n- 50+ city database\n- Windows compatibility with bundled `.pyd`\n\n## Disclaimer\n\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial decisions based on astrological readings.\n\n## Author\n\n- GitHub: [@dynamicsAlex](https://github.com/dynamicsAlex)\n- ClawHub: [astro-natal-chart](https://clawhub.ai/dynamicsalex/astro-natal-chart)\n\n## License\n\nMIT\n\nFile v4.3.6:_meta.json\n\n{\n  \"ownerId\": \"kn775k2zzav7y8rpwwm218x0b587f0hj\",\n  \"slug\": \"astro-natal-chart\",\n  \"version\": \"4.3.6\",\n  \"publishedAt\": 1781176425273\n}\n\nFile v4.3.6:CHANGELOG.md\n\n# Changelog\n\n## v3.12.0 (2026-06-01)\n\n- **Header layout fix**: removed \"NATAL CHART\" title from above the wheel, kept it only above the interpretation panel\n- **Name placement**: person's name now shown below the \"NATAL CHART\" title in the right panel\n- **ClawHub link moved**: relocated from under the wheel legends to the bottom of the right interpretation panel\n\n## v3.11.0 (2026-06-01)\n\n- **Layout redesign**: removed right zodiac circle, merged center+right into single 3600px interpretation panel\n- **Chart header**: added \"NATAL CHART\" title above left wheel + optional `--name` parameter for person's name\n- **Full interpretation panel**: Sun/Moon/ASC sign descriptions, dominant element, stelliums, retrograde planets, all 12 houses with cusp positions, house meanings, and planets in each house\n- **ClawHub link**: added skill repository URL under the legends below the wheel\n- Language-aware: interpretation text in Russian (`--lang ru`) or English (`--lang en`)\n- Cleaned up debug files\n\n## v3.10.0 (2026-06-01)\n\n- **Fonts shipped as .ttf.dat to bypass ClawHub filter**: ClawHub silently strips `.ttf` files from skill packages. Fonts are now bundled as `seguisym.ttf.dat` (2.4 MB) and `segoeuisl.ttf.dat` (854 KB). `draw_wheel.py` auto-detects and restores them to `.ttf` on first run via `shutil.copy2`.\n- This ensures the skill renders correctly on all machines after ClawHub installation without any manual font setup.\n\n## v3.9.0 (2026-06-01)\n\n- **Attempted bundled fonts**: included `seguisym.ttf` and `segoeuisl.ttf` directly in `scripts/`. ClawHub silently filtered them out — not present in the published package.\n\n## v3.8.0 (2026-06-01)\n\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors. Replaced with `draw.polygon()` using explicit coordinate math.\n- **Sector boundaries aligned to zodiac signs**: sectors start from the beginning of each sign, not from the ASC degree.\n- Bundled fonts reference added (deferred to v3.9.0 for actual inclusion).\n\n## v3.7.0 (2026-06-01)\n\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\n- **Dual-font rendering** with per-character font selection\n- **Zodiac planet circle**: same planet orbit radius and size as main wheel\n\n## v2.1.0 (2026-05-28)\n\n- Fixed `.pyd.dat` loading on Windows\n- Added Microsoft Visual C++ Redistributable requirement\n- Requires Python 3.14.x\n\n## v2.0.0 (2026-05-28)\n\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2) as primary calculation engine\n- House calculation via `swe.houses_ex()` (exact iterative Placidus)\n- Added retrograde detection via `FLG_SPEED` flag\n\n## v1.x (earlier)\n\n- Initial release using simplified analytical formulas\n\nFile v4.3.6:skill-card.md\n\n## Description: <br>\nCalculates natal chart data from birth date, time, and location, returns text or JSON, and renders bilingual PNG wheel charts using Swiss Ephemeris and Pillow. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dynamicsalex](https://clawhub.ai/user/dynamicsalex) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to calculate astrology natal chart positions and generate bilingual chart interpretations and PNG visualizations from birth details. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill runs a bundled Windows native Swiss Ephemeris binary. <br>\nMitigation: Review the package before installing and run it only in an isolated Windows/Python environment where native code execution is acceptable. <br>\nRisk: The renderer can automatically install Pillow if it is missing. <br>\nMitigation: Pre-install a trusted, pinned Pillow version before running the skill to avoid the automatic pip install path. <br>\nRisk: The PNG renderer writes to a hard-coded Windows OpenClaw workspace path. <br>\nMitigation: Check or modify the output path before running the renderer, especially on shared systems. <br>\nRisk: Astrology interpretations can be mistaken for scientific, medical, or financial advice. <br>\nMitigation: Use the output for entertainment or education only and do not make medical or financial decisions based on astrological readings. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dynamicsalex/astro-natal-chart) <br>\n- [Python 3.14 download](https://www.python.org/downloads/release/python-3145/) <br>\n- [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, JSON, Files, Shell commands, Guidance] <br>\n**Output Format:** [Markdown or console text with bash commands, JSON chart data, and PNG chart files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Renderer is Windows x64 oriented, depends on Python 3.14 and a bundled Swiss Ephemeris native binary, and writes PNG output to a hard-coded Windows OpenClaw workspace path unless changed.] <br>\n\n## Skill Version(s): <br>\n4.3.6 (source: server release and SKILL.md frontmatter; release changelog: fix QR code transparency) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v4.3.5: 12 files, 2923583 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (34469b), scripts/frame_small.png.dat (32356b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), skill-card.md (2585b), SKILL.md (25154b)\n\nFile v4.3.5:SKILL.md\n\n---\r\nname: astro-natal-chart\r\nversion: 4.3.5\r\ndescription: Natal chart calculation, interpretation, and graphical visualization using Swiss Ephemeris (pyswisseph) + Pillow. 3-column layout: wheel + essential data (1/3) + interpretation panel (2/3). AI conclusion via --conclusion flag. Planets, zodiac signs, aspects, houses, wheel chart rendering with bilingual interpretation (RU/EN). Input: birth date, time, and location. Language --lang ru/en (default en), filename includes person name. Windows-compatible with bundled .pyd binary.\r\nmetadata:\r\n  openclaw:\r\n    requires:\r\n      bins:\r\n        - python3\r\n    emoji: \"✨\"\r\n    homepage: https://github.com/dynamicsAlex/astro-natal-chart\r\n---\r\n\r\n# Astrology — Natal Chart\r\n\r\n## Engine: Swiss Ephemeris (pyswisseph 2.10.3.2) + Pillow (PIL)\r\n\r\nThis skill uses **pyswisseph 2.10.3.2** for astrological computation and **Pillow 12.x** for graphical chart rendering.\r\n\r\n## ⚠️ Requirements\r\n\r\n| Requirement | Details |\r\n|---|---|\r\n| **OS** | Windows (x64) — tested on Windows 10/11 |\r\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\r\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** — required for the bundled native extension |\r\n| **Pillow** | **12.x** — `pip install pillow` (for graphical wheel chart rendering) |\r\n\r\nInstallation steps:\r\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\r\n2. Install [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) (`winget install Microsoft.VCRedist.2015+.x64`)\r\n3. Install Pillow: `pip install pillow`\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nAll astrological calculations flow through a single source of truth:\r\n\r\n```\r\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\r\n                                  ↕\r\n                          natal_chart_swe.py  →  text output\r\n```\r\n\r\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\r\n\r\n---\r\n\r\n## Text Output (Swiss Ephemeris)\r\n\r\n### Usage\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n```\r\n\r\n### JSON Output (for renderers)\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date> <time> <city> --json\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\nJSON structure:\r\n```json\r\n{\r\n  \"date\": \"14.12.1991\", \"time\": \"18:30\", \"city\": \"Ижевск\",\r\n  \"city_full\": \"Ижевск, Россия\",\r\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\r\n  \"tz_offset\": 4, \"jd\": 2448605.104167,\r\n  \"planets\": {\r\n    \"Sun\":     {\"lon\": 262.097, \"speed\": 1.017, \"retro\": false},\r\n    \"Moon\":    {\"lon\": 354.459, \"speed\": 12.461, \"retro\": false},\r\n    ...\r\n  },\r\n  \"houses\": [116.94, 130.43, ...],\r\n  \"asc\": 116.94, \"mc\": 352.89,\r\n  \"planet_houses\": {\"Sun\": 6, \"Moon\": 10, ...},\r\n  \"aspects\": [\r\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5},\r\n    ...\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## Graphical Chart Rendering (Pillow)\r\n\r\nThe skill includes `scripts/draw_wheel.py` — a full-featured natal chart wheel renderer that produces a composite PNG image.\r\n\r\n**Important:** `draw_wheel.py` does NOT perform its own astrological calculations. It calls `natal_chart_swe.py --json` and renders the returned data. This eliminates data discrepancies between text and graphical output.\r\n\r\n### Usage\r\n\r\n```bash\r\n# English (default)\r\npython scripts/draw_wheel.py\r\n\r\n# Russian\r\npython scripts/draw_wheel.py --lang ru\r\n\r\n# Arbitrary birth data\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru\r\n\r\n# Explicit English\r\npython scripts/draw_wheel.py --lang en\r\n```\r\n\r\n### Output\r\n\r\n| File | Language |\r\n|---|---|\r\n| `natal_full.png` | English chart (5760×2880) |\r\n| `natal_full_ru.png` | Russian chart (5760×2880) |\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```n+------------------+---------------------------+------------------+\r\n|                  |                           |                  |\r\n|   NATAL WHEEL    |     ESSENTIAL DATA        |  ZODIAC CIRCLE   |\r\n|   (2160×2160)    |     (1440×2880)           |  (2160×2160)     |\r\n|                  |                           |                  |\r\n|  - Sign sectors  |  - Date, time, place      |  - Sign sectors  |\r\n|  - House cusps   |  - Coordinates, timezone  |  - Planet marks  |\r\n|  - Planet marks  |  - ASC / MC positions     |  - ASC/DSC/MC    |\r\n|  - Aspect lines  |                           |  - Same size as  |\r\n|  - ASC/MC lines  |                           |    natal wheel   |\r\n|                  |                           |                  |\r\n|  --- Legends --- |                           |                  |\r\n|  Planet|Element  |                           |                  |\r\n|  |Aspect       |                           |                  |\r\n+------------------+---------------------------+------------------+\r\n```\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```\r\n+------------------+---------------------------------------------+\r\n|                  |                                             |\r\n|   NATAL WHEEL    |          INTERPRETATION PANEL               |\r\n|   (2160×2160)    |            (3600×2880)                      |\r\n|                  |                                             |\r\n|  - \"NATAL CHART\" |  - Date, time, place, coordinates, tz       |\r\n|    title + name  |  - ASC / MC positions                       |\r\n|  - Sign sectors  |  - Sun/Moon/ASC sign interpretation         |\r\n|  - House cusps   |  - Dominant element, stelliums, retrogrades |\r\n|  - Planet marks  |  - All 12 houses with cusp positions,       |\r\n|  - Aspect lines  |    house meanings, and planets in each      |\r\n|  - ASC/MC lines  |                                             |\r\n|                  |                                             |\r\n|  --- Legends --- |                                             |\r\n|  Planet|Element  |                                             |\r\n|  |Aspect       |                                             |\r\n|  | ClawHub link |                                             |\r\n+------------------+---------------------------------------------+\r\n```\r\n```\r\n\r\n### Font Handling\r\n\r\nTwo bundled fonts in `scripts/`:\r\n\r\n| Font | Purpose | Glyphs |\r\n|---|---|---|\r\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + latin |\r\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits, punctuation |\r\n\r\nThe `rtext()` function selects fonts **per character**: zodiac symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. This ensures correct rendering of mixed content like \"♈ Овен AR\".\r\n\r\n**Why not a single font?** No standard Windows font contains both zodiac symbols AND cyrillic. `seguisym.ttf` has zodiac but no cyrillic. `segoeui.ttf` has cyrillic but no zodiac. Per-character selection is the solution.\r\n\r\n### Pillow Dependencies\r\n\r\n`draw_wheel.py` uses these Python modules:\r\n\r\n| Module | Purpose | Install |\r\n|---|---|---|\r\n| `PIL` (Pillow) | Image creation, drawing (circle, ellipse, line, pieslice, text) | `pip install pillow` |\r\n| `math` | Trigonometric calculations (cos, sin, radians) | Stdlib |\r\n| `json` | Parse natal_chart_swe.py JSON output | Stdlib |\r\n| `subprocess` | Call natal_chart_swe.py --json | Stdlib |\r\n| `os`, `sys` | File path operations | Stdlib |\r\n| `argparse` | CLI argument parsing (`--lang en/ru`) | Stdlib |\r\n\r\nNote: `draw_wheel.py` does NOT import `swisseph` directly. It receives all planetary data from `natal_chart_swe.py --json`.\r\n\r\n---\r\n\r\n## Standard Text Output Format\r\n\r\n```\r\n🌟 NATAL CHART  [Swiss Ephemeris vX.XX]\r\n📅 Date: [date]  ⏰ Time: [time]  📍 Place: [city]\r\n🌍 Coordinates: [lat], [lon]  🕐 Timezone: [tz] (UTC+/-offset)\r\n📊 JD: [julian_day]\r\n\r\n⬆️ ASC — [sign] [degrees]′\r\n🜨 MC — [sign] [degrees]′\r\n\r\nPLANETS:\r\n☀️ Sun — [sign] [degrees]′ [house] [℞] (speed °/day)\r\n🌙 Moon — [sign] [degrees]′ [house]\r\n...\r\n\r\nHOUSES:\r\nI house — [sign] [degrees]′\r\n... (all 12 houses)\r\n\r\nMAJOR ASPECTS:\r\n☌ Conjunction: [planet]-[planet] (orb: X.X°)\r\n...\r\n\r\nINTERPRETATION:\r\n[detailed interpretation]\r\n```\r\n\r\n## Aspect Orbs\r\n\r\n| Aspect | Symbol | Orb |\r\n|--------|--------|-----|\r\n| Conjunction | ☌ | ±8° |\r\n| Opposition | ☍ | ±8° |\r\n| Square | □ | ±7° |\r\n| Trine | △ | ±7° |\r\n| Sextile | ✶ | ±5° |\r\n| Semisextile | ⚺ | ±2° |\r\n| Quincunx | ⚹ | ±2° |\r\n| Semisquare | ∠ | ±2° |\r\n\r\n## Zodiac Signs — Keywords\r\n\r\n- ♈ Aries: initiative, energy, impulsiveness\r\n- ♉ Taurus: stability, sensuality, stubbornness\r\n- ♊ Gemini: sociability, intellect, curiosity\r\n- ♋ Cancer: emotionality, nurturing, intuition\r\n- ♌ Leo: creativity, leadership, pride\r\n- ♍ Virgo: analytical, practical, perfectionist\r\n- ♎ Libra: harmony, diplomacy, partnership\r\n- ♏ Scorpio: depth, transformation, intensity\r\n- ♐ Sagittarius: optimism, philosophy, freedom\r\n- ♑ Capricorn: ambition, discipline, responsibility\r\n- ♒ Aquarius: originality, independence, innovation\r\n- ♓ Pisces: intuition, compassion, dreaminess\r\n\r\n## Planets — Meanings\r\n\r\n- **Sun** — ego, essence, vitality, father\r\n- **Moon** — emotions, subconscious, mother, instincts\r\n- **Mercury** — thinking, communication, learning\r\n- **Venus** — love, beauty, values, finances\r\n- **Mars** — energy, action, aggression, sexuality\r\n- **Jupiter** — expansion, luck, wisdom, growth\r\n- **Saturn** — limitations, discipline, karma, structure\r\n- **Uranus** — change, rebellion, innovation, suddenness\r\n- **Neptune** — illusion, spirituality, creativity, dissolution\r\n- **Pluto** — transformation, power, death/rebirth\r\n\r\n## Houses — Life Areas\r\n\r\n1. **I (ASC)** — personality, appearance, self-presentation\r\n2. **II** — money, values, resources\r\n3. **III** — communication, siblings, learning\r\n4. **IV (IC)** — home, family, roots\r\n5. **V** — creativity, children, romance\r\n6. **VI** — health, work, routine\r\n7. **VII (DSC)** — partnership, marriage\r\n8. **VIII** — transformation, shared resources, intimacy\r\n9. **IX** — philosophy, travel, higher education\r\n10. **X (MC)** — career, reputation, goals\r\n11. **XI** — friends, hopes, groups\r\n12. **XII** — solitude, subconscious, karma\r\n\r\n## Interpretation Guidelines\r\n\r\nWhen interpreting, consider:\r\n1. **Sun** — core personality\r\n2. **Moon** — emotional nature\r\n3. **Ascendant** — mask, first impression\r\n4. **MC** — career aspirations\r\n5. **Stelliums** (3+ planets in one sign/house)\r\n6. **Retrograde planets** — energy turned inward\r\n7. **Major aspects** — personality dynamics\r\n8. **Dominant elements** (fire, earth, air, water)\r\n\r\n## Disclaimer\r\n\r\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial predictions based on astrological readings.\r\n\r\n---\r\n\r\n## Scripts Reference\r\n\r\n| Script | Purpose | Dependencies |\r\n|---|---|---|\r\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\r\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG | subprocess, json, math, os, argparse, Pillow |\r\n| `scripts/seguisym.ttf` | **Zodiac symbol font.** Bundled for correct ♈♉♊... rendering. ~2.4 MB. | — |\r\n| `scripts/segoeuisl.ttf` | **Cyrillic/latin font.** Bundled for cyrillic, digits, latin text. ~854 KB. | — |\r\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\r\n\r\n### draw_wheel.py — Quick Reference\r\n\r\n```bash\r\n# Generate chart with interpretation (English, default Matvey's data)\r\npython scripts/draw_wheel.py\r\n\r\n# Generate for any person (Russian)\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Алексей\"\r\n\r\n# Generate for any person (English)\r\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en\r\n\r\n# Options:\r\n#   --name \"Person Name\"  — name shown above the wheel\r\n#   --lang ru|en          — language of interpretation (default: en)\r\n#   --conclusion FILE     — path to text file with AI-generated conclusion\r\n#   --frame FILE          — path to .png.dat image (QR code) embedded after ClawHub link\r\n\r\n# Output files:\r\n#   natal_full.png     — English version\r\n#   natal_full_ru.png  — Russian version\r\n\r\n# AI Conclusion workflow (for OpenClaw agents):\r\n#   Step 1: python scripts/natal_chart_swe.py <date> <time> <city> --json\r\n#   Step 2: AI analyzes JSON and writes conclusion to a file\r\n#   Step 3: python scripts/draw_wheel.py <date> <time> <city> --lang ru --name \"Name\" --conclusion <file>\r\n```\r\n\r\n### natal_chart_swe.py — Quick Reference\r\n\r\n```bash\r\n# Text chart\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n\r\n# JSON export (used by draw_wheel.py)\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n### v4.3.5 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.5\r\n\r\n### v4.3.4 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.4\r\n\r\n### v4.3.3 (2026-06-11)\r\n- **Moved divider line above ClawHub link and QR code**: thin separator now appears before the ClawHub URL and QR code in the info panel, improving visual separation from the aspects block\r\n- **Added frame_small.png.dat**: bundled QR code image for embedding in chart output\r\n- SKILL.md version bumped to 4.3.3\r\n\r\n### v4.3.2 (2026-06-02)\r\n- **Moved aspects & configurations to Info panel**: detailed aspect list with descriptions (from interp panel) now appears in the middle Info panel, below planet/house tables\r\n- **Added text labels to aspect legend**: wheel legend now shows Unicode symbol + text abbreviation (☌ Conj, □ Sqr, △ Trine, etc.)\r\n- **Restored AI conclusion block**: \"ЗАКЛЮЧЕНИЕ\" / \"CONCLUSION\" block at bottom of Interpretation panel (was accidentally removed during refactoring)\r\n- SKILL.md version bumped to 4.3.2\r\n\r\n### v4.3.1 (2026-06-02)\r\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf` via extended `is_z()` check\r\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols from `seguisym`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.3.0 (2026-06-02)\r\n- **`--conclusion FILE` flag**: draw_wheel.py accepts a path to a text file with an AI-generated conclusion\r\n  - Conclusion appears at the bottom of the Interpretation panel, after the houses section\r\n  - Decorative gold separator lines frame the conclusion block\r\n  - Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU)\r\n  - Multi-paragraph text is wrapped to panel width (2400px)\r\n  - Works with any AI-generated summary — not rendered if flag is omitted\r\n- **3-phase workflow for OpenClaw agent**: (1) `natal_chart_swe.py --json` → (2) AI generates conclusion → (3) `draw_wheel.py ... --conclusion file.txt`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.2.0 (2026-06-02)\r\n- **3-column layout**: right panel split into Info (1/3 = 1200px) and Interpretation (2/3 = 2400px)\r\n  - **Info panel (1/3)**: essential data (date, time, place, coordinates, timezone), ASC/MC, planet table with houses, house cusp table, compact aspect list\r\n  - **Interpretation panel (2/3)**: Sun/Moon/ASC interpretation, dominant element, stelliums, retrograde planets, aspects with descriptions, houses with full planet meanings\r\n- **Text wrapping fixed**: `wrap_text()` now uses per-panel width (1200px for Info, 2400px for Interp) — long descriptions properly wrap instead of being clipped\r\n- **Renamed 'ТОЛКОВАНИЕ' → 'ИНТЕРПРЕТАЦИЯ'** in Russian mode (was already 'INTERPRETATION' in English)\r\n- **Vertical dividers** between all three columns\r\n- SKILL.md version bumped to 4.2.0\r\n\r\n### v4.0.0 (2026-06-01)\r\n- **Bilingual interpretation**: all interpretation text available in both Russian and English\r\n  - Default language: English (`--lang en`)\r\n  - Russian: `--lang ru`\r\n  - Separate interpretation data module: `scripts/interp_data.py`\r\n  - Includes `HOUSE_TEXTS_RU/EN`, `PLANET_MEANING_RU/EN`, `SIGN_KEYWORDS_RU/EN`, `ASPECT_MEANING_RU/EN`\r\n- **Extended house descriptions**: each house now has a detailed 3-sentence description covering multiple life areas\r\n- **Aspect interpretation block**: all aspects listed with orb values and brief interpretation\r\n- **Filename includes person name**: output format is now `{Name}_full_natal_{lang}.png` (e.g. `Анна_full_natal_ru.png`, `Anna_full_natal_en.png`)\r\n- **Fixed planet meaning context bug**: planet meanings now correctly reference the planet itself (not the Sun's sign)\r\n- **Separated interpretation data**: `interp_data.py` contains all text constants, `draw_wheel.py` contains rendering logic\r\n- SKILL.md updated with new CLI flags and output file naming\r\n\r\n### v3.8.0 (2026-06-01)\r\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors (Fire showed as Earth's green, Air as Water's blue, etc.). Replaced `pieslice()` with `draw.polygon()` using explicit `aof(d) = radians(90-d)` coordinate math, which is consistent with planet/symbol positioning.\r\n- **Sector boundaries aligned to zodiac signs**: sectors now start from the beginning of each sign (e.g. 270° for Capricorn), not from the ASC degree. This ensures clean 30° sign sectors regardless of ASC position.\r\n- **Bundled fonts**: `seguisym.ttf` (2.4 MB, zodiac symbols) and `segoeuisl.ttf` (854 KB, cyrillic/latin) are both included in `scripts/` and published with the pack.\r\n- SKILL.md changelog updated.\r\n\r\n### v3.7.0 (2026-06-01)\r\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\r\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\r\n- **Dual-font rendering**: `seguisym.ttf` for zodiac symbols (large, 44pt), `segoeuisl.ttf` for cyrillic/latin/digits — bundled in `scripts/`\r\n- **Per-character font selection**: `rtext()` automatically picks the right font per character — no more tofu\r\n- **Zodiac planet circle**: same planet orbit radius (RP=648) and planet size (r=18) as main wheel\r\n- **Essential data panel**: date, time, place, coordinates, timezone, ASC/MC between the wheels\r\n- **Roman numerals** for house cusps (I–XII)\r\n- **ASC/DSC/MC lines** on zodiac circle\r\n- **Planet, element, aspect legends** below the left wheel\r\n- Bundled fonts: `seguisym.ttf` (zodiac) + `segoeuisl.ttf` (cyrillic/latin) in `scripts/`\r\n\r\n### v3.4.0 (2026-06-01)\r\n- **Fixed zodiac symbol rendering**: all font loading now uses a single TrueType font (Segoe UI) with guaranteed Unicode zodiac + Cyrillic support. Symbols like ♈♉♊ render correctly everywhere — wheel, legend, and interpretation text.\r\n- **Unified font system**: replaced separate `get_symbol_font()`/`get_font()` with single cached `font()` function that scans fallback chain and verifies glyph coverage\r\n- **Element legend added**: color-coded legend showing Fire/Earth/Air/Water with colored rectangles\r\n- **Legends fully below wheel**: planet, element, and aspect legends placed at `cy + R_OUTER + 50`, guaranteed zero overlap with the circular chart\r\n\r\n### v3.3.0 (2026-06-01)\r\n- **4K resolution**: canvas is now 3840×2160 (was 2840×1800), all elements scaled proportionally\r\n- **Legend moved below wheel**: planet legend, element legend, and aspect legend are now placed entirely below the circular chart area — zero overlap with the wheel\r\n- **Zodiac symbols in all text**: interpretation text uses ♈♉♊... instead of TA/SG/AR/etc. abbreviations\r\n- **Element color legend**: added visual legend showing Fire/Earth/Air/Water color coding used in sign sectors\r\n- Layout: wheel area 2160×2160, text area 1680×2160, legends below wheel in left panel\r\n\r\n### v3.2.0 (2026-06-01)\r\n- **Zodiac symbols instead of text abbreviations**: wheel now shows ♈♉♊♋♌♍♎♏♐♑♒♓ instead of AR/TA/GE/etc.\r\n- **2x resolution**: canvas is now 2840×1800 (was 1420×900), all fonts and elements scaled proportionally\r\n- **Planet legend moved to bottom-left**: no longer overlaps the chart wheel; placed below info box\r\n- **Full interpretation fits**: larger text panel (1040px) with bigger fonts ensures all 12 houses + aspects render without truncation\r\n- Added get_symbol_font() helper: uses Segoe UI Symbol for reliable zodiac glyph rendering\r\n- Version bumped: 3.1.0 → 3.2.0\r\n\r\n### v3.1.0 (2026-06-01)\r\n- **Unified calculation architecture**: `draw_wheel.py` removed all duplicate astrological calculation code\r\n  - Now calls `natal_chart_swe.py --json` via subprocess for all planetary/house/aspect data\r\n  - Guarantees text and graphical output always match (single source of truth)\r\n- **Added `--json` flag to natal_chart_swe.py**: exports all calculated data (planets, houses, aspects, metadata) as parseable JSON\r\n- **draw_wheel.py now accepts CLI arguments**: `draw_wheel.py [date] [time] [city] [--lang en/ru]`\r\n  - Default: Matvey's chart (14.12.1991 18:30 Ижевск)\r\n  - Custom: any date/time/city combination\r\n- **Generated interpretation**: stelliums, key configurations, house-by-house now auto-detected from JSON data rather than hardcoded\r\n- Updated SKILL.md: architecture diagram, JSON format docs, scripts reference\r\n- Version bumped: 3.0.0 → 3.1.0\r\n\r\n### v3.0.0 (2026-06-01)\r\n- **Added graphical chart renderer** (`scripts/draw_wheel.py`) using Pillow (PIL)\r\n  - Composite 3840×2160 PNG (4K): circular wheel (left) + house interpretation (right)\r\n  - 12 sign sectors colored by element (fire/earth/air/water)\r\n  - Planet markers with retrograde(℞) indication\r\n  - House cusp lines with numbered divisions\r\n  - ASC/MC highlighted lines\r\n  - Aspect lines color-coded by type (conj/sqr/trine/sext/opp/quinc)\r\n  - Info box with ASC/MC positions and aspect legend\r\n  - Planet legend panel\r\n  - Full house-by-house textual interpretation on the right panel\r\n- **Localization support** (`--lang en` / `--lang ru`)\r\n  - English (default) and Russian output\r\n  - All labels, headers, and interpretation text localized\r\n- **Added Pillow dependency** (installed via `pip install pillow`)\r\n- **Pillow drawing API documented** in SKILL.md\r\n- **Scripts reference table** added to SKILL.md\r\n- Version bumped: 2.1.0 → 3.0.0\r\n- Description updated to mention graphical visualization\r\n\r\n### v2.1.0 (2026-05-28)\r\n- **Fixed `.pyd.dat` loading on Windows** — `importlib.util.spec_from_file_location` does not recognize non-standard extensions; added auto-copy to temporary `.pyd` before loading\r\n- **Added Microsoft Visual C++ Redistributable as explicit requirement** — bundled `.pyd` compiled with MSVC 14.44 requires `vcruntime140.dll` and friends\r\n- **Requires Python 3.14.x** — binary extension compiled for CPython 3.14 ABI\r\n- Added Requirements section to SKILL.md with installation instructions\r\n- Updated metadata: version bumped to 2.1.0, description mentions Windows compatibility\r\n- Tested on Windows 10 (10.0.19045, x64) with Python 3.14.5 and VC++ Redist 14.51.36231.0\r\n\r\n### v2.0.0 (2026-05-28)\r\n- **Switched to Swiss Ephemeris** (pyswisseph 2.10.3.2) as the primary calculation engine — replaces simplified analytical formulas\r\n- Replaced hardcoded positions with `swe.calc_ut()` using NASA JPL DE431 ephemerides\r\n- House calculation now uses `swe.houses_ex()` (exact iterative Placidus) instead of analytical approximations\r\n- Added retrograde detection via `FLG_SPEED` flag (velocity sign)\r\n- Bundled `swisseph.cp314-win_amd64.pyd` (2 MB) in `scripts/` — no system-wide pip installation required\r\n- Version detection: `swe.__version__` returns int `20230604` — formatted as `vYY.MM.BLD` string\r\n- Expanded city database to 50+ cities with coordinates and timezone data\r\n- Added proper Julian Day conversion through `swe.julday()`\r\n- Removed legacy scripts: `natal_chart.py`, `placidus_iterative.py`, `placidus_meeus.py` and all debug/fix scripts (11 files)\r\n- SKILL.md rewritten in English with full documentation\r\n\r\n### v1.x (earlier)\r\n- Initial release using simplified analytical formulas\r\n- Separate iterative and Meeus-based Placidus implementations\r\n- Planet positions calculated with approximate algorithms (0.5–15° error range)\n\nFile v4.3.5:README.md\n\n# ✨ Astro Natal Chart\n\nAn [OpenClaw](https://github.com/openclaw/openclaw) skill — natal chart calculation, interpretation, and graphical visualization using **Swiss Ephemeris** and **Pillow**.\n\nGenerates a full-featured 5760×2880 px PNG chart (3 columns): natal wheel + essential data + detailed interpretation. Supports Russian and English languages.\n\n## Features\n\n- **Precise calculation** via Swiss Ephemeris (pyswisseph 2.10.3.2) — NASA JPL DE431 ephemerides\n- **10 planets**: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto\n- **12 houses** in Placidus system (exact iterative calculation)\n- **8 aspect types**: conjunction, opposition, trine, square, sextile, quincunx, semisextile, semisquare\n- **Retrograde detection** via planet velocity sign\n- **Bilingual interpretation**: Russian (`--lang ru`) and English (`--lang en`)\n- **3-column layout**: wheel (2160px) + data (1200px) + interpretation (2400px)\n- **50+ cities** with coordinates and timezones in the built-in database\n\n## Layout\n\n```\n+------------------+------------------+---------------------------+\n|                  |                  |                           |\n|    NATAL         |    ESSENTIAL     |    INTERPRETATION         |\n|    WHEEL         |    DATA          |   (2400px = 2/3)          |\n|   (2160px)       |   (1200px = 1/3) |                           |\n|                  |                  |   - Sun/Moon/Ascendant    |\n|  - Sign sectors  |   - Date, time,  |   - Dominant element      |\n|  - House cusps   |     place        |   - Stelliums             |\n|  - Planet marks  |   - Coordinates  |   - Retrograde planets    |\n|  - Aspect lines  |   - ASC / MC     |   - Aspects with          |\n|  - ASC / MC      |   - Planet table |     descriptions          |\n|                  |   - House table  |   - 12 houses with        |\n|  --- Legends --- |   - Aspects      |     meanings & planets    |\n|  Planets|Elements|                  |                           |\n|  Aspects         |                  |                           |\n+------------------+------------------+---------------------------+\n```\n\n## Requirements\n\n| Requirement | Details |\n|---|---|\n| **OS** | Windows (x64) — tested on Windows 10/11 |\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** |\n| **Pillow** | **12.x** — `pip install pillow` |\n\nInstallation steps:\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\n2. Install [VC++ Redist x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n3. Install Pillow: `pip install pillow`\n\n## Architecture\n\n```\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\n                                  ↕\n                          natal_chart_swe.py  →  text output\n```\n\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\n\n## Installation\n\n### Via ClawHub (recommended)\n\n```bash\nopenclaw skills install \"clawhub:astro-natal-chart\"\n```\n\n### From repository\n\n```bash\ngit clone https://github.com/dynamicsAlex/astro-natal-chart.git\ncd astro-natal-chart\npip install pillow\n```\n\n## Usage\n\n### Text calculation\n\n```bash\n# Basic usage\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск\n\n# JSON export (for renderers)\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск --json\n```\n\n### Graphical chart (PNG 5760×2880)\n\n```bash\n# Default (English)\npython scripts/draw_wheel.py\n\n# Russian language\npython scripts/draw_wheel.py --lang ru\n\n# Custom birth data\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Alexey\"\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en --name \"Natalya\"\n```\n\n**Options:**\n- `--name \"Name\"` — name displayed above the wheel\n- `--lang ru|en` — interpretation language (default: `en`)\n- `--conclusion FILE` — path to text file with AI-generated conclusion (optional)\n\n**Output files:**\n- `{Name}_full_natal_en.png` — English version\n- `{Name}_full_natal_ru.png` — Russian version\n\n### AI Conclusion workflow\n\nThe `--conclusion` flag enables a 3-phase workflow for AI-assisted chart analysis:\n\n```bash\n# Step 1: Get chart data as JSON\npython scripts/natal_chart_swe.py 25.10.1985 21:35 Можга --json\n\n# Step 2: AI analyzes JSON and writes conclusion to a file\n# (agent writes analysis to /tmp/conclusion.txt)\n\n# Step 3: Render chart with AI conclusion embedded\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang ru --name \"Natalya\" --conclusion /tmp/conclusion.txt\n```\n\nThe conclusion appears at the bottom of the Interpretation panel, after the houses section, framed by decorative gold separator lines. Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU). Multi-paragraph text is auto-wrapped to panel width (2400px).\n\nWithout `--conclusion` the chart renders normally (no AI summary block).\n\n### JSON structure\n\n```json\n{\n  \"date\": \"24.04.1983\", \"time\": \"06:00\", \"city\": \"Ижевск\",\n  \"city_full\": \"Ижевск, Россия\",\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\n  \"tz_offset\": 4, \"jd\": 2447273.75,\n  \"planets\": {\n    \"Sun\":     {\"lon\": 38.333, \"speed\": 0.985, \"retro\": false},\n    \"Moon\":    {\"lon\": 143.317, \"speed\": 12.19, \"retro\": false}\n  },\n  \"houses\": [5.83, 37.47, 69.12, ...],\n  \"asc\": 5.83, \"mc\": 341.25,\n  \"planet_houses\": {\"Sun\": 12, \"Moon\": 6, ...},\n  \"aspects\": [\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5}\n  ]\n}\n```\n\n## Text output format\n\n```\n🌟 NATAL CHART  [Swiss Ephemeris v20.23]\n📅 Date: 24.04.1983  ⏰ Time: 06:00  📍 Place: Ижевск, Россия\n🌍 56.8519°N, 53.2114°E  🕐 Europe/Samara (UTC+4)\n📊 JD: 2447273.75\n\n⬆️ ASC — Gemini 1°50′\n🜨 MC  — Capricorn 24°45′\n\nPLANETS:\n☀️ Sun     — Taurus 3°20′  [12 house]  (+0.985°/d)\n🌙 Moon    — Virgo 22°19′   [6 house]   (+12.19°/d)\n...\n\nHOUSES:\nI house — Gemini 1°50′\n...\nXII house — Pisces 19°46′\n\nMAJOR ASPECTS:\n☌ Conjunction: Mercury-Venus (orb: 0.5°)\n...\n\nINTERPRETATION:\n[detailed interpretation]\n```\n\n## Aspects and orbs\n\n| Aspect | Symbol | Orb |\n|---|---|---|\n| Conjunction | ☌ | ±8° |\n| Opposition | ☍ | ±8° |\n| Square | □ | ±7° |\n| Trine | △ | ±7° |\n| Sextile | ✶ | ±5° |\n| Semisextile | ⚺ | ±2° |\n| Quincunx | ⚹ | ±2° |\n| Semisquare | ∠ | ±2° |\n\n## Font rendering\n\nTwo bundled fonts in `scripts/`:\n\n| Font | Purpose | Glyphs |\n|---|---|---|\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols + aspect symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + ☌☍□△✶⚹⚺∠ |\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits |\n\nThe `rtext()` function selects fonts **per character**: zodiac and aspect symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. No tofu, no missing glyphs.\n\n## Scripts\n\n| Script | Purpose | Dependencies |\n|---|---|---|\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG. Supports `--conclusion FILE` for AI-generated summary | subprocess, json, math, os, argparse, Pillow |\n| `scripts/interp_data.py` | Interpretation data (RU/EN): houses, planets, signs, aspects | — |\n| `scripts/seguisym.ttf` | Zodiac symbol font (~2.4 MB) | — |\n| `scripts/segoeuisl.ttf` | Cyrillic/latin font (~854 KB) | — |\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\n\n## Interpretation guidelines\n\n1. **Sun** — core personality\n2. **Moon** — emotional nature\n3. **Ascendant** — mask, first impression\n4. **MC** — career aspirations\n5. **Stelliums** (3+ planets in one sign/house)\n6. **Retrograde planets** — energy turned inward\n7. **Major aspects** — personality dynamics\n8. **Dominant elements** (fire, earth, air, water)\n\n## Changelog\n\n### v4.3.1 (2026-06-02)\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf`\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols\n\n### v4.3.0 (2026-06-02)\n- **`--conclusion FILE` flag**: AI-generated conclusion can be embedded in the chart\n- 3-phase workflow: JSON → AI analysis → rendered chart with conclusion\n- Conclusion appears at the bottom of the Interpretation panel with gold separator lines\n\n### v4.2.0 (2026-06-02)\n- **3-column layout**: right panel split into Essential Data (1/3 = 1200px) and Interpretation (2/3 = 2400px)\n- **Fixed text wrapping**: `wrap_text()` now uses per-panel width (1200px for Data, 2400px for Interp) — descriptions wrap properly instead of being clipped\n- **Renamed «ТОЛКОВАНИЕ» → «ИНТЕРПРЕТАЦИЯ»** in Russian mode\n- Vertical dividers between all three columns\n\n### v4.0.0 (2026-06-01)\n- **Bilingual interpretation**: Russian and English languages\n- Extended house descriptions (3 sentences per house)\n- Aspect interpretation block\n- Person's name in output filename\n- Fixed planet meaning context bug\n- Separated interpretation data (`interp_data.py`) from rendering logic\n\n### v3.x (2026-06-01)\n- Fixed element coloring for sign sectors\n- Two equal-size wheels, panoramic 5760×2880 layout\n- Bundled fonts (zodiac + Cyrillic)\n- Zodiac symbols instead of text abbreviations\n- Legends below wheel — no overlap\n\n### v2.x (2026-05-28)\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2)\n- Placidus system (exact iterative)\n- Retrograde detection via `FLG_SPEED`\n- 50+ city database\n- Windows compatibility with bundled `.pyd`\n\n## Disclaimer\n\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial decisions based on astrological readings.\n\n## Author\n\n- GitHub: [@dynamicsAlex](https://github.com/dynamicsAlex)\n- ClawHub: [astro-natal-chart](https://clawhub.ai/dynamicsalex/astro-natal-chart)\n\n## License\n\nMIT\n\nFile v4.3.5:_meta.json\n\n{\n  \"ownerId\": \"kn775k2zzav7y8rpwwm218x0b587f0hj\",\n  \"slug\": \"astro-natal-chart\",\n  \"version\": \"4.3.5\",\n  \"publishedAt\": 1781172555071\n}\n\nFile v4.3.5:CHANGELOG.md\n\n# Changelog\n\n## v3.12.0 (2026-06-01)\n\n- **Header layout fix**: removed \"NATAL CHART\" title from above the wheel, kept it only above the interpretation panel\n- **Name placement**: person's name now shown below the \"NATAL CHART\" title in the right panel\n- **ClawHub link moved**: relocated from under the wheel legends to the bottom of the right interpretation panel\n\n## v3.11.0 (2026-06-01)\n\n- **Layout redesign**: removed right zodiac circle, merged center+right into single 3600px interpretation panel\n- **Chart header**: added \"NATAL CHART\" title above left wheel + optional `--name` parameter for person's name\n- **Full interpretation panel**: Sun/Moon/ASC sign descriptions, dominant element, stelliums, retrograde planets, all 12 houses with cusp positions, house meanings, and planets in each house\n- **ClawHub link**: added skill repository URL under the legends below the wheel\n- Language-aware: interpretation text in Russian (`--lang ru`) or English (`--lang en`)\n- Cleaned up debug files\n\n## v3.10.0 (2026-06-01)\n\n- **Fonts shipped as .ttf.dat to bypass ClawHub filter**: ClawHub silently strips `.ttf` files from skill packages. Fonts are now bundled as `seguisym.ttf.dat` (2.4 MB) and `segoeuisl.ttf.dat` (854 KB). `draw_wheel.py` auto-detects and restores them to `.ttf` on first run via `shutil.copy2`.\n- This ensures the skill renders correctly on all machines after ClawHub installation without any manual font setup.\n\n## v3.9.0 (2026-06-01)\n\n- **Attempted bundled fonts**: included `seguisym.ttf` and `segoeuisl.ttf` directly in `scripts/`. ClawHub silently filtered them out — not present in the published package.\n\n## v3.8.0 (2026-06-01)\n\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors. Replaced with `draw.polygon()` using explicit coordinate math.\n- **Sector boundaries aligned to zodiac signs**: sectors start from the beginning of each sign, not from the ASC degree.\n- Bundled fonts reference added (deferred to v3.9.0 for actual inclusion).\n\n## v3.7.0 (2026-06-01)\n\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\n- **Dual-font rendering** with per-character font selection\n- **Zodiac planet circle**: same planet orbit radius and size as main wheel\n\n## v2.1.0 (2026-05-28)\n\n- Fixed `.pyd.dat` loading on Windows\n- Added Microsoft Visual C++ Redistributable requirement\n- Requires Python 3.14.x\n\n## v2.0.0 (2026-05-28)\n\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2) as primary calculation engine\n- House calculation via `swe.houses_ex()` (exact iterative Placidus)\n- Added retrograde detection via `FLG_SPEED` flag\n\n## v1.x (earlier)\n\n- Initial release using simplified analytical formulas\n\nFile v4.3.5:skill-card.md\n\n## Description: <br>\nCalculates natal chart data from birth date, time, and location, then produces bilingual text interpretation, JSON chart data, and high-resolution PNG chart visualizations using Swiss Ephemeris and Pillow. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dynamicsalex](https://clawhub.ai/user/dynamicsalex) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and agents use this skill to generate entertainment and educational astrology charts from birth details, including planet positions, houses, aspects, and bilingual interpretations. It is also used to render shareable PNG chart images with optional AI-generated conclusions. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill runs a bundled Windows native Python extension for Swiss Ephemeris calculations. <br>\nMitigation: Review the bundled binary provenance in sensitive environments and run the skill as a normal user rather than with elevated privileges. <br>\nRisk: The chart renderer depends on Pillow and may require dependency setup before execution. <br>\nMitigation: Preinstall Pillow manually from a trusted package source and confirm the Windows, CPython, and Visual C++ runtime requirements before use. <br>\nRisk: Astrology interpretations can be mistaken for factual or professional advice. <br>\nMitigation: Treat outputs as entertainment or educational material and do not use them for medical, financial, legal, or other high-impact decisions. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dynamicsalex/astro-natal-chart) <br>\n- [Python 3.14 release](https://www.python.org/downloads/release/python-3145/) <br>\n- [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, PNG image files, guidance] <br>\n**Output Format:** [CLI text output, structured JSON chart data, and 5760x2880 PNG chart files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires Windows x64, CPython 3.14, Pillow, and the bundled Swiss Ephemeris native extension.] <br>\n\n## Skill Version(s): <br>\n4.3.5 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v4.3.4: 12 files, 2891237 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (33219b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2362b), SKILL.md (24149b)\n\nFile v4.3.4:SKILL.md\n\n---\r\nname: astro-natal-chart\r\nversion: 4.3.2\r\ndescription: Natal chart calculation, interpretation, and graphical visualization using Swiss Ephemeris (pyswisseph) + Pillow. 3-column layout: wheel + essential data (1/3) + interpretation panel (2/3). AI conclusion via --conclusion flag. Planets, zodiac signs, aspects, houses, wheel chart rendering with bilingual interpretation (RU/EN). Input: birth date, time, and location. Language --lang ru/en (default en), filename includes person name. Windows-compatible with bundled .pyd binary.\r\nmetadata:\r\n  openclaw:\r\n    requires:\r\n      bins:\r\n        - python3\r\n    emoji: \"✨\"\r\n    homepage: https://github.com/dynamicsAlex/astro-natal-chart\r\n---\r\n\r\n# Astrology — Natal Chart\r\n\r\n## Engine: Swiss Ephemeris (pyswisseph 2.10.3.2) + Pillow (PIL)\r\n\r\nThis skill uses **pyswisseph 2.10.3.2** for astrological computation and **Pillow 12.x** for graphical chart rendering.\r\n\r\n## ⚠️ Requirements\r\n\r\n| Requirement | Details |\r\n|---|---|\r\n| **OS** | Windows (x64) — tested on Windows 10/11 |\r\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\r\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** — required for the bundled native extension |\r\n| **Pillow** | **12.x** — `pip install pillow` (for graphical wheel chart rendering) |\r\n\r\nInstallation steps:\r\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\r\n2. Install [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) (`winget install Microsoft.VCRedist.2015+.x64`)\r\n3. Install Pillow: `pip install pillow`\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nAll astrological calculations flow through a single source of truth:\r\n\r\n```\r\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\r\n                                  ↕\r\n                          natal_chart_swe.py  →  text output\r\n```\r\n\r\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\r\n\r\n---\r\n\r\n## Text Output (Swiss Ephemeris)\r\n\r\n### Usage\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n```\r\n\r\n### JSON Output (for renderers)\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date> <time> <city> --json\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\nJSON structure:\r\n```json\r\n{\r\n  \"date\": \"14.12.1991\", \"time\": \"18:30\", \"city\": \"Ижевск\",\r\n  \"city_full\": \"Ижевск, Россия\",\r\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\r\n  \"tz_offset\": 4, \"jd\": 2448605.104167,\r\n  \"planets\": {\r\n    \"Sun\":     {\"lon\": 262.097, \"speed\": 1.017, \"retro\": false},\r\n    \"Moon\":    {\"lon\": 354.459, \"speed\": 12.461, \"retro\": false},\r\n    ...\r\n  },\r\n  \"houses\": [116.94, 130.43, ...],\r\n  \"asc\": 116.94, \"mc\": 352.89,\r\n  \"planet_houses\": {\"Sun\": 6, \"Moon\": 10, ...},\r\n  \"aspects\": [\r\n    {\"p1\": \"Mercury\", \"p2\": \"Venus\", \"type\": \"semisextile\", \"orb\": 0.5},\r\n    ...\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## Graphical Chart Rendering (Pillow)\r\n\r\nThe skill includes `scripts/draw_wheel.py` — a full-featured natal chart wheel renderer that produces a composite PNG image.\r\n\r\n**Important:** `draw_wheel.py` does NOT perform its own astrological calculations. It calls `natal_chart_swe.py --json` and renders the returned data. This eliminates data discrepancies between text and graphical output.\r\n\r\n### Usage\r\n\r\n```bash\r\n# English (default)\r\npython scripts/draw_wheel.py\r\n\r\n# Russian\r\npython scripts/draw_wheel.py --lang ru\r\n\r\n# Arbitrary birth data\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru\r\n\r\n# Explicit English\r\npython scripts/draw_wheel.py --lang en\r\n```\r\n\r\n### Output\r\n\r\n| File | Language |\r\n|---|---|\r\n| `natal_full.png` | English chart (5760×2880) |\r\n| `natal_full_ru.png` | Russian chart (5760×2880) |\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```n+------------------+---------------------------+------------------+\r\n|                  |                           |                  |\r\n|   NATAL WHEEL    |     ESSENTIAL DATA        |  ZODIAC CIRCLE   |\r\n|   (2160×2160)    |     (1440×2880)           |  (2160×2160)     |\r\n|                  |                           |                  |\r\n|  - Sign sectors  |  - Date, time, place      |  - Sign sectors  |\r\n|  - House cusps   |  - Coordinates, timezone  |  - Planet marks  |\r\n|  - Planet marks  |  - ASC / MC positions     |  - ASC/DSC/MC    |\r\n|  - Aspect lines  |                           |  - Same size as  |\r\n|  - ASC/MC lines  |                           |    natal wheel   |\r\n|                  |                           |                  |\r\n|  --- Legends --- |                           |                  |\r\n|  Planet|Element  |                           |                  |\r\n|  |Aspect       |                           |                  |\r\n+------------------+---------------------------+------------------+\r\n```\r\n\r\n### Image Layout (5760×2880 px)\r\n\r\n```\r\n+------------------+---------------------------------------------+\r\n|                  |                                             |\r\n|   NATAL WHEEL    |          INTERPRETATION PANEL               |\r\n|   (2160×2160)    |            (3600×2880)                      |\r\n|                  |                                             |\r\n|  - \"NATAL CHART\" |  - Date, time, place, coordinates, tz       |\r\n|    title + name  |  - ASC / MC positions                       |\r\n|  - Sign sectors  |  - Sun/Moon/ASC sign interpretation         |\r\n|  - House cusps   |  - Dominant element, stelliums, retrogrades |\r\n|  - Planet marks  |  - All 12 houses with cusp positions,       |\r\n|  - Aspect lines  |    house meanings, and planets in each      |\r\n|  - ASC/MC lines  |                                             |\r\n|                  |                                             |\r\n|  --- Legends --- |                                             |\r\n|  Planet|Element  |                                             |\r\n|  |Aspect       |                                             |\r\n|  | ClawHub link |                                             |\r\n+------------------+---------------------------------------------+\r\n```\r\n```\r\n\r\n### Font Handling\r\n\r\nTwo bundled fonts in `scripts/`:\r\n\r\n| Font | Purpose | Glyphs |\r\n|---|---|---|\r\n| `seguisym.ttf` (2.4 MB) | Zodiac symbols | ♈♉♊♋♌♍♎♏♐♑♒♓ (U+2648–U+2653) + latin |\r\n| `segoeuisl.ttf` (854 KB) | All other text | Cyrillic, latin, digits, punctuation |\r\n\r\nThe `rtext()` function selects fonts **per character**: zodiac symbols → `seguisym.ttf`, everything else → `segoeuisl.ttf`. This ensures correct rendering of mixed content like \"♈ Овен AR\".\r\n\r\n**Why not a single font?** No standard Windows font contains both zodiac symbols AND cyrillic. `seguisym.ttf` has zodiac but no cyrillic. `segoeui.ttf` has cyrillic but no zodiac. Per-character selection is the solution.\r\n\r\n### Pillow Dependencies\r\n\r\n`draw_wheel.py` uses these Python modules:\r\n\r\n| Module | Purpose | Install |\r\n|---|---|---|\r\n| `PIL` (Pillow) | Image creation, drawing (circle, ellipse, line, pieslice, text) | `pip install pillow` |\r\n| `math` | Trigonometric calculations (cos, sin, radians) | Stdlib |\r\n| `json` | Parse natal_chart_swe.py JSON output | Stdlib |\r\n| `subprocess` | Call natal_chart_swe.py --json | Stdlib |\r\n| `os`, `sys` | File path operations | Stdlib |\r\n| `argparse` | CLI argument parsing (`--lang en/ru`) | Stdlib |\r\n\r\nNote: `draw_wheel.py` does NOT import `swisseph` directly. It receives all planetary data from `natal_chart_swe.py --json`.\r\n\r\n---\r\n\r\n## Standard Text Output Format\r\n\r\n```\r\n🌟 NATAL CHART  [Swiss Ephemeris vX.XX]\r\n📅 Date: [date]  ⏰ Time: [time]  📍 Place: [city]\r\n🌍 Coordinates: [lat], [lon]  🕐 Timezone: [tz] (UTC+/-offset)\r\n📊 JD: [julian_day]\r\n\r\n⬆️ ASC — [sign] [degrees]′\r\n🜨 MC — [sign] [degrees]′\r\n\r\nPLANETS:\r\n☀️ Sun — [sign] [degrees]′ [house] [℞] (speed °/day)\r\n🌙 Moon — [sign] [degrees]′ [house]\r\n...\r\n\r\nHOUSES:\r\nI house — [sign] [degrees]′\r\n... (all 12 houses)\r\n\r\nMAJOR ASPECTS:\r\n☌ Conjunction: [planet]-[planet] (orb: X.X°)\r\n...\r\n\r\nINTERPRETATION:\r\n[detailed interpretation]\r\n```\r\n\r\n## Aspect Orbs\r\n\r\n| Aspect | Symbol | Orb |\r\n|--------|--------|-----|\r\n| Conjunction | ☌ | ±8° |\r\n| Opposition | ☍ | ±8° |\r\n| Square | □ | ±7° |\r\n| Trine | △ | ±7° |\r\n| Sextile | ✶ | ±5° |\r\n| Semisextile | ⚺ | ±2° |\r\n| Quincunx | ⚹ | ±2° |\r\n| Semisquare | ∠ | ±2° |\r\n\r\n## Zodiac Signs — Keywords\r\n\r\n- ♈ Aries: initiative, energy, impulsiveness\r\n- ♉ Taurus: stability, sensuality, stubbornness\r\n- ♊ Gemini: sociability, intellect, curiosity\r\n- ♋ Cancer: emotionality, nurturing, intuition\r\n- ♌ Leo: creativity, leadership, pride\r\n- ♍ Virgo: analytical, practical, perfectionist\r\n- ♎ Libra: harmony, diplomacy, partnership\r\n- ♏ Scorpio: depth, transformation, intensity\r\n- ♐ Sagittarius: optimism, philosophy, freedom\r\n- ♑ Capricorn: ambition, discipline, responsibility\r\n- ♒ Aquarius: originality, independence, innovation\r\n- ♓ Pisces: intuition, compassion, dreaminess\r\n\r\n## Planets — Meanings\r\n\r\n- **Sun** — ego, essence, vitality, father\r\n- **Moon** — emotions, subconscious, mother, instincts\r\n- **Mercury** — thinking, communication, learning\r\n- **Venus** — love, beauty, values, finances\r\n- **Mars** — energy, action, aggression, sexuality\r\n- **Jupiter** — expansion, luck, wisdom, growth\r\n- **Saturn** — limitations, discipline, karma, structure\r\n- **Uranus** — change, rebellion, innovation, suddenness\r\n- **Neptune** — illusion, spirituality, creativity, dissolution\r\n- **Pluto** — transformation, power, death/rebirth\r\n\r\n## Houses — Life Areas\r\n\r\n1. **I (ASC)** — personality, appearance, self-presentation\r\n2. **II** — money, values, resources\r\n3. **III** — communication, siblings, learning\r\n4. **IV (IC)** — home, family, roots\r\n5. **V** — creativity, children, romance\r\n6. **VI** — health, work, routine\r\n7. **VII (DSC)** — partnership, marriage\r\n8. **VIII** — transformation, shared resources, intimacy\r\n9. **IX** — philosophy, travel, higher education\r\n10. **X (MC)** — career, reputation, goals\r\n11. **XI** — friends, hopes, groups\r\n12. **XII** — solitude, subconscious, karma\r\n\r\n## Interpretation Guidelines\r\n\r\nWhen interpreting, consider:\r\n1. **Sun** — core personality\r\n2. **Moon** — emotional nature\r\n3. **Ascendant** — mask, first impression\r\n4. **MC** — career aspirations\r\n5. **Stelliums** (3+ planets in one sign/house)\r\n6. **Retrograde planets** — energy turned inward\r\n7. **Major aspects** — personality dynamics\r\n8. **Dominant elements** (fire, earth, air, water)\r\n\r\n## Disclaimer\r\n\r\nThis is an entertainment/educational tool, not a scientific method. Do not make medical or financial predictions based on astrological readings.\r\n\r\n---\r\n\r\n## Scripts Reference\r\n\r\n| Script | Purpose | Dependencies |\r\n|---|---|---|\r\n| `scripts/natal_chart_swe.py` | **Sole calculation engine.** Text natal chart with `--json` export | swisseph (bundled .pyd), math, os |\r\n| `scripts/draw_wheel.py` | **Renderer only.** Calls `natal_chart_swe.py --json`, draws 5760×2880 chart PNG | subprocess, json, math, os, argparse, Pillow |\r\n| `scripts/seguisym.ttf` | **Zodiac symbol font.** Bundled for correct ♈♉♊... rendering. ~2.4 MB. | — |\r\n| `scripts/segoeuisl.ttf` | **Cyrillic/latin font.** Bundled for cyrillic, digits, latin text. ~854 KB. | — |\r\n| `scripts/swisseph.cp314-win_amd64.pyd.dat` | Bundled Swiss Ephemeris binary (2 MB) | MSVC++ Redist |\r\n\r\n### draw_wheel.py — Quick Reference\r\n\r\n```bash\r\n# Generate chart with interpretation (English, default Matvey's data)\r\npython scripts/draw_wheel.py\r\n\r\n# Generate for any person (Russian)\r\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Алексей\"\r\n\r\n# Generate for any person (English)\r\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en\r\n\r\n# Options:\r\n#   --name \"Person Name\"  — name shown above the wheel\r\n#   --lang ru|en          — language of interpretation (default: en)\r\n#   --conclusion FILE     — path to text file with AI-generated conclusion\r\n\r\n# Output files:\r\n#   natal_full.png     — English version\r\n#   natal_full_ru.png  — Russian version\r\n\r\n# AI Conclusion workflow (for OpenClaw agents):\r\n#   Step 1: python scripts/natal_chart_swe.py <date> <time> <city> --json\r\n#   Step 2: AI analyzes JSON and writes conclusion to a file\r\n#   Step 3: python scripts/draw_wheel.py <date> <time> <city> --lang ru --name \"Name\" --conclusion <file>\r\n```\r\n\r\n### natal_chart_swe.py — Quick Reference\r\n\r\n```bash\r\n# Text chart\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n\r\n# JSON export (used by draw_wheel.py)\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n### v4.3.2 (2026-06-02)\r\n- **Moved aspects & configurations to Info panel**: detailed aspect list with descriptions (from interp panel) now appears in the middle Info panel, below planet/house tables\r\n- **Added text labels to aspect legend**: wheel legend now shows Unicode symbol + text abbreviation (☌ Conj, □ Sqr, △ Trine, etc.)\r\n- **Restored AI conclusion block**: \"ЗАКЛЮЧЕНИЕ\" / \"CONCLUSION\" block at bottom of Interpretation panel (was accidentally removed during refactoring)\r\n- SKILL.md version bumped to 4.3.2\r\n\r\n### v4.3.1 (2026-06-02)\r\n- **Fixed aspect symbol rendering**: aspect symbols (☌, ☍, □, △, ✶, ⚹, ⚺, ∠) were rendering as rectangles because `segoeuisl.ttf` does not contain them — now all aspect symbols use `seguisym.ttf` via extended `is_z()` check\r\n- **Legend aspect symbols**: replaced text abbreviations (cj/sx/sq/tr/qn/op) in the wheel legend with proper Unicode aspect symbols from `seguisym`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.3.0 (2026-06-02)\r\n- **`--conclusion FILE` flag**: draw_wheel.py accepts a path to a text file with an AI-generated conclusion\r\n  - Conclusion appears at the bottom of the Interpretation panel, after the houses section\r\n  - Decorative gold separator lines frame the conclusion block\r\n  - Title: «CONCLUSION» (EN) / «ЗАКЛЮЧЕНИЕ» (RU)\r\n  - Multi-paragraph text is wrapped to panel width (2400px)\r\n  - Works with any AI-generated summary — not rendered if flag is omitted\r\n- **3-phase workflow for OpenClaw agent**: (1) `natal_chart_swe.py --json` → (2) AI generates conclusion → (3) `draw_wheel.py ... --conclusion file.txt`\r\n- SKILL.md version bumped to 4.3.1\r\n\r\n### v4.2.0 (2026-06-02)\r\n- **3-column layout**: right panel split into Info (1/3 = 1200px) and Interpretation (2/3 = 2400px)\r\n  - **Info panel (1/3)**: essential data (date, time, place, coordinates, timezone), ASC/MC, planet table with houses, house cusp table, compact aspect list\r\n  - **Interpretation panel (2/3)**: Sun/Moon/ASC interpretation, dominant element, stelliums, retrograde planets, aspects with descriptions, houses with full planet meanings\r\n- **Text wrapping fixed**: `wrap_text()` now uses per-panel width (1200px for Info, 2400px for Interp) — long descriptions properly wrap instead of being clipped\r\n- **Renamed 'ТОЛКОВАНИЕ' → 'ИНТЕРПРЕТАЦИЯ'** in Russian mode (was already 'INTERPRETATION' in English)\r\n- **Vertical dividers** between all three columns\r\n- SKILL.md version bumped to 4.2.0\r\n\r\n### v4.0.0 (2026-06-01)\r\n- **Bilingual interpretation**: all interpretation text available in both Russian and English\r\n  - Default language: English (`--lang en`)\r\n  - Russian: `--lang ru`\r\n  - Separate interpretation data module: `scripts/interp_data.py`\r\n  - Includes `HOUSE_TEXTS_RU/EN`, `PLANET_MEANING_RU/EN`, `SIGN_KEYWORDS_RU/EN`, `ASPECT_MEANING_RU/EN`\r\n- **Extended house descriptions**: each house now has a detailed 3-sentence description covering multiple life areas\r\n- **Aspect interpretation block**: all aspects listed with orb values and brief interpretation\r\n- **Filename includes person name**: output format is now `{Name}_full_natal_{lang}.png` (e.g. `Анна_full_natal_ru.png`, `Anna_full_natal_en.png`)\r\n- **Fixed planet meaning context bug**: planet meanings now correctly reference the planet itself (not the Sun's sign)\r\n- **Separated interpretation data**: `interp_data.py` contains all text constants, `draw_wheel.py` contains rendering logic\r\n- SKILL.md updated with new CLI flags and output file naming\r\n\r\n### v3.8.0 (2026-06-01)\r\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors (Fire showed as Earth's green, Air as Water's blue, etc.). Replaced `pieslice()` with `draw.polygon()` using explicit `aof(d) = radians(90-d)` coordinate math, which is consistent with planet/symbol positioning.\r\n- **Sector boundaries aligned to zodiac signs**: sectors now start from the beginning of each sign (e.g. 270° for Capricorn), not from the ASC degree. This ensures clean 30° sign sectors regardless of ASC position.\r\n- **Bundled fonts**: `seguisym.ttf` (2.4 MB, zodiac symbols) and `segoeuisl.ttf` (854 KB, cyrillic/latin) are both included in `scripts/` and published with the pack.\r\n- SKILL.md changelog updated.\r\n\r\n### v3.7.0 (2026-06-01)\r\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\r\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\r\n- **Dual-font rendering**: `seguisym.ttf` for zodiac symbols (large, 44pt), `segoeuisl.ttf` for cyrillic/latin/digits — bundled in `scripts/`\r\n- **Per-character font selection**: `rtext()` automatically picks the right font per character — no more tofu\r\n- **Zodiac planet circle**: same planet orbit radius (RP=648) and planet size (r=18) as main wheel\r\n- **Essential data panel**: date, time, place, coordinates, timezone, ASC/MC between the wheels\r\n- **Roman numerals** for house cusps (I–XII)\n\nArchive v4.3.3: 12 files, 2891270 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (33219b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2539b), SKILL.md (24149b)\n\nArchive v4.3.2: 12 files, 2891314 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (33219b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2520b), SKILL.md (24149b)\n\nArchive v4.3.1: 12 files, 2891232 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (10420b), scripts/draw_wheel.py (32680b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2825b), SKILL.md (23611b)\n\nArchive v4.3.0: 12 files, 2890627 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), README.md (9719b), scripts/draw_wheel.py (31814b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2572b), SKILL.md (23160b)\n\nArchive v4.2.0: 11 files, 2885457 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), scripts/draw_wheel.py (30505b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2765b), SKILL.md (22045b)\n\nArchive v4.1.0: 12 files, 2884365 bytes\n\nFiles: _meta.json (136b), CHANGELOG.md (2913b), scripts/_build.py (1186b), scripts/draw_wheel.py (24423b), scripts/interp_data.py (16303b), scripts/natal_chart_swe.py (20205b), scripts/segoeuisl.ttf.dat (854140b), scripts/seguisym.ttf.dat (2454728b), scripts/swisseph.cp314-win_amd64.pyd.dat (2039296b), scripts/test_write.py (0b), skill-card.md (2395b), SKILL.md (21142b)","readmeExcerpt":"Skill: Astro Natal Chart Owner: dynamicsalex Summary: Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Tags: astrology:2.1.0, latest:4.3.7, natal-chart:2.1.0, swiss-ephemeris:2.1.0, windows:2.1.0 Version history: v4.3.7 | 2026-06-24T19:02:11.286Z | user QR code now renders by default; --frame no longer require","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"+------------------+------------------+---------------------------+\n|                  |                  |                           |\n|    NATAL         |    ESSENTIAL     |    INTERPRETATION         |\n|    WHEEL         |    DATA          |   (2400px = 2/3)          |\n|   (2160px)       |   (1200px = 1/3) |                           |\n|                  |                  |   - Sun/Moon/Ascendant    |\n|  - Sign sectors  |   - Date, time,  |   - Dominant element      |\n|  - House cusps   |     place        |   - Stelliums             |\n|  - Planet marks  |   - Coordinates  |   - Retrograde planets    |\n|  - Aspect lines  |   - ASC / MC     |   - Aspects with          |\n|  - ASC / MC      |   - Planet table |     descriptions          |\n|                  |   - House table  |   - 12 houses with        |\n|  --- Legends --- |   - Aspects      |     meanings & planets    |\n|  Planets|Elements|                  |                           |\n|  Aspects         |                  |                           |\n+------------------+------------------+---------------------------+"},{"language":"text","snippet":"natal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\n                                  ↕\n                          natal_chart_swe.py  →  text output"},{"language":"bash","snippet":"openclaw skills install \"clawhub:astro-natal-chart\""},{"language":"bash","snippet":"git clone https://github.com/dynamicsAlex/astro-natal-chart.git\ncd astro-natal-chart\npip install pillow"},{"language":"bash","snippet":"# Basic usage\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск\n\n# JSON export (for renderers)\npython scripts/natal_chart_swe.py 24.04.1983 06:00 Ижевск --json"},{"language":"bash","snippet":"# Default (English)\npython scripts/draw_wheel.py\n\n# Russian language\npython scripts/draw_wheel.py --lang ru\n\n# Custom birth data\npython scripts/draw_wheel.py 24.04.1983 06:00 Ижевск --lang ru --name \"Alexey\"\npython scripts/draw_wheel.py 25.10.1985 21:35 Можга --lang en --name \"Natalya\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: astro-natal-chart\r\nversion: 4.3.7\r\ndescription: Natal chart calculation, interpretation, and graphical visualization using Swiss Ephemeris (pyswisseph) + Pillow. 3-column layout: wheel + essential data (1/3) + interpretation panel (2/3). AI conclusion via --conclusion flag. Planets, zodiac signs, aspects, houses, wheel chart rendering with bilingual interpretation (RU/EN). Input: birth date, time, and location. Language --lang ru/en (default en), filename includes person name. Windows-compatible with bundled .pyd binary.\r\nmetadata:\r\n  openclaw:\r\n    requires:\r\n      bins:\r\n        - python3\r\n    emoji: \"✨\"\r\n    homepage: https://github.com/dynamicsAlex/astro-natal-chart\r\n---\r\n\r\n# Astrology — Natal Chart\r\n\r\n## Engine: Swiss Ephemeris (pyswisseph 2.10.3.2) + Pillow (PIL)\r\n\r\nThis skill uses **pyswisseph 2.10.3.2** for astrological computation and **Pillow 12.x** for graphical chart rendering.\r\n\r\n## ⚠️ Requirements\r\n\r\n| Requirement | Details |\r\n|---|---|\r\n| **OS** | Windows (x64) — tested on Windows 10/11 |\r\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\r\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** — required for the bundled native extension |\r\n| **Pillow** | **12.x** — `pip install pillow` (for graphical wheel chart rendering) |\r\n\r\nInstallation steps:\r\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\r\n2. Install [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe) (`winget install Microsoft.VCRedist.2015+.x64`)\r\n3. Install Pillow: `pip install pillow`\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nAll astrological calculations flow through a single source of truth:\r\n\r\n```\r\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\r\n                                  ↕\r\n                          natal_chart_swe.py  →  text output\r\n```\r\n\r\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from that data. This guarantees text and graphical output always match.\r\n\r\n---\r\n\r\n## Text Output (Swiss Ephemeris)\r\n\r\n### Usage\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date DD.MM.YYYY> <time HH:MM> <city>\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск\r\n```\r\n\r\n### JSON Output (for renderers)\r\n\r\n```bash\r\npython scripts/natal_chart_swe.py <date> <time> <city> --json\r\npython scripts/natal_chart_swe.py 14.12.1991 18:30 Ижевск --json\r\n```\r\n\r\nJSON structure:\r\n```json\r\n{\r\n  \"date\": \"14.12.1991\", \"time\": \"18:30\", \"city\": \"Ижевск\",\r\n  \"city_full\": \"Ижевск, Россия\",\r\n  \"lat\": 56.8519, \"lon\": 53.2114, \"tz\": \"Europe/Samara\",\r\n  \"tz_offset\": 4, \"jd\": 2448605.104167,\r\n  \"planets\": {\r\n    \"Sun\":     {\"lon\": 262.097, \"speed\": 1.017, \"retro\": false},\r\n    \"Moon\":    {\"lon\": 354.459, \"speed\": 12.461, \"retro\": false},\r\n    ...\r\n  },\r\n  \"houses\": [116.94, 130.43, ...],\r\n  \"asc\": 116.94, \"mc\": 352.89,\r\n  \"planet_houses\": {\"Sun\": 6, \"Moon\""},{"path":"README.md","content":"# ✨ Astro Natal Chart\n\nAn [OpenClaw](https://github.com/openclaw/openclaw) skill — natal chart calculation, interpretation, and graphical visualization using **Swiss Ephemeris** and **Pillow**.\n\nGenerates a full-featured 5760×2880 px PNG chart (3 columns): natal wheel + essential data + detailed interpretation. Supports Russian and English languages.\n\n## Features\n\n- **Precise calculation** via Swiss Ephemeris (pyswisseph 2.10.3.2) — NASA JPL DE431 ephemerides\n- **10 planets**: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto\n- **12 houses** in Placidus system (exact iterative calculation)\n- **8 aspect types**: conjunction, opposition, trine, square, sextile, quincunx, semisextile, semisquare\n- **Retrograde detection** via planet velocity sign\n- **Bilingual interpretation**: Russian (`--lang ru`) and English (`--lang en`)\n- **3-column layout**: wheel (2160px) + data (1200px) + interpretation (2400px)\n- **50+ cities** with coordinates and timezones in the built-in database\n\n## Layout\n\n```\n+------------------+------------------+---------------------------+\n|                  |                  |                           |\n|    NATAL         |    ESSENTIAL     |    INTERPRETATION         |\n|    WHEEL         |    DATA          |   (2400px = 2/3)          |\n|   (2160px)       |   (1200px = 1/3) |                           |\n|                  |                  |   - Sun/Moon/Ascendant    |\n|  - Sign sectors  |   - Date, time,  |   - Dominant element      |\n|  - House cusps   |     place        |   - Stelliums             |\n|  - Planet marks  |   - Coordinates  |   - Retrograde planets    |\n|  - Aspect lines  |   - ASC / MC     |   - Aspects with          |\n|  - ASC / MC      |   - Planet table |     descriptions          |\n|                  |   - House table  |   - 12 houses with        |\n|  --- Legends --- |   - Aspects      |     meanings & planets    |\n|  Planets|Elements|                  |                           |\n|  Aspects         |                  |                           |\n+------------------+------------------+---------------------------+\n```\n\n## Requirements\n\n| Requirement | Details |\n|---|---|\n| **OS** | Windows (x64) — tested on Windows 10/11 |\n| **Python** | **3.14.x** (bundled `.pyd` compiled for CPython 3.14) |\n| **Runtime** | **Microsoft Visual C++ Redistributable 2015–2022 (x64)** |\n| **Pillow** | **12.x** — `pip install pillow` |\n\nInstallation steps:\n1. Install [Python 3.14](https://www.python.org/downloads/release/python-3145/)\n2. Install [VC++ Redist x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n3. Install Pillow: `pip install pillow`\n\n## Architecture\n\n```\nnatal_chart_swe.py --json  →  JSON data  →  draw_wheel.py  →  PNG image\n                                  ↕\n                          natal_chart_swe.py  →  text output\n```\n\n`natal_chart_swe.py` is the **sole calculation engine**. `draw_wheel.py` only renders — it calls `natal_chart_swe.py --json` via subprocess and draws the wheel from t"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn775k2zzav7y8rpwwm218x0b587f0hj\",\n  \"slug\": \"astro-natal-chart\",\n  \"version\": \"4.3.7\",\n  \"publishedAt\": 1782327731286\n}"},{"path":"CHANGELOG.md","content":"# Changelog\n\n## v3.12.0 (2026-06-01)\n\n- **Header layout fix**: removed \"NATAL CHART\" title from above the wheel, kept it only above the interpretation panel\n- **Name placement**: person's name now shown below the \"NATAL CHART\" title in the right panel\n- **ClawHub link moved**: relocated from under the wheel legends to the bottom of the right interpretation panel\n\n## v3.11.0 (2026-06-01)\n\n- **Layout redesign**: removed right zodiac circle, merged center+right into single 3600px interpretation panel\n- **Chart header**: added \"NATAL CHART\" title above left wheel + optional `--name` parameter for person's name\n- **Full interpretation panel**: Sun/Moon/ASC sign descriptions, dominant element, stelliums, retrograde planets, all 12 houses with cusp positions, house meanings, and planets in each house\n- **ClawHub link**: added skill repository URL under the legends below the wheel\n- Language-aware: interpretation text in Russian (`--lang ru`) or English (`--lang en`)\n- Cleaned up debug files\n\n## v3.10.0 (2026-06-01)\n\n- **Fonts shipped as .ttf.dat to bypass ClawHub filter**: ClawHub silently strips `.ttf` files from skill packages. Fonts are now bundled as `seguisym.ttf.dat` (2.4 MB) and `segoeuisl.ttf.dat` (854 KB). `draw_wheel.py` auto-detects and restores them to `.ttf` on first run via `shutil.copy2`.\n- This ensures the skill renders correctly on all machines after ClawHub installation without any manual font setup.\n\n## v3.9.0 (2026-06-01)\n\n- **Attempted bundled fonts**: included `seguisym.ttf` and `segoeuisl.ttf` directly in `scripts/`. ClawHub silently filtered them out — not present in the published package.\n\n## v3.8.0 (2026-06-01)\n\n- **Fixed element coloring bug**: `Pillow pieslice()` uses a different coordinate system than `cos/sin` — sectors were drawn at mirrored positions, causing wrong element colors. Replaced with `draw.polygon()` using explicit coordinate math.\n- **Sector boundaries aligned to zodiac signs**: sectors start from the beginning of each sign, not from the ASC degree.\n- Bundled fonts reference added (deferred to v3.9.0 for actual inclusion).\n\n## v3.7.0 (2026-06-01)\n\n- **Two equal-size wheels**: natal chart with houses (left) and zodiac planet circle (right) — both 2160×2160px\n- **Panoramic layout**: 5760×2880 total (2:1), data panel (1440px) between the two wheels\n- **Dual-font rendering** with per-character font selection\n- **Zodiac planet circle**: same planet orbit radius and size as main wheel\n\n## v2.1.0 (2026-05-28)\n\n- Fixed `.pyd.dat` loading on Windows\n- Added Microsoft Visual C++ Redistributable requirement\n- Requires Python 3.14.x\n\n## v2.0.0 (2026-05-28)\n\n- Switched to Swiss Ephemeris (pyswisseph 2.10.3.2) as primary calculation engine\n- House calculation via `swe.houses_ex()` (exact iterative Placidus)\n- Added retrograde detection via `FLG_SPEED` flag\n\n## v1.x (earlier)\n\n- Initial release using simplified analytical formulas"},{"path":"skill-card.md","content":"## Description:\n\nCalculates natal charts from birth date, time, and city, then produces bilingual text, JSON chart data, and high-resolution PNG wheel visualizations with optional AI conclusion text.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dynamicsalex](https://clawhub.ai/user/dynamicsalex)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to generate educational or entertainment natal chart readings from birth details, including calculated planet, house, and aspect data. Agents can also pass chart JSON through an AI interpretation step and embed that conclusion into the rendered PNG.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill bundles a native Windows extension for Swiss Ephemeris.\n\nMitigation: Review and run the skill in an isolated Windows environment before trusting generated output or deploying it for broader use.\n\nRisk: The renderer attempts to install Pillow at runtime when the package is missing.\n\nMitigation: Install Pillow explicitly in a controlled environment before execution and avoid relying on runtime package installation.\n\nRisk: The default chart render embeds a bundled QR/frame image.\n\nMitigation: Inspect generated PNG files before sharing them, or pass a reviewed frame asset when rendering charts.\n\nRisk: Birth details and optional AI conclusion files can contain personal or sensitive information.\n\nMitigation: Process only data that users have consented to share, and avoid retaining generated chart data or conclusion files longer than needed.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/dynamicsalex/skills/astro-natal-chart)\n- [Publisher profile](https://clawhub.ai/user/dynamicsalex)\n- [Astro Natal Chart source repository](https://github.com/dynamicsAlex/astro-natal-chart)\n- [OpenClaw](https://github.com/openclaw/openclaw)\n- [Python 3.14 release](https://www.python.org/downloads/release/python-3145/)\n- [Microsoft Visual C++ Redistributable x64](https://aka.ms/vs/17/release/vc_redist.x64.exe)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, image files, guidance]\n\n**Output Format:** [Plain text, JSON, and PNG image files with optional embedded conclusion text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Windows x64, CPython 3.14, Pillow 12.x, and a bundled Swiss Ephemeris native extension; chart rendering includes a bundled frame image by default.]\n\n## Skill Version(s):\n\n4.3.7 (source: server release evidence and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Skill: Astro Natal Chart Owner: dynamicsalex Summary: Calculates and interprets the natal chart by date, time and place of birth with the positions of planets, houses and main aspects. Windows OS 10/11 Required. Tags: astrology:2.1.0, latest:4.3.7, natal-chart:2.1.0, swiss-ephemeris:2.1.0, windows:2.1.0 Version history: v4.3.7 | 2026-06-24T19:02:11.286Z | user QR code now renders by default; --frame no longer require","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1633,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T01:21:34.510Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:53:43.761Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}