尚未偵測到更新。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