"Every lord has a story. Every clan carries a legacy. Every kingdom rises and falls.
Now, their tales are written not just in blood and steel — but in a living manuscript
that breathes with the world itself."
EEWebExtension transforms your Bannerlord encyclopedia into a cinematic, real-time web experience. While you conquer Calradia, a local web server runs silently in the background, serving a fully interactive encyclopedia to your browser — styled as a dark Viking manuscript illuminated by torchlight and forged gold.
Browse heroes, clans, kingdoms, and settlements. Read their histories as they unfold. Edit their stories, rename lords, rewrite lore, and track every war, every betrayal, every alliance — all from the comfort of your browser, your phone, or your tablet on the couch while the game runs on your PC.
This is not just a data viewer. This is your war-room command table, your historian's desk, and your storyteller's journal — all in one.
Open http://127.0.0.1:8080/ and you're greeted by a cinematic intro sequence — Norse rune circles rotating behind forged gold lettering, embers drifting across the screen, a shimmer loading bar filling as the world data streams in. Click to enter, and the Living Archive opens before you.
A dashboard that shows the state of your world at a glance:
- Animated counters that tick up to show total heroes, clans, settlements, and kingdoms — each number rising like a war tally
- Summary statistics — how many descriptions you've written, how many tags you've applied, how many journal entries chronicle your deeds
- Live Chronicle — a scrolling feed of game events happening right now. Wars declared, battles won, heroes captured, children born — every event categorized with color-coded icons (war in red, family in rose, politics in steel blue, crime in amber)
- Quick navigation to any section of the encyclopedia
A grid of hero cards, each showing:
- Game-extracted portraits or hand-crafted culture-specific artwork (12 cultures represented: Empire, Aserai, Battania, Khuzait, Sturgia, Vlandia, Nord, and more)
- Occupation badges — Lord, Wanderer, Companion, Gang Leader, Merchant, each with distinct styling
- Culture color accents — a warm strip at the top of each card matching their faction
- Deceased indicators — faded cards with skull badges for the fallen
- Smart filtering — filter by Alive, Dead, Noble, Companion, or any specific culture
Click any hero and the detail view unfolds:
- Parallax portrait with gold metallic frame
- Traits and skills in a compact sidebar with icon tiles
- Info stats — age, culture, kingdom, clan, occupation, all in forged gold cells
- Lore section — five rich text fields (Backstory, Personality, Goals, Relationships, Rumors) styled like manuscript pages with aged parchment texture
- Relation Notes — card-based notes for each friend and enemy, with portraits and edit buttons
- Friends & Enemies — portrait grids with metallic intensity bars showing relationship strength, color-coded green/red
- Family — linked family members with relationship labels (Spouse, Mother, Father, Sibling, Child)
- Timeline — chronological events from the game's chronicle, staggered entrance animations
- LIVE badge — a pulsing green dot confirming the view auto-syncs with the game every few seconds
Each clan card displays:
- Shield-shaped banner rendered from the game's actual banner code, framed in gold gradient with drop shadows
- Tier badges with embossed gold seal styling
- War ember glow — cards pulse with a red ember animation when the clan is at war
- Member counts, strength, renown — key stats at a glance
Clan detail views show members, territory (towns, castles, villages), wars, leader info, and kingdom affiliation — all with edit capabilities.
Settlement cards show:
- Type badges — Town (gold crown), Castle (stone tower), Village (green field)
- Metallic prosperity bars with a forged metal sheen effect
- Owner clan and kingdom affiliation
- Governor information
Detail views reveal prosperity, loyalty, security, food stocks, garrison, militia, workshops, bound villages, and notables.
The kingdoms page features:
- Featured Kingdom Cards — expanded cards for major kingdoms with shield-framed banners, diplomacy shield grids showing ally/enemy relations, and inline culture/strength stats
- War Board — a dedicated section showing active wars between kingdoms, with paired cards and shared-enemy analysis
- Peace Board — peaceful relations mapped out with alliance indicators
- Culture filters — filter kingdoms by culture with count badges
Kingdom detail views include clan lists, fief inventories, military strength gauges, and full diplomatic status.
A full-page timeline of every notable event in your campaign:
- Category filters — War, Family, Politics, Crime, Economy, Military, General — each with a unique icon and color
- Search — find events by keyword
- Color-coded entries — instantly distinguish war declarations from weddings from crimes
- Entity linking — hero, clan, kingdom, and settlement names are clickable links that navigate to their detail pages
- Real-time updates — new events appear automatically without page refresh
Every detail view includes a full suite of editing tools. All changes sync instantly with the game's Editable Encyclopedia mod — what you write in the browser appears in the in-game encyclopedia, and vice versa.
| Action | Description |
|---|---|
| Edit Name & Title | Rename any hero. Give them a title like "The Unbroken" or "Shield of the North" |
| Edit Description | Write a custom biography that replaces the game-generated text |
| Edit Lore | Five rich fields: Backstory, Personality, Goals, Relationships, Rumors |
| Change Culture | Reassign a hero to any culture — or type a custom one |
| Change Occupation | Lord, Wanderer, Merchant, Gang Leader, Artisan, Preacher, and more |
| Edit Tags | Comma-separated tags for organization and filtering |
| Relation Notes | Write notes about relationships with specific friends/enemies |
| Action | Description |
|---|---|
| Edit Name | Rename clans, kingdoms, and settlements |
| Edit Description | Custom descriptions and lore |
| Edit Banner | Paste a banner code to change the clan/kingdom sigil |
| Edit Tags | Organizational tags |
| Add Journal | Timestamped journal entries — your personal chronicle for any entity |
The entire interface is built on a custom design system inspired by dark medieval manuscripts, Nordic forge-work, and Bannerlord's own visual language.
- Void Black backgrounds (
#0a0908) with warm leather panel gradients - Polished Gold accents (
#d8b35f) — borders, values, highlights, interactive elements - Parchment text (
#e2d4b5) on dark surfaces — readable, warm, immersive - Cinzel serif font — ornamental headings that feel carved in stone
- Georgia body text — classical manuscript readability
- Ember particles — floating fire motes drift across the screen
- Gold spark trail — your cursor leaves a trail of golden sparks
- Shimmer sweep — buttons and nav items shimmer with a diagonal light sweep on hover
- Gold glow pulse — cards and counters breathe with a slow ambient gold glow
- Scroll-reveal — sections and cards animate into view as you scroll down
- War ember — cards for entities at war pulse with a red ember border
- Seal rotation — decorative Norse elements rotate slowly in the footer
- Viking Cards — dark leather gradient backgrounds, 2px gold borders, inset atmospheric shadows, hover lift with gold glow
- Shield Frames —
clip-path: polygon()shield shapes with gold gradient borders for banners - Gold Dividers — gradient lines with centered ornament symbols
- Gauge Circles — SVG gauges with animated stroke-draw and pulsing glow
- Forged Buttons — dark leather with Cinzel uppercase text, shimmer sweep on hover
- Status Badges — war (red), peace (green), neutral (muted) with matching backgrounds
When you open a detail view, a LIVE badge appears in the corner. Every 8 seconds (configurable), the view silently re-fetches data from the running game and updates:
- Stats change — a hero gains a level, a settlement's prosperity rises, a kingdom's strength shifts
- Timeline grows — a new battle, a marriage, a betrayal appears in the chronicle
- Friends become enemies — diplomacy shifts reflected in real-time
- Names update — if you edit a name in-game, the web reflects it within seconds
You can watch the world evolve while you play. Open the web on a second monitor, or on your phone propped up next to your screen, and see the Living Archive update as events unfold.
A persistent stats bar at the top of every page showing your player character's live data:
- Gold — your current denars, updating in real-time
- Influence — political power
- Health — current HP
- Troops — party size
- Morale — army spirit
- Speed — party movement speed
Each stat has its own color (Gold=#e8c848, Health=#e08080, Influence=#80a0d0) and animates when values change.
All settings live in the Editable Encyclopedia MCM menu under 9. Extensions / EEWebExtension.
| Setting | Default | What It Does |
|---|---|---|
| Enable Web Extension | ON | Master toggle for the web server |
| Web Server Port | 8080 | Change if port 8080 is taken |
| Auto-Open Browser | OFF | Launches your browser when you load a campaign |
| Allow External Access | OFF | Open the server to your local network — browse on your phone |
| Enable Editing from Web | ON | Set to OFF for read-only mode (safe for streaming) |
| Enable Portrait Extraction | ON | Extract hero face renders from the game engine |
| Setting | Default | What It Does |
|---|---|---|
| Live Sync on Detail Views | ON | Auto-refresh detail pages with game data |
| Live Sync Interval | 8 seconds | How often to poll (2-60s range) |
| Live Chronicle Updates | ON | Push new events to the home page feed |
| Setting | Default | What It Does |
|---|---|---|
| Show HUD Stats | ON | Player stats bar at the top |
| Show Intro Screen | ON | The cinematic Viking intro animation |
| Show Ember Particles | ON | Floating fire motes (disable for performance) |
| Show Gold Spark Trail | ON | Cursor spark effect (disable for performance) |
| Enable Sound Effects | ON | Subtle UI sounds on hover and click |
| Enable Scroll Animations | ON | Cards animate into view on scroll |
| Cards Per Page | 60 | How many cards per list page (20-200) |
| Button | What It Does |
|---|---|
| Open Web Encyclopedia | Launches http://127.0.0.1:8080/ in your default browser |
The web server exposes 60+ REST endpoints covering every editing capability of the Editable Encyclopedia mod. All responses are JSON. The API runs at http://127.0.0.1:8080/api/.
Core Data (10 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/status |
Server health check + game metadata |
| GET | /api/heroes |
All heroes (name, culture, clan, kingdom, age, occupation, portrait) |
| GET | /api/hero/{id} |
Full hero detail (stats, traits, skills, friends, enemies, family, lore, timeline) |
| GET | /api/clans |
All clans (name, culture, tier, strength, members, wars, banner) |
| GET | /api/clan/{id} |
Clan detail (leader, members, territory, kingdom, wars) |
| GET | /api/kingdoms |
All kingdoms (name, ruler, clans, fiefs, strength, diplomacy) |
| GET | /api/kingdom/{id} |
Kingdom detail (leader, clans, fiefs, wars, troop counts) |
| GET | /api/settlements |
All settlements (name, type, culture, owner, prosperity, garrison) |
| GET | /api/settlement/{id} |
Settlement detail (all stats, workshops, notables, bound villages) |
| GET | /api/chronicle |
All chronicle events (entity, date, text) |
Descriptions (4 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/entity/{id}/description |
Get custom description |
| PUT | /api/entity/{id}/description |
Set custom description |
| GET | /api/descriptions |
All descriptions |
| GET | /api/descriptions/count |
Total count |
Names, Titles & Banners (4 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/entity/{id}/name |
Get custom name & title |
| PUT | /api/entity/{id}/name |
Set name and/or title |
| GET | /api/entity/{id}/banner |
Get custom banner code |
| PUT | /api/entity/{id}/banner |
Set banner code |
Cultures & Occupations (6 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/hero/{id}/culture |
Get hero culture |
| PUT | /api/hero/{id}/culture |
Set hero culture |
| GET | /api/hero/{id}/occupation |
Get hero occupation |
| PUT | /api/hero/{id}/occupation |
Set hero occupation |
| GET | /api/cultures |
All custom culture assignments |
| GET | /api/occupations |
All custom occupation assignments |
Lore Fields (3 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/hero/{id}/lore |
All lore fields for a hero |
| GET | /api/hero/{id}/field/{key} |
Get one lore field |
| PUT | /api/hero/{id}/field/{key} |
Set lore field (backstory, personality, goals, relationships, rumors) |
Tags (12 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/entity/{id}/tags |
Get entity tags |
| PUT | /api/entity/{id}/tags |
Set entity tags |
| GET | /api/tags |
All tags |
| GET | /api/tags/unique |
All unique tag names |
| GET | /api/tags/usage |
Tag usage counts |
| GET | /api/tags/objects/{tag} |
Entities with specific tag |
| POST | /api/tags/rename |
Rename tag globally |
| POST | /api/tags/remove |
Remove tag globally |
| POST | /api/tags/merge |
Merge two tags into one |
| POST | /api/tags/add-bulk |
Add tag to multiple entities |
| POST | /api/tags/remove-bulk |
Remove tag from multiple entities |
| POST | /api/tags/clear-all |
Nuclear option: clear all tags |
Tag Categories, Presets & Notes (10 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tag-categories |
All categories |
| PUT | /api/tag-category/{name} |
Create/update category |
| DELETE | /api/tag-category/{name} |
Delete category |
| GET | /api/tag-presets |
All presets |
| PUT | /api/tag-preset/{name} |
Create/update preset |
| DELETE | /api/tag-preset/{name} |
Delete preset |
| POST | /api/tag-preset/{name}/apply |
Apply preset to entity |
| GET | /api/tag-note/{objectId}/{tag} |
Get tag note |
| PUT | /api/tag-note/{objectId}/{tag} |
Set tag note |
| GET | /api/tag-notes/{objectId} |
All tag notes for entity |
Journal (5 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/entity/{id}/journal |
Get journal entries |
| POST | /api/entity/{id}/journal |
Add new entry |
| PUT | /api/entity/{id}/journal |
Edit entry by index |
| DELETE | /api/entity/{id}/journal/{index} |
Delete entry by index |
| DELETE | /api/entity/{id}/journal |
Clear all entries |
Relation Notes, History & Tags (8 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/relation-note/{heroId}/{targetId} |
Get relation note |
| PUT | /api/relation-note/{heroId}/{targetId} |
Set relation note |
| GET | /api/relation-notes |
All relation notes |
| GET | /api/relation-notes/count |
Total count |
| GET | /api/relation-history/{heroId}/{targetId} |
Relation change history |
| GET | /api/relation-history-for/{targetId} |
All history for a hero |
| GET | /api/relation-note-tag/{heroId}/{targetId} |
Get auto-tag + suggestion |
| PUT | /api/relation-note-tag/{heroId}/{targetId} |
Set tag and/or lock |
Auto-Tag Thresholds (4 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/auto-tag-threshold/{heroId} |
Get per-hero thresholds |
| PUT | /api/auto-tag-threshold/{heroId} |
Set enemy/friend thresholds |
| GET | /api/auto-tag-thresholds |
All thresholds |
| GET | /api/auto-tags/{objectId} |
Get auto-generated tags |
Custom Cultures & Lore Templates (7 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/culture-definitions |
All custom culture definitions |
| PUT | /api/culture-definition/{id} |
Create/update culture definition |
| DELETE | /api/culture-definition/{id} |
Delete culture definition |
| GET | /api/lore-templates/roles |
Available template roles |
| GET | /api/lore-templates/keys |
Available field keys |
| GET | /api/lore-template/{fieldKey}/{heroId} |
Get resolved lore template |
| GET | /api/lore-templates/role/{role} |
All templates for a role |
Import / Export (9 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/export |
Export everything to shared JSON |
| POST | /api/import |
Import from shared JSON |
| POST | /api/import-detailed |
Import with per-section breakdown |
| POST | /api/export/heroes |
Export hero descriptions |
| POST | /api/export/clans |
Export clan descriptions |
| POST | /api/export/kingdoms |
Export kingdom descriptions |
| POST | /api/export/settlements |
Export settlement descriptions |
| POST | /api/export/banners |
Export banner codes |
| POST | /api/import/banners |
Import banners only |
Portraits, Banners & Utilities (12 endpoints)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/portraits |
List custom + extracted portraits |
| POST | /api/hero/{id}/portrait |
Upload custom portrait PNG |
| GET | /api/hero/{id}/portrait |
Check if portrait exists |
| POST | /api/extract-portraits |
Extract all game portraits |
| GET | /api/banners |
List exported banner PNGs |
| GET | /api/statistics |
Basic stats |
| GET | /api/statistics/detailed |
20+ detailed stat fields |
| GET | /api/entity/{id}/timestamp |
Last edit timestamp |
| GET | /api/shared-file-path |
Shared file location |
| POST | /api/purge-orphans |
Clean up deleted hero data |
| POST | /api/reset-all |
Reset all descriptions |
| GET | /api/web-settings |
MCM settings for the web |
- Install Editable Encyclopedia if you haven't already
- Copy the
EEWebExtension/folder into:Steam/steamapps/common/Mount & Blade II Bannerlord/Modules/ - In the Bannerlord launcher, enable EEWebExtension (make sure it loads after EditableEncyclopedia)
- Launch a campaign (new or saved)
- Open your browser to http://127.0.0.1:8080/
- The Living Archive awaits
- In MCM settings, enable Allow External Access under 9. Extensions / EEWebExtension / Web Server
- Find your PC's local IP (run
ipconfigin Command Prompt, look for IPv4 Address) - On your phone/tablet, open
http://YOUR_PC_IP:8080/ - Browse the encyclopedia from the couch while the game runs
- Mount & Blade II: Bannerlord v1.2.x or v1.3.x
- Editable Encyclopedia mod (loaded before EEWebExtension)
- Native, SandBoxCore, Sandbox, StoryMode (base game modules)
- Bannerlord.Harmony v2.4.2.225+
EEWebExtension/
SubModule.xml Module manifest & load order
README.md This file
bin/
Win64_Shipping_Client/
EEWebExtension.dll C# server, API routes, banner/portrait export
Web/
index.html SPA shell (nav, modals, intro overlay, HUD)
css/
style.css Viking design system (~4000 lines)
js/
app.js Application logic (~4800 lines)
api.js REST API client (60+ methods)
bg.png Cinematic Viking longhouse background
bannerlord_hero.png Hero page banner
bannerlord_clan.png Clan page banner
bannerlord_settlement.png Settlement page banner
bannerlord_kingdoms.png Kingdom page banner
bannerlord_chronicle.png Chronicle page banner
logo.jpg Nav bar brand logo
Hero/
bannerlord_hero_viking.png Fallback portrait (Viking warrior)
Potraits/ Culture portrait packs
Aserai/ Desert warriors
Battania/ Forest clans
Khuzait/ Steppe riders
Nord/ Norse Vikings
Northern_Empire/ Roman-inspired
Southern_Empire/ Byzantine-inspired
Western_Empire/ Late Roman
Mixed Empire/ Cross-culture
Sturgia/ Slavic warriors
Vlandia/ Feudal knights
Settlement/
Town.png Town type image
Castle.png Castle type image
Village.png Village type image
Skills/ 18 skill icons (Athletics, Bow, etc.)
Traits/ Trait icons (Valor, Honor, etc.)
Perks/ Perk icons
BannerIcons/ Banner icon sprites for rendering
Banners/ (runtime) Exported banner PNGs
Portraits/ (runtime) Extracted game portrait PNGs
.design/
DESIGN.md Visual design system documentation
EEWebExtensionEntry.cs—MBSubModuleBaseentry point. Starts the web server onOnGameStart, registersWebExportBehavioras a campaign behavior, processes main-thread queue onOnApplicationTickEncyclopediaWebServer.cs—HttpListener-based REST server on a background thread. Handles static file serving, API routing (60+ endpoints), portrait extraction via game engine reflection, banner PNG rendering, and color palette extraction fromBannerManagerWebExportBehavior— Campaign behavior that detects when the player reaches the campaign map (viaScreenManager.TopScreenreflection) before starting banner/portrait export. Prevents export during character creation
- No frameworks, no build step, no npm — pure HTML/CSS/JS served as static files
app.js(~4800 lines) — SPA router, page renderers, detail views, edit modals, live sync polling, visual effects (particles, sparks, scroll reveals, parallax), sound systemapi.js— Typed API client wrapping all 60+ REST endpoints withfetch()style.css(~4000 lines) — Complete Viking design system with CSS custom properties, animations, responsive layout
Game (C#) Web Server (C#) Browser (JS)
Hero.Name ──────────> GET /api/heroes ─────────> Store.heroes[]
EditBehavior ────────> GET /api/hero/{id} ──────> openDetail()
SetCustomName() <───── PUT /api/entity/{id}/name <── editName()
Banner.Serialize() ──> ExportBanners() ─────────> <img src="Banners/id.png">
ThumbnailCreator ────> ExtractPortraits() ──────> <img src="Portraits/id.png">
- Custom data merging — All list/detail API responses merge custom names, titles, cultures, and banners from
EncyclopediaEditBehavior.Instanceso the web always shows the latest custom values - MapScreen detection — Banner export only starts when
ScreenManager.TopScreen.GetType().Name.Contains("MapScreen")— prevents export during character creation or menus - Live sync —
setIntervalpolling (not WebSocket) because the game server doesn't support push notifications. TheisSyncflag onopenDetail()suppresses loading spinners and preserves scroll position - Banner rendering — Server-side PNG generation using
System.Drawing.Bitmap. Parses banner codes, composites background mesh + icon layers with correct colors fromBannerManager.GetColor() - Portrait color correction — Game renders portraits in linear color space; the server applies sRGB gamma correction on-the-fly when serving portrait PNGs
Initial Release
- Full single-page application with 6 main pages (Home, Heroes, Clans, Settlements, Kingdoms, Chronicle)
- Viking/medieval dark theme with 62 color tokens, 4 font tiers, 12+ animation types
- Cinematic intro sequence with Norse rune circles, forged gold titles, and shimmer loading bar
- Responsive layout supporting desktop and mobile browsers
- Scroll-reveal animations, parallax effects, ember particles, gold spark cursor trail
- Subtle UI sound effects on hover, click, and navigation
- Animated stat counters (heroes, clans, settlements, kingdoms)
- Live Chronicle feed with real-time event updates
- Summary statistics panel with description/tag/journal counts
- Viking-styled panels with gold ornamental dividers
- Hero cards with game-extracted portraits, occupation badges, culture colors, deceased indicators
- Clan cards with shield-shaped banner frames, tier badges, war ember glow animations
- Settlement cards with type badges (Town/Castle/Village), prosperity bars
- Kingdom featured cards with diplomacy shield grids, war/peace boards
- Smart filtering by status, culture, type, and diplomacy
- Pagination with configurable cards-per-page
- 4 full detail views: Hero, Clan, Settlement, Kingdom
- 3-column layout with left rail (portrait/stats), main content, and right rail (journal)
- Live sync (LIVE badge) — auto-refresh every 8 seconds with game data
- Relation notes section with portrait cards and inline editing
- Friends/Enemies grids with metallic intensity bars
- Family section with relationship type labels and icons
- Lore section with manuscript texture and first-letter styling
- Timeline with staggered entrance animations
- Info stats in forged gold cells with tooltips
- Edit Name & Title (heroes get both, others get name only)
- Edit Description with textarea modal
- Edit Lore — 5 fields: Backstory, Personality, Goals, Relationships, Rumors
- Change Culture — dropdown from game cultures + custom input
- Change Occupation — dropdown of Bannerlord occupation types
- Edit Banner — paste banner code for clans/kingdoms/settlements
- Edit Tags — comma-separated with autocomplete suggestions
- Add Journal Entries — timestamped personal notes
- Relation Notes — per-friend/enemy notes with edit button on each card
- All edits sync instantly with the in-game Editable Encyclopedia
- 60+ REST endpoints covering every capability of the Editable Encyclopedia mod
- Core entity data (heroes, clans, kingdoms, settlements, chronicle)
- Full CRUD for descriptions, names, titles, banners, cultures, occupations
- Lore field read/write with template support
- Complete tag system (CRUD, bulk ops, rename, merge, categories, presets, notes)
- Journal management (add, edit by index, delete by index, clear)
- Relation notes and relation history
- Relation note tags with auto-suggestion and locking
- Auto-tag thresholds (per-hero customizable)
- Custom culture definitions
- Import/export (full and per-section)
- Portrait upload and game portrait extraction
- Banner PNG export from banner codes
- Detailed statistics (20+ fields)
- Web settings endpoint (reads MCM configuration)
- C# HttpListener on configurable port (default 8080)
- MCM integration — 17 configurable settings under 9. Extensions/EEWebExtension
- Enable/disable from MCM, configurable port, external access toggle
- Auto-open browser option
- Read-only mode toggle
- Banner export waits for MapScreen (no export during character creation)
- Old banners and portraits cleared on new session/save load
- Portrait color correction (linear to sRGB gamma)
- CORS headers for local development
- Persistent stats bar showing Gold, Influence, Health, Troops, Morale, Speed
- Per-stat colors with animated value changes
- 5-second auto-refresh
- Scroll-reveal via IntersectionObserver (no scroll listeners)
- MutationObserver for dynamic content re-initialization
- Lazy image loading on card grids
- Background thread for banner/portrait export
- Configurable sync interval to balance responsiveness vs CPU
XMuPb
- Discord: discord.com/users/404393620897136640
"The ink of the scholar is more sacred than the blood of the martyr."
— In the halls of Calradia, both flow freely.