Every camera setting. Exact tab, page, row.
A PWA that tells you exactly where a camera setting lives: which tab, which page, which row. It shows a copy of the camera's menu screen with your row marked, plus numbered steps. Like a mall directory for your camera menu.
Cameras so far:
| Camera | Firmware | Menu pages | Rows |
|---|---|---|---|
| Canon EOS R5 Mark II | 1.3.2 | 56 | 274 |
| Canon EOS R6 Mark III | 1.1.0 | 60 | 266 |
| Canon EOS R8 Mark II | 1.0.0 (launch) | 59 | 261 |
Live: https://akhater.github.io/menudex/ (open it on your phone and add it to your home screen).
It's static files with no build step. Any static server works:
python -m http.server 8765Then open http://localhost:8765. To install it on a phone, deploy the folder to any static host with HTTPS (GitHub Pages, Cloudflare Pages, Netlify) and use "Add to Home Screen". After the first visit it works offline.
When you change the app shell (index.html, css/, js/), bump VERSION in sw.js so installed copies refresh.
| Path | What it is |
|---|---|
index.html, css/app.css |
Mobile-first UI, dark by default, follows the system light/dark setting |
js/app.js |
Routing (#/brand/model/firmware/item/<key>), the search/browse/item views, the walker steps |
js/search.js |
Client-side fuzzy search over item names, sub-menus, synonyms and descriptions |
sw.js |
Offline cache: app shell plus every camera file in the catalog |
data/catalog.json |
Brand → model → firmware list that drives the camera picker (generated) |
data/<brand>/<model>/<firmware>.json |
One camera's menu: tabs → pages (with "2/10" positions per Photo/Movie switch) → rows (generated) |
tools/canon/extract.py |
Builds a camera file from Canon's online manual (stdlib only) |
tools/canon/cameras/*.json |
Per-camera config: manual URL, tab colors, controls, which manual pages list the menus |
tools/canon/enrich/common.json |
Hand-written descriptions and search synonyms shared by all Canon bodies, keyed by item |
tools/canon/cameras/*.enrich.json |
Per-camera extras: firmware notes, label fixes, page notes |
Canon's online Advanced User Guide has one "Tab Menus" page per tab, listing every page and numbered row, and marking Creative-Zone-only items. The extractor reads those pages, pulls sub-menu names ("Auto range", "Min. shutter spd.") from each linked feature page, and drops cross-references to other menu items. Page counts and row order were checked against the manual's own menu screenshots.
Positions assume a Creative Zone mode (P/Tv/Av/M/Fv/B/C1–C3). In A+ and SCN the camera hides the ★ items, so rows below them move up. The app says so on every ★ item.
For a Canon body with a cam.start.canon manual:
- Copy
tools/canon/cameras/eos-r6-mark-iii.json, then setmodel,firmware,slug,out,source.url,enrich, and thelistings(the manual's "Tab Menus: …" pages). Check the manual's "Menu Operations and Settings" page: if the camera moves through menus differently, setcontrols(seeeos-r8-mark-ii.json, which uses the INFO button). - Run
python tools/canon/extract.py tools/canon/cameras/<camera>.json. It caches manual pages in.cache/, writes the camera file, regeneratesdata/catalog.json, and lists items that have no enrich entry yet. - Add those items to
tools/canon/enrich/common.json(desc,kwsynonyms). Camera-only notes (fw, label fixes,_pages) go in the camera's own enrich file. - Check a few pages against the manual's menu screenshots. Firmware updates can add, remove or reorder rows.
Other brands need their own extractor that writes the same camera file format. The app itself is brand-agnostic.
tools/make_icons.py (needs Pillow) re-renders the PNG icons from the same design as icons/icon.svg.
Not affiliated with Canon. Menu names are Canon's; descriptions are original. Code is MIT licensed (see LICENSE).