尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证基于浏览器的卫星影像比较软件——无需服务器、无需账户、无需安装。打开后立即显示金边的实时前后对比滑块,使用 Esri 卫星影像并叠加 CARTO 参考地图,界面从第一秒起即可自解释。
AI 翻译
A browser-based tool for satellite imagery comparison — no server, no account, no install. Open it and it immediately shows you a live before/after slider over Phnom Penh using Esri satellite imagery alongside a CARTO reference map, so the interface is self-explanatory from the first second.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A browser-based tool for satellite imagery comparison — no server, no account, no install. Your photos and keys stay on your device.
Open it and you get a friendly start screen: add photos, capture from the map, open one of the bundled field sites, or continue your last project (autosaved on your device). Pick two photos by tapping their thumbnails and drag the divider to compare.查看完整 README ↗A browser-based tool for satellite imagery comparison — no server, no account, no install. Your photos and keys stay on your device.
Live at phnaekpkay.vercel.app
Open it and you get a friendly start screen: add photos, capture from the map, open one of the bundled field sites, or continue your last project (autosaved on your device). Pick two photos by tapping their thumbnails and drag the divider to compare.
Ctrl/Cmd+V)| View | What it does |
|---|---|
| All | Side-by-side grid in 2, 3 or 4 columns (1–2 on phones). |
| Compare | Draggable before/after divider (keyboard accessible). Drag or pinch each photo independently. Optional third photo. |
| Blend | Two photos blended with one slider; "Blink" auto-pulses for spotting subtle differences. |
| Play | Timelapse through every photo with smooth fades and a tappable timeline. |
| Changes | Highlights likely change and says how much of the area changed. One sensitivity slider, compare by colour, brightness or vegetation. |
The sidebar's Live satellite capture section lets you navigate a tile map and capture the current view as a frame. The same map is also embedded directly in the Slider view — you never need to open the sidebar just to change location.
| Provider | Key required | Dated imagery |
|---|---|---|
| Esri World Imagery | No | No — current mosaic |
| CARTO Voyager | No | No — reference map |
| NASA GIBS | No | Yes — VIIRS/MODIS near-real-time |
| Google Satellite | No (unofficial) | No — current mosaic |
| Mapbox Satellite | Free token | No — current mosaic |
| Sentinel Hub | Free config ID | Yes — dated 10 m Sentinel-2 |
For real before/after by date, use Sentinel Hub (free tier, ~10 m resolution). For a quick reference overlay, use Esri or CARTO. For historical imagery from Google Earth Pro, paste screenshots with Ctrl/Cmd+V.
MediaRecorder)The Field sites carousel (and menu entry) opens documented villages along the Cambodia–Thailand border. Each site is a small project.json plus WebP frames under public/assets/sites/<slug>/ (about 0.9 MB per site; the old 10 MB base64 JSON files were converted with tools/convert-sites.py). Share links look like /p/<lat>,<lng>.
npm install
npm run dev # Vite dev server
npm run lint # ESLint (also forbids innerHTML)
npm test # unit tests (Vitest)
npm run build # production build to dist/
npm run test:e2e # build, then Playwright on phone + desktop profiles
npm run serve:dist # serve dist/ with the headers from vercel.json
End-to-end tests run against tools/serve-dist.mjs, which applies the same headers and rewrites as vercel.json, so the enforced Content-Security-Policy is exercised. Locally, point Playwright at a browser with PW_CHROMIUM_PATH=/path/to/chrome; in CI run npx playwright install --with-deps chromium first.
index.html markup only (no inline script)
src/main.js app controller (being split into modules)
src/lib/ tested, DOM-light modules: dom, geo, format, project (validation),
change-detect, blob, secrets, store (IndexedDB), i18n, toast, share, install-help
src/components/ picker, start screen pieces
src/styles/ tokens → layout → components → stage
src/workers/ AI upscale worker (onnxruntime-web, self-hosted)
public/ static files: icons, splash images, field sites, sw.js, manifest
tools/ icon + splash generator, site converter, dist server
tests/ unit (Vitest) and e2e (Playwright)
iOS reads <link rel="apple-touch-icon"> (not the manifest) and needs an opaque, square PNG. tools/make-icons.mjs generates the whole set (120/152/167/180 px, root /apple-touch-icon.png, maskable/any PWA icons, favicon.ico, 12 launch screens) from one design; run python3 -I tools/optimize-splash.py afterwards. If the icon is still blank after deploying:
Enhance runs a local ONNX super-resolution model (Real-ESRGAN or SwinIR) in the browser through ONNX Runtime WebAssembly, self-hosted under /vendor/ort/ and only started when you load a model. Generated detail is for visual review only; originals remain the analytical source and enhanced photos are labelled.
public/models/RealESRGAN_x4plus.onnx is stored with Git LFS. For the hosted model to work on Vercel, enable Settings → Git → Git Large File Storage (LFS); otherwise the file served is a tiny pointer and loading fails (use the file picker instead).
See SECURITY.md for the model and for the keys that remain in git history and must be rotated.
MIT — see LICENSE.