Skip to content

Releases: bob9/hdzero-goggle

v9.6.1-nocinema — FPV build (no Cinema)

Choose a tag to compare

@bob9 bob9 released this 10 Aug 10:13

The FPV install — no Cinema media client, and none of its code in the binary. This is 9.6.0-nocinema plus one ELRS change.

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

For the standard build with Cinema (Plex, Jellyfin, Immich), see v9.6.1.


📡 You choose which press sends the VTX channel

Scroll the dial to a channel and the goggle waits a few seconds for you to confirm. In stock firmware, a long press of the left button during that window does two things at once: it tunes the goggle and transmits the new channel to your VTX over the backpack.

That is the same button most people reach for as "back" or "menu". Late to your heat, scrolling fast, one long press on the wrong channel — and your VTX is now sitting on another pilot's frequency. It has happened in a real race.

Two new settings on the ELRS page put the gesture under your control:

Setting Options Default
Send Button Left · Right · Either · Off Left
Send Press Long · Short · Either Long
  • Send Button picks which button transmits. Off means no button press ever goes on air — only the explicit Send VTX action or Auto Send VTX.
  • Send Press picks the press length, because holding a long press is an awkward thing to do while you are lining up on the gate.

The button that is not assigned still confirms the channel and tunes your goggle exactly as before. It simply stays off air. So you can keep scrolling and watching channels freely, and only transmit when you mean to.

The page spells out the result in one sentence as you change it, for example: "While tuning, a short press of the right button sends the channel; anything else only tunes the goggle."

The defaults reproduce the old behaviour exactly. Upgrade and nothing changes until you go looking.


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.1-nocinema.

Everything from v9.6.0-nocinema — the DVR work, WiFi, clock, power, update safety — is unchanged and included. Cinema is still absent.

Licence

MIT, same as the base HDZero firmware.

v9.6.1 — Cinema (standard build)

Choose a tag to compare

@github-actions github-actions released this 10 Aug 10:33

The standard install — 9.6.0 plus one ELRS change. If you are already on 9.6.0, this is the only thing that is different.

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

For the FPV-only build with no Cinema, see v9.6.1-nocinema.


📡 You choose which press sends the VTX channel

Scroll the dial to a channel and the goggle waits a few seconds for you to confirm. In stock firmware, a long press of the left button during that window does two things at once: it tunes the goggle and transmits the new channel to your VTX over the backpack.

That is the same button most people reach for as "back" or "menu". Late to your heat, scrolling fast, one long press on the wrong channel — and your VTX is now sitting on another pilot's frequency. It has happened in a real race.

Two new settings on the ELRS page put the gesture under your control:

Setting Options Default
Send Button Left · Right · Either · Off Left
Send Press Long · Short · Either Long
  • Send Button picks which button transmits. Off means no button press ever goes on air — only the explicit Send VTX action or Auto Send VTX.
  • Send Press picks the press length, because holding a long press is an awkward thing to do while you are lining up on the gate.

The button that is not assigned still confirms the channel and tunes your goggle exactly as before. It simply stays off air. So you can keep scrolling and watching channels freely, and only transmit when you mean to.

The page spells out the result in one sentence as you change it, for example: "While tuning, a short press of the right button sends the channel; anything else only tunes the goggle."

The defaults reproduce the old behaviour exactly. Upgrade and nothing changes until you go looking.


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.1.

Everything from v9.6.0 — Cinema, the DVR work, WiFi, clock, power, update safety — is unchanged and included.

Licence

MIT, same as the base HDZero firmware.

v9.6.0-nocinema — FPV build (no Cinema)

Choose a tag to compare

@bob9 bob9 released this 05 Aug 21:13

The FPV-only install — the standard build with the Cinema media client removed. Same firmware as v9.6.0 in every other respect.

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

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

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


What's different from v9.6.0

Cinema is gone, not just hidden. The Plex, Jellyfin and Immich sources are removed from the tree, so the Plex and Immich menu entries no longer exist and none of that code is in the binary. Nothing else was changed: DVR recording and playback, WiFi, ELRS/VTX, clock, power, image/source and update safety are all identical to the standard build.

