sigil-creator 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sigil_creator-0.1.0/LICENSE +21 -0
- sigil_creator-0.1.0/PKG-INFO +150 -0
- sigil_creator-0.1.0/README.md +127 -0
- sigil_creator-0.1.0/pyproject.toml +45 -0
- sigil_creator-0.1.0/setup.cfg +4 -0
- sigil_creator-0.1.0/src/sigil_creator/__init__.py +4 -0
- sigil_creator-0.1.0/src/sigil_creator/cli.py +233 -0
- sigil_creator-0.1.0/src/sigil_creator/data/profiles/alchemical_manuscript.yaml +153 -0
- sigil_creator-0.1.0/src/sigil_creator/data/profiles/antiquarian_calligraphic.yaml +173 -0
- sigil_creator-0.1.0/src/sigil_creator/data/profiles/chaos_minimal.yaml +151 -0
- sigil_creator-0.1.0/src/sigil_creator/data/profiles/grimoire_engraved.yaml +154 -0
- sigil_creator-0.1.0/src/sigil_creator/data/references/kameas.md +65 -0
- sigil_creator-0.1.0/src/sigil_creator/data/references/methods.md +78 -0
- sigil_creator-0.1.0/src/sigil_creator/letters_to_numbers.py +42 -0
- sigil_creator-0.1.0/src/sigil_creator/reduce_letters.py +39 -0
- sigil_creator-0.1.0/src/sigil_creator.egg-info/PKG-INFO +150 -0
- sigil_creator-0.1.0/src/sigil_creator.egg-info/SOURCES.txt +18 -0
- sigil_creator-0.1.0/src/sigil_creator.egg-info/dependency_links.txt +1 -0
- sigil_creator-0.1.0/src/sigil_creator.egg-info/entry_points.txt +4 -0
- sigil_creator-0.1.0/src/sigil_creator.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Sigil Creator Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sigil-creator
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLI tools for creating personal magical sigils using classical and chaos magic methods (Spare letter reduction, Agrippa planetary kameas, Rose Cross, and grimoire-style seals).
|
|
5
|
+
Author: Sigil Creator Contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/CraftingBuilds/sigil-creator-cli
|
|
8
|
+
Project-URL: Documentation, https://github.com/CraftingBuilds/sigil-creator-cli#readme
|
|
9
|
+
Keywords: sigil,chaos-magic,occult,grimoire,kamea,cli,magic
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Topic :: Religion
|
|
18
|
+
Classifier: Topic :: Utilities
|
|
19
|
+
Requires-Python: >=3.8
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
# sigil-creator
|
|
25
|
+
|
|
26
|
+
**CLI tools for creating personal magical sigils** grounded in classical Western occult traditions and modern chaos magic.
|
|
27
|
+
|
|
28
|
+
Implements the deterministic helper steps used by the [sigil-creator](https://github.com/example/sigil-creator) skill:
|
|
29
|
+
|
|
30
|
+
- Austin Osman Spare / chaos-magic letter reduction
|
|
31
|
+
- Letter → number conversion for Agrippa planetary kameas
|
|
32
|
+
- Visual **Sigil Profiles** (YAML) for consistent aesthetic rendering
|
|
33
|
+
- Method and kamea reference documents
|
|
34
|
+
|
|
35
|
+
The actual artistic construction of the glyph (overlapping strokes, path drawing on a magic square, image generation) is left to the practitioner or an external image model. This package supplies the reduction, numbering, style definitions, and documentation.
|
|
36
|
+
|
|
37
|
+
## Installation (Linux / macOS)
|
|
38
|
+
|
|
39
|
+
### From source (recommended while developing)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cd sigil-creator-cli
|
|
43
|
+
python3 -m pip install --user -e .
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Or build a wheel / sdist
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
python3 -m pip install build
|
|
50
|
+
python3 -m build
|
|
51
|
+
python3 -m pip install dist/sigil_creator-*.whl
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
After installation the following commands are available:
|
|
55
|
+
|
|
56
|
+
| Command | Purpose |
|
|
57
|
+
|--------------------|----------------------------------------------|
|
|
58
|
+
| `sigil` | Main multi-command entry point |
|
|
59
|
+
| `sigil-reduce` | Stand-alone letter reducer |
|
|
60
|
+
| `sigil-numbers` | Stand-alone letter→number converter |
|
|
61
|
+
|
|
62
|
+
## Quick start
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# 1. Reduce a Statement of Intent (Spare method)
|
|
66
|
+
sigil reduce "I am financially secure"
|
|
67
|
+
# → MFNCLYSR
|
|
68
|
+
|
|
69
|
+
# Keep vowels
|
|
70
|
+
sigil reduce --keep-vowels "I am financially secure"
|
|
71
|
+
|
|
72
|
+
# 2. Convert to kamea path numbers
|
|
73
|
+
sigil numbers MFNCLYSR
|
|
74
|
+
sigil numbers --max 7 "I am financially secure"
|
|
75
|
+
|
|
76
|
+
# 3. List / inspect visual profiles
|
|
77
|
+
sigil profiles
|
|
78
|
+
sigil show-profile antiquarian_calligraphic
|
|
79
|
+
sigil show-profile chaos_minimal
|
|
80
|
+
|
|
81
|
+
# 4. Read the full method reference
|
|
82
|
+
sigil methods
|
|
83
|
+
sigil methods --section Spare
|
|
84
|
+
sigil methods --section Kamea
|
|
85
|
+
sigil kameas
|
|
86
|
+
|
|
87
|
+
# 5. Concise workflow reminder
|
|
88
|
+
sigil guide
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
You can also pipe:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
echo "It is my will to write every day" | sigil reduce
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Available Sigil Profiles
|
|
98
|
+
|
|
99
|
+
| ID | Character |
|
|
100
|
+
|---------------------------|------------------------------------------------|
|
|
101
|
+
| `antiquarian_calligraphic`| Bold, archaic, interwoven, calligraphic |
|
|
102
|
+
| `grimoire_engraved` | Severe, angular, authoritative, plate-like |
|
|
103
|
+
| `chaos_minimal` | Clean, abstract, psychological, decisive |
|
|
104
|
+
| `alchemical_manuscript` | Ornate yet restrained, symbolic, manuscript |
|
|
105
|
+
|
|
106
|
+
Profiles live in `sigil_creator/data/profiles/` and can be extended by dropping additional YAML files.
|
|
107
|
+
|
|
108
|
+
## Planetary Kameas (summary)
|
|
109
|
+
|
|
110
|
+
| Planet | Square | Typical use |
|
|
111
|
+
|---------|--------|--------------------------------------|
|
|
112
|
+
| Saturn | 3×3 | Protection, boundaries, endings |
|
|
113
|
+
| Jupiter | 4×4 | Wealth, expansion, success |
|
|
114
|
+
| Mars | 5×5 | Energy, courage, conflict |
|
|
115
|
+
| Sun | 6×6 | Vitality, recognition, leadership |
|
|
116
|
+
| Venus | 7×7 | Love, beauty, harmony |
|
|
117
|
+
| Mercury | 8×8 | Communication, intellect, commerce |
|
|
118
|
+
| Moon | 9×9 | Intuition, cycles, the subconscious |
|
|
119
|
+
|
|
120
|
+
Full squares and reduction rules: `sigil kameas`.
|
|
121
|
+
|
|
122
|
+
## Charging & release (reminder)
|
|
123
|
+
|
|
124
|
+
1. Formulate a clear, present-tense, positive Statement of Intent.
|
|
125
|
+
2. Reduce / map it into an abstract mark.
|
|
126
|
+
3. Enter a state of gnosis (meditation, breath work, movement, etc.) while focusing on the sigil.
|
|
127
|
+
4. Deliberately forget the original desire so the unconscious can work.
|
|
128
|
+
5. Destroy, bury, or hide the physical sigil.
|
|
129
|
+
|
|
130
|
+
This package treats the practice as psychological technology, artistic craft, or sincere occult work according to the user’s own framework. It makes no claims about results.
|
|
131
|
+
|
|
132
|
+
## Development layout
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
sigil-creator-cli/
|
|
136
|
+
├── pyproject.toml
|
|
137
|
+
├── README.md
|
|
138
|
+
├── src/sigil_creator/
|
|
139
|
+
│ ├── __init__.py
|
|
140
|
+
│ ├── cli.py # main `sigil` command
|
|
141
|
+
│ ├── reduce_letters.py
|
|
142
|
+
│ ├── letters_to_numbers.py
|
|
143
|
+
│ └── data/
|
|
144
|
+
│ ├── profiles/ # YAML style definitions
|
|
145
|
+
│ └── references/ # methods.md, kameas.md
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## License
|
|
149
|
+
|
|
150
|
+
MIT
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# sigil-creator
|
|
2
|
+
|
|
3
|
+
**CLI tools for creating personal magical sigils** grounded in classical Western occult traditions and modern chaos magic.
|
|
4
|
+
|
|
5
|
+
Implements the deterministic helper steps used by the [sigil-creator](https://github.com/example/sigil-creator) skill:
|
|
6
|
+
|
|
7
|
+
- Austin Osman Spare / chaos-magic letter reduction
|
|
8
|
+
- Letter → number conversion for Agrippa planetary kameas
|
|
9
|
+
- Visual **Sigil Profiles** (YAML) for consistent aesthetic rendering
|
|
10
|
+
- Method and kamea reference documents
|
|
11
|
+
|
|
12
|
+
The actual artistic construction of the glyph (overlapping strokes, path drawing on a magic square, image generation) is left to the practitioner or an external image model. This package supplies the reduction, numbering, style definitions, and documentation.
|
|
13
|
+
|
|
14
|
+
## Installation (Linux / macOS)
|
|
15
|
+
|
|
16
|
+
### From source (recommended while developing)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
cd sigil-creator-cli
|
|
20
|
+
python3 -m pip install --user -e .
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Or build a wheel / sdist
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
python3 -m pip install build
|
|
27
|
+
python3 -m build
|
|
28
|
+
python3 -m pip install dist/sigil_creator-*.whl
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
After installation the following commands are available:
|
|
32
|
+
|
|
33
|
+
| Command | Purpose |
|
|
34
|
+
|--------------------|----------------------------------------------|
|
|
35
|
+
| `sigil` | Main multi-command entry point |
|
|
36
|
+
| `sigil-reduce` | Stand-alone letter reducer |
|
|
37
|
+
| `sigil-numbers` | Stand-alone letter→number converter |
|
|
38
|
+
|
|
39
|
+
## Quick start
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 1. Reduce a Statement of Intent (Spare method)
|
|
43
|
+
sigil reduce "I am financially secure"
|
|
44
|
+
# → MFNCLYSR
|
|
45
|
+
|
|
46
|
+
# Keep vowels
|
|
47
|
+
sigil reduce --keep-vowels "I am financially secure"
|
|
48
|
+
|
|
49
|
+
# 2. Convert to kamea path numbers
|
|
50
|
+
sigil numbers MFNCLYSR
|
|
51
|
+
sigil numbers --max 7 "I am financially secure"
|
|
52
|
+
|
|
53
|
+
# 3. List / inspect visual profiles
|
|
54
|
+
sigil profiles
|
|
55
|
+
sigil show-profile antiquarian_calligraphic
|
|
56
|
+
sigil show-profile chaos_minimal
|
|
57
|
+
|
|
58
|
+
# 4. Read the full method reference
|
|
59
|
+
sigil methods
|
|
60
|
+
sigil methods --section Spare
|
|
61
|
+
sigil methods --section Kamea
|
|
62
|
+
sigil kameas
|
|
63
|
+
|
|
64
|
+
# 5. Concise workflow reminder
|
|
65
|
+
sigil guide
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
You can also pipe:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
echo "It is my will to write every day" | sigil reduce
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Available Sigil Profiles
|
|
75
|
+
|
|
76
|
+
| ID | Character |
|
|
77
|
+
|---------------------------|------------------------------------------------|
|
|
78
|
+
| `antiquarian_calligraphic`| Bold, archaic, interwoven, calligraphic |
|
|
79
|
+
| `grimoire_engraved` | Severe, angular, authoritative, plate-like |
|
|
80
|
+
| `chaos_minimal` | Clean, abstract, psychological, decisive |
|
|
81
|
+
| `alchemical_manuscript` | Ornate yet restrained, symbolic, manuscript |
|
|
82
|
+
|
|
83
|
+
Profiles live in `sigil_creator/data/profiles/` and can be extended by dropping additional YAML files.
|
|
84
|
+
|
|
85
|
+
## Planetary Kameas (summary)
|
|
86
|
+
|
|
87
|
+
| Planet | Square | Typical use |
|
|
88
|
+
|---------|--------|--------------------------------------|
|
|
89
|
+
| Saturn | 3×3 | Protection, boundaries, endings |
|
|
90
|
+
| Jupiter | 4×4 | Wealth, expansion, success |
|
|
91
|
+
| Mars | 5×5 | Energy, courage, conflict |
|
|
92
|
+
| Sun | 6×6 | Vitality, recognition, leadership |
|
|
93
|
+
| Venus | 7×7 | Love, beauty, harmony |
|
|
94
|
+
| Mercury | 8×8 | Communication, intellect, commerce |
|
|
95
|
+
| Moon | 9×9 | Intuition, cycles, the subconscious |
|
|
96
|
+
|
|
97
|
+
Full squares and reduction rules: `sigil kameas`.
|
|
98
|
+
|
|
99
|
+
## Charging & release (reminder)
|
|
100
|
+
|
|
101
|
+
1. Formulate a clear, present-tense, positive Statement of Intent.
|
|
102
|
+
2. Reduce / map it into an abstract mark.
|
|
103
|
+
3. Enter a state of gnosis (meditation, breath work, movement, etc.) while focusing on the sigil.
|
|
104
|
+
4. Deliberately forget the original desire so the unconscious can work.
|
|
105
|
+
5. Destroy, bury, or hide the physical sigil.
|
|
106
|
+
|
|
107
|
+
This package treats the practice as psychological technology, artistic craft, or sincere occult work according to the user’s own framework. It makes no claims about results.
|
|
108
|
+
|
|
109
|
+
## Development layout
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
sigil-creator-cli/
|
|
113
|
+
├── pyproject.toml
|
|
114
|
+
├── README.md
|
|
115
|
+
├── src/sigil_creator/
|
|
116
|
+
│ ├── __init__.py
|
|
117
|
+
│ ├── cli.py # main `sigil` command
|
|
118
|
+
│ ├── reduce_letters.py
|
|
119
|
+
│ ├── letters_to_numbers.py
|
|
120
|
+
│ └── data/
|
|
121
|
+
│ ├── profiles/ # YAML style definitions
|
|
122
|
+
│ └── references/ # methods.md, kameas.md
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## License
|
|
126
|
+
|
|
127
|
+
MIT
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sigil-creator"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "CLI tools for creating personal magical sigils using classical and chaos magic methods (Spare letter reduction, Agrippa planetary kameas, Rose Cross, and grimoire-style seals)."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Sigil Creator Contributors"}
|
|
14
|
+
]
|
|
15
|
+
keywords = ["sigil", "chaos-magic", "occult", "grimoire", "kamea", "cli", "magic"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: End Users/Desktop",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Operating System :: POSIX :: Linux",
|
|
22
|
+
"Operating System :: MacOS",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Topic :: Religion",
|
|
25
|
+
"Topic :: Utilities",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
[project.scripts]
|
|
29
|
+
sigil = "sigil_creator.cli:main"
|
|
30
|
+
sigil-reduce = "sigil_creator.reduce_letters:main"
|
|
31
|
+
sigil-numbers = "sigil_creator.letters_to_numbers:main"
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Homepage = "https://github.com/CraftingBuilds/sigil-creator-cli"
|
|
35
|
+
Documentation = "https://github.com/CraftingBuilds/sigil-creator-cli#readme"
|
|
36
|
+
|
|
37
|
+
[tool.setuptools.packages.find]
|
|
38
|
+
where = ["src"]
|
|
39
|
+
|
|
40
|
+
[tool.setuptools.package-data]
|
|
41
|
+
"sigil_creator" = ["data/profiles/*.yaml", "data/references/*.md"]
|
|
42
|
+
|
|
43
|
+
[tool.pytest.ini_options]
|
|
44
|
+
testpaths = ["tests"]
|
|
45
|
+
python_files = ["test_*.py", "*_test.py"]
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Main entry point for the sigil-creator CLI."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
import importlib.resources as resources
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
from . import __version__
|
|
13
|
+
from .reduce_letters import reduce_intent
|
|
14
|
+
from .letters_to_numbers import convert
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_data_path(relative: str) -> Path:
|
|
18
|
+
"""Locate package data files (profiles, references)."""
|
|
19
|
+
try:
|
|
20
|
+
# Python 3.9+
|
|
21
|
+
base = resources.files("sigil_creator")
|
|
22
|
+
return Path(str(base.joinpath("data", relative)))
|
|
23
|
+
except Exception:
|
|
24
|
+
# Fallback for development / editable installs
|
|
25
|
+
here = Path(__file__).resolve().parent
|
|
26
|
+
return here / "data" / relative
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def cmd_reduce(args: argparse.Namespace) -> int:
|
|
30
|
+
text = args.intent or sys.stdin.read()
|
|
31
|
+
if not text.strip():
|
|
32
|
+
print("Error: provide a statement of intent as argument or on stdin.", file=sys.stderr)
|
|
33
|
+
return 1
|
|
34
|
+
result = reduce_intent(
|
|
35
|
+
text.strip(),
|
|
36
|
+
remove_vowels=not args.keep_vowels,
|
|
37
|
+
keep_case=args.keep_case,
|
|
38
|
+
)
|
|
39
|
+
print(result)
|
|
40
|
+
return 0
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def cmd_numbers(args: argparse.Namespace) -> int:
|
|
44
|
+
text = args.text or sys.stdin.read()
|
|
45
|
+
if not text.strip():
|
|
46
|
+
print("Error: provide letters or intent as argument or on stdin.", file=sys.stderr)
|
|
47
|
+
return 1
|
|
48
|
+
numbers = convert(text, reduce=not args.no_reduce, max_val=args.max)
|
|
49
|
+
print(" ".join(map(str, numbers)))
|
|
50
|
+
if args.verbose:
|
|
51
|
+
print(f"Sequence: {numbers}", file=sys.stderr)
|
|
52
|
+
return 0
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def cmd_profiles(args: argparse.Namespace) -> int:
|
|
56
|
+
profiles_dir = get_data_path("profiles")
|
|
57
|
+
if not profiles_dir.is_dir():
|
|
58
|
+
print(f"Profiles directory not found: {profiles_dir}", file=sys.stderr)
|
|
59
|
+
return 1
|
|
60
|
+
files = sorted(profiles_dir.glob("*.yaml"))
|
|
61
|
+
if not files:
|
|
62
|
+
print("No profiles found.")
|
|
63
|
+
return 0
|
|
64
|
+
for f in files:
|
|
65
|
+
print(f.stem)
|
|
66
|
+
if args.verbose:
|
|
67
|
+
print(f" → {f}")
|
|
68
|
+
return 0
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def cmd_show_profile(args: argparse.Namespace) -> int:
|
|
72
|
+
path = get_data_path(f"profiles/{args.name}.yaml")
|
|
73
|
+
if not path.is_file():
|
|
74
|
+
# try without extension / fuzzy
|
|
75
|
+
candidates = list(get_data_path("profiles").glob(f"*{args.name}*.yaml"))
|
|
76
|
+
if len(candidates) == 1:
|
|
77
|
+
path = candidates[0]
|
|
78
|
+
else:
|
|
79
|
+
print(f"Profile not found: {args.name}", file=sys.stderr)
|
|
80
|
+
print("Available:", file=sys.stderr)
|
|
81
|
+
for p in sorted(get_data_path("profiles").glob("*.yaml")):
|
|
82
|
+
print(f" {p.stem}", file=sys.stderr)
|
|
83
|
+
return 1
|
|
84
|
+
print(path.read_text(encoding="utf-8"))
|
|
85
|
+
return 0
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def cmd_methods(args: argparse.Namespace) -> int:
|
|
89
|
+
path = get_data_path("references/methods.md")
|
|
90
|
+
if not path.is_file():
|
|
91
|
+
print(f"Reference not found: {path}", file=sys.stderr)
|
|
92
|
+
return 1
|
|
93
|
+
text = path.read_text(encoding="utf-8")
|
|
94
|
+
if args.section:
|
|
95
|
+
# Simple section filter
|
|
96
|
+
lines = text.splitlines()
|
|
97
|
+
out = []
|
|
98
|
+
capturing = False
|
|
99
|
+
for line in lines:
|
|
100
|
+
if line.startswith("## ") and args.section.lower() in line.lower():
|
|
101
|
+
capturing = True
|
|
102
|
+
elif line.startswith("## ") and capturing:
|
|
103
|
+
break
|
|
104
|
+
if capturing:
|
|
105
|
+
out.append(line)
|
|
106
|
+
print("\n".join(out) if out else text)
|
|
107
|
+
else:
|
|
108
|
+
print(text)
|
|
109
|
+
return 0
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def cmd_kameas(args: argparse.Namespace) -> int:
|
|
113
|
+
path = get_data_path("references/kameas.md")
|
|
114
|
+
if not path.is_file():
|
|
115
|
+
print(f"Reference not found: {path}", file=sys.stderr)
|
|
116
|
+
return 1
|
|
117
|
+
print(path.read_text(encoding="utf-8"))
|
|
118
|
+
return 0
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def cmd_guide(args: argparse.Namespace) -> int:
|
|
122
|
+
"""Print a concise practical guide for creating a sigil from the CLI."""
|
|
123
|
+
guide = f"""
|
|
124
|
+
sigil-creator {__version__} — Quick Guide
|
|
125
|
+
========================================
|
|
126
|
+
|
|
127
|
+
1. Formulate a Statement of Intent (SoI)
|
|
128
|
+
Present tense, positive, specific, already-true:
|
|
129
|
+
"I am financially secure"
|
|
130
|
+
"It is my will to find steady creative work I enjoy"
|
|
131
|
+
|
|
132
|
+
2. Reduce the letters (Spare / chaos method — default)
|
|
133
|
+
$ sigil reduce "I am financially secure"
|
|
134
|
+
→ MFNCLYSR (vowels removed, unique letters)
|
|
135
|
+
|
|
136
|
+
Keep vowels:
|
|
137
|
+
$ sigil reduce --keep-vowels "I am financially secure"
|
|
138
|
+
|
|
139
|
+
3. Convert to numbers for a planetary kamea
|
|
140
|
+
$ sigil numbers MFNCLYSR
|
|
141
|
+
$ sigil numbers --max 9 "I am financially secure"
|
|
142
|
+
|
|
143
|
+
4. Choose a visual profile
|
|
144
|
+
$ sigil profiles
|
|
145
|
+
$ sigil show-profile antiquarian_calligraphic
|
|
146
|
+
|
|
147
|
+
5. Read method details
|
|
148
|
+
$ sigil methods
|
|
149
|
+
$ sigil methods --section Spare
|
|
150
|
+
$ sigil kameas
|
|
151
|
+
|
|
152
|
+
6. Construct the glyph yourself (or with an image model)
|
|
153
|
+
- Overlap / rotate / share strokes of the reduced letters
|
|
154
|
+
- For kamea: plot the number sequence as a path on the chosen square
|
|
155
|
+
(start with open circle, end with a bar)
|
|
156
|
+
- Apply the stroke, geometry and composition rules from the chosen profile
|
|
157
|
+
|
|
158
|
+
7. Charge & release
|
|
159
|
+
Enter gnosis (meditation, breath, movement, etc.), gaze, then deliberately
|
|
160
|
+
forget the original desire. Destroy or hide the physical mark.
|
|
161
|
+
|
|
162
|
+
Full references are shipped with the package under the data/ tree.
|
|
163
|
+
"""
|
|
164
|
+
print(guide.strip())
|
|
165
|
+
return 0
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
169
|
+
parser = argparse.ArgumentParser(
|
|
170
|
+
prog="sigil",
|
|
171
|
+
description="Create personal magical sigils — letter reduction, kamea numbers, profiles & references.",
|
|
172
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
173
|
+
epilog="Examples:\n"
|
|
174
|
+
" sigil reduce \"I am calm and focused\"\n"
|
|
175
|
+
" sigil numbers --max 7 ABCDEF\n"
|
|
176
|
+
" sigil profiles\n"
|
|
177
|
+
" sigil show-profile chaos_minimal\n"
|
|
178
|
+
" sigil methods --section Kamea\n"
|
|
179
|
+
" sigil guide\n",
|
|
180
|
+
)
|
|
181
|
+
parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
|
|
182
|
+
|
|
183
|
+
sub = parser.add_subparsers(dest="command", required=True)
|
|
184
|
+
|
|
185
|
+
# reduce
|
|
186
|
+
p_reduce = sub.add_parser("reduce", help="Reduce a statement of intent to unique letters (Spare method)")
|
|
187
|
+
p_reduce.add_argument("intent", nargs="?", help="Statement of intent (or read from stdin)")
|
|
188
|
+
p_reduce.add_argument("--keep-vowels", action="store_true", help="Do not strip vowels")
|
|
189
|
+
p_reduce.add_argument("--keep-case", action="store_true", help="Preserve original case")
|
|
190
|
+
p_reduce.set_defaults(func=cmd_reduce)
|
|
191
|
+
|
|
192
|
+
# numbers
|
|
193
|
+
p_num = sub.add_parser("numbers", help="Convert letters to numbers for kamea paths")
|
|
194
|
+
p_num.add_argument("text", nargs="?", help="Letters or full intent (or stdin)")
|
|
195
|
+
p_num.add_argument("--no-reduce", action="store_true", help="Do not digital-root reduce")
|
|
196
|
+
p_num.add_argument("--max", type=int, default=9, help="Maximum value after reduction (default 9)")
|
|
197
|
+
p_num.add_argument("-v", "--verbose", action="store_true")
|
|
198
|
+
p_num.set_defaults(func=cmd_numbers)
|
|
199
|
+
|
|
200
|
+
# profiles
|
|
201
|
+
p_prof = sub.add_parser("profiles", help="List available visual Sigil Profiles")
|
|
202
|
+
p_prof.add_argument("-v", "--verbose", action="store_true")
|
|
203
|
+
p_prof.set_defaults(func=cmd_profiles)
|
|
204
|
+
|
|
205
|
+
# show-profile
|
|
206
|
+
p_show = sub.add_parser("show-profile", help="Print a profile YAML definition")
|
|
207
|
+
p_show.add_argument("name", help="Profile id (e.g. antiquarian_calligraphic)")
|
|
208
|
+
p_show.set_defaults(func=cmd_show_profile)
|
|
209
|
+
|
|
210
|
+
# methods
|
|
211
|
+
p_meth = sub.add_parser("methods", help="Show detailed method reference")
|
|
212
|
+
p_meth.add_argument("--section", "-s", help="Filter to a section title (Spare, Kamea, Rose, Grimoire…)")
|
|
213
|
+
p_meth.set_defaults(func=cmd_methods)
|
|
214
|
+
|
|
215
|
+
# kameas
|
|
216
|
+
p_kam = sub.add_parser("kameas", help="Show Agrippa planetary magic squares reference")
|
|
217
|
+
p_kam.set_defaults(func=cmd_kameas)
|
|
218
|
+
|
|
219
|
+
# guide
|
|
220
|
+
p_guide = sub.add_parser("guide", help="Print a short practical workflow guide")
|
|
221
|
+
p_guide.set_defaults(func=cmd_guide)
|
|
222
|
+
|
|
223
|
+
return parser
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def main(argv: Optional[list[str]] = None) -> int:
|
|
227
|
+
parser = build_parser()
|
|
228
|
+
args = parser.parse_args(argv)
|
|
229
|
+
return args.func(args)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
if __name__ == "__main__":
|
|
233
|
+
sys.exit(main())
|