Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
AR phone web app: point at the sky to see which planes are up there (live ADS-B)
Translation pending
LifestyleGitHub @VVlad12OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗An Android app that labels the planes in the sky on the camera image: a box around each plane with the airline, flight number, aircraft type, distance and altitude, from live ADS-B data. It reuses the camera, compass and projection code of Sun Path.
Web demo (simulated traffic): https://vvlad12.github.io/flightspot/?demo
alt_geom, same reference as the phone's
GPS) when the plane sends it, else pressure altitude.In demo mode (simulated traffic), the boxes are drawn from fake reports that are 1–9 s late, and the real positions are drawn as small dark planes with contrails. If the boxes sit on the planes, the prediction works. On straight paths the error is a few metres; in turns it grows (the circling Cessna is off by about 50–100 m).
Positions come from adsb.lol, a free community ADS-B network (data under the
ODbL licence, credited in the app). adsb.lol doesn't send CORS headers, so a web page may not
read its answers, and proxies on Cloudflare are refused by every free feed (adsb.lol 429,
adsb.fi 403, OpenSky timeouts). In the Android app, fetch() goes through Android's own HTTP
client (Capacitor's CapacitorHttp), which has no CORS rule: the phone calls adsb.lol directly,
from its own connection.
node serve.mjs passes /adsb/... through to adsb.lol, so live data can
be tested in a desktop browser.The same index.html, css/ and js/ run in all three. Per hour of use the app makes about
720 requests (one every 5 s) and downloads roughly 5–20 MB, only while it is open. Callsigns of
planes in view are sent to adsbdb.com to look up routes (cached for 6 h). If adsb.lol
answers 429 (rate-limited), the app waits 15 s and tries again.
android/app/build/outputs/apk/debug/app-debug.apk to the phone (USB, Drive, email…)
and open it. Android asks to allow installing apps from that source the first time.Open ?demo (or tap Demo): Zürich city, looking north to the airport, with simulated
arrivals, departures, overflights and a circling Cessna. Drag or use the arrow keys to look
around. On the local dev server, Settings → Source → Live ADS-B feed shows the real traffic
around Zürich in the same view.
The web app is plain HTML, CSS and ES modules, no build step. The Android app is a Capacitor 6 wrapper around the same files (Capacitor 6 because it builds with JDK 17).
npm install # Capacitor, once
npm test # geometry, feed parsing, prediction, simulator (Node 18+)
node serve.mjs # http://localhost:8001, with the /adsb passthrough
npm run android:apk # copy the web app to www/, sync, build the debug APK
npm run android:sync then opening android/ in Android Studio also works (Run ▶ installs on a
connected phone). Needs JDK 17 and the Android SDK (platform 35); android/local.properties
points to the SDK and isn't committed. node scripts/make-icons.mjs redraws the web and launcher
icons.
When you change any file, bump VERSION in sw.js and js/app.js so installed web copies update.
| File | Purpose |
|---|---|
js/projection.js | Camera model (copied from Sun Path, keep in sync) |
js/sensors.js | Camera, orientation, GPS (copied from Sun Path, plus watchLocation with altitude) |
js/solar.js | Sun position, for sun calibration (copied from Sun Path) |
js/geo.js | WGS84 → ECEF → ENU, look angles, dead reckoning |
js/feed.js | Feed parsing (readsb JSON), polling, prediction and smoothing, ground filter |
js/gps.js | Averages GPS fixes into a steadier position, settling / stable status |
js/routes.js | Origin and destination from adsbdb.com, cached, checked against the plane's position |
js/airlines.js | Callsign → airline (ICAO code table), aircraft types and wingspans |
js/sim.js | Simulated traffic around Zürich for demo mode |
js/render.js | Boxes, labels, edge arrows, demo sky scene |
js/app.js | UI, settings, calibration, picks the feed (native / dev server / none) |
android/ | Capacitor Android project (permissions: camera, location, internet) |
android/.../OrientationPlugin.java | Phone orientation from Android's rotation vector sensor |
capacitor.config.json | App id ch.dxan.flightspot, native HTTP on |
scripts/build-www.mjs | Copies the web app into www/ for Capacitor |
scripts/make-icons.mjs | Draws the web and Android icons |
serve.mjs | Local static server with the /adsb passthrough |
ABC 123.