Pick this build if you want the FPV firmware and nothing else. If you want to stream your own media library to the goggle, install v9.6.0 instead.


Everything this firmware adds over official HDZero

📼 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
  • Throughput tuning — XR819 power-save disabled, raised TCP windows

📡 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-nocinema.

Licence

MIT, same as the base HDZero firmware. No GPL code in this build.

v9.6.0 — Cinema (standard build)

Choose a tag to compare

@github-actions github-actions released this 04 Aug 05:07

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.)

Plex client test build 9.5.54 — the 30–60 s playback freeze is fixed

Choose a tag to compare

@bob9 bob9 released this 02 Aug 23:32

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.54

The big one from field testing — picture freezing 30–60 seconds in while the download kept going — is root-caused and fixed, along with several bugs that made healthy servers look broken:

  • 🧊 The 30–60 s freeze is fixed. The video decoder reads ahead of the download, and when it caught up to the not-yet-written end of the buffer file it declared the movie finished and stopped — while the download happily continued behind it. The player now detects that false ending, waits for the download to get ahead again, and resumes in place with an invisible seek. No black frame, no restart.
  • 🚀 First play after a server restart no longer fails. A cold transcode can take more than 5 s to send its first response; that pause was misread as a network failure, so the first attempt "failed" and retried at a lower quality tier. It now waits like it should.
  • 📉 Fast servers were being punished. A 32-bit overflow in the download-rate math made big fast chunks read as negative speed, so the best servers could get demoted to lower quality. Fixed.
  • 🚪 Exit always works now. If the SD card had no DVR recordings, the long-press-to-exit during playback was silently swallowed by the recordings page's key handler, leaving no way out of a video. Player keys are now routed to whichever page actually owns the player.
  • 🎯 Jellyfin accuracy — the goggle now gets the movie's exact runtime and a proper play-session ID from the server, so movies no longer end up to 59 seconds early and the server's transcode pacing stays happy.
  • 💾 The stream buffer file on the SD card is now preallocated once and reused between movies (this also removes one of the freeze triggers).

If anything still misbehaves, grab hwlog.txt from the SD card — the player logs a heartbeat and explains any early stop.


📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.54 — if it doesn't, the goggle is still on an older build.

  • HDZERO_GOGGLE2-77-184-9.5.54.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.54.bin — original Goggle (G1)
  • (HDZERO_BOXPRO is a plain build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press (dial or Func) = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ c3f3e0b (fix: 1b71b02)

Plex client test build 9.5.53 — playback keeps going, easy exit

Choose a tag to compare

@bob9 bob9 released this 01 Aug 13:30

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 NEW: Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.53

  • ▶️ Movies play! 9.5.52's fix held — this build tackles the two follow-ups from field testing:
  • ⏱ Playback stopping after ~1 minute — the goggle gave up on the download if the server paused the stream for 60 s (servers legitimately pace transcodes to real time). Tolerance is now 5 minutes, and the stream's end is logged to hwlog.txt so any future stop explains itself.
  • 🚪 Exiting the player — press-and-hold the dial/Enter button, and now the Func button held works too. (Short Func presses during playback used to trigger hidden dev display modes — disabled.)
  • 🩺 Playback heartbeat: the player logs time/fps to hwlog.txt every 30 s — if playback ever stops early, send hwlog.txt and it will show exactly when and why.

📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.53 — if it doesn't, the goggle is still on an older build. Every test build from now on gets its own number.

  • HDZERO_GOGGLE2-77-184-9.5.53.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.53.bin — original Goggle (G1)
  • (HDZERO_BOXPRO here is a plain 9.5.45 build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ 16982e1

Plex client test build 9.5.52 — the lockup is fixed (root-caused via field logs)

Choose a tag to compare

@bob9 bob9 released this 01 Aug 13:09

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 NEW: Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.52

  • 🎯 THE lockup fix — root cause found and confirmed by field logs. After buffering finished and the movie started, an internal timer kept re-launching the player over the top of the live playback — three launches in 1.5 s, which froze the goggle solid. Playback was actually working before the re-launch clobbered it. One guard fixes it. Thanks to the black-box logging in 9.5.51 (and Joel's SD card) for catching it in the act.
  • All prior improvements included: WiFi power-save fix, auto quality fallback, TV shows, quality picker, poster prefetch, lockup black-box logging.

📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.52 — if it doesn't, the goggle is still on an older build. Every test build from now on gets its own number.

  • HDZERO_GOGGLE2-77-184-9.5.52.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.52.bin — original Goggle (G1)
  • (HDZERO_BOXPRO here is a plain 9.5.45 build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ 83631c5

Plex client test build 9.5.51 — lockup fix attempt + black-box logging

Choose a tag to compare

@bob9 bob9 released this 01 Aug 12:53

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 NEW: Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.51

  • 🔊 Jellyfin streams pinned to a stereo, ≤30 fps, high@4.0 H.264 profile — matching exactly what the (working) Plex path produces. Surround-sound sources were previously converted to 5.1 audio the goggle has never been tested with; that's the top suspect for the lockup at playback start.
  • 🩵 Lockup black box — the goggle now writes fsync'd breadcrumbs to hwlog.txt on the SD card at every stage of playback start. If it still locks up: power off, pull the SD card, and send hwlog.txt — the last plex:/mplayer: line names the exact stage that froze.
  • WiFi power-save fix (9.5.48), auto quality fallback, TV shows, quality picker, poster prefetch — all included.

📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.51 — if it doesn't, the goggle is still on an older build. Every test build from now on gets its own number.

  • HDZERO_GOGGLE2-77-184-9.5.51.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.51.bin — original Goggle (G1)
  • (HDZERO_BOXPRO here is a plain 9.5.45 build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ d28a231

Plex client test build 9.5.49 — fixes the playback lockup

Choose a tag to compare

@bob9 bob9 released this 01 Aug 12:30

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 NEW: Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.49

  • 🧊 Fixes the lockup when playback starts (Jellyfin) — 9.5.48's faster WiFi exposed a decoder bug: for compatible files the server was sending the original video bytes, and some (interlaced/older files especially) freeze the goggle's hardware decoder solid. The goggle now always asks the server for a clean re-encode, which the player is known to handle. If your goggle locked up on "Buffering…", this is the fix.
  • 📶 WiFi power-save fix from 9.5.48 (throughput was capped at ~0.2 MB/s before it).
  • 🎯 Auto quality fallback, TV shows, quality picker, poster prefetch — all included.

📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.49 — if it doesn't, the goggle is still on an older build. Every test build from now on gets its own number.

  • HDZERO_GOGGLE2-77-184-9.5.49.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.49.bin — original Goggle (G1)
  • (HDZERO_BOXPRO here is a plain 9.5.45 build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ 2387a5c

Plex client test build 9.5.48 — WiFi power-save fix, much faster streaming

Choose a tag to compare

@bob9 bob9 released this 01 Aug 12:14

🎬 Your movie library. Your private cinema. Your goggles.

This build turns HDZero goggles into a personal movie theater — and now backs up your flight recordings too. Lie back anywhere and watch your own movie collection on dual 1080p micro-OLED displays. Movies stream from your own media server over WiFi, decoded by the goggle's video hardware — the same silicon that handles 90 fps race footage barely breaks a sweat on a film.

✨ What it supports

  • 🎞️ Plex AND Jellyfin — both media servers, behind the same poster-wall interface
  • 📺 Movies AND TV shows — series open into an episode browser; everything streams the same way
  • 📸 NEW: Immich DVR backup — upload your flight recordings straight from the goggle to your self-hosted Immich photo server. Pick exactly which files, see which are already backed up, watch per-file progress.
  • 📼 Every video format your server can play — H.264, HEVC/H.265, MKV, AVI, 4K sources — the server converts anything automatically
  • 🔊 Any audio track — DTS, AC-3, TrueHD downmixed to clean stereo
  • 📶 Fully local — your movies and recordings never leave your home network
  • 🔑 Smart-TV-style sign-in — Plex: plex.tv/link code. Jellyfin: Quick Connect code. Immich: API key (SD-card file or typed once). No painful typing.
  • 🖼️ Instant browsing — poster artwork cached on the SD card
  • 🛩️ FPV untouched — everything racers use is exactly where it was

Requires your own Plex (plex.tv), Jellyfin (jellyfin.org), and/or Immich (immich.app) server on the same network — all free. Community test build (design docs).


🆕 What's new in 9.5.48

  • 📶 Big WiFi throughput fix — the goggle's WiFi chip was running with 802.11 power-save on, which adds huge latency and can cap any download at ~0.2 MB/s no matter how fast the server is. The goggle now switches power-save off whenever it connects, and raises the system's network buffers for streaming. If your buffering screen showed ~0.2 MB/s, this build should be dramatically faster.
  • 🎯 Automatic quality fallback from 9.5.47: if the server still can't keep up, the goggle steps 1080p → 720p → 480p by itself instead of buffering forever.
  • Everything from 9.5.46: TV shows with episode browsing, quality picker on the movie popup, Jellyfin mid-movie stall fix, background poster prefetch.

📖 User guide

Install

Copy the file for your goggle to the root of the SD card, then Menu → Version → Update Goggle:

After updating, the Firmware page should show version 9.5.48 — if it doesn't, the goggle is still on an older build. Every test build from now on gets its own number.

  • HDZERO_GOGGLE2-77-184-9.5.48.bin — Goggle 2
  • HDZERO_GOGGLE-77-206-9.5.48.bin — original Goggle (G1)
  • (HDZERO_BOXPRO here is a plain 9.5.45 build without these features.)

Movies (Plex / Jellyfin)

  1. Menu → WiFi → Client mode → join your home network (one-time).
  2. Menu → Plex — the goggle lists every Plex and Jellyfin server it finds, labeled [Plex] / [Jellyfin]. Click yours. (Manual entry: ip:8096 = Jellyfin, ip = Plex.)
  3. Sign in once: Plex shows a code for plex.tv/link; Jellyfin shows a Quick Connect code you approve in any signed-in Jellyfin app (enable Quick Connect once in its dashboard). SD-card token files (plextoken.txt / jellyfintoken.txt) and on-screen entry also work.
  4. Browse & play: scroll the poster wall, click for details, click again to play. During playback: click = pause, scroll = seek, long-press = back. Needs 2+ GB free on the SD card (the stream buffers there and is deleted after).

DVR backup (Immich)

  1. Menu → Immich (WiFi + SD card required).
  2. First time: create immich.txt on the SD card — line 1 your API key (Immich → Account Settings → API Keys), line 2 server-ip:2283 — it's picked up automatically. Or type both with the dial.
  3. Your recordings appear as a list; files already backed up are marked uploaded in green.
  4. Click to tick files, Func-click to upload the selection (or just the highlighted file). Progress shows per-file MB; click cancels after the current file.
  5. Already-on-server files are detected by Immich itself and marked — you can't double-upload.

Known limitations (test build)

  • Stuck on “Buffering…” with Jellyfin? The server sends video only as fast as it converts it. 4K/HEVC/HDR movies need a fast server or hardware transcoding (Jellyfin Dashboard → Playback → Transcoding → select your GPU). Quick check: play a normal 1080p movie — if that works, the goggle is fine and the server just can’t convert the 4K title in real time. The Dashboard home page shows the conversion speed while a stream runs; below ∼1.0x means it can’t keep up.
  • Seek works within the downloaded portion of the stream.
  • The media server does the remux/transcode — any PC/NAS-class server is fine.
  • Please report issues (grab hwlog.txt from the SD card if something misbehaves).

Source: plex-client branch @ 582df18