|
Download packaging/README.md from InsightUX/Insight_UX_1.0: direct link, hf CLI and curl.
- Browser
- Download file 4.19 kB
-
https://huggingface.co/InsightUX/Insight_UX_1.0/resolve/main/packaging/README.md
- Command line
-
hf download hf://InsightUX/Insight_UX_1.0/packaging/README.md
-
curl -L -o README.md https://huggingface.co/InsightUX/Insight_UX_1.0/resolve/main/packaging/README.md
4.19 kB
| # Packaging InsightUX as a downloadable installer | |
| Turns the cloned-repo-plus-venv workflow into a single Windows installer | |
| (`InsightUX-Setup-<version>.exe`) that bundles Python, torch, mediapipe, | |
| onnxruntime, opencv, and pywebview β end users need nothing pre-installed. | |
| ## One-time setup (per machine you build from) | |
| 1. In the project venv: `pip install pyinstaller` | |
| 2. Install [Inno Setup 6](https://jrsoftware.org/isdl.php) (free) β provides | |
| `ISCC.exe`, the command-line compiler `installer.iss` needs. Not required | |
| just to build the app itself, only to build the final installer. | |
| 3. (Optional but recommended) Download Microsoft's WebView2 bootstrapper | |
| (`MicrosoftEdgeWebview2Setup.exe`) from | |
| [Microsoft's evergreen bootstrapper page](https://developer.microsoft.com/microsoft-edge/webview2/) | |
| and place it in this `packaging/` folder before compiling the installer β | |
| `installer.iss` bundles and silently runs it if present, as a safety net | |
| for machines missing the WebView2 Runtime (usually already present on | |
| modern Windows 10/11, but not guaranteed on older/locked-down machines). | |
| If you skip this, the installer still builds fine, just without that | |
| safety net. | |
| ## Build | |
| From the repo root: | |
| ```powershell | |
| pyinstaller packaging\InsightUX.spec --noconfirm | |
| ``` | |
| Output: `dist\InsightUX\` (a folder β `InsightUX.exe` + `_internal\`). Run | |
| `dist\InsightUX\InsightUX.exe` directly first to confirm it actually starts | |
| before building the installer β much faster to debug a missing-DLL/missing- | |
| data-file error at this stage than after wrapping it in an installer. | |
| **Expect to iterate on the first build.** mediapipe, torch, and onnxruntime | |
| all ship native binaries and non-`.py` data files that PyInstaller's default | |
| hooks don't always fully catch β see the comments at the top of | |
| `InsightUX.spec` for what's already collected and where to look if the | |
| frozen exe fails to start. | |
| Then build the installer: | |
| ```powershell | |
| iscc packaging\installer.iss | |
| ``` | |
| Output: `packaging\dist_installer\InsightUX-Setup-<version>.exe`. | |
| ## Release checklist | |
| Every time you ship a code change as an update: | |
| 1. Bump `VERSION` in [browser_session.py](../browser_session.py). | |
| 2. Bump `AppVersion`/`MyAppVersion` in [installer.iss](installer.iss) to match. | |
| 3. Rebuild (`pyinstaller ...` then `iscc ...`). | |
| 4. Update [version.json](../version.json) at the repo root β `"latest"` to | |
| the new version, `"url"` to the new installer's HF download URL. | |
| 5. `git lfs` tracks `*.exe` already (see `.gitattributes`) β add and push the | |
| new installer + `version.json` to the `origin` (Hugging Face) remote. | |
| That's it β nothing about *publishing* a release is automated. What's | |
| automated is the *checking*: every running copy of InsightUX pings | |
| `version.json` once at startup (`check_for_update()` in browser_session.py) | |
| and shows a clickable "Update available" pill in the toolbar if `"latest"` | |
| is newer than its own `VERSION`. Clicking it opens `"url"` in the user's | |
| default browser β still a manual download+run, just automated the "is there | |
| something new" question. No internet, or any failure fetching the file, is | |
| silent (no banner, never an error). | |
| ## Why these choices | |
| - **Onedir, not onefile** β onefile re-extracts the whole ~1.5-2.5GB bundle | |
| to a temp directory on every launch. With torch/mediapipe already this | |
| heavy, that's a genuinely bad startup-time hit. Onedir just runs directly | |
| from the installed folder. | |
| - **Per-user install (`{localappdata}`), not Program Files** β no | |
| admin/UAC prompt, and avoids Program Files' write-permission restrictions | |
| for `calibration.pkl`/`sessions/`, which the running app writes directly | |
| into its own folder (see `RESOURCE_DIR`/`DATA_DIR` in browser_session.py). | |
| - **Fixed `AppId` GUID in installer.iss** β this is what makes a new | |
| installer upgrade the existing install in place instead of creating a | |
| second copy. Never regenerate it. | |
| - **torch is bundled** (not excluded) β its fine-tuning step measurably | |
| improves calibration accuracy (169-204px mean error vs. 275px without it, | |
| per calibrate.py's own numbers). Confirmed with the project owner as | |
| worth the larger download. | |