Not in the top 1,000 by GitHub stars
hopechen067/MapStage
MapStage: a narrative map stage for historical videos. MapLibre engine + agent skill, antique parchment look, routes, place names, seek(t) frame capture.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
mapstage/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
de55c81d1aa3 → de55c81d1aa3
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → de55c81d1aa3
No earlier version was observed for comparison.
Verified commit de55c81d1aa3f2ada429a1c3d5eb920a74e4c36a
git clone --filter=blob:none --no-checkout https://github.com/hopechen067/MapStage.git .hotskills/hopechen067-mapstage && git -C .hotskills/hopechen067-mapstage checkout --detach de55c81d1aa3f2ada429a1c3d5eb920a74e4c36a
# Copy each selected skill directory from .hotskills/hopechen067-mapstage into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/hopechen067/MapStage.git .hotskills/hopechen067-mapstage && git -C .hotskills/hopechen067-mapstage checkout --detach de55c81d1aa3f2ada429a1c3d5eb920a74e4c36a
# Copy each selected skill directory from .hotskills/hopechen067-mapstage into .agents/skills/<skill-name>/Heat
7.5- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- mapstage
mapstage
How it works
mapstage
When your agent uses it
MapStage — 历史视频的叙事地图舞台(MapLibre GL JS 5.6)。古卷底图 preset、路线行进、地名三态、按口播自动取景、平台合规(不画省界国界、无雾无暗角、台湾海南南海完整)、seek(t) 逐帧时间契约,供 HyperFrames / Remotion / Playwright 截帧。用户说「/mapstage」「做一段 X 从 A 到 B 的路线移动」「出一张全国定位图」「调古卷底图」「地图镜头」时使用。
What it loads into context
Frontmatter
141 tokensAlways available to the agent
SKILL.md
2,762 tokensWhen the skill is activated
Reference documents
55,229 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 何时用
- 工作流(「/mapstage 做一段 X 从 A 到 B 的路线移动」)
- 硬规则
- 参考
- 校验
Scripts executed separately
install-skill.mjsruntime/benchmark-vector-tuning.mjsruntime/benchmark-vector-tuning.test.mjsruntime/check-hillshade.mjsruntime/compare-vector-screenshots.mjsruntime/diag-rise-btn.mjsruntime/diag-terrain.mjsruntime/lib/fingerprint.mjsruntime/lib/pw.mjsruntime/lib/tuner-source.mjsruntime/lib/tuner-ui.mjsruntime/measure-perf.mjsruntime/measure-warm-perf.mjsruntime/qa.mjsruntime/render.mjsruntime/shoot.mjsruntime/site-thumbs.mjsruntime/verify-chips-layout.mjsruntime/verify-fx.mjsruntime/verify-gansu-inlet.mjsruntime/verify-gansu-zhangye.mjsruntime/verify-hillshade.mjsruntime/verify-island-beijing.mjsruntime/verify-island-look.mjsruntime/verify-island-rca.mjsruntime/verify-island-walls.mjsruntime/verify-isolate-chips.mjsruntime/verify-isolate-edge.mjsruntime/verify-isolate-rise.mjsruntime/verify-perf-gating.mjsruntime/verify-preset-guard.mjsruntime/verify-qa.mjsruntime/verify-qilian-terrain.mjsruntime/verify-render.mjsruntime/verify-rise.mjsruntime/verify-shoot.mjsruntime/verify-showcase.mjsruntime/verify-slab-look.mjsruntime/verify-slider-uncapped.mjsruntime/verify-story-hexi.mjsruntime/verify-story-night.mjsruntime/verify-terrain-island.mjsruntime/verify-tile-stack.mjsruntime/verify-tuner-bugs.mjsruntime/verify-tuner-chrome.mjsruntime/verify-tuner-vector.mjsruntime/verify-vector-layers.mjsruntime/verify-vector-overlay.mjssite/assets/md.jssite/assets/md.test.mjssite/assets/site.jssite/assets/stage-kit.jssite/assets/stage-kit.test.mjssite/build.mjssite/examples/examples.jssite/serve.mjstemplates/remotion/MapStageScene.tsxtuner/_serve.test.cjstuner/assets/han-city-3d.jstuner/assets/isolate-skirt-seam.test.mjstuner/assets/isolate-workbench.jstuner/assets/map-fx.jstuner/assets/map-fx.test.mjstuner/assets/mapstage-board.jstuner/assets/mapstage-board.test.mjstuner/assets/mapstage-hosts.jstuner/assets/mapstage-look.test.mjstuner/assets/mapstage-play.jstuner/assets/mapstage-play.test.mjstuner/assets/mapstage-story.jstuner/assets/mapstage-story.test.mjstuner/assets/region-isolate-data.jstuner/assets/region-isolate-data.test.mjstuner/assets/region-isolate.jstuner/assets/region-isolate.test.mjstuner/assets/site-nav.jstuner/assets/terrain-island.jstuner/assets/terrain-island.test.mjstuner/assets/tuner-app.jstuner/assets/tuner-modules.test.mjstuner/assets/tuner-params.jstuner/assets/tuner-shell.jstuner/assets/tuner-util.jstuner/assets/tuner-vector.jstuner/assets/tuner-vector.test.mjstuner/assets/vector-paint.jstuner/map-tiles.config.example.jstuner/map-tiles.config.jstuner/scripts/bake-night-lights.mjstuner/scripts/build-polar-ice.mjstuner/scripts/build-region-isolate.mjstuner/scripts/city-catalog.mjstuner/scripts/fetch-city-catalog.mjstuner/scripts/patch-china-boundaries.mjstuner/scripts/patch-maplibre-terrain-clip.mjstuner/scripts/patch-maritime-islands.mjstuner/scripts/province-catalog.mjstuner/scripts/simplify-landcover-globe.mjstuner/vendor/maplibre-contour.min.jstuner/vendor/maplibre-gl.jstuner/verify.mjs
Files
SKILL.mdcore8,936 bytesSKILL.mdcore8,936 bytesSKILL.mdcore8,936 bytesagents/openai.yamlasset927 bytesinstall-skill.mjsruns2,444 bytesreferences/api-board.mddoc5,166 bytesreferences/api-look.mddoc4,874 bytesreferences/api-story.mddoc11,980 bytesreferences/api.mddoc2,745 bytesreferences/camera.mddoc3,955 bytesreferences/city-tier-schema.mddoc2,291 bytesreferences/compliance.mddoc5,347 bytesreferences/examples-guide.mddoc5,747 bytesreferences/hosts.mddoc9,764 bytesreferences/install.mddoc2,060 bytesreferences/lessons-long-march.mddoc11,474 bytesreferences/look.mddoc10,417 bytesreferences/maplibre-official-gap.mddoc16,870 bytesreferences/maplibre-optimization-and-enablement.mddoc18,059 bytesreferences/overview.mddoc2,843 bytesreferences/play.mddoc7,351 bytesreferences/quickstart.mddoc3,780 bytesreferences/region-isolate.mddoc8,744 bytesreferences/roadmap.mddoc10,050 bytesreferences/runtime-perf.mddoc4,791 bytesreferences/story-spec.mddoc9,617 bytesreferences/tested-config.mddoc4,127 bytesreferences/tuner-workflow.mddoc3,966 bytesreferences/water-overlay.mddoc1,893 bytesreferences/参数列表说明.mddoc5,514 bytesruntime/benchmark-vector-tuning.mjsruns66,033 bytesruntime/benchmark-vector-tuning.test.mjsruns6,193 bytesruntime/check-hillshade.mjsruns3,591 bytesruntime/compare-vector-screenshots.mjsruns17,067 bytesruntime/diag-rise-btn.mjsruns1,930 bytesruntime/diag-terrain.mjsruns3,923 bytesruntime/lib/fingerprint.mjsruns1,357 bytesruntime/lib/pw.mjsruns5,318 bytesruntime/lib/tuner-source.mjsruns1,645 bytesruntime/lib/tuner-ui.mjsruns2,003 bytesruntime/measure-perf.mjsruns5,165 bytesruntime/measure-warm-perf.mjsruns2,294 bytesruntime/qa.mjsruns15,901 bytesruntime/render.mjsruns8,232 bytesruntime/shoot.mjsruns9,495 bytesruntime/site-thumbs.mjsruns5,498 bytesruntime/verify-chips-layout.mjsruns3,269 bytesruntime/verify-fx.mjsruns9,344 bytesruntime/verify-gansu-inlet.mjsruns2,617 bytesruntime/verify-gansu-zhangye.mjsruns5,748 bytesruntime/verify-hillshade.mjsruns2,296 bytesruntime/verify-island-beijing.mjsruns2,694 bytesruntime/verify-island-look.mjsruns2,798 bytesruntime/verify-island-rca.mjsruns10,490 bytesruntime/verify-island-walls.mjsruns4,126 bytesruntime/verify-isolate-chips.mjsruns5,180 bytesruntime/verify-isolate-edge.mjsruns5,169 bytesruntime/verify-isolate-rise.mjsruns4,860 bytesruntime/verify-perf-gating.mjsruns4,632 bytesruntime/verify-preset-guard.mjsruns1,876 bytesruntime/verify-qa.mjsruns7,907 bytesruntime/verify-qilian-terrain.mjsruns4,961 bytesruntime/verify-render.mjsruns2,856 bytesruntime/verify-rise.mjsruns3,481 bytesruntime/verify-shoot.mjsruns4,098 bytesruntime/verify-showcase.mjsruns3,091 bytesruntime/verify-slab-look.mjsruns2,790 bytesruntime/verify-slider-uncapped.mjsruns1,458 bytesruntime/verify-story-hexi.mjsruns2,576 bytesruntime/verify-story-night.mjsruns8,868 bytesruntime/verify-terrain-island.mjsruns7,059 bytesruntime/verify-tile-stack.mjsruns4,126 bytesruntime/verify-tuner-bugs.mjsruns6,980 bytesruntime/verify-tuner-chrome.mjsruns13,101 bytesruntime/verify-tuner-vector.mjsruns4,945 bytesruntime/verify-vector-layers.mjsruns74,693 bytesruntime/verify-vector-overlay.mjsruns18,871 bytesschemas/map-preset.schema.jsonasset9,540 bytesschemas/sample-sites.schema.jsonasset1,547 bytesschemas/story.schema.jsonasset5,996 bytessite/assets/contour.svgasset25,935 bytessite/assets/favicon.svgasset337 bytessite/assets/logo-lockup.svgasset687 bytessite/assets/logo.svgasset396 bytessite/assets/md.jsruns7,731 bytessite/assets/md.test.mjsruns2,478 bytessite/assets/site.cssasset20,297 bytessite/assets/site.jsruns10,981 bytessite/assets/stage-kit.jsruns13,137 bytessite/assets/stage-kit.test.mjsruns2,008 bytessite/build.mjsruns3,839 bytessite/docs/index.htmlasset9,491 bytessite/examples/board-basic.htmlasset3,998 bytessite/examples/board-cities.htmlasset6,691 bytessite/examples/board-hover.htmlasset4,388 bytessite/examples/board-links.htmlasset3,899 bytessite/examples/board-march.htmlasset3,957 bytessite/examples/camera-fit.htmlasset4,396 bytessite/examples/camera-manual.htmlasset4,602 bytessite/examples/camera-push.htmlasset3,806 bytessite/examples/camera-route.htmlasset4,068 bytessite/examples/cards-basic.htmlasset3,683 bytessite/examples/cards-doc-photo.htmlasset4,100 bytessite/examples/cards-table.htmlasset3,443 bytessite/examples/cards-telegram.htmlasset3,259 bytessite/examples/compliance-full.htmlasset3,905 bytessite/examples/compliance.htmlasset2,221 bytessite/examples/examples.jsruns14,747 bytessite/examples/globe.htmlasset2,196 bytessite/examples/index.htmlasset3,364 bytessite/examples/labels-approx.htmlasset3,478 bytessite/examples/labels-tiers.htmlasset2,666 bytessite/examples/labels.htmlasset4,094 bytessite/examples/look-basemap.htmlasset4,296 bytessite/examples/look-basic.htmlasset1,770 bytessite/examples/look-layers.htmlasset2,603 bytessite/examples/look-preset.htmlasset3,109 bytessite/examples/play-sanguo.htmlasset13,852 bytessite/examples/play-sanguo.jsonasset4,210 bytessite/examples/precache.htmlasset4,154 bytessite/examples/route-curve.htmlasset3,655 bytessite/examples/route-hold.htmlasset4,076 bytessite/examples/route-march.htmlasset3,531 bytessite/examples/route-roles.htmlasset4,459 bytessite/examples/route-sides.htmlasset4,780 bytessite/examples/route-slice.htmlasset4,235 bytessite/examples/seek-contract.htmlasset4,571 bytessite/examples/skins.htmlasset3,064 bytessite/examples/stage-check.htmlasset4,570 bytessite/examples/story-hexi.htmlasset5,986 bytessite/examples/story-hexi.jsonasset2,940 bytessite/examples/terrain.htmlasset2,387 bytessite/examples/thumbs/board-basic.jpgasset134,265 bytessite/examples/thumbs/board-cities.jpgasset133,908 bytessite/examples/thumbs/board-hover.jpgasset134,266 bytessite/examples/thumbs/board-links.jpgasset135,235 bytessite/examples/thumbs/board-march.jpgasset133,691 bytessite/examples/thumbs/camera-fit.jpgasset104,330 bytessite/examples/thumbs/camera-manual.jpgasset143,994 bytessite/examples/thumbs/camera-push.jpgasset182,486 bytessite/examples/thumbs/camera-route.jpgasset94,473 bytessite/examples/thumbs/cards-basic.jpgasset106,458 bytessite/examples/thumbs/cards-doc-photo.jpgasset100,429 bytessite/examples/thumbs/cards-table.jpgasset102,050 bytessite/examples/thumbs/cards-telegram.jpgasset101,657 bytessite/examples/thumbs/compliance-full.jpgasset76,783 bytessite/examples/thumbs/compliance.jpgasset75,578 bytessite/examples/thumbs/globe.jpgasset32,163 bytessite/examples/thumbs/labels-approx.jpgasset37,007 bytessite/examples/thumbs/labels-tiers.jpgasset94,696 bytessite/examples/thumbs/labels.jpgasset103,996 bytessite/examples/thumbs/look-basemap.jpgasset127,767 bytessite/examples/thumbs/look-basic.jpgasset118,566 bytessite/examples/thumbs/look-layers.jpgasset142,800 bytessite/examples/thumbs/look-preset.jpgasset120,241 bytessite/examples/thumbs/play-sanguo.jpgasset140,953 bytessite/examples/thumbs/precache.jpgasset95,329 bytessite/examples/thumbs/route-curve.jpgasset87,333 bytessite/examples/thumbs/route-hold.jpgasset94,825 bytessite/examples/thumbs/route-march.jpgasset107,652 bytessite/examples/thumbs/route-roles.jpgasset92,158 bytessite/examples/thumbs/route-sides.jpgasset92,867 bytessite/examples/thumbs/route-slice.jpgasset82,626 bytessite/examples/thumbs/seek-contract.jpgasset95,420 bytessite/examples/thumbs/skins.jpgasset184,959 bytessite/examples/thumbs/stage-check.jpgasset125,220 bytessite/examples/thumbs/story-hexi.jpgasset105,092 bytessite/examples/thumbs/terrain.jpgasset124,087 bytessite/examples/thumbs/validate.jpgasset104,922 bytessite/examples/validate.htmlasset5,244 bytessite/examples/view.htmlasset6,742 bytessite/host.htmlasset4,435 bytessite/index.htmlasset23,893 bytessite/media/long-march-ep14-demo.mp4asset1,771,036 bytessite/media/long-march-ep14-poster.jpgasset60,211 bytessite/serve.mjsruns2,602 bytestemplates/hyperframes/index.htmlasset2,128 bytestemplates/remotion/MapStageScene.tsxruns4,235 bytestuner/.nojekyllasset0 bytestuner/README.mddoc3,189 bytestuner/_serve.test.cjsruns7,316 bytestuner/assets/han-city-3d.jsruns38,577 bytestuner/assets/isolate-skirt-seam.test.mjsruns56,675 bytestuner/assets/isolate-workbench.jsruns22,191 bytestuner/assets/landcover-globe.geojsonasset1,044,070 bytestuner/assets/landcover-lowzoom.geojsonasset10,633,407 bytestuner/assets/map-fx.jsruns19,143 bytestuner/assets/map-fx.test.mjsruns7,102 bytestuner/assets/mapstage-board.jsruns13,413 bytestuner/assets/mapstage-board.test.mjsruns3,304 bytestuner/assets/mapstage-hosts.jsruns2,279 bytestuner/assets/mapstage-look.test.mjsruns11,432 bytestuner/assets/mapstage-play.jsruns12,515 bytestuner/assets/mapstage-play.test.mjsruns5,726 bytestuner/assets/mapstage-story.jsruns70,853 bytestuner/assets/mapstage-story.test.mjsruns12,272 bytestuner/assets/night-lights.pngasset1,068,562 bytestuner/assets/polar-ice.geojsonasset37,846 bytestuner/assets/region-isolate-data.jsruns2,125,295 bytestuner/assets/region-isolate-data.test.mjsruns6,264 bytestuner/assets/region-isolate.jsruns34,874 bytestuner/assets/region-isolate.test.mjsruns12,505 bytestuner/assets/sample-sites.jsonasset752 bytestuner/assets/site-nav.jsruns2,928 bytestuner/assets/terrain-island.jsruns83,993 bytestuner/assets/terrain-island.test.mjsruns10,485 bytestuner/assets/tuner-app.jsruns89,485 bytestuner/assets/tuner-modules.test.mjsruns8,808 bytestuner/assets/tuner-params.jsruns10,518 bytestuner/assets/tuner-shell.jsruns4,951 bytestuner/assets/tuner-util.jsruns4,660 bytestuner/assets/tuner-vector.jsruns28,656 bytestuner/assets/tuner-vector.test.mjsruns9,107 bytestuner/assets/tuner.cssasset20,778 bytestuner/assets/vector-paint.jsruns49,549 bytestuner/hexi-map-shot.htmlasset11,391 bytestuner/index.htmlasset26,745 bytestuner/map-tiles.config.example.jsruns2,482 bytestuner/map-tiles.config.jsruns1,998 bytestuner/media/hexi-ep07-demo-480p.mp4asset645,045 bytestuner/preset-antique-default.jsonasset1,457 bytestuner/presets/antique-default.jsonasset1,457 bytestuner/scenes.jsonasset2,643 bytestuner/scripts/bake-night-lights.mjsruns10,700 bytestuner/scripts/build-polar-ice.mjsruns4,381 bytestuner/scripts/build-region-isolate.mjsruns16,500 bytestuner/scripts/city-catalog.mjsruns22,791 bytestuner/scripts/fetch-city-catalog.mjsruns4,010 bytestuner/scripts/patch-china-boundaries.mjsruns17,900 bytestuner/scripts/patch-maplibre-terrain-clip.mjsruns90,260 bytestuner/scripts/patch-maritime-islands.mjsruns6,996 bytestuner/scripts/province-catalog.mjsruns3,947 bytestuner/scripts/simplify-landcover-globe.mjsruns11,032 bytestuner/vector-layers.htmlasset45,154 bytestuner/vendor/README.mddoc305 bytestuner/vendor/maplibre-contour.min.jsruns31,196 bytestuner/vendor/maplibre-gl.jsruns2,765,159 bytestuner/verify.mjsruns19,236 bytes
Read SKILL.md
# MapStage · 历史视频的地图舞台
给历史 / 地理 / 战役视频做**可逐帧复现**的地图镜头。三层,各一份规范:
| 层 | 文件 | 规范 |
|---|---|---|
| Look 底图 | `preset.json` v3(调参台导出) | [references/look.md](references/look.md) |
| Story 叙事 | `story.json` v1(地点 / 路线 / 地名节拍 / 镜头 / 字卡) | [references/story-spec.md](references/story-spec.md)、[references/camera.md](references/camera.md) |
| Stage 舞台 | `window.__mapstageSeek(t)` | [references/hosts.md](references/hosts.md) |
官网(文档即本目录 `references/`):https://hopechen067.github.io/MapStage/
## 何时用
View the complete source on GitHubSkills included
- mapstage
Repository facts
- License
- MIT
- Created
- Aug 11, 2026
- Last pushed
- Oct 25, 2026
- Forks
- 73
- Open issues
- 1
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 14 notes
mapstage/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedmapstage/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedmapstage/site/assets/contour.svg:1Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/assets/landcover-globe.geojson:1Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/assets/landcover-lowzoom.geojson:1Analysis incomplete: Blob exceeds size or total-read limit; file skippedmapstage/tuner/assets/polar-ice.geojson:1Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/assets/region-isolate-data.js:1Analysis incomplete: file exceeds text byte budgetmapstage/tuner/assets/region-isolate-data.js:2Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/scripts/city-catalog.mjs:8Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/scripts/city-catalog.mjs:6Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/vendor/maplibre-contour.min.js:15Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/vendor/maplibre-contour.min.js:13Analysis incomplete: physical or joined line exceeds character limitmapstage/tuner/vendor/maplibre-gl.js:1Analysis incomplete: file exceeds text byte budgetmapstage/tuner/vendor/maplibre-gl.js:10492Analysis incomplete: regex work limit reached
- No broad tool permissions
- No dangerous shell commands
- 627 network referencesin 131 files: mapstage/tuner/vendor/maplibre-gl.js:3 mapstage/tuner/assets/vector-paint.js:17 mapstage/tuner/map-tiles.config.js:10 and 128 more
- 13 obfuscation signalsin 4 files: mapstage/tuner/scripts/patch-maplibre-terrain-clip.mjs:139 mapstage/tuner/vendor/maplibre-contour.min.js:1 mapstage/tuner/scripts/city-catalog.mjs:8 and 1 more
- No instruction overrides
- 101 executable scriptsin 101 files: mapstage/install-skill.mjs:1 mapstage/runtime/benchmark-vector-tuning.mjs:1 mapstage/runtime/benchmark-vector-tuning.test.mjs:1 and 98 more
- No access to secrets
- No requests to vote in Hot
Show all 741 signals by file
mapstage/SKILL.md
- Network accessline 16
官网(文档即本目录 `references/`):https://hopechen067.github.io/MapStage/ - Network accessline 90
在 `tuner/` 下 `node verify.mjs`,末尾应为 `verify ok`(必需文件、单测、UTF-8 / 内联脚本解析)。官网单测:`node site/assets/md.test.mjs`、`node site/assets/stage-kit.test.mjs`。浏览器冒烟:起 `site/serve.mjs` 后 `node runtime/site-thumbs.mjs http://127.0.0.1:8770`。
mapstage/install-skill.mjs
- Executable scriptline 1
Executable file
mapstage/references/api-board.md
- Network accessline 6
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/references/api-story.md
- Network accessline 6
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/references/api.md
mapstage/references/examples-guide.md
- Network accessline 7
1. 在 `site/examples/examples.js` 的 `LIST` 里加一行:`id`、`group`、`title`、`blurb`、`api`、`spec`,有时间轴的再加 `thumb`(缩略图 seek 到的秒数)。 2. 写 `site/examples/<id>.html`,骨架照下面抄。 3. 起服后拍缩略图并冒烟:`node runtime/site-thumbs.mjs http://127.0.0.1:8770 <id>`(输出 `site - Network accessline 8
2. 写 `site/examples/<id>.html`,骨架照下面抄。 3. 起服后拍缩略图并冒烟:`node runtime/site-thumbs.mjs http://127.0.0.1:8770 <id>`(输出 `site/examples/thumbs/<id>.jpg`,有 pageerror 会失败)。 4. 在 `tuner/` 下跑 `node verify.mjs`,末尾应为 `verify ok`。 - Network accessline 9
3. 起服后拍缩略图并冒烟:`node runtime/site-thumbs.mjs http://127.0.0.1:8770 <id>`(输出 `site/examples/thumbs/<id>.jpg`,有 pageerror 会失败)。 - Network accessline 21
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>示例标题 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 22
<title>示例标题 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 23
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 40
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/references/hosts.md
- Network accessline 49
<Sequence from={0} durationInFrames={16 * fps}> <MapStageScene hostUrl="http://127.0.0.1:8770" story="examples/story-hexi.json" /> - Network accessline 50
<MapStageScene hostUrl="http://127.0.0.1:8770" story="examples/story-hexi.json" /> - Network accessline 72
`--layers map,hud` 用 ffmpeg 把地图层和 HUD 层叠合。`node runtime/verify-render.mjs http://127.0.0.1:8770` 校验这些闸门。 - Network accessline 96
- 每帧先写 `.part` 再改名,中途被杀不会留下半张图。 - 截帧前自动 `precache()`;有 seek 触发 12 s idle 超时放行时,结束时会提醒。 - 验收:`node runtime/verify-shoot.mjs http://127.0.0.1:8770`(续拍 / 局部重拍 / 混帧保护 / 分层 / 两次独立会话逐字节一致)。 - Network accessline 98
- 验收:`node runtime/verify-shoot.mjs http://127.0.0.1:8770`(续拍 / 局部重拍 / 混帧保护 / 分层 / 两次独立会话逐字节一致)。 - Network accessline 136
node runtime/qa.mjs ../out/hexi # --base 默认 http://127.0.0.1:8770 - Network accessline 141
- 露底不靠颜色猜:宿主页把底色层改成品红,逐帧数纯品红(和画布透明、地平线以上)的占比。底图本身是米色 / 沙色,和底色太近,按色匹配会大面积误报。 - 合规是对**每一帧**调 `stage.check(t)`,不只是 `compliance.full` 的逐秒自检。 - 验收:`node runtime/verify-qa.mjs http://127.0.0.1:8770`,用合成帧证明硬切 / 冻帧 / 缺帧 / 露底都抓得到、干净序列不误报,并用 80° 俯仰的真 - Network accessline 143
- 验收:`node runtime/verify-qa.mjs http://127.0.0.1:8770`,用合成帧证明硬切 / 冻帧 / 缺帧 / 露底都抓得到、干净序列不误报,并用 80° 俯仰的真地图帧验证露底探针。
mapstage/references/install.md
- Network accessline 24
安装 MapStage skill:https://github.com/hopechen067/MapStage
mapstage/references/maplibre-official-gap.md
- Network accessline 7
| 写于 | 2026-08-29 | | 官方文档快照 | MapLibre GL JS **6.6.0** 文档站(examples / guides / API / plugins)+ Style Spec | | 入口 | https://maplibre.org/maplibre-gl-js/docs/examples/ | - Network accessline 8
| 官方文档快照 | MapLibre GL JS **6.6.0** 文档站(examples / guides / API / plugins)+ Style Spec | | 入口 | https://maplibre.org/maplibre-gl-js/docs/examples/ | | 本库生产 JS | 调参台:`tuner/vendor/maplibre-gl.js` **patched 5.6.0-dev**;成片模板:unpkg **5.6.0 未打补丁 - Network accessline 9
| 入口 | https://maplibre.org/maplibre-gl-js/docs/examples/ | - Network accessline 22
| Introduction | `/docs/` | 官方默认已是 **v6 ESM**(`maplibre-gl.mjs` + worker)。CDN 无 bundler 时 worker 走 Blob URL。我们生产仍是 **v5 UMD 补丁包**。 | | Examples Overview | `/docs/examples/` | 约 140 个示例,六类:Basics / Sources / Layers / Annotations / Interactiv - Network accessline 23
| Examples Overview | `/docs/examples/` | 约 140 个示例,六类:Basics / Sources / Layers / Annotations / Interactivity / 3D·Globe。第 4 节全表分流。 | | Guides | `/docs/guides/` | 真正有用的是 [large-data](https://maplibre.org/maplibre-gl-js/docs/guides/large-da - Network accessline 24
| Guides | `/docs/guides/` | 真正有用的是 [large-data](https://maplibre.org/maplibre-gl-js/docs/guides/large-data/)(大 GeoJSON)和 [v5→v6](https://maplibre.org/maplibre-gl-js/docs/guides/v5-to-v6-migration-guide/)。Leaflet / OpenLayers / Mapbox 迁移与本库 - Network accessline 238
[large-data](https://maplibre.org/maplibre-gl-js/docs/guides/large-data/) 对 7.6 MB 水系几乎是逐条打中:
mapstage/references/maplibre-optimization-and-enablement.md
- Network accessline 7
| 写于 | 2026-08-29 | | 原则 | 先补齐 **5.6 上已能做且视频要** 的;6.x 只在岛补丁移植后进生产 | | 不做 | 应用级 npm 进 `tuner/`;`flyTo` 当商品;OSM 楼当汉城;成片 `fetch('/license')` | - Network accessline 9
| 不做 | 应用级 npm 进 `tuner/`;`flyTo` 当商品;OSM 楼当汉城;成片 `fetch('/license')` | - Network accessline 44
2. `color-relief`、`hillshade-method`、`style.state` 标在 Spec **5.6 / 5.5**。先在 vendor 5.6 上开,不要拿它们当升 6 的理由。 3. 只有这些才构成升 6 的正当理由:`fill-extrusion-rounded-corner-distance`(6.2)、`symbol-height-offset`(6.6)、`line-layer-opacity`(6.0)、官方 ESM worker 合 - Network accessline 46
4. 升 6 时按 [v5-to-v6-migration-guide](https://maplibre.org/maplibre-gl-js/docs/guides/v5-to-v6-migration-guide/):`<script type="module">`、禁止默认 import、嵌套 GeoJSON 不要 `JSON.parse`、缺图用 `setMissingStyleImageResolver`。 - Network accessline 64
官方:[Optimising large GeoJSON](https://maplibre.org/maplibre-gl-js/docs/guides/large-data/)。
mapstage/references/overview.md
- Network accessline 3
MapStage 是给**历史视频**用的叙事地图引擎,同时也是一个 agent skill。它基于 [MapLibre GL JS](https://maplibre.org/),把「古卷底图 + 路线行进 + 镜头 + 合规」收成三份声明式 JSON,由宿主按时间逐帧取画面。
mapstage/references/play.md
- Network accessline 24
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 25
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 50
const preset = await (await fetch('studio/presets/antique-default.json')).json();
mapstage/references/quickstart.md
- Network accessline 22
<!doctype html> <meta charset="utf-8"> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 23
<meta charset="utf-8"> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <div id="stage" style="position:absolute;inset:0"></div> - Network accessline 24
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 63
打开 `http://127.0.0.1:8770/`,`/studio/` 是调参台,`/examples/` 是示例。
mapstage/references/roadmap.md
- Network accessline 37
本地:`node mapstage/site/serve.mjs` → `http://127.0.0.1:8770/`,布局与 Pages 一致。
mapstage/references/tuner-workflow.md
- Network accessline 12
Open `http://localhost:8765/`.
mapstage/runtime/benchmark-vector-tuning.mjs
- Executable scriptline 1
Executable file - Network accessline 27
const REPO_ROOT = resolve(HERE, '..'); const DEFAULT_OUT_DIR = join(REPO_ROOT, 'out', 'fx-verify'); const DEFAULT_BASE_URL = 'http://127.0.0.1:8780'; - Network accessline 28
const DEFAULT_OUT_DIR = join(REPO_ROOT, 'out', 'fx-verify'); const DEFAULT_BASE_URL = 'http://127.0.0.1:8780'; const DEFAULT_VIEWPORT = Object.freeze({ width: 1440, height: 900 }); - Network accessline 29
const DEFAULT_BASE_URL = 'http://127.0.0.1:8780'; - Network accessline 81
'Options:', ' --base-url <url> Base URL or vector-layers.html URL', ' Default: http://127.0.0.1:8780', - Network accessline 82
' --base-url <url> Base URL or vector-layers.html URL', ' Default: http://127.0.0.1:8780', ' --runs <count> Measured runs; default: 20', - Network accessline 83
' Default: http://127.0.0.1:8780',
mapstage/runtime/benchmark-vector-tuning.test.mjs
- Executable scriptline 1
Executable file - Network accessline 93
const target = new URL( buildTargetUrl( 'http://127.0.0.1:8780?keep=yes&perfImages=16&perfCacheZoom=5', - Network accessline 94
buildTargetUrl( 'http://127.0.0.1:8780?keep=yes&perfImages=16&perfCacheZoom=5', 'workerCount', - Network accessline 95
'http://127.0.0.1:8780?keep=yes&perfImages=16&perfCacheZoom=5',
mapstage/runtime/check-hillshade.mjs
- Executable scriptline 1
Executable file - Network accessline 9
const outDir = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'out', 'fx-verify'); mkdirSync(outDir, { recursive: true }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 10
mkdirSync(outDir, { recursive: true }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); const { chromium } = loadPlaywright(); - Network accessline 11
const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/compare-vector-screenshots.mjs
- Executable scriptline 1
#!/usr/bin/env node
mapstage/runtime/diag-rise-btn.mjs
- Executable scriptline 1
Executable file - Network accessline 12
}); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); await page.goto('http://127.0.0.1:8766/?risebtn=' + Date.now(), { - Network accessline 13
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); await page.goto('http://127.0.0.1:8766/?risebtn=' + Date.now(), { waitUntil: 'domcontentloaded', - Network accessline 14
await page.goto('http://127.0.0.1:8766/?risebtn=' + Date.now(), {
mapstage/runtime/diag-terrain.mjs
- Executable scriptline 1
Executable file - Network accessline 16
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); page.on('pageerror', (err) => console.warn('pageerror', err.message)); await page.goto('http://127.0.0.1:8766/?relief=' + Date.now(), { - Network accessline 17
page.on('pageerror', (err) => console.warn('pageerror', err.message)); await page.goto('http://127.0.0.1:8766/?relief=' + Date.now(), { waitUntil: 'domcontentloaded', - Network accessline 18
await page.goto('http://127.0.0.1:8766/?relief=' + Date.now(), {
mapstage/runtime/lib/fingerprint.mjs
- Executable scriptline 1
Executable file - Network accessline 20
const root = String(base).replace(/\/$/, ''); const storyUrl = /^(https?|data):/.test(story) ? story : root + '/' + story.replace(/^\//, ''); const storyText = await (await fetch(storyUrl)).text(); - Network accessline 21
const storyUrl = /^(https?|data):/.test(story) ? story : root + '/' + story.replace(/^\//, ''); const storyText = await (await fetch(storyUrl)).text(); const parsed = JSON.parse(storyText); - Network accessline 22
const storyText = await (await fetch(storyUrl)).text(); - Network accessline 23
const parsed = JSON.parse(storyText); let presetText = '{}'; if (parsed.preset) presetText = await (await fetch(new URL(parsed.preset, storyUrl))).text(); - Network accessline 24
let presetText = '{}'; if (parsed.preset) presetText = await (await fetch(new URL(parsed.preset, storyUrl))).text(); return { hash: fingerprint(storyText + '\n' + presetText), duration: parsed.duration, fps: parsed.fps || 30 }; - Network accessline 25
if (parsed.preset) presetText = await (await fetch(new URL(parsed.preset, storyUrl))).text();
mapstage/runtime/lib/pw.mjs
- Executable scriptline 1
Executable file
mapstage/runtime/lib/tuner-source.mjs
- Executable scriptline 1
Executable file
mapstage/runtime/lib/tuner-ui.mjs
- Executable scriptline 1
Executable file
mapstage/runtime/measure-perf.mjs
- Executable scriptline 1
Executable file - Network accessline 20
} const t0 = Date.now(); await page.goto('http://127.0.0.1:8766/?perf=' + tag + '&t=' + Date.now(), { - Network accessline 21
const t0 = Date.now(); await page.goto('http://127.0.0.1:8766/?perf=' + tag + '&t=' + Date.now(), { waitUntil: 'domcontentloaded', - Network accessline 22
await page.goto('http://127.0.0.1:8766/?perf=' + tag + '&t=' + Date.now(), {
mapstage/runtime/measure-warm-perf.mjs
mapstage/runtime/qa.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* MapStage 成片 QA:对截帧器的输出目录做硬切 / 冻帧 / 露底 / 合规逐帧检查,并导出四类验收帧。 * * node runtime/qa.mjs <frames-dir> [--base http://127.0.0.1:8770] - Network accessline 3
* * node runtime/qa.mjs <frames-dir> [--base http://127.0.0.1:8770] * - Network accessline 4
* node runtime/qa.mjs <frames-dir> [--base http://127.0.0.1:8770] - Network accessline 35
exports: o.exports !== false, voidColor: o.voidColor || null, base: String(o.base || 'http://127.0.0.1:8770').replace(/\/$/, ''), - Network accessline 36
voidColor: o.voidColor || null, base: String(o.base || 'http://127.0.0.1:8770').replace(/\/$/, ''), story: o.story || null, - Network accessline 37
base: String(o.base || 'http://127.0.0.1:8770').replace(/\/$/, ''), - Network accessline 202
storyJson = await host.evaluate(() => JSON.parse(JSON.stringify(window.stage.story))); } else { storyJson = await (await fetch(o.base + '/' + m.story)).json(); - Network accessline 203
} else { storyJson = await (await fetch(o.base + '/' + m.story)).json(); } - Network accessline 204
storyJson = await (await fetch(o.base + '/' + m.story)).json();
mapstage/runtime/render.mjs
- Executable scriptline 1
Executable file - Network accessline 12
* 截帧 → QA → mp4 (crf18)。终版 QA 不过也保留成品,但退出码为 1 * * 选项:--base(默认 http://127.0.0.1:8770) --layers full|map,hud(map,hud 由 ffmpeg 叠合) - Network accessline 13
* * 选项:--base(默认 http://127.0.0.1:8770) --layers full|map,hud(map,hud 由 ffmpeg 叠合) * --audio <file> --story <path>(preview 必填,之后记在 state.json) - Network accessline 14
* 选项:--base(默认 http://127.0.0.1:8770) --layers full|map,hud(map,hud 由 ffmpeg 叠合) - Network accessline 127
function parse(argv) { const [cmd, ...rest] = argv; const o = { cmd, base: 'http://127.0.0.1:8770' }; - Network accessline 128
const [cmd, ...rest] = argv; const o = { cmd, base: 'http://127.0.0.1:8770' }; for (let i = 0; i < rest.length; i++) { - Network accessline 129
const o = { cmd, base: 'http://127.0.0.1:8770' };
mapstage/runtime/shoot.mjs
- Executable scriptline 1
Executable file - Network accessline 6
* * 参数 * --base <url> 站点地址,默认 http://127.0.0.1:8770 - Network accessline 7
* 参数 * --base <url> 站点地址,默认 http://127.0.0.1:8770 * --story <path> story JSON,相对站点根,默认 examples/story-hexi.json - Network accessline 8
* --base <url> 站点地址,默认 http://127.0.0.1:8770 - Network accessline 53
const m = MODES[mode]; const o = { base: String(raw.base || 'http://127.0.0.1:8770').replace(/\/$/, ''), - Network accessline 54
const o = { base: String(raw.base || 'http://127.0.0.1:8770').replace(/\/$/, ''), story: raw.story || 'examples/story-hexi.json', - Network accessline 55
base: String(raw.base || 'http://127.0.0.1:8770').replace(/\/$/, ''),
mapstage/runtime/site-thumbs.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* 给官网示例拍缩略图 + 冒烟检查(无 pageerror)。 * node site/serve.mjs & # 8770 * node runtime/site-thumbs.mjs http://127.0.0.1:8770 - Network accessline 3
* node site/serve.mjs & # 8770 * node runtime/site-thumbs.mjs http://127.0.0.1:8770 * node runtime/site-thumbs.mjs http://127.0.0.1:8770 route-march,skins # 只拍这几个 - Network accessline 4
* node runtime/site-thumbs.mjs http://127.0.0.1:8770 - Network accessline 5
* node runtime/site-thumbs.mjs http://127.0.0.1:8770 route-march,skins # 只拍这几个 - Network accessline 15
const here = dirname(fileURLToPath(import.meta.url)); const pkg = join(here, '..'); const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, ''); - Network accessline 16
const pkg = join(here, '..'); const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, ''); const thumbs = join(pkg, 'site', 'examples', 'thumbs'); - Network accessline 17
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, '');
mapstage/runtime/verify-chips-layout.mjs
mapstage/runtime/verify-fx.mjs
- Executable scriptline 1
Executable file - Network accessline 3
* Requires Playwright (not a repo dep). Example: * set PLAYWRIGHT_BROWSERS_PATH=0 * node runtime/verify-fx.mjs http://127.0.0.1:8766 - Network accessline 4
* set PLAYWRIGHT_BROWSERS_PATH=0 * node runtime/verify-fx.mjs http://127.0.0.1:8766 */ - Network accessline 5
* node runtime/verify-fx.mjs http://127.0.0.1:8766 - Network accessline 16
const repo = join(root, '..'); const outDir = join(repo, '..', 'out', 'fx-verify'); const base = process.argv[2] || 'http://127.0.0.1:8766'; - Network accessline 18
const base = process.argv[2] || 'http://127.0.0.1:8766';
mapstage/runtime/verify-gansu-inlet.mjs
mapstage/runtime/verify-gansu-zhangye.mjs
- Executable scriptline 1
Executable file - Network accessline 12
}); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 13
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); await page.goto(base + '/?gansu-zhangye=' + Date.now(), { - Network accessline 14
const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/verify-hillshade.mjs
- Executable scriptline 1
Executable file - Network accessline 10
const outDir = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'out', 'fx-verify'); mkdirSync(outDir, { recursive: true }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 11
mkdirSync(outDir, { recursive: true }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); const { chromium } = loadPlaywright(); - Network accessline 12
const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/verify-island-beijing.mjs
mapstage/runtime/verify-island-look.mjs
mapstage/runtime/verify-island-rca.mjs
- Network accessline 1
/** * Independent-island RCA: dump clip state, tiles, mask, and cameras. * node runtime/verify-island-rca.mjs [http://127.0.0.1:8765] - Executable scriptline 1
Executable file - Network accessline 2
* Independent-island RCA: dump clip state, tiles, mask, and cameras. * node runtime/verify-island-rca.mjs [http://127.0.0.1:8765] */ - Network accessline 3
* node runtime/verify-island-rca.mjs [http://127.0.0.1:8765] - Network accessline 10
const BASE = (process.argv[2] || 'http://127.0.0.1:8765').replace(/\/$/, '');
mapstage/runtime/verify-island-walls.mjs
mapstage/runtime/verify-isolate-chips.mjs
mapstage/runtime/verify-isolate-edge.mjs
mapstage/runtime/verify-isolate-rise.mjs
- Executable scriptline 1
Executable file - Network accessline 13
}); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const BASE = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 14
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const BASE = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); await page.goto(BASE + '/?isolate-rise=' + Date.now(), { - Network accessline 15
const BASE = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/verify-perf-gating.mjs
mapstage/runtime/verify-preset-guard.mjs
mapstage/runtime/verify-qa.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* QA 检测器验收:用合成帧证明每一类缺陷都能被抓到、干净序列不误报。 * node site/serve.mjs & # 8770(导出帧要读 story) * node runtime/verify-qa.mjs http://127.0.0.1:8770 - Network accessline 3
* node site/serve.mjs & # 8770(导出帧要读 story) * node runtime/verify-qa.mjs http://127.0.0.1:8770 */ - Network accessline 4
* node runtime/verify-qa.mjs http://127.0.0.1:8770 - Network accessline 14
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, ''); - Network accessline 18
assert.deepEqual(runs([]), []); assert.equal(meanAbsDiff([0, 0, 10], [0, 10, 10]), 10 / 3); const story = await (await fetch(base + '/examples/story-hexi.json')).json(); - Network accessline 19
assert.equal(meanAbsDiff([0, 0, 10], [0, 10, 10]), 10 / 3); const story = await (await fetch(base + '/examples/story-hexi.json')).json(); const pick = pickExportFrames(story, 10, 160, false); - Network accessline 20
const story = await (await fetch(base + '/examples/story-hexi.json')).json();
mapstage/runtime/verify-qilian-terrain.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* Compare Qilian terrain at real elevation 1.0 vs dramatic 1.6. * * node runtime/verify-qilian-terrain.mjs http://127.0.0.1:8780 - Network accessline 3
* * node runtime/verify-qilian-terrain.mjs http://127.0.0.1:8780 */ - Network accessline 4
* node runtime/verify-qilian-terrain.mjs http://127.0.0.1:8780 - Network accessline 12
const here = dirname(fileURLToPath(import.meta.url)); const repo = join(here, '..'); const base = (process.argv[2] || 'http://127.0.0.1:8780').replace(/\/$/, ''); - Network accessline 14
const base = (process.argv[2] || 'http://127.0.0.1:8780').replace(/\/$/, '');
mapstage/runtime/verify-render.mjs
- Executable scriptline 1
Executable file - Network accessline 3
* 不在这里跑 1080p 终版本身(太慢);终版的截帧参数由 shoot 的 final 模式保证。 * node site/serve.mjs & # 8770 * node runtime/verify-render.mjs http://127.0.0.1:8770 - Network accessline 4
* node site/serve.mjs & # 8770 * node runtime/verify-render.mjs http://127.0.0.1:8770 */ - Network accessline 5
* node runtime/verify-render.mjs http://127.0.0.1:8770 - Network accessline 14
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, ''); - Network accessline 40
const st = JSON.parse(readFileSync(stFile, 'utf8')); assert.equal(st.approved, true); const edited = JSON.parse(await (await fetch(base + '/' + story)).text()); - Network accessline 41
assert.equal(st.approved, true); const edited = JSON.parse(await (await fetch(base + '/' + story)).text()); edited.sites[0].name = edited.sites[0].name + '(改过)'; - Network accessline 42
const edited = JSON.parse(await (await fetch(base + '/' + story)).text());
mapstage/runtime/verify-rise.mjs
- Network accessline 1
/** * Click 「地形隆起」 and capture start / mid / end stills. * node runtime/verify-rise.mjs http://127.0.0.1:8766 - Executable scriptline 1
Executable file - Network accessline 2
* Click 「地形隆起」 and capture start / mid / end stills. * node runtime/verify-rise.mjs http://127.0.0.1:8766 */ - Network accessline 3
* node runtime/verify-rise.mjs http://127.0.0.1:8766 - Network accessline 12
const outDir = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'out', 'fx-verify'); mkdirSync(outDir, { recursive: true }); const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 14
const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/verify-shoot.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* 截帧器验收:断点续拍、局部重拍、旧帧混入保护、分层输出、重拍逐字节一致。 * node site/serve.mjs & # 8770 * node runtime/verify-shoot.mjs http://127.0.0.1:8770 - Network accessline 3
* node site/serve.mjs & # 8770 * node runtime/verify-shoot.mjs http://127.0.0.1:8770 */ - Network accessline 4
* node runtime/verify-shoot.mjs http://127.0.0.1:8770 - Network accessline 13
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, '');
mapstage/runtime/verify-showcase.mjs
mapstage/runtime/verify-slab-look.mjs
mapstage/runtime/verify-slider-uncapped.mjs
- Executable scriptline 1
Executable file - Network accessline 5
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); try { const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); - Network accessline 6
try { const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, ''); await page.goto(base + '/?t=' + Date.now(), { - Network accessline 7
const base = (process.argv[2] || 'http://127.0.0.1:8766').replace(/\/$/, '');
mapstage/runtime/verify-story-hexi.mjs
- Executable scriptline 1
Executable file - Network accessline 2
* story-hexi 示例验收:无 pageerror、预缓存后 seek(t) 正序 / 倒序逐像素一致、违规 story 拒绝渲染。 * node site/serve.mjs & # 8770 * node runtime/verify-story-hexi.mjs http://127.0.0.1:8770 - Network accessline 3
* node site/serve.mjs & # 8770 * node runtime/verify-story-hexi.mjs http://127.0.0.1:8770 */ - Network accessline 4
* node runtime/verify-story-hexi.mjs http://127.0.0.1:8770 - Network accessline 11
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, '');
mapstage/runtime/verify-story-night.mjs
- Executable scriptline 1
Executable file - Network accessline 8
* 截图写到仓库根 out/story-night-*.png。 * node site/serve.mjs & # 8770 * node runtime/verify-story-night.mjs http://127.0.0.1:8770 - Network accessline 9
* node site/serve.mjs & # 8770 * node runtime/verify-story-night.mjs http://127.0.0.1:8770 */ - Network accessline 10
* node runtime/verify-story-night.mjs http://127.0.0.1:8770 - Network accessline 18
const GL_ARGS = ['--use-angle=swiftshader', '--enable-unsafe-swiftshader', '--ignore-gpu-blocklist']; const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, ''); - Network accessline 19
const base = (process.argv[2] || 'http://127.0.0.1:8770').replace(/\/$/, '');
mapstage/runtime/verify-terrain-island.mjs
mapstage/runtime/verify-tile-stack.mjs
- Executable scriptline 1
Executable file - Network accessline 4
const BASE = (process.argv[2] || 'http://127.0.0.1:8767').replace(/\/$/, ''); - Network accessline 57
cacheCount = existsSync(cacheDir) ? readdirSync(cacheDir).length : 0; const probeHit = (url) => execSync('curl -s -D - -o NUL "' + url + '"', { shell: 'cmd.exe', encoding: 'utf8' }) - Network accessline 58
const probeHit = (url) => execSync('curl -s -D - -o NUL "' + url + '"', { shell: 'cmd.exe', encoding: 'utf8' }) .toLowerCase() - Network accessline 59
execSync('curl -s -D - -o NUL "' + url + '"', { shell: 'cmd.exe', encoding: 'utf8' })
mapstage/runtime/verify-tuner-bugs.mjs
mapstage/runtime/verify-tuner-chrome.mjs
- Executable scriptline 1
Executable file - Network accessline 9
* * node runtime/verify-tuner-chrome.mjs * node runtime/verify-tuner-chrome.mjs http://127.0.0.1:8770/studio - Network accessline 10
* node runtime/verify-tuner-chrome.mjs * node runtime/verify-tuner-chrome.mjs http://127.0.0.1:8770/studio * - Network accessline 11
* node runtime/verify-tuner-chrome.mjs http://127.0.0.1:8770/studio
mapstage/runtime/verify-tuner-vector.mjs
- Network accessline 1
/** * Studio 配色分区(皮肤 / 海拔设色 / 等高线 / 图层颜色)真跑: * node runtime/verify-tuner-vector.mjs http://127.0.0.1:8770/studio - Executable scriptline 1
Executable file - Network accessline 2
* Studio 配色分区(皮肤 / 海拔设色 / 等高线 / 图层颜色)真跑: * node runtime/verify-tuner-vector.mjs http://127.0.0.1:8770/studio * 断言:默认全关;设色/图层/等高线开关生效;色阶与图层色编辑进入地图 paint 并落盘; - Network accessline 3
* node runtime/verify-tuner-vector.mjs http://127.0.0.1:8770/studio - Network accessline 13
const BASE = (process.argv[2] || 'http://127.0.0.1:8770/studio').replace(/\/$/, '');
mapstage/runtime/verify-vector-layers.mjs
- Executable scriptline 1
Executable file - Network accessline 3
* * node runtime/verify-vector-layers.mjs * node runtime/verify-vector-layers.mjs http://127.0.0.1:8771 - Network accessline 4
* node runtime/verify-vector-layers.mjs * node runtime/verify-vector-layers.mjs http://127.0.0.1:8771 */ - Network accessline 5
* node runtime/verify-vector-layers.mjs http://127.0.0.1:8771 - Network accessline 169
assert.equal( VP.absolutizeTileUrl('/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'), 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png' - Network accessline 170
VP.absolutizeTileUrl('/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'), 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png' ); - Network accessline 171
'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png' - Network accessline 174
VP.absolutizeTileUrl( '/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', 'http://127.0.0.1:8780' - Network accessline 175
'/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', 'http://127.0.0.1:8780' ), - Network accessline 176
'http://127.0.0.1:8780' - Network accessline 177
), 'http://127.0.0.1:8780/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png' ); - Network accessline 178
'http://127.0.0.1:8780/t/s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png' - Network accessline 1590
performance.clearResourceTimings(); async function load() { var response = await fetch(url, { cache: 'force-cache' }); - Network accessline 1591
async function load() { var response = await fetch(url, { cache: 'force-cache' }); var bytes = (await response.arrayBuffer()).byteLength; - Network accessline 1592
var response = await fetch(url, { cache: 'force-cache' });
mapstage/runtime/verify-vector-overlay.mjs
- Executable scriptline 1
Executable file - Network accessline 8
* - isolate (island clip and legacy mask) leaves no vector water / road outside the region * * Usage: node runtime/verify-vector-overlay.mjs [baseUrl] (default http://127.0.0.1:8765) - Network accessline 9
* * Usage: node runtime/verify-vector-overlay.mjs [baseUrl] (default http://127.0.0.1:8765) * Needs network access to tiles.openfreemap.org. Screenshots: <repo>/out/vector-overlay/ - Network accessline 10
* Usage: node runtime/verify-vector-overlay.mjs [baseUrl] (default http://127.0.0.1:8765) - Network accessline 19
const BASE = (process.argv[2] || 'http://127.0.0.1:8765').replace(/\/$/, ''); - Network accessline 30
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); const requests = []; page.on('request', (r) => requests.push(r.url())); - Network accessline 31
const requests = []; page.on('request', (r) => requests.push(r.url())); page.on('pageerror', (e) => { - Network accessline 32
page.on('request', (r) => requests.push(r.url())); - Network accessline 232
check(!requests.some((u) => /water-data\.js/.test(u)), 'water-data.js is never requested'); - Network accessline 233
check(requests.some((u) => /tiles\.openfreemap\.org/.test(u)), 'OpenFreeMap tiles are requested');
mapstage/schemas/map-preset.schema.json
mapstage/schemas/sample-sites.schema.json
mapstage/schemas/story.schema.json
mapstage/site/assets/contour.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 900" preserveAspectRatio="xMidYMid slice"><path d="M1231 300C1232 302 1233 304 1233 307C1233 309 1233 311 1232 314C1231 316 1230 318 1229 320C1228 322 1227 324 1225 326C1224 328 1222
mapstage/site/assets/favicon.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect x="2" y="2" width="60" height="60" rx="12" fill="#241b14"/><path d="M11 48l9-28 12 20 11-18 6 14c1.4 3.6 3 5.6 5.5 6" fill="none" stroke="#f3eee3" stroke-width="6.5" stroke-l
mapstage/site/assets/logo-lockup.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 330 72" role="img" aria-label="MapStage · 历史视频的地图舞台">
mapstage/site/assets/logo.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="MapStage">
mapstage/site/assets/md.js
- Executable scriptline 1
Executable file
mapstage/site/assets/md.test.mjs
mapstage/site/assets/site.js
mapstage/site/assets/stage-kit.js
- Executable scriptline 1
Executable file
mapstage/site/assets/stage-kit.test.mjs
- Executable scriptline 1
Executable file
mapstage/site/build.mjs
- Executable scriptline 1
Executable file
mapstage/site/docs/index.html
- Network accessline 7
<meta name="description" content="MapStage 文档:快速上手、安装 skill、Preset / Story 规范、镜头、合规、宿主与渲染、运行时 API、长征系列地图经验与路线图。"> <link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=N - Network accessline 8
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="../assets/site.css"> - Network accessline 9
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 83
if (BY_FILE[file]) return '?p=' + BY_FILE[file] + hash; if (/^\.\.\/site\/examples\/([\w-]+)\.html$/.test(path)) return RegExp.$1 === 'index' ? '../examples/' : '../examples/view.html?id=' + RegExp.$1; var resolved = new URL - Network accessline 84
if (/^\.\.\/site\/examples\/([\w-]+)\.html$/.test(path)) return RegExp.$1 === 'index' ? '../examples/' : '../examples/view.html?id=' + RegExp.$1; var resolved = new URL(path, 'https://x/mapstage/references/').pathname.replace(/^\//, - Network accessline 85
var resolved = new URL(path, 'https://x/mapstage/references/').pathname.replace(/^\//, ''); - Network accessline 157
document.title = page.title + ' · MapStage 文档'; var doc = document.getElementById('doc'); fetch(REF + encodeURIComponent(page.file), { cache: 'no-cache' }) - Network accessline 158
var doc = document.getElementById('doc'); fetch(REF + encodeURIComponent(page.file), { cache: 'no-cache' }) .then(function (r) { if (!r.ok) throw new Error(r.status + ' ' + page.file); return r.text(); }) - Network accessline 159
fetch(REF + encodeURIComponent(page.file), { cache: 'no-cache' })
mapstage/site/examples/board-basic.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>游戏地图最小用法 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>游戏地图最小用法 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/board-cities.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>城池圈、徽标与选中环 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>城池圈、徽标与选中环 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 42
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/board-hover.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>悬停提示与点选 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>悬停提示与点选 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/board-links.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>连线与相邻关系 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>连线与相邻关系 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 26
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/board-march.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>行军动画与镜头 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>行军动画与镜头 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/camera-fit.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>按地点自动取景 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>按地点自动取景 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/camera-manual.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>手写机位 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>手写机位 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 31
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/camera-push.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>一句一动:move / push / tilt · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>一句一动:move / push / tilt · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 29
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/camera-route.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>按路线取景与 maxSpan · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>按路线取景与 maxSpan · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/cards-basic.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>地名卡、名牌、印章、大字 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>地名卡、名牌、印章、大字 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/cards-doc-photo.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>文献 doc 与照片 photo · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>文献 doc 与照片 photo · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 28
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/cards-table.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>速查表 table · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>速查表 table · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/cards-telegram.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>电报 telegram · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>电报 telegram · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/compliance-full.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>全图时段与十段线 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>全图时段与十段线 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 29
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/compliance.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>合规全图 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>合规全图 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 23
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/examples.js
- Executable scriptline 1
Executable file
mapstage/site/examples/globe.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>地球视角开场 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>地球视角开场 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 24
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/index.html
- Network accessline 7
<meta name="description" content="MapStage 示例库:底图、路线、地名、镜头、字卡、合规、逐帧舞台、游戏地图,每个功能一个能直接复制运行的示例。"> <link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@6 - Network accessline 8
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="../assets/site.css"> - Network accessline 9
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet">
mapstage/site/examples/labels-approx.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>可信度与「约」 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>可信度与「约」 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 26
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/labels-tiers.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>地点层级 tier · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>地点层级 tier · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 22
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/labels.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>地名三态 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>地名三态 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 32
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/look-basemap.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>底图样式与夜景 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 6
<title>底图样式与夜景 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.c - Network accessline 7
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 8
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 24
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/look-basic.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>加载古卷底图 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>加载古卷底图 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 21
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/look-layers.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>图层开关 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>图层开关 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 26
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/look-preset.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>用 preset.json 定调 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>用 preset.json 定调 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 45
fetch('../studio/presets/antique-default.json')
mapstage/site/examples/play-sanguo.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>三分天下 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 6
<title>三分天下 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css" - Network accessline 7
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 8
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 72
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 87
async function boot() { const scUrl = new URL('./play-sanguo.json', location.href); sc = await (await fetch(scUrl)).json(); - Network accessline 88
const scUrl = new URL('./play-sanguo.json', location.href); sc = await (await fetch(scUrl)).json(); P.validateScenario(sc); - Network accessline 89
sc = await (await fetch(scUrl)).json(); - Network accessline 91
sc.sites.forEach((s) => { site[s.id] = s; }); sc.factions.forEach((f) => { faction[f.id] = f; }); const preset = await (await fetch(new URL(sc.preset, scUrl))).json(); - Network accessline 92
sc.factions.forEach((f) => { faction[f.id] = f; }); const preset = await (await fetch(new URL(sc.preset, scUrl))).json(); board = await MapStageBoard.create($('stage'), { preset, sites: sc.sites, links: sc.links, preserve: true - Network accessline 93
const preset = await (await fetch(new URL(sc.preset, scUrl))).json();
mapstage/site/examples/precache.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>预缓存与正倒序一致 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>预缓存与正倒序一致 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 28
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-curve.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>弧线与真实线形 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>弧线与真实线形 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 25
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-hold.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>分段 hold 按段末收 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>分段 hold 按段末收 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 29
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-march.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>路线行进 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>路线行进 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-roles.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>路线角色画法 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>路线角色画法 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 29
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-sides.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>四方配色 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>四方配色 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 31
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/route-slice.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>自己画路线 sliceRoute · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>自己画路线 sliceRoute · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 28
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/seek-contract.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>逐帧时间契约 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>逐帧时间契约 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 34
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/skins.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>切换古卷皮肤 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>切换古卷皮肤 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 22
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/stage-check.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>逐时刻自检 stage.check · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>逐时刻自检 stage.check · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 40
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/story-hexi.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>河西走廊 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 6
<title>河西走廊 · MapStage 示例</title> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css" - Network accessline 7
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 8
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 39
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 48
async function boot() { const jsonUrl = new URL('./story-hexi.json', location.href); const story = await (await fetch(jsonUrl)).json(); - Network accessline 49
const jsonUrl = new URL('./story-hexi.json', location.href); const story = await (await fetch(jsonUrl)).json(); // preset 路径写在 json 里,相对 json 本身解析 - Network accessline 50
const story = await (await fetch(jsonUrl)).json(); - Network accessline 51
// preset 路径写在 json 里,相对 json 本身解析 const preset = await (await fetch(new URL(story.preset, jsonUrl))).json(); stage = await MapStage.mount($('stage'), { preset, story, preserve: true }); - Network accessline 52
const preset = await (await fetch(new URL(story.preset, jsonUrl))).json();
mapstage/site/examples/terrain.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>地形夸张 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>地形夸张 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 25
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/validate.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>校验不过就拒绝渲染 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 6
<title>校验不过就拒绝渲染 · MapStage 示例</title> <link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> <style> - Network accessline 7
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 33
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/examples/view.html
- Network accessline 6
<title>示例 · MapStage</title> <link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 7
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="../assets/site.css"> - Network accessline 8
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 111
fetch(file, { cache: 'no-cache' })
mapstage/site/host.html
- Network accessline 8
用法:host.html?story=examples/story-hexi.json(相对站点根) 宿主(Playwright / HyperFrames / Remotion)等 window.__mapstageReady,再逐帧调 window.__mapstageSeek(t)。 --> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;9 - Network accessline 9
宿主(Playwright / HyperFrames / Remotion)等 window.__mapstageReady,再逐帧调 window.__mapstageSeek(t)。 --> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> <link rel="stylesheet - Network accessline 10
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 11
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 27
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 47
var q = new URLSearchParams(location.search); var storyUrl = new URL(q.get('story') || 'examples/story-hexi.json', location.href); var storyText = await (await fetch(storyUrl)).text(); - Network accessline 48
var storyUrl = new URL(q.get('story') || 'examples/story-hexi.json', location.href); var storyText = await (await fetch(storyUrl)).text(); var story = JSON.parse(storyText); - Network accessline 49
var storyText = await (await fetch(storyUrl)).text(); - Network accessline 52
var preset = {}; if (story.preset) { presetText = await (await fetch(new URL(story.preset, storyUrl))).text(); - Network accessline 53
if (story.preset) { presetText = await (await fetch(new URL(story.preset, storyUrl))).text(); preset = JSON.parse(presetText); - Network accessline 54
presetText = await (await fetch(new URL(story.preset, storyUrl))).text();
mapstage/site/index.html
- Network accessline 7
<meta name="description" content="MapStage:基于 MapLibre GL JS 的叙事地图引擎与 agent skill。古卷底图、路线行进、自动取景、合规规则,一份 JSON 驱动,逐帧可复现。"> <link rel="icon" href="assets/favicon.svg" type="image/svg+xml"> <link rel="preconnect" href="https://fonts.google - Network accessline 8
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - Network accessline 9
<link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 10
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - Network accessline 11
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@600;700;900&display=swap" rel="stylesheet"> - Network accessline 12
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css"> - Network accessline 182
<li><h3>逐帧终版</h3><p>确认后 1080p 逐帧截取,断点续拍,局部重拍。</p></li> </ol> <div class="code prompt-box wrap-lines" data-title="复制给你的 agent"><pre>安装 MapStage skill:https://github.com/hopechen067/MapStage - Network accessline 183
</ol> <div class="code prompt-box wrap-lines" data-title="复制给你的 agent"><pre>安装 MapStage skill:https://github.com/hopechen067/MapStage 然后用 /mapstage 做一段河西走廊从武威到敦煌的路线移动,完成后启动本地预览。</pre></div> - Network accessline 184
<div class="code prompt-box wrap-lines" data-title="复制给你的 agent"><pre>安装 MapStage skill:https://github.com/hopechen067/MapStage - Network accessline 295
<script src="assets/site.js"></script> <script src="examples/examples.js"></script> <script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> - Network accessline 296
<script src="examples/examples.js"></script> <script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script> <script src="studio/assets/vector-paint.js"></script> - Network accessline 297
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js"></script>
mapstage/site/serve.mjs
- Executable scriptline 1
Executable file - Network accessline 69
const port = Number(process.env.PORT || 8770); createServer(serve).listen(port, '127.0.0.1', () => { console.log('MapStage site → http://127.0.0.1:' + port + '/'); - Network accessline 70
createServer(serve).listen(port, '127.0.0.1', () => { console.log('MapStage site → http://127.0.0.1:' + port + '/'); }); - Network accessline 71
console.log('MapStage site → http://127.0.0.1:' + port + '/');
mapstage/templates/remotion/MapStageScene.tsx
- Executable scriptline 1
Executable file - Network accessline 6
* Scene 里的精灵、标签、弹窗、Canvas 特效叠在它上面(zIndex 比它高即可)。 * * <MapStageScene hostUrl="http://127.0.0.1:8770" story="examples/story-hexi.json" /> - Network accessline 7
* * <MapStageScene hostUrl="http://127.0.0.1:8770" story="examples/story-hexi.json" /> * - Network accessline 8
* <MapStageScene hostUrl="http://127.0.0.1:8770" story="examples/story-hexi.json" /> - Network accessline 22
/** MapStage 站点根,例如 http://127.0.0.1:8770 */
mapstage/tuner/README.md
- Network accessline 12
Open [http://localhost:8765/](http://localhost:8765/).
mapstage/tuner/_serve.test.cjs
mapstage/tuner/assets/han-city-3d.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/isolate-skirt-seam.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/isolate-workbench.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/map-fx.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/map-fx.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-board.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-board.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-hosts.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-look.test.mjs
- Executable scriptline 1
Executable file - Network accessline 131
{ const night = M.nightSpec(undefined, 'http://x/studio/'); - Network accessline 132
const night = M.nightSpec(undefined, 'http://x/studio/'); - Network accessline 168
{ const d = M.nightSpec(undefined, 'http://x/studio/'); - Network accessline 169
const d = M.nightSpec(undefined, 'http://x/studio/'); - Network accessline 170
assert.equal(d.type, 'image'); assert.equal(d.url, 'http://x/studio/assets/night-lights.png'); assert.deepEqual(d.coordinates, [[60, 56], [150, 56], [150, -2], [60, -2]]); - Network accessline 171
assert.equal(d.url, 'http://x/studio/assets/night-lights.png'); - Network accessline 173
assert.equal(M.nightSpec(false), null); assert.equal(M.nightSpec({ enabled: false }), null); assert.equal(M.nightSpec({ image: 'https://e/x.png' }), null, '等经纬图要浏览器重投影,同步版不支持'); - Network accessline 174
assert.equal(M.nightSpec({ enabled: false }), null); assert.equal(M.nightSpec({ image: 'https://e/x.png' }), null, '等经纬图要浏览器重投影,同步版不支持'); const t = M.nightSpec({ tiles: ['https://t/{z}/{y}/{x}.png'] }); - Network accessline 175
assert.equal(M.nightSpec({ image: 'https://e/x.png' }), null, '等经纬图要浏览器重投影,同步版不支持'); - Network accessline 176
const t = M.nightSpec({ tiles: ['https://t/{z}/{y}/{x}.png'] });
mapstage/tuner/assets/mapstage-play.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-play.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/mapstage-story.js
- Executable scriptline 1
Executable file - Network accessline 946
applyLookToStyle(style, look, { VP: VP, night: night }); if (style.sources.polarIce) { style.sources.polarIce.data = new URL(VP.POLAR_ICE_URL, opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'htt - Network accessline 947
if (style.sources.polarIce) { style.sources.polarIce.data = new URL(VP.POLAR_ICE_URL, opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'http://localhost/')).href; } - Network accessline 948
style.sources.polarIce.data = new URL(VP.POLAR_ICE_URL, opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'http://localhost/')).href; - Network accessline 1181
function mount(el, opts) { opts = opts || {}; var base = opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'http://localhost/'); - Network accessline 1182
opts = opts || {}; var base = opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'http://localhost/'); var needTV = wantsBasemap(opts.preset, opts.story); - Network accessline 1183
var base = opts.assetBase || SCRIPT_DIR || (typeof location !== 'undefined' ? location.href : 'http://localhost/'); - Network accessline 1195
: sl.nightLights !== undefined ? sl.nightLights : root.MAP_TILE_CONFIG && root.MAP_TILE_CONFIG.nightLights; var nc = tunerVector().resolveNightConfig(cfg); - Network accessline 1196
: root.MAP_TILE_CONFIG && root.MAP_TILE_CONFIG.nightLights; var nc = tunerVector().resolveNightConfig(cfg); nightCredit = nc && nc.attribution ? '夜光:' + nc.attribution : ''; - Network accessline 1197
var nc = tunerVector().resolveNightConfig(cfg); - Network accessline 1198
nightCredit = nc && nc.attribution ? '夜光:' + nc.attribution : '';
mapstage/tuner/assets/mapstage-story.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/region-isolate-data.js
mapstage/tuner/assets/region-isolate-data.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/region-isolate.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/region-isolate.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/site-nav.js
mapstage/tuner/assets/terrain-island.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/terrain-island.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-app.js
- Executable scriptline 1
Executable file - Network accessline 1614
? terIn.tiles.filter(function (u) { return typeof u === 'string' && u.length > 0; }) : [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 1615
: [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', 'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png', - Network accessline 1616
'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 1617
'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png', - Network accessline 1969
(params.cities && params.cities.dataFile) || 'assets/sample-sites.json'; try { var resN = await fetch(sitesUrl); - Network accessline 1970
try { var resN = await fetch(sitesUrl); if (resN.ok) { - Network accessline 1971
var resN = await fetch(sitesUrl); - Network accessline 2367
async function loadScenes() { try { const res = await fetch('scenes.json'); - Network accessline 2368
try { const res = await fetch('scenes.json'); if (res.ok) { - Network accessline 2369
const res = await fetch('scenes.json'); - Network accessline 2392
if (!hasLocal) { try { const res = await fetch('preset-antique-default.json'); - Network accessline 2393
try { const res = await fetch('preset-antique-default.json'); if (res.ok) { - Network accessline 2394
const res = await fetch('preset-antique-default.json');
mapstage/tuner/assets/tuner-modules.test.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-params.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-shell.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-util.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-vector.js
- Executable scriptline 1
Executable file
mapstage/tuner/assets/tuner-vector.test.mjs
- Executable scriptline 1
Executable file - Network accessline 10
terrain: { enabled: true, tiles: ['https://example.test/terrarium/{z}/{x}/{y}.png'], - Network accessline 11
enabled: true, tiles: ['https://example.test/terrarium/{z}/{x}/{y}.png'], tileSize: 256, - Network accessline 12
tiles: ['https://example.test/terrarium/{z}/{x}/{y}.png'], - Network accessline 162
assert.deepEqual(def.bounds, [60, -2, 150, 56]); assert.deepEqual(TV.nightSourceSpec(def).coordinates, [[60, 56], [150, 56], [150, -2], [60, -2]]); const nasa = TV.resolveNightConfig({ image: 'https://x/earth_lights_2048.png' }); - Network accessline 163
assert.deepEqual(TV.nightSourceSpec(def).coordinates, [[60, 56], [150, 56], [150, -2], [60, -2]]); const nasa = TV.resolveNightConfig({ image: 'https://x/earth_lights_2048.png' }); assert.equal(nasa.bounds, null, 'custom image without b - Network accessline 164
const nasa = TV.resolveNightConfig({ image: 'https://x/earth_lights_2048.png' }); - Network accessline 167
assert.equal(TV.resolveNightConfig(false), null); assert.equal(TV.resolveNightConfig({ enabled: false }), null); const tiled = TV.resolveNightConfig({ tiles: ['https://x/{z}/{y}/{x}.png'], image: 'a.png' }); - Network accessline 168
assert.equal(TV.resolveNightConfig({ enabled: false }), null); const tiled = TV.resolveNightConfig({ tiles: ['https://x/{z}/{y}/{x}.png'], image: 'a.png' }); assert.equal(tiled.image, '', 'tiles win over image'); - Network accessline 169
const tiled = TV.resolveNightConfig({ tiles: ['https://x/{z}/{y}/{x}.png'], image: 'a.png' });
mapstage/tuner/assets/vector-paint.js
- Executable scriptline 1
Executable file - Network accessline 17
var TILEJSON_URL = 'https://tiles.openfreemap.org/planet'; - Network accessline 18
var SOURCE_ID = 'openmaptiles'; var OPENFREEMAP_ATTRIBUTION = '<a href="https://openfreemap.org">OpenFreeMap</a> © <a href="https://openmaptiles.org">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</ - Network accessline 20
'<a href="https://openfreemap.org">OpenFreeMap</a> © <a href="https://openmaptiles.org">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'; - Network accessline 56
var CONTOUR_SOURCE_ID = 'contours'; var CONTOUR_LAYER = 'contours'; var GLYPHS_URL = 'https://tiles.openfreemap.org/fonts/{fontstack}/{range}.pbf'; - Network accessline 58
var GLYPHS_URL = 'https://tiles.openfreemap.org/fonts/{fontstack}/{range}.pbf'; - Network accessline 85
id: 'mapterhorn', label: 'Mapterhorn', tiles: ['https://tiles.mapterhorn.com/{z}/{x}/{y}.webp'], - Network accessline 86
label: 'Mapterhorn', tiles: ['https://tiles.mapterhorn.com/{z}/{x}/{y}.webp'], tileSize: 512, - Network accessline 87
tiles: ['https://tiles.mapterhorn.com/{z}/{x}/{y}.webp'], - Network accessline 90
visualMaxzoom: 16, encoding: 'terrarium', attribution: '<a href="https://mapterhorn.com/attribution" target="_blank" rel="noopener">© Mapterhorn</a>', - Network accessline 91
encoding: 'terrarium', attribution: '<a href="https://mapterhorn.com/attribution" target="_blank" rel="noopener">© Mapterhorn</a>', }, - Network accessline 92
attribution: '<a href="https://mapterhorn.com/attribution" target="_blank" rel="noopener">© Mapterhorn</a>', - Network accessline 95
id: 'terrarium', label: 'Terrarium 30m', tiles: ['https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'], - Network accessline 96
label: 'Terrarium 30m', tiles: ['https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'], tileSize: 256, - Network accessline 97
tiles: ['https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png'], - Network accessline 1043
var t = (tileCfg && tileCfg.terrain) || {}; var raw = Array.isArray(t.tiles) && t.tiles.length ? t.tiles : [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 1044
var raw = Array.isArray(t.tiles) && t.tiles.length ? t.tiles : [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', ]; - Network accessline 1045
'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 1134
buffer: 256, attribution: '<a href="https://protomaps.com">Protomaps</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>', - Network accessline 1135
attribution: '<a href="https://protomaps.com">Protomaps</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>', }; - Network accessline 1136
'<a href="https://protomaps.com">Protomaps</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
mapstage/tuner/hexi-map-shot.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1" /> <title>汉图古卷 · 河西跳切(precache + jumpTo)</title> <link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 6
<title>汉图古卷 · 河西跳切(precache + jumpTo)</title> <link rel="preconnect" href="https://unpkg.com" crossorigin /> <link rel="preconnect" href="https://tiles.maps.eox.at" crossorigin /> - Network accessline 7
<link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 8
<link rel="preconnect" href="https://tiles.maps.eox.at" crossorigin /> - Network accessline 9
<link rel="preconnect" href="https://s3.amazonaws.com" crossorigin /> - Network accessline 10
<link rel="preconnect" href="https://elevation-tiles-prod.s3.amazonaws.com" crossorigin /> - Network accessline 11
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css" /> - Network accessline 66
<script src="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.js" crossorigin="anonymous" integrity="sha384-GfxBM9x46BaAFxtCq39Fxir8fNZ4VDnwgfi6Kzi5/F1tAFsm0amuuV8kd+Pxzuf/"></script> - Network accessline 67
<script src="https://unpkg.com/gsap@3.12.5/dist/gsap.min.js" crossorigin="anonymous" integrity="sha384-g4NTh/Iv5PPU4xPyhEWqPcwtNXOvdaDI8LLnyYfyNZOjKJeYQyjzQ9X5275eBjpt"></script> - Network accessline 194
async function main() { var preset = await fetch(PRESET_URL).then(function (r) { return r.json(); }); - Network accessline 195
var preset = await fetch(PRESET_URL).then(function (r) { return r.json(); });
mapstage/tuner/index.html
- Network accessline 16
</script> <script src="assets/site-nav.js?v=20260829-w2c"></script> <link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 17
<script src="assets/site-nav.js?v=20260829-w2c"></script> <link rel="preconnect" href="https://unpkg.com" crossorigin /> <link rel="preconnect" href="https://tiles.maps.eox.at" crossorigin /> - Network accessline 18
<link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 19
<link rel="preconnect" href="https://tiles.maps.eox.at" crossorigin /> - Network accessline 20
<link rel="preconnect" href="https://s3.amazonaws.com" crossorigin /> - Network accessline 21
<link rel="preconnect" href="https://elevation-tiles-prod.s3.amazonaws.com" crossorigin /> - Network accessline 22
<link rel="dns-prefetch" href="https://tiles.maps.eox.at" /> - Network accessline 23
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css" /> - Network accessline 24
<link rel="preconnect" href="https://fonts.googleapis.com" /> - Network accessline 25
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> - Network accessline 26
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@500;600&display=swap" rel="stylesheet" /> - Network accessline 29
<script src="assets/vector-paint.js?v=20260929-roadtiers"></script> <!-- Three.js r160 · 3D 城池 custom layer 依赖 --> <script src="https://unpkg.com/three@0.160.0/build/three.min.js" crossorigin="anonymous" integrity="sha384-qOkzR5Ke/XkQxu - Network accessline 30
<!-- Three.js r160 · 3D 城池 custom layer 依赖 --> <script src="https://unpkg.com/three@0.160.0/build/three.min.js" crossorigin="anonymous" integrity="sha384-qOkzR5Ke/XkQxuGVJ9hpFEpDlcoLtWwVYhnJf06cLIZa2vaIptSqaubivErzmD5O"></script> <scrip - Network accessline 31
<script src="https://unpkg.com/three@0.160.0/build/three.min.js" crossorigin="anonymous" integrity="sha384-qOkzR5Ke/XkQxuGVJ9hpFEpDlcoLtWwVYhnJf06cLIZa2vaIptSqaubivErzmD5O"></script>
mapstage/tuner/map-tiles.config.example.js
- Executable scriptline 1
Executable file - Network accessline 28
'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2020_3857/default/g/{z}/{y}/{x}.jpg', - Network accessline 31
maxzoom: 14, attribution: 'Sentinel-2 cloudless © <a href="https://s2maps.eu">EOX</a> · modified Copernicus Sentinel data 2020', - Network accessline 33
'Sentinel-2 cloudless © <a href="https://s2maps.eu">EOX</a> · modified Copernicus Sentinel data 2020', - Network accessline 37
// Other basemaps (local only): tiles: ['https://YOUR-HOST/{z}/{x}/{y}.png'], - Network accessline 47
enabled: true, tiles: [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 48
tiles: [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', 'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png', - Network accessline 49
'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 50
'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png',
mapstage/tuner/map-tiles.config.js
- Executable scriptline 1
Executable file - Network accessline 10
tiles: [ 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2020_3857/default/g/{z}/{y}/{x}.jpg', - Network accessline 11
'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2020_3857/default/g/{z}/{y}/{x}.jpg', - Network accessline 14
maxzoom: 14, attribution: 'Sentinel-2 cloudless © <a href="https://s2maps.eu">EOX</a> · modified Copernicus Sentinel data 2020', - Network accessline 15
attribution: 'Sentinel-2 cloudless © <a href="https://s2maps.eu">EOX</a> · modified Copernicus Sentinel data 2020', sourceId: 'basemapRaster', - Network accessline 16
'Sentinel-2 cloudless © <a href="https://s2maps.eu">EOX</a> · modified Copernicus Sentinel data 2020', - Network accessline 21
enabled: true, tiles: [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 22
tiles: [ 'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', 'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png', - Network accessline 23
'https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png', - Network accessline 24
'https://elevation-tiles-prod.s3.amazonaws.com/terrarium/{z}/{x}/{y}.png', - Network accessline 33
// 墨卡托 PNG(assets/night-lights.png,bounds 与脚本一致)。可换成: // NASA 低清城市灯光(等经纬全球图,浏览器里重投影): // image: 'https://cdn.jsdelivr.net/gh/mrdoob/three.js@r160/examples/textures/planets/earth_lights_2048.png', - Network accessline 34
// NASA 低清城市灯光(等经纬全球图,浏览器里重投影): // image: 'https://cdn.jsdelivr.net/gh/mrdoob/three.js@r160/examples/textures/planets/earth_lights_2048.png', // attribution: 'City lights: NASA Earth Observatory', - Network accessline 35
// image: 'https://cdn.jsdelivr.net/gh/mrdoob/three.js@r160/examples/textures/planets/earth_lights_2048.png', - Network accessline 36
// attribution: 'City lights: NASA Earth Observatory', // NASA GIBS 高清瓦片(公共领域,maxzoom 8): // tiles: ['https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_Black_Marble/default/2016-01-01/GoogleMapsCompatible_Level8/{z}/{y} - Network accessline 37
// NASA GIBS 高清瓦片(公共领域,maxzoom 8): // tiles: ['https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_Black_Marble/default/2016-01-01/GoogleMapsCompatible_Level8/{z}/{y}/{x}.png'], // attribution: 'VIIRS Black Marble: NASA', - Network accessline 38
// tiles: ['https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_Black_Marble/default/2016-01-01/GoogleMapsCompatible_Level8/{z}/{y}/{x}.png'],
mapstage/tuner/scripts/bake-night-lights.mjs
- Executable scriptline 1
Executable file - Network accessline 4
* node tuner/scripts/bake-night-lights.mjs <geonames 目录> [输出 png] * * <geonames 目录> 里放 https://download.geonames.org/export/dump/ 解压后的 - Network accessline 5
* * <geonames 目录> 里放 https://download.geonames.org/export/dump/ 解压后的 * CN.txt TW.txt HK.txt MO.txt cities500.txt(GeoNames, CC BY 4.0)。 - Network accessline 6
* <geonames 目录> 里放 https://download.geonames.org/export/dump/ 解压后的
mapstage/tuner/scripts/build-polar-ice.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/scripts/build-region-isolate.mjs
- Executable scriptline 1
Executable file - Network accessline 21
const NE_URLS = [ 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_50m_admin_0_countries.geojson', - Network accessline 22
'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_50m_admin_0_countries.geojson', - Network accessline 23
'https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_admin_0_countries.geojson', - Network accessline 27
const OSM_FR = 'https://polygons.openstreetmap.fr/get_geojson.py?id='; - Network accessline 64
for (const url of NE_URLS) { try { const res = await fetch(url); - Network accessline 65
try { const res = await fetch(url); if (!res.ok) throw new Error('HTTP ' + res.status + ' ' + url); - Network accessline 66
const res = await fetch(url); - Network accessline 207
try { await new Promise((r) => setTimeout(r, attempt === 0 ? 0 : 800 * (attempt + 1))); const res = await fetch(url, { - Network accessline 208
await new Promise((r) => setTimeout(r, attempt === 0 ? 0 : 800 * (attempt + 1))); const res = await fetch(url, { headers: { 'User-Agent': 'mapstage/region-isolate' }, - Network accessline 209
const res = await fetch(url, { - Network accessline 252
'. Simplified isolate silhouette, not an official boundary.', source: 'OpenStreetMap administrative boundary', sourceUrl: 'https://www.openstreetmap.org/relation/' + spec.relId, - Network accessline 253
source: 'OpenStreetMap administrative boundary', sourceUrl: 'https://www.openstreetmap.org/relation/' + spec.relId, osmRelation: spec.relId, - Network accessline 254
sourceUrl: 'https://www.openstreetmap.org/relation/' + spec.relId,
mapstage/tuner/scripts/city-catalog.mjs
- Executable scriptline 1
Executable file - Possible obfuscationline 8
export const CITY_RAW = [{"relId":2110265,"label":"阿坝藏族羌族自治州","name":"阿坝藏族羌族自治州 རྔ་བ་བོད་རིགས་ཆ་བ༹ང་རིགས་རང་སྐྱོང་ཁུལ་"},{"relId":2748825,"label":"阿克苏地区","name":"阿克苏地区 ئاقسۇ ۋىلايىتى"},{"relId":2752743,"label":"阿拉善盟","name":"阿拉善盟 ᠠᠯᠠᠱᠠ ᠠᠶᠢᠮ
mapstage/tuner/scripts/fetch-city-catalog.mjs
- Executable scriptline 1
Executable file - Network accessline 17
const OVERPASS_ENDPOINTS = [ 'https://overpass-api.de/api/interpreter', - Network accessline 18
'https://overpass-api.de/api/interpreter', - Network accessline 19
'https://overpass.kumi.systems/api/interpreter', - Network accessline 20
'https://overpass.private.coffee/api/interpreter', - Network accessline 34
try { console.log('Trying ' + url); const res = await fetch(url, { - Network accessline 35
console.log('Trying ' + url); const res = await fetch(url, { method: 'POST', - Network accessline 36
const res = await fetch(url, {
mapstage/tuner/scripts/patch-china-boundaries.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 6
* South-China-Sea islands, and the ten-dash maritime line. * * Sources (Natural Earth 10m, https://www.naturalearthdata.com/): - Network accessline 7
* * Sources (Natural Earth 10m, https://www.naturalearthdata.com/): * ne_10m_admin_0_countries_chn China POV land - Network accessline 8
* Sources (Natural Earth 10m, https://www.naturalearthdata.com/): - Network accessline 38
const NE_ADMINS = new Set(['China', 'Hong Kong S.A.R.', 'Macao S.A.R']); const NE_SOURCE = 'Natural Earth 10m (public domain), China POV'; const NE_URL = 'https://www.naturalearthdata.com/'; - Network accessline 40
const NE_URL = 'https://www.naturalearthdata.com/';
mapstage/tuner/scripts/patch-maplibre-terrain-clip.mjs
- Executable scriptline 1
Executable file - Possible obfuscationline 139
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 141
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 texel=vec2(1.0)/vec2(textureSize(u_clip,0 - Possible obfuscationline 150
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 152
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 157
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 159
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 165
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 170
'vec2 p2=a_pos3d.xy;v_skirt=a_pos3d.z;v_clip=1.0;v_drop=0.0;if(u_clip_enabled>0.5){vec2 orig=u_projection_tile_mercator_coords.xy;vec2 sc=max(u_projection_tile_mercator_coords.zw,vec2(1.0e-12));vec2 duv=(sc*64.0)/max(u_clip_size,vec2(1.0e-1 - Possible obfuscationline 182
'float g2=dot(g,g);vec2 dir=vec2(0.0);if(g2>1.0e-12){dir=g*inversesqrt(g2);if(inside)dir=-dir;}if(dot(dir,dir)<1.0e-12){vec2 o;float tt;o=vec2(duv.x,0.0);tt=antiqueClipBi(cu+o);if((inside&&tt<0.5)||(!inside&&tt>=0.5))dir=o;o=vec2(-duv.x,0.0 - Network accessline 1154
if (!existsSync(src)) { console.error('Missing ' + src); console.error('Download https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl-dev.js first.'); - Network accessline 1155
console.error('Missing ' + src); console.error('Download https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl-dev.js first.'); process.exit(1); - Network accessline 1156
console.error('Download https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl-dev.js first.');
mapstage/tuner/scripts/patch-maritime-islands.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 149
'Extracted from the Natural Earth China POV china MultiPolygon (public domain). Dongsha / Zhongsha / Zengmu Ansha are schematic markers. Narrative isolate silhouette.', source: 'Natural Earth 10m via china isolate MultiPolygon parts', - Network accessline 150
source: 'Natural Earth 10m via china isolate MultiPolygon parts', sourceUrl: 'https://www.naturalearthdata.com/', simplifyEpsilonDeg: 0.008, - Network accessline 151
sourceUrl: 'https://www.naturalearthdata.com/', - Network accessline 184
'Union of SCS / Diaoyu island parts extracted from the Natural Earth china MultiPolygon. Narrative isolate silhouette.', source: 'Natural Earth 10m via china isolate MultiPolygon parts', sourceUrl: 'https://www.naturalearthdata.com/', - Network accessline 185
source: 'Natural Earth 10m via china isolate MultiPolygon parts', sourceUrl: 'https://www.naturalearthdata.com/', simplifyEpsilonDeg: 0.008, - Network accessline 186
sourceUrl: 'https://www.naturalearthdata.com/',
mapstage/tuner/scripts/province-catalog.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/scripts/simplify-landcover-globe.mjs
- Executable scriptline 1
Executable file
mapstage/tuner/vector-layers.html
- Network accessline 5
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>皮肤编辑 · MapStage Studio</title> <link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 6
<title>皮肤编辑 · MapStage Studio</title> <link rel="preconnect" href="https://unpkg.com" crossorigin /> <link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> - Network accessline 7
<link rel="preconnect" href="https://unpkg.com" crossorigin /> - Network accessline 8
<link rel="preconnect" href="https://tiles.openfreemap.org" crossorigin /> - Network accessline 9
<link rel="preconnect" href="https://s3.amazonaws.com" crossorigin /> - Network accessline 10
<link rel="preconnect" href="https://elevation-tiles-prod.s3.amazonaws.com" crossorigin /> - Network accessline 11
<link rel="preconnect" href="https://tiles.mapterhorn.com" crossorigin /> - Network accessline 12
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.6.0/dist/maplibre-gl.css" /> - Network accessline 13
<link rel="preconnect" href="https://fonts.googleapis.com" /> - Network accessline 14
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> - Network accessline 15
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@500;600&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet" /> - Network accessline 210
<div class="kicker">VECTOR LAYERS · <b id="chrome-proj">GLOBE</b></div> <div class="nav-right"> <a class="gh" href="https://github.com/hopechen067/MapStage" target="_blank" rel="noopener">GitHub</a> - Network accessline 211
<div class="nav-right"> <a class="gh" href="https://github.com/hopechen067/MapStage" target="_blank" rel="noopener">GitHub</a> </div> - Network accessline 212
<a class="gh" href="https://github.com/hopechen067/MapStage" target="_blank" rel="noopener">GitHub</a>
mapstage/tuner/vendor/maplibre-contour.min.js
- Possible obfuscationline 1
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).mlcontour=e()}(this,(function(){"use strict";var t, - Executable scriptline 1
Executable file - Possible obfuscationline 15
***************************************************************************** */function o(t,e){var i={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(i[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPrope
mapstage/tuner/vendor/maplibre-gl.js
- Executable scriptline 1
Executable file - Network accessline 3
/** * MapLibre GL JS * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v5.6.0/LICENSE.txt - Network accessline 4
* MapLibre GL JS * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v5.6.0/LICENSE.txt */ - Network accessline 5
* @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v5.6.0/LICENSE.txt - Network accessline 5283
// benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed - Network accessline 6049
// Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646. // http://projecteuclid.org/euclid.aoms/1177692644; - Network accessline 6050
// http://projecteuclid.org/euclid.aoms/1177692644; - Network accessline 6593
// benchmarks: // http://jsperf.com/quaternion-slerp-implementations - Network accessline 6594
// http://jsperf.com/quaternion-slerp-implementations - Network accessline 6644
// Implementation of http://planning.cs.uiuc.edu/node198.html - Network accessline 8709
// https://mathworld.wolfram.com/Plane-PlaneIntersection.html - Network accessline 8751
// Uses a more precise solution from the book Ray Tracing Gems, chapter 7. // https://www.realtimerendering.com/raytracinggems/rtg/index.html - Network accessline 8752
// https://www.realtimerendering.com/raytracinggems/rtg/index.html - Network accessline 9118
// https://bryceboe.com/2006/10/23/line-segment-intersection-algorithm/ - Network accessline 9184
// Taken from [Wreck](https://github.com/hapijs/wreck) - Network accessline 9204
* This is used as a workaround for a memory leak in Safari caused by using Transferable objects to * transfer data between WebWorkers and the main thread. * https://github.com/mapbox/mapbox-gl-js/issues/8771 - Network accessline 9205
* transfer data between WebWorkers and the main thread. * https://github.com/mapbox/mapbox-gl-js/issues/8771 * - Network accessline 9206
* https://github.com/mapbox/mapbox-gl-js/issues/8771 - Network accessline 9233
// The following methods are from https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem - Possible obfuscationline 9242
return decodeURIComponent(atob(str).split('').map((c) => { - Network accessline 9288
// prevent image dataURI memory leak in Safari; // but don't free the image immediately because it might be uploaded in the next frame // https://github.com/mapbox/mapbox-gl-js/issues/10226 - Network accessline 9290
// https://github.com/mapbox/mapbox-gl-js/issues/10226 - Network accessline 9597
* // This will fetch a file using the fetch API (this is obviously a non interesting example...) * addProtocol('custom', async (params, abortController) => { * const t = await fetch(`https://${params.url.split("://")[1]}`); - Network accessline 9598
* addProtocol('custom', async (params, abortController) => { * const t = await fetch(`https://${params.url.split("://")[1]}`); * if (t.status == 200) { - Network accessline 9599
* const t = await fetch(`https://${params.url.split("://")[1]}`); - Network accessline 9683
let response; try { response = yield fetch(request); - Network accessline 9684
try { response = yield fetch(request); } - Network accessline 9685
response = yield fetch(request); - Network accessline 9916
// Compatibility with (type: string, properties: Object) signature from previous versions. // See https://github.com/mapbox/mapbox-gl-js/issues/6522, - Network accessline 9917
// See https://github.com/mapbox/mapbox-gl-js/issues/6522, - Network accessline 9918
// https://github.com/mapbox/mapbox-gl-draw/issues/766
mapstage/tuner/verify.mjs
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 29 facts
- Contacts s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/runtime/verify-vector-layers.mjs:171High confidence
- Contacts s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/tuner-app.js:1616High confidence
- Contacts elevation-tiles-prod.s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/tuner-app.js:1617High confidence
- Contacts tiles.openfreemap.org, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:17High confidence
- Contacts openfreemap.org, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:20High confidence
- Contacts openmaptiles.org, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:20High confidence
- Contacts www.openstreetmap.org, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:20High confidence
- Contacts tiles.mapterhorn.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:87High confidence
- Contacts mapterhorn.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:92High confidence
- Contacts s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:97High confidence
- Contacts protomaps.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/assets/vector-paint.js:1136High confidence
- Contacts tiles.maps.eox.at, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.example.js:28High confidence
- Contacts s2maps.eu, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.example.js:33High confidence
- Contacts s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.example.js:49High confidence
- Contacts elevation-tiles-prod.s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.example.js:50High confidence
- Contacts tiles.maps.eox.at, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.js:11High confidence
- Contacts s2maps.eu, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.js:16High confidence
- Contacts s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.js:23High confidence
- Contacts elevation-tiles-prod.s3.amazonaws.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/map-tiles.config.js:24High confidence
- Contacts d2ad6b4ur7yvpq.cloudfront.net, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/build-region-isolate.mjs:22High confidence
- Contacts raw.githubusercontent.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/build-region-isolate.mjs:23High confidence
- Contacts polygons.openstreetmap.fr, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/build-region-isolate.mjs:27High confidence
- Contacts www.openstreetmap.org, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/build-region-isolate.mjs:254High confidence
- Contacts overpass-api.de, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/fetch-city-catalog.mjs:18High confidence
- Contacts overpass.kumi.systems, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/fetch-city-catalog.mjs:19High confidence
- Contacts overpass.private.coffee, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/fetch-city-catalog.mjs:20High confidence
- Contacts www.naturalearthdata.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/patch-china-boundaries.mjs:40High confidence
- Contacts unpkg.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/patch-maplibre-terrain-clip.mjs:1156High confidence
- Contacts www.naturalearthdata.com, which SKILL.md, the README and the plugin manifest do not mentionmapstage/tuner/scripts/patch-maritime-islands.mjs:151High confidence
Signal confidence: 454 facts
- Network access in prose of the SKILL.mdmapstage/SKILL.md:16Low confidence
- Network access in prose of the SKILL.mdmapstage/SKILL.md:90Low confidence
- Executable script in a comment of a file that runsmapstage/install-skill.mjs:1Low confidence
- Network access in code of documentationmapstage/references/api-board.md:6Low confidence
- Network access in code of documentationmapstage/references/api-story.md:6Low confidence
- Network access in code of documentationmapstage/references/api.md:31Low confidence
- Network access in code of documentationmapstage/references/api.md:32Low confidence
- Network access in prose of documentationmapstage/references/examples-guide.md:7Low confidence
- Network access in prose of documentationmapstage/references/examples-guide.md:8Low confidence
- Network access in prose of documentationmapstage/references/examples-guide.md:9Low confidence
- Network access in code of documentationmapstage/references/examples-guide.md:21Low confidence
- Network access in code of documentationmapstage/references/examples-guide.md:22Low confidence
- Network access in code of documentationmapstage/references/examples-guide.md:23Low confidence
- Network access in code of documentationmapstage/references/examples-guide.md:40Low confidence
- Network access in code of documentationmapstage/references/hosts.md:49Low confidence
- Network access in code of documentationmapstage/references/hosts.md:50Low confidence
- Network access in prose of documentationmapstage/references/hosts.md:72Low confidence
- Network access in prose of documentationmapstage/references/hosts.md:96Low confidence
- Network access in prose of documentationmapstage/references/hosts.md:98Low confidence
- Network access in code of documentationmapstage/references/hosts.md:136Low confidence
- Network access in prose of documentationmapstage/references/hosts.md:141Low confidence
- Network access in prose of documentationmapstage/references/hosts.md:143Low confidence
- Network access in code of documentationmapstage/references/install.md:24Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:7Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:8Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:9Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:22Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:23Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:24Low confidence
- Network access in prose of documentationmapstage/references/maplibre-official-gap.md:238Low confidence
- Network access in prose of documentationmapstage/references/maplibre-optimization-and-enablement.md:7Low confidence
- Network access in prose of documentationmapstage/references/maplibre-optimization-and-enablement.md:9Low confidence
- Network access in prose of documentationmapstage/references/maplibre-optimization-and-enablement.md:44Low confidence
- Network access in prose of documentationmapstage/references/maplibre-optimization-and-enablement.md:46Low confidence
- Network access in prose of documentationmapstage/references/maplibre-optimization-and-enablement.md:64Low confidence
- Network access in prose of documentationmapstage/references/overview.md:3Low confidence
- Network access in code of documentationmapstage/references/play.md:24Low confidence
- Network access in code of documentationmapstage/references/play.md:25Low confidence
- Network access in code of documentationmapstage/references/play.md:50Low confidence
- Network access in code of documentationmapstage/references/quickstart.md:22Low confidence
- Network access in code of documentationmapstage/references/quickstart.md:23Low confidence
- Network access in code of documentationmapstage/references/quickstart.md:24Low confidence
- Network access in code of documentationmapstage/references/quickstart.md:27Low confidence
- Network access in prose of documentationmapstage/references/quickstart.md:63Low confidence
- Network access in prose of documentationmapstage/references/roadmap.md:37Low confidence
- Network access in prose of documentationmapstage/references/tuner-workflow.md:12Low confidence
- Executable script in a comment of a file that runsmapstage/runtime/benchmark-vector-tuning.mjs:1Low confidence
- Network access in code of a file that runsmapstage/runtime/benchmark-vector-tuning.mjs:27High confidence
- Network access in code of a file that runsmapstage/runtime/benchmark-vector-tuning.mjs:28High confidence
- Network access in code of a file that runsmapstage/runtime/benchmark-vector-tuning.mjs:29High confidence
and 404 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path CLAUDE.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md mapstage/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md mapstage/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md mapstage/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md mapstage/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.