Deploy: freeze the render bridge to renderer.exe -- archive is now complete

render-bridge/freeze.ps1: PyInstaller onefile of live_bridge.py + Dave's
vrboard/vrview/vrview_gl (+glcontext collected for moderngl) -> dist\
renderer.exe (~33 MB). GL backend live-verified from a pure-dist launch
(no --root/--renderer overrides) on 2026-07-10. package.ps1 bundles the
frozen exe automatically when present; DEPLOYMENT-PLAN's renderer OPEN
item is resolved. Ignore the build-artifact dirs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-10 23:57:14 -05:00
co-authored by Claude Fable 5
parent 33a192a1fc
commit 198b73eb96
4 changed files with 42 additions and 5 deletions
+7
View File
@@ -5,3 +5,10 @@
/emulator/dbx_*.txt
/emulator/screen*.png
__pycache__/
# Deployment build artifacts (rebuild: deploy/package.ps1 + render-bridge/freeze.ps1)
/emulator/dist/
/emulator/render-bridge/dist/
/emulator/pod-launch/publish/
/emulator/pod-launch/bin/pkg/
/emulator/bld*.log
+4 -2
View File
@@ -134,8 +134,10 @@ Single root folder + `postinstall.bat`. Everything the install needs is inside:
affair that survives game updates. postinstall detects an existing install
and only warns when absent (a bundled `deploy\npcap.exe` is still honored
if shipped)
- The renderer (**OPEN:** freeze to one exe vs bundle embeddable Python -- decide
with David; "decide later")
- The renderer -- **RESOLVED 2026-07-10: frozen to one exe** (PyInstaller
onefile, `render-bridge\freeze.ps1` -> `dist\renderer.exe`, ~33 MB, GL
backend live-verified from a pure-dist launch). `package.ps1` bundles it
automatically when present.
- `net_*.conf` **templates** with `@@ROOT@@` / `@@REALNIC@@` tokens, launch
dispatcher, `postinstall.bat`
+7 -3
View File
@@ -74,9 +74,13 @@ if ($NoContent) {
Copy-Item (Join-Path $Emu 'net-boot') $root -Recurse
}
# renderer (frozen exe) -- else flagged
if ($Renderer) { Copy-Item $Renderer (Join-Path $root 'renderer.exe'); Log "bundled renderer -> renderer.exe" }
else { Warn "no -Renderer: renderer NOT bundled (freeze pending). pod-launch needs --renderer or a bundled render-bridge at runtime." }
# renderer (frozen exe): default to render-bridge\freeze.ps1's output -- else flagged
if (-not $Renderer) {
$frozen = Join-Path $Emu 'render-bridge\dist\renderer.exe'
if (Test-Path $frozen) { $Renderer = $frozen }
}
if ($Renderer) { Copy-Item $Renderer (Join-Path $root 'renderer.exe'); Log "bundled renderer -> renderer.exe ($Renderer)" }
else { Warn "no renderer: run render-bridge\freeze.ps1 (or pass -Renderer). pod-launch needs --renderer or a render bridge at runtime." }
# Npcap installer -- optional: policy (2026-07-10) is a one-time MANUAL install
# per cockpit; postinstall detects it and only warns when absent.
+24
View File
@@ -0,0 +1,24 @@
# freeze.ps1 -- PyInstaller onefile of live_bridge.py -> dist\renderer.exe,
# the deployable render bridge (package.ps1 bundles it automatically when
# present). pod-launch invokes it as: renderer.exe tcp:8621 <live.fifodump>.
#
# Needs the Windows CPython (py -3.13) with the render-bridge wheels plus
# pyinstaller: py -3.13 -m pip install numpy pygame-ce moderngl pillow pyinstaller
#
# Dave's modules (vrboard/vrview/vrview_gl) come from ..\..\dpl3-revive\patha
# and are baked into the exe; _backend's runtime sys.path insert becomes a
# harmless no-op in the frozen build. glcontext is moderngl's dynamically
# imported binary backend -- PyInstaller misses it without --collect-all.
# First frozen + live-verified (GL backend) 2026-07-10.
$ErrorActionPreference = 'Stop'
Set-Location $PSScriptRoot
py -3.13 -m PyInstaller --onefile --noconsole --name renderer `
--paths ..\..\dpl3-revive\patha `
--hidden-import vrview_gl --hidden-import vrview --hidden-import vrboard `
--collect-all glcontext `
--distpath .\dist `
--workpath (Join-Path $env:TEMP 'pyi-renderer') `
--specpath (Join-Path $env:TEMP 'pyi-renderer') `
live_bridge.py
if ($LASTEXITCODE -ne 0) { throw "PyInstaller failed" }
Write-Host "[freeze] dist\renderer.exe ready ($('{0:N1} MB' -f ((Get-Item .\dist\renderer.exe).Length / 1MB)))"