proceedurally generate names, places, faction generators https://pages.gi7b.org/gi7b/name-place-faction-generator/
  • TypeScript 52.8%
  • Python 21.3%
  • JavaScript 16.9%
  • CSS 7.5%
  • Java 0.7%
  • Other 0.8%
Find a file
Agent Kimi 7341d51a3a
Some checks failed
Deploy PWA to GitHub Pages / build (push) Has been cancelled
Deploy PWA to GitHub Pages / deploy (push) Has been cancelled
Merge remote-tracking branch 'forgejo/main'
2026-05-11 20:43:52 +08:00
.github/workflows ci: skip library build in CI — Vite aliases use source directly 2026-04-25 01:15:48 +08:00
android WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
packages v0.05: name descriptor value bias + redundant article fix 2026-04-26 23:07:09 +08:00
public feat: PWA shell with Vite, offline-capable generators, browser-safe LC loader 2026-04-25 01:11:58 +08:00
scripts feat: descriptor, title, and nickname generation system 2026-04-25 02:35:55 +08:00
shared v0.04: pronunciation shortening + cultural values D66 integration 2026-04-26 23:00:14 +08:00
src/web v0.06: roll both cultures button 2026-04-26 23:23:24 +08:00
src-tauri WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
.gitignore WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
260421 Cultural Values Table.docx Add files via upload 2026-04-24 14:03:23 +08:00
260425-IMPLEMENTATION.md feat: descriptor, title, and nickname generation system 2026-04-25 02:35:55 +08:00
capacitor.config.ts WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
index.html feat: PWA shell with Vite, offline-capable generators, browser-safe LC loader 2026-04-25 01:11:58 +08:00
LICENSE Initial commit 2026-04-24 13:46:32 +08:00
namegen-spec.md Add files via upload 2026-04-24 14:03:23 +08:00
package-lock.json WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
package.json WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00
README.md Add active-source header with blog and live app links 2026-05-10 21:26:34 +08:00
REF-013-place-gen-spec.md Add files via upload 2026-04-24 14:03:23 +08:00
REF-014-faction-gen-spec.md Add files via upload 2026-04-24 14:03:23 +08:00
test-descriptors.mjs feat: descriptor, title, and nickname generation system 2026-04-25 02:35:55 +08:00
test-generators.mjs feat: PWA shell with Vite, offline-capable generators, browser-safe LC loader 2026-04-25 01:11:58 +08:00
tsconfig.json feat: PWA shell with Vite, offline-capable generators, browser-safe LC loader 2026-04-25 01:11:58 +08:00
vite.config.ts feat: add database download panel with JSZip bulk export 2026-04-25 02:01:57 +08:00
WRAPPER_BUILD.md WIP: Pre-migration checkpoint [auto-commit] 2026-05-05 13:47:52 +08:00

🛒 Products & Blog: blog.gi7b.org 🌐 Live App: https://pages.gi7b.org/gi7b/name-place-faction-generator/ 💻 Source: https://git.gi7b.org/gi7b/name-place-faction-generator

GitHub mirror archived — active development is here on Forgejo.


name-place-faction-generator

Products: https://blog.gi7b.org

Procedural generators for names, places, factions, and scenarios — for game masters, world-builders, and anyone who needs a living setting without spending hours making up names.

This is an open-source toolkit. Use it in your tabletop games, fiction, video games, or any creative project. MIT licensed. All source data is publicly licensed.


What This Is

A suite of generators that produce culturally coherent, phonologically grounded content — names that sound like they belong to the same world, places that reflect real linguistic patterns, factions that emerge from the actual conditions of a society, and eventually, scenarios complete with casts.

These are Open Problem Generators. They produce a detailed GM info dump: who the players are, what tensions exist, what is broken, who wants what. They do not generate the solution. The players decide what to do with what they find. The referee gets a living, internally consistent problem space with no prep beyond rolling.


The Three Generators

NameGen — namegen-spec.md

Generates culturally grounded personal and family names using Linguistic-Culture (LC) profiles and a phonological drift system that models how names evolve across borders, migrations, and centuries.

  • Two-LC drift: a Base LC determines the name pool; a Drift LC transforms the phonology
  • Drift levels 03 map to LC distance (same culture → unrelated language family)
  • All names carry IPA transcription; drift operates on sounds, not spellings
  • Weighted LC selection so you can make one culture dominant in a region
  • TypeScript library (gi7b-namegen), open data corpus, full build pipeline

Example: Irish-English base + Japanese drift at level 2 → Shiovann Oburaian instead of Siobhán O'Brien


PlaceGen — REF-013-place-gen-spec.md

Generates names for star systems, worlds, regions, and cities using the same LC and drift engine as NameGen, but drawing from place-word semantic categories (terrain, direction, quality, flora, fauna, structure, sacred, event, proper roots).

  • Construction templates per LC (e.g. [quality][terrain]Blackmoor, [proper_root][structure]Manchester)
  • Star system names use a restricted short-form template set; world names use the full set
  • Hierarchical inheritance: system → world → region share an LC pair for cultural coherence
  • Progressive Web App for browsing, editing, and packaging LC word pools

