Procedural Phonology Engine (`phonology.py`) #
FleshNote generates organic fantasy names by simulating natural phonetic phonotactics rather than randomly shuffling letters. The engine in backend/tools/name_gen/ configures:
- Vowel & Consonant Frequencies: Weighted probability matrices defining onset consonants, nucleus vowels, and coda codas per syllable.
- Phonotactic Constraints: Prevents unpronounceable consonant clusters (e.g. "bkzq") and allows custom apostrophe or hyphen insertion rules.
- Fantasy Presets: Pre-tuned matrices for high fantasy cultures (Elven, Dwarven, Nordic, Eldritch, Cyberpunk, Orcish).
Real-World Historical Name Databases #
For real-world and historical fiction, FleshNote queries curated name databases stored in backend/tools/name_gen/data/real/:
| Language / Culture | Database File | Size & Contents | Status |
|---|---|---|---|
| Hungarian | hungarian.csv |
68 KB — Comprehensive historical and modern Hungarian given names and surnames. | SUPPORTED |
| Polish | polish.csv |
21 KB — Curated Polish given names, patronymics, and surnames. | SUPPORTED |
| English | english.csv |
Classic Anglo-Saxon and contemporary English names. | SUPPORTED |
| German / French / Other | Missing | Community contribution opportunity to supply cultural name databases. | WANTED |
Questionnaire-Driven Location Generator (`locations.py`) #
Rather than outputting generic random fantasy labels, FleshNote's Location Name Generator Modal (LocationNameGeneratorModal.jsx) queries the writer with 6 worldbuilding prompts and parses the answers through spaCy, NLTK WordNet, and language-specific morphological compilers:
| Questionnaire Field | Underlying Linguistic Extraction | Synonym & NLP Handling |
|---|---|---|
| 1. Geography e.g. "snowy peaks with frozen waterfalls" |
Extracts NOUN, PROPN, and ADJ tokens using spaCy POS tagging. |
Enriched ~50% with concrete WordNet synsets (excluding abstract/emotional definitions). |
| 2. History e.g. "site of the ancient dragon siege" |
Extracts thematic nouns and event markers (e.g. war, siege, crown, ruin). | Enriched with historical synonyms or language-specific thematic supplements. |
| 3. Founder / Clan e.g. "King Karoly" or "Eldrin" |
Filters specifically for PROPN tokens. |
Strictly NO synonym enrichment — proper names are preserved intact for patronymic compounding. |
| 4. Native Tongue e.g. Conlang or foreign roots |
Raw token split without grammatical mutation. | Passed verbatim to preserve the author's custom constructed language roots. |
| 5. Mythos e.g. Ancient deities or constellations |
Extracts celestial and mythological nouns. | Enriched with mythic WordNet synsets. |
| 6. Phonetic Drift (0–100%) | Simulates historical sound change across centuries. | Applies vowel elision, consonant softening, and letter contraction (mimicking real-world shifts like Eoforwic → York). |
Per-Language Geographical Morphology (`location_langs/`) #
The extracted keywords are dispatched to the project's active story language compiler in backend/tools/name_gen/location_langs/:
1. English Compounding Rules (`en.py`)
Constructs names via Anglo-Saxon and Norse toponymic templates:
- Settlement Suffixes:
-stead,-haven,-ford,-vale,-mire,-reach,-gate,-burg. - Founder Templates: "Founder's Rest", "Founder's Ford", "Fort [Founder]".
- Compound Synthesis: Combines geography adjectives + history nouns (e.g. "Frostvale", "Oldhaven", "Dragoncrest").
2. Hungarian Toponymic Rules (`hu.py`)
Implements authentic Hungarian settlement naming (földrajzi névtan) and vowel harmony agreement:
- Settlement Suffixes:
-vár(fortress),-falva(village),-háza(estate),-újváros(newtown),-szék(seat),-telep(settlement),-szállás(quarters). - Geographical Landmarks:
-patak(creek),-hegy(mountain),-völgy(valley),-erdő(forest),-szirt(cliff),-bérc(peak),-tó(lake). - Thematic WordNet Supplements: When WordNet lacks Hungarian synonyms for fantasy terms (e.g. háború, sárkány, táltos, varázs),
_HU_THEMATIC_SUPPLEMENTSinjects curated historical alternatives (ostrom, küzdelem, fenevad, bestia, bűbáj). - Example Outputs: "Károlyfalva", "Sárkányvár", "Feketepatak", "Táltosbérc".
3. Polish Toponymic Rules (`pl.py`)
Follows Slavic geographical morphology with grammatical gender agreement:
- Toponymic Suffixes:
-ice,-ów,-góra,-wola,-dół,-no,-sk. - Adjective Gender Agreement: Inflects modifiers to match landmark gender (Masculine: -ski, Feminine: -ska, Neuter: -skie).
- Example Outputs: "Smocza Góra", "Krakowiec", "Wilcza Wola", "Czarne Doły".