尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗The Hidden Dimension — six familiar charts, each opened back into the dimension it flattened.
Live: datascape-5of.pages.dev
Every chart on a page is flat because something was folded away: height, density, time, the ground under the water. Each piece here starts from a chart you have seen before, built from real measurements, and opens it into the space it came from. Three.js and Vite, no framework.
| Piece | The flat chart | What it opens into | Data |
|---|---|---|---|
| Storm Chamber | Weather radar map | The fourteen cones of one radar volume scan, filled into a box of sky that can be cut open, 13 minutes before the 2013 Rozel tornado | NOAA NEXRAD Level II (KDDC); NCEI Storm Events |
| The Shadow of Water | Phase diagram of water | The pressure–temperature–density surface that casts it | IAPWS-95 (CoolProp), IAPWS R10-06 and R14-08 (iapws) |
| The Electric Heart | 12-lead ECG | The loop the heart's electrical vector draws in space | PTB Diagnostic ECG Database (PhysioNet) |
| Between Tides | Tide gauge curve | A month of measured tide laid over the surveyed ground it floods | NOAA CO-OPS 8410140; NOAA NCEI CUDEM |
| Commit City | GitHub contribution calendar | A city at night, or a contour terrain, one building a day | GitHub, for any username |
| PSR B1919+21 | The stacked pulsar plot | White ridges driven by music, a microphone or a built-in synth | Your audio |
The four stories are guided in chapters, with a "Hidden dimension" control that folds each scene
back to its flat chart. Every figure on screen comes from the data it cites, and each piece has an
"About the data" panel. docs/storm-chamber.md documents Storm Chamber's
method, verification and limitations in full.
Requires Node.js 20 or later (CI uses the version in .nvmrc). The stories need WebGL 2.
npm install
npm run dev # http://localhost:5173
npm run build # static site in dist/
npm run preview # serve dist/, with /api/contributions
Commit City reads the calendar through /api/contributions?user=<name>&year=<year>, because a
browser cannot fetch it directly. With a GITHUB_TOKEN (any read-only token) the server uses
GitHub's GraphQL API. Without one it parses the public github.com/users/<name>/contributions
page, which needs no setup but can break when GitHub changes the page. Results are cached in memory
for ten minutes.
npm run lint # ESLint
npm test # Vitest: data integrity, beam geometry, physical reference values, every figure in the prose
npm run test:e2e # Playwright on the production build: every chapter, interactions, layout, accessibility
The unit tests read the committed data the way the pages do. They check:
Locally the browser tests drive your installed Google Chrome with the real GPU. In CI they run on Chromium with WebGL in SwiftShader, split across two runners. They check:
DecompressionStream or JavaScript, and recovery from a lost GPU
context;Everything in public/data/ is generated by the scripts in scripts/ and can be rebuilt byte for
byte from public sources:
python3.12 -m venv .venv && .venv/bin/pip install -r scripts/requirements.txt
PYTHON=.venv/bin/python scripts/check_reproducible.sh # all four stories
PYTHON=.venv/bin/python scripts/check_reproducible.sh storm tides # or some of them
The script downloads about 300 MB of sources: the radar volume, the PTB record and two CUDEM tiles.
Set DATASCAPE_CACHE=<dir> to keep them between runs. It checks each source against the SHA-256 it
had when the data were made, reruns the unmodified generators, and compares every output with the
committed file. CI does the same whenever a generator or the data change, and weekly.
index.html, storm.html, water.html, one page per piece; Vite builds them as a multi-page app
heart.html, tides.html,
skyline.html, pulsar.html
src/shared/ renderer and post-processing, the chapter card and camera rig, scene labels,
the dimension control, the About panel, self-hosted fonts, series styles
src/storm/ radar beam model, sweeps, ray-marched volume with precomputed sunlight, section
src/water/ IAPWS surface, coexistence walls, processes, the diagrams it casts
src/heart/ ECG paper, vectorcardiogram trace and its shadows
src/tides/ terrain, water plane, tide timeline and recorder
src/skyline/ instanced city, contour terrain, plinth, hover and snapshot
src/pulsar/ ring-buffer ridges, audio sources, the demo synth
server/ contribution calendar fetch and parse (runs in Node and Workers)
functions/ Cloudflare Pages Function: /api/contributions
scripts/ Python generators for public/data/, and the reproducibility check
tests/unit/ Vitest
tests/e2e/ Playwright
Storm Chamber adapts its resolution to keep frames on time. It counts frames that miss the display's interval and trades pixel ratio for a steady 60 fps (measurements are in the Storm Chamber notes).
The site is static, plus one Cloudflare Pages Function:
npm run builddist.nvmrcfunctions/ serves /api/contributions.GITHUB_TOKEN (a fine-grained token with read-only access to public
repositories is enough) to avoid GitHub's limits on page scraping.public/_headers makes hashed assets immutable and caches the data for a day.To check a build under the Pages runtime before deploying, or a deployed preview:
npm run build && npx wrangler pages dev dist --port 8788
BASE_URL=http://localhost:8788 npm run test:e2e