Skip to content

v9.6.0 — Cinema (standard build)

Choose a tag to compare

@github-actions github-actions released this 04 Aug 05:07
· 3 commits to main since this release

The standard install. Everything below is what this firmware adds over the official HDZero firmware.

Baseline: official HDZero main at 6fe76d4 (version 9.5.0, 6 July 2026) — 387 commits behind this release. All official upstream work up to that point is included.

Downloads: HDZERO_GOGGLE-77-206-9.6.0.bin (Goggle) · HDZERO_GOGGLE2-77-184-9.6.0.bin (Goggle 2) · HDZERO_BOXPRO-77-211-9.6.0.bin (BoxPro)

No games in this build — see the -quake and -games releases for those.


🎬 Cinema — Plex, Jellyfin and Immich

The headline feature. Turns the goggle into a private big screen for your own media library, reachable from the main menu as Plex and Immich.

  • Plex movie library browsing from a Plex Media Server on your LAN, with a poster wall and background poster prefetch
  • TV shows — series browsing with episode drill-down
  • Playback of server-remuxed TS, streamed to the SD card and played through the goggle's stock hardware-decoded player
  • Selectable stream quality — 1080p, 720p or 480p — plus automatic quality step-down when the server can't keep up
  • Resume where you left off, using the server's stored playback position
  • Three ways to sign in:
    • the smart-TV flow — the goggle shows a code, you enter it at plex.tv/link
    • a plextoken.txt / jellyfintoken.txt in the SD card root, picked up automatically at boot — works with no internet
    • typing a token with the on-screen keyboard
  • Full Jellyfin support behind the same movie UI, with playback-session reporting so the server tracks watched state, and transcoding constrained to the envelope the goggle's decoder is known to handle
  • Immich — selective backup of DVR recordings to a self-hosted Immich server, authenticated with an API key
  • Long-press Func exits playback and returns to the library
  • WiFi throughput tuning for streaming — XR819 power-save disabled, raised TCP windows

📼 DVR recording

  • Selectable rate control — CBR or VBR, each at three quality points, with on-page explanations of what the setting actually does
  • VBR quality and maximum QP directly settable
  • Five record bitrate steps — Normal, 1/4, 1/2, 1.5x, 2x
  • Correct colour — full colour range is declared in the H.264 VUI, so players no longer crush or wash out levels
  • Reliable record OSD — the record indicator bit is re-asserted and read back at record start
  • Opt-in ELRS race naming — recordings named from the race label sent over ELRS

▶️ DVR playback

  • True 90Hz and 60Hz playback on both Goggle and Goggle 2, routed through the live video path
  • Panel refresh matched to the clip, frame rate probed from the .ts PES timestamps
  • Auto-hiding control bar — fades after 4 seconds, wakes on dial input
  • Faster video start — baseband kept warm and prewarmed in the background while browsing the playback list
  • Receiver off during playback, so the raster stays black behind the video
  • On-screen playback FPS counter for diagnostics

Hardware note that cost many field iterations: the FPGA UI input path only locks 1080p50 on both goggle generations, so retimed playback has to ride the live-video path. On the Goggle the UI additionally re-renders at 1280x720 in 720p90.

📶 WiFi

  • Laptop-style network selection — pick from a scan list, with remembered networks reconnecting automatically
  • Scanning recovers from a stale wpa_supplicant socket instead of hanging

📡 ELRS and VTX control

  • VTX Control — a master switch governing whether the goggle may send VTX commands at all
  • Send VTX is deliberate, assignable to a button (default: right long-press). Changing channels never auto-sends
  • Configurable "VTX Sent" banner with a live style preview
  • ELRS backpack fix — readiness-gated power-on plus a self-healing watchdog

🕐 Clock and RTC

  • Time survives power-off — written to every RTC device present, with the running clock persisted so battery-less units reboot near the right time
  • Set-clock rollers track the live clock and load the current time on entry
  • The clock page stays live while merely highlighted in the menu
  • Correct clock-battery detection on goggles that have one

🔌 Power

  • Shutdown is its own menu entry beside Go Sleep — quiesces the recorder, unmounts the SD card, and shows a safe-to-power-off screen

🖼 Image and source

  • Separate analog and HDZero image settings, with switchable source profiles
  • Source confirmed before the input switches, and the HDZero loading state shown and animated rather than leaving a blank screen

🛡 Firmware update safety

  • Firmware validated before any flash is touched — a corrupt or truncated update file can no longer brick the goggle
  • Honest update results — no false FAILED on a successful OTA, and no false success when the app partition flash actually fails

💾 Storage and diagnostics

  • Automatic SD integrity check skipped when the FAT is already clean, cutting boot time
  • Hardware transition log written to hwlog.txt on the SD card
  • Analog RSSI calibration sampling fixed
  • A power cut can no longer factory-reset your settings

🧪 Emulator

  • Faithful RTC behaviour and macOS host support for on-desktop development

Installing

Flash through the goggle menu, or drop the HDZGOGGLE binary on the SD card with a develop.sh — see the README.

Confirm the build on the Firmware page; it should read 9.6.0.

Licence

MIT, same as the base HDZero firmware. (The -quake and -games builds are GPLv2 because they link game engines — this one contains no GPL code.)