Whiterun dashboard: map assets, coordinates, telemetry, licensing¶
Two independently-researched reports on the same question, plus a third
compass report and one single-agent session pass, merged into one filed
reference. License claims in the third report that disagreed with the
first were verified directly against GitHub/crates.io on 2026-08-22 (see
Disagreements below). The question originated from the dashboard slice
(dashboard/README.md, rule 13 / ADR-0007 inspectability): a 2D Whiterun
map for debugging the social simulation, distributable as a mod without
DMCA/takedown exposure.
Findings¶
- [BUILD-ON, decisive] No permissively-licensed Whiterun map exists — the correct backdrop is one you generate. Systematic search found no usable vector/SVG city plan; every ready-made raster (GameMapScout, DeviantArt fan maps, FWMF paper-map textures) is all-rights-reserved or CC BY-NC-ND. The documented, lowest-risk path is the Creation Kit's
World -> Create Local Mapsexport over theWhiterunWorldcells (this is how UESP makes its city maps), rotated per the cell's NorthMarker (REFR0x00000003, Z-rotation = last of six DATA floats, radians CCW) — full recipe published in UESPWiki:Skyrim Map Design. Output is Bethesda-derived: fine for internal tooling and standard modding practice, not for publicly redistributing rendered city art. An even cleaner distribution story: generate the map from the user's ownSkyrim.esmat install time (parse geometry with xEdit/Mutagen) so Chronicle ships no game assets at all. - [BUILD-ON, decisive] Whiterun is its own worldspace, not part of Tamriel.
WhiterunWorld(FormID0x0001A26F) holds the walled city; interiors (Dragonsreach, Bannered Mare, …) are detached interior cells with purely local coordinates. Province-scale tooling (UESP gamemap, Modmapper) indexes Tamriel only and cannot see inside the city. The dashboard therefore needs per-worldspace/per-cell layers, and coordinate projection must be cell-local (4096 units per cell; xEdit exposes this aswbPositionToGridCell). This structural fact constrains every tool choice below. - [BUILD-ON] Coordinate extraction stack, zero reinvention:
thallada/skyrim-cell-dump(Rust CLI → JSON of every CELL's grid coords, worldspace FormID, persistent flag — filterworld_form_id = 0x1A26Ffor WhiterunWorld's cell bounds, which are not published anywhere) for the coarse grid; Mutagen or a ~30-line xEdit Pascal script (pattern after the documented NPC export sample or the officialKeyword Search - Reference Names.pas/List References.pas) for REFR-level positions of doors/buildings/NPC spawn markers; the Info NPC Extractor xEdit script (Nexus 159144, written for Mantella/CHIM/SkyrimNet workflows) for NPC identity/schedule metadata. NPC schedule targets live in AI PACK records pointing at locations/markers, not fixed coordinates — extracting them is the same xEdit pass, and is needed for any schedule-aware overlay. Open Cities Skyrim's ESP is a machine-readable WhiterunWorld↔Tamriel mapping if ever needed, but inherits Arthmoor's restrictive permissions. - [BUILD-ON] Coordinate math, from primary CK/UESP sources (compass report): 1 exterior cell = 4096×4096 game units (~70 units/m);
cellX = floor(gameX / 4096); cell center =cellX*4096 + 2048. Skyrim maps game units linearly to map coordinates (no Oblivion-style 241/256 crop correction), so a two-point affine fit (uniform scale + offset) is exact — UESP's own transform constants (posLeft/posTop/…) are server-side and unpublished, so calibrate our own. Published calibration anchors: Whiterun exterior in Tamriel ≈ cell (4, −4) → center ≈ (18432, −14336); Riverwood map marker at (21941, −44792). WhiterunWorld's FormID0x0001A26Fis independently corroborated by the USSEP changelog alongside the other city worldspaces. - [BUILD-ON] Live telemetry channel: in-process SKSE plugin + local WebSocket is the proven, best-fit pattern. Session research (single source — verify) found andreyvelsk/SkyrimWebSocket (MIT, CommonLibSSE-NG, compatible with the 1.6.1170 pin): a WebSocket server inside the game streaming JSON world state at up to 50 ms, already exposing player position and quest-target NPC positions resolved to cell-local coords; its companion SkyrimWebMonitor (Vue PWA) demonstrates the second-screen live-map pattern. A bulk "nearby actors" stream is a small, well-trodden CommonLibSSE-NG extension (
RE::ProcessLists; SeverActions' position snapshots show the pattern). This is consistent with report 11's bridge survey (game-as-server, à la SkyrimNet's localhost:8080 UI) and extends it: report 11 said "no widely-adopted, currently-maintained general-purpose WebSocket plugin exists" — SkyrimWebSocket (new, active 2026, MIT) is the closest thing yet and is directly forkable. - [RISK, disagreement flagged] The Gemini report's telemetry recommendation (pymem memory-reading, per S1lveric/skyrim-live-tracker) conflicts with project constraints.
pymemis Windows-only process-memory reading; Chronicle's dev target is Linux/Proton, where external memory reading is brittle, and per-build offsets make it the most fragile channel available. It also bypasses the SKSE-plugin infrastructure Chronicle will ship anyway. Reject the memory-reader path; the in-process WS plugin is both the debug channel and a rehearsal for the shipping adapter (ADR-0003's reference implementation). Skyrim Live Tracker remains useful prior art for the frontend (Electron + React + Leaflet, 16K map, interpolated markers, breadcrumb trails). - [BUILD-ON] Frontend prior art is strong and permissive where it counts. UESP's gamemap code (uesp/uesp-gamemap) is MIT and deliberately game-agnostic — tile pyramid + live marker layer is a proven template (its ~670k tile images are Bethesda-derived: don't redistribute, self-host own renders; UESP's marker data is CC-BY-SA 2.5 per UESP's licensing page). Modmapper adds client-side WASM plugin parsing (drop your Data folder on the page). Stanford's generative_agents (Smallville) is Apache-2.0 — verified via GitHub API 2026-08-22 and contributes the key design idea for a debug dashboard: time-scrubbed replay of agent state from JSON snapshots — rumor/belief debugging is a temporal-diff problem, not just a spatial one. The successor repo StanfordHCI/genagents is MIT — verified 2026-08-22 (the compass report's claim checked out). Altera's Project Sid (1000+ Minecraft agents with emergent religion/meme spread) is the best reference for belief/rumor-propagation visualization at scale. SkyrimNet's React dashboard and CHIM's per-NPC witnessed-event scoping are the nearest neighbors for per-agent belief inspection, but neither has a spatial map view — the gap Chronicle's dashboard fills. One permissive asset found: Hold Capital Symbol Vectors (Nexus 68479) — genuine SVG hold crests with an explicit free-use grant, usable for dashboard chrome (not maps).
- [DESIGN-INPUT] The dashboard should be dual-source. Since v0.1 is headless, the same 2D map UI can render the Python sim's fixture cast over the Whiterun backdrop today (no game required) and later subscribe to the SKSE WebSocket stream for ground-truth NPC positions — one tool serving both the rule-13 inspectability requirement and the game-side debugging need.
- [RISK] Licensing traps catalogued (main report's §4 is authoritative): GameMapScout's Whiterun map appears to be Prima guide art (✖); Mirhayasu's DeviantArt map is CC BY-NC-ND — the ND clause blocks even internal adaptation (✖); MapGenie and similar interactive-map sites are proprietary (✖); modmapper(-web), esper, SkyrimNet-GamePlugin lack LICENSE files (⚠ internal use OK in practice, no vendoring/redistribution); Nexus-hosted assets (AIO City Paper Maps, A Quality World Map, FWMF, Info NPC Extractor, tracking mods) default to author-reserved permissions (⚠ check each Permissions tab). Safe to build on: uesp-gamemap code (MIT), skyrim-cell-dump (MIT — see resolved disagreement), generative_agents (Apache-2.0) / genagents (MIT), own xEdit/CK outputs from a licensed game copy, UESP/Fandom CC BY-SA text/icons and UESP marker data (CC-BY-SA 2.5) with attribution, Hold Capital SVGs (free use). Process warning from Modmapper's author: bulk-downloading Nexus mods violates Nexus ToS — adapt his parsers, don't replay his scrape. Beware AI-generated aggregator repos in the SkyrimNet ecosystem — prefer canonical upstreams.
Disagreements between sources (resolved)¶
- skyrim-cell-dump license — RESOLVED by direct verification (2026-08-22). The first report said "no LICENSE file, all rights reserved"; the compass report said "MIT, verified in Cargo.toml and crates.io." Verified directly:
license = "MIT"inCargo.toml(v0.4.2) and on crates.io. No LICENSE file exists, but a manifest license declaration is an actual license grant in the Rust ecosystem — treat skyrim-cell-dump as MIT, safe to build on (vendoring the source still deserves an issue/PR upstream offering to add a LICENSE file). The first report's caution applies unchanged to modmapper/modmapper-web/esper, which genuinely have no license anywhere. - UESP tiles: the Gemini report describes them as "hosted publicly for fan-tool use"; the main report flags them as Bethesda-derived, not openly licensed. Adopt the conservative reading: self-host own tiles/renders.
Flagged uncertainties¶
- SkyrimWebSocket (andreyvelsk) was found in a single session pass, not independently verified: MIT license claim, build quality, and 1.6.1170 compatibility should be confirmed directly against the repo before building on it. It is new (2026) and small — bus-factor caveats from report 10 apply in miniature, mitigated by the MIT license making it forkable.
- Whether the CK "Create Local Maps" pipeline is usable in this dev environment is untested — the Creation Kit (Steam app 1946180) on Linux/Proton is a known-awkward combination; the xEdit/Mutagen geometric-generation fallback avoids the CK entirely if needed.
- NorthMarker-based rotation and per-cell export quirks (varying resolution, occasional missing sections) come from UESP's documentation, not from our own run of the pipeline — expect a calibration pass against known door coordinates before trusting pixel alignment.
Consequences for the dashboard slice¶
Suggested build order, consistent with both reports and project constraints:
- Backdrop: CK local-maps render of
WhiterunWorld(or esm-geometry generation) → single PNG + affine calibration against known REFR coordinates. Internal-only asset; the distributable artifact is the generator, not the image. - Static data: skyrim-cell-dump + one xEdit script → JSON manifest of cells, doors, buildings, spawn markers (+ PACK-derived schedule targets when needed).
- UI: Leaflet-style viewer (uesp-gamemap architecture or code, MIT) with layers per worldspace/cell; Smallville-style time scrub over sim state. Headless-sim data source first, live SKSE WebSocket source later — same marker layer, two feeds.
- Live layer (v0.2+): fork/extend SkyrimWebSocket (pending verification) with a nearby-actors field; do not pursue memory-reading.