FactionGen — REF-014-faction-gen-spec.md

Takes world-level inputs (population, wealth, development, power structure, tech level, culture rolls) and generates a coherent set of Entities — factions, institutions, cults, noble houses, corporations, warlords, guilds — that emerge plausibly from those conditions.

  • Entity attributes use the standard CE/Traveller six-stat block (STR/DEX/END/INT/EDU/SOC) at organisational scale
  • Population distributed by power-law; entity count and type skewed by power structure and source of power
  • Ideological axes derived from the D66×D6 Culture Table rolls — only axes the world actually rolled are active
  • Relationships (ally/rival/enemy) emerge from axis agreement and type interactions, not independent rolls
  • Entities name themselves using NameGen + PlaceGen biased toward their cultural values
  • Progressive Web App: faction browser, force-directed relationship map, entity editor, package export

Wealth/Development combinations produce qualitatively different faction landscapes: high wealth + low development (Dutch Disease) → resource extraction oligarchs + weak institutions; low wealth + high development → strong civic institutions + scarce material power.


Open Problem Generator Philosophy

These tools generate the situation, not the answer.

A referee running FactionGen on a world gets:

  • Who holds power and how they got it
  • Who is competing with whom and why
  • What ideological fault lines run through the society
  • What the Entities want, what they fear, what they will do
  • A cast of named, attributed organisations with relationships

The players walk into that situation and do whatever they want. They can side with one faction, play them against each other, ignore all of them, or burn the whole thing down. The generator's job ends at the edge of the problem space.

This applies at every scale: a name generator gives you a world that feels inhabited by real people with real histories, not placeholder labels. A place name generator gives you geography that sounds like it was named by someone who lived there. A faction generator gives you a society that has its own momentum before the players arrive.


Planned: ScenarioGen

The next layer: scenario generators that combine FactionGen's entity landscape with trope-driven conflict templates to produce complete scenario seeds — a cast of named entities and individuals, a central tension, complications, and a set of open-ended hooks. Still no solution. Just a problem the players will want to solve.


These generators are designed to feed directly into the broader GI7B tool ecosystem:

Repo Relationship
Mneme-CE-World-Generator Primary consumer: PlaceGen names star systems and worlds; FactionGen runs after Inhabitants generation
cecharactergen CE CharacterGen consumes NameGen (gi7b-namegen) as an npm dependency for character names
2d-star-system-map 2D star map — star system names generated by PlaceGen
3d-interstellar-map 3D interstellar map — star system names generated by PlaceGen
ce-shipgen CE Ship Generator — part of the same Cepheus Engine toolchain

All tools are designed to be independent and interoperable. You do not need the full GI7B stack to use any one of them.


Using This in Your Own Project

All three generators are MIT licensed. The data corpora require publicly licensed sources (CC BY-SA, ODbL, Public Domain, Unicode License — see SOURCES.md in each repo). No proprietary data is committed.

As a library (TypeScript):

import { NameGen } from 'gi7b-namegen'
import { PlaceGen } from 'gi7b-placegen'
import { FactionGen } from 'gi7b-factiongen'

// Names
const names = new NameGen({ weights: { 'en-ie': 4, 'ja-jp': 2 }, seed: 12345 })
const character = names.generateName({ gender: 'F' })

// Places
const places = new PlaceGen({ weights: { 'en-gb': 4, 'la-roman': 2 }, seed: 42 })
const system = places.generateStarSystemName()
const world = places.generateWorldName({ inheritLc: system })

// Factions
const gen = new FactionGen({ world: myWorldStats, seed: 99 })
const factions = gen.generate()

As a web tool: Each generator ships with a Progressive Web App. Run locally with npm run dev or deploy to any static host.

As data only: The LC data corpus, drift rules, and entity templates are plain JSON. Consume them from any language.


Linguistic-Culture (LC) System

The shared foundation of all three generators. An LC is a named pairing of a language and a cultural context. The same natural language produces multiple LCs when its speakers form distinct communities with distinct naming traditions:

en-gb, en-ie, en-au, en-ph, tl-ph, es-mx, es-es, zh-cn, zh-tw, ar-eg, ar-sa, ja-jp, ko-kr

Each LC is discrete. No automatic inheritance. Shared phonological rules are declared explicitly in drift-rules files. This keeps the system deterministic and editable by non-linguists.


Contributing

New LCs, drift rules, and place word pools are welcome.

  • New LCs require a documented source entry in SOURCES.md — all data must be traceable to a public, open-licensed corpus
  • IPA strings must pass validate/ipa_check.py before merge
  • Drift rules require at least one test case in tests/drift/
  • Data corpus versioning follows calendar versioning (YYMMDD)

License

MIT — Game in the Brain, 2026

All source data must be publicly licensed. See SOURCES.md in each sub-repository for full provenance.