尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證GROK.ATLAS — photoreal Earth globe with ISS cupola night limb, country cascade overlay, and shareable field states.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Photoreal Earth from the ISS cupola. One custom Earth shader — not a map engine. Day/night terminator, city lights, clouds, airglow limb, tides, a 30° cage, and a seat on the station.
Home camera is the Nile Delta / Eastern Mediterranean — the cupola night-limb frame.
Quiet edition is the default (the window). ?v=2 is the instrument.檢視完整 README ↗Photoreal Earth from the ISS cupola. One custom Earth shader — not a map engine. Day/night terminator, city lights, clouds, airglow limb, tides, a 30° cage, and a seat on the station.
Home camera is the Nile Delta / Eastern Mediterranean — the cupola night-limb frame.
Quiet edition is the default (the window). ?v=2 is the instrument.
Live: grok-atlas.vercel.app
Share:
T, and the globe gets the whole window back. It scrolls, and fades its bottom edge only while there is more below.now to fall back into the real sky. The clock is gold whenever it is not the real one.T toolbox, L locate, I ISS ride, Space hold time, , . scrub an hour, N back to now, Esc leave the ride then close the toolbox. Nothing fires while a field has focus, so find country still takes an i.ISS on the dock, iss ride in the toolbox, ?site=iss in a link. Any country tap or view leaves the ride and flies back out.30°N, 60°E). Every reading is one quad in one buffer, billboarded in the vertex shader, so the whole set costs one draw call.?tier=high|mid|low.?c=Armenia, ?site=nile or ?site=iss, plus ?t= when the clock is off the real sky: a link carries the instant as well as the place.The globe is not gated on countries JSON. Canvas first, then the day map (first photoreal frame), then city lights (overlay leaves), then relief / clouds / atlas in the background. Low-tier devices skip spec/normal/clouds after lights so the first second stays cheap.
Day and night maps are rel="preload" in the document head, and the atlas chunk is requested when the route module evaluates rather than when the component mounts — the textures come down the same connection as the code instead of queueing behind it.
Nothing that fails is silent and nothing hangs: a stage that will not arrive still completes the strip, and leaves one line naming what the globe is now missing. A strip that has not moved for seven seconds says so.
City lights are lamps, not a texture wash. The terminator is taken from the geometric normal, so relief grain cannot chew holes in it; lamps come up through civil twilight and are full by nautical dark rather than cross-fading against daylight; sodium warms the outskirts and arclight cools the cores; and above the compat tier four taps of the night map put the haze a city throws into its own air around the bright ones. The night map's dim albedo floor — sensor noise over empty land, which used to wash the Sahara violet — is gated out. Day and night add rather than cross-fade, so dusk shows the half hour where the ground is still lit and the lamps are already on, and a full moon puts a little blue-grey back on cloud tops, scaled by the phase it is actually at.
Two files under public/geo/, built by node scripts/build-atlas-data.mjs and
committed:
| File | What | Size |
|---|---|---|
country-facts.json | capital, its coordinates and metro population, region, area, land neighbours — for all 177 countries in the topology | 32 KB |
rivers.json | twelve great rivers, each a single course from source to mouth | 19 KB |
Capitals come from Natural Earth's populated-places layer, which is the same
source family as the outlines, so the country names join without guesswork.
Region and area come from world-countries, a dev dependency the app never
ships. Seven entries have no capital — Antarctica and six dependencies that the
110m places layer gives no Admin-0 capital, which is true rather than invented.
Capital stories live in src/lib/atlas/stories.ts, keyed by ISO 3166-1 alpha-3,
and cover about half the map. A capital without one shows the measured line
instead: region, area, neighbours. An empty space is better than an invented
sentence.
The shaders are written for 60. The device tier decides how many octaves of
grain get linked — GRAIN_OCTAVES is a define, not a branch — and a governor
watches the frame rate from there: under ~49 fps for the best part of a second
it steps the render scale down a rung and dims the grain with it, and hands both
back after 3.5 s of headroom. Four rungs, 1.0 down to 0.5. The toolbox prints the
live rate and the current rung next to the GPU line.
Per frame, the rig aims to allocate nothing and recompute nothing it already knows. The sun, moon, station and ride seat write into vectors they own rather than returning fresh arrays; the station's pose and the ground-track buffer are solved once per fix, not once per frame; the ephemeris is read four times a second, not sixty. Both airglow shells share one sphere, coarser below the top tier, and the selection wash drops to 1024×512 there — a country tap re-uploads a quarter of the texture it used to.
TanStack Start, React 19, Three.js, React Three Fiber, custom Earth shaders, Natural Earth 110m, Zustand, Tailwind v4.
Textures: day / night lights / specular / normal / clouds under public/earth/. Topology: public/geo/countries-110m.json.
npm install
npm run dev
TanStack Start + Nitro. Do not pick Vite / Create React App — they look for dist and the globe comes up blank.
On the import screen:
| Field | Value |
|---|---|
| Project name | grok-atlas |
| Application Preset | TanStack Start (scroll). If missing, Other |
| Root Directory | ./ |
| Build / Output | leave defaults |
vercel.json pins "framework": "tanstack-start". No env vars. Production branch is prod.