Repository navigation
Releases: Kristian-Buriasco/gogglecast
Release list
GogglesView 0.12.0
Event release. Everything in it was built for, and used at, a live FPV race with two Goggles 3 feeding an HDMI mixer: the program outputs got faster and easier to run unattended, you can be alerted on your phone, and recording starts and stops by itself.
Added
- Browser control center (Settings > Outputs, off by default): a /control page served by the local web viewer, for an iPad or phone on your network. It shows every feed and output, starts and stops recordings and switches outputs. It uses its own token, separate from the viewer token, over plain HTTP, so use it only on a network you trust.
- Settings > HDMI > "Preview in the app": turn it off to draw the picture on the HDMI outputs only, which lightens the Mac when two feeds run.
- Settings > HDMI > per-output "Output resolution" (display default, 1080p or 720p). The change is made by the app only, the main display is never changed, and the mode is restored when the output closes or the app quits.
- Settings > HDMI > "Keep displays awake" (on by default): while the program outputs are shown, the Mac no longer lets its displays go to sleep, which used to blank the HDMI feed after a long time without input. A locked Mac still covers every display.
- Settings > HDMI > a "Clean output" toggle on each output, so one output can be clean while another keeps names and warnings. The existing switch is now "Clean output on all outputs".
- Control-Option-Command-comma closes only the output on the main display and, pressed again, brings it back, while the HDMI outputs keep running. Control-Option-Command-period still closes all outputs.
- A program output that is not clean now also shows NO SIGNAL, the dimming and the pulsing border when a connected feed delivers 0 fps, not only when the connection is lost.
- Auto recording (Settings > Recording > "Start recording automatically when live") follows the frame rate: it starts once the rate holds above 10 fps for a second and the picture is really changing, stops when the rate sits at 0 for 2 seconds, and starts a new recording when the feed comes back. It only stops recordings it started, and after you stop one by hand it waits for the feed to go away and return before starting again.
- Stabilizer study tools for developers:
--stab-file,--stab-studyand--stab-measurerun the stabilizer on a recorded clip and report jitter, roll and cost per frame.
Changed
- Remote alerts are instant: a lost connection is sent the moment it drops (the alert rules run on events, not on a timer), and the ntfy request is faster.
- Smoother display with two feeds: the newest frame always wins, a late frame is dropped instead of queued, the decode and state work run at explicit priorities, and the colour lookup table is cached instead of rebuilt per frame.
- The re-encoder runs only while something needs it (instant replay, network streams or the web viewer), stays warm for 2 seconds after the last user, and sends a keyframe to anyone who joins late.
- The stabilizer measures motion with a tuned registration (central 70% of the picture at 384 px, about 8.5 ms per frame). On raw recorded race footage no live mode reliably beat leaving stabilization off, and the previous method scored slightly better on average, so "Translation only (previous method)" is a selectable entry in Settings > Picture and the default stays "Translation only". Tiles was the worst on real footage and stays opt-in. For footage you publish, offline stabilization with look-ahead did far better.
Known limits
- A locked Mac, or one showing the screen saver, blanks the HDMI outputs: the lock screen is drawn above anything an app can show. Keep the Mac unlocked, with "Keep displays awake" on.
- ntfy on iOS delivers alerts as normal notifications; Apple critical alerts are not supported by the ntfy app.
- Live stabilization did not beat leaving it off on raw race footage. Leave it off for FPV.
GogglesView 0.11.1
A dedicated HDMI tab, an emergency way to close program outputs and two layout fixes.
Added
- Settings has a new HDMI tab for the program outputs: the master switches, a table of connected displays (main or external, resolution, which output uses it) and one group per output with a status line.
- Emergency close: press Control-Option-Command-period in any app to close all program outputs, for example when one landed on your only screen. Active only while an output is shown.
Fixed
- Settings > General: the Check Now button was clipped; it keeps its full width now.
- Settings > Advanced > Remote alerts: the card now says what is needed to switch it on (server and topic), and the Send test button is no longer clipped.
Known limits
- ntfy on iOS delivers these as normal notifications; Apple critical alerts are not supported by the ntfy app.
- A recording alerts only when it stops on an error; NDI and UDP outputs can fail but not stall; a hung helper that still reports live is not detected.
GogglesView 0.11.0
A redesigned Settings window and two new stabilizer modes.
Changed
- Settings is now eight sidebar tabs (General, Display, Picture, Recording, Streaming, Outputs, Integrations, Advanced) with aligned label and control rows. Every field has a visible label and units, long help text moved into info popovers, and text inputs have a new look with a focus outline. Secret fields have a show/hide button and are still read from the keychain only when needed.
Added
- Stabilization mode (Settings > Picture): "Translation only" (the default, as before), "Translation and roll (tiles)" and "Translation and roll (homography)". The two new modes also correct roll. They were measured only on synthetic clips so far, so they are opt-in.
Fixed
- The stabilizer shares one Core Image context and frees its temporary objects after each picture, like the noise reducer already did.
Known limits
- ntfy on iOS delivers these as normal notifications; Apple critical alerts are not supported by the ntfy app.
- A recording alerts only when it stops on an error; NDI and UDP outputs can fail but not stall; a hung helper that still reports live is not detected.
GogglesView 0.10.3
Remote alerts, so you can step away from the Mac during an event.
Added
- Remote alerts (Settings > Advanced, off by default): sends a notification to a self-hosted ntfy server when a goggles signal is lost or back, the picture freezes or goes black, the battery runs low, an output (RTMP, SRT, NDI, recording or the HDMI window) fails or stalls, or the helper is unreachable. Each condition has its own delay and priority, alerts repeat while the fault lasts and a recovery message is sent. An Away switch (also in the menu bar) turns sending on, and an optional heartbeat URL lets an outside monitor notice if the Mac goes silent. Messages use the crew's feed names, never serial numbers.
Known limits
- ntfy on iOS delivers these as normal notifications; Apple critical alerts are not supported by the ntfy app.
- A recording alerts only when it stops on an error; NDI and UDP outputs can fail but not stall; a hung helper that still reports live is not detected.
GogglesView 0.10.2
Two options for the HDMI program output.
Added
- Program output: a "Clean output" option hides every name, the no-signal marker, the issue warnings and the red border on all outputs, leaving only the video.
- Program output: a "Stabilize the program output" option runs the stabilizer while the outputs are shown, including in race mode, where stabilization was always off. The stabilizer sits in the shared decode path, so the preview is stabilized too.
Fixed
- CI: the 1080p enhancer timing check no longer fails on the virtual GPU of the GitHub runners.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.
GogglesView 0.10.1
A light theme, a clearer Record button and fewer keychain prompts.
Added
- Appearance setting (System / Light / Dark) in Settings > Display. The interface now supports a light theme.
Fixed
- Settings: input values and placeholders were hard to read on a light macOS theme, and the Settings button was invisible. The interface now follows the chosen appearance (#9).
Changed
- The Record button is now a labelled pill at the start of the toolbar, with elapsed time while recording.
- Saved stream keys and tokens are read from the keychain only when a feature that needs them is used, so plain live view no longer triggers a keychain prompt.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.
GogglesView 0.10.0
Picture enhancement (off by default), a new web viewer port and the token fix. Builds on 0.9.1, which was a pre-release.
Added
- Picture enhancement (Settings, both off by default): a noise reducer (Apple's temporal noise filter where the Mac supports it, otherwise a motion-adaptive Core Image filter) and a MetalFX upscaler. They run per window after decoding, before the stabilizer and outputs, and are skipped in race mode. Measured on real goggles: about 2-4 ms (noise reducer) and 8-10 ms (upscaler) per frame; the upscaler holds about 225 MB per feed, so leave it off with many feeds.
Changed
- The web viewer's default port is now 8787 instead of 8080. A port you set in Settings is kept; old links and QR codes on 8080 need refreshing.
Fixed
- Web viewer: "Missing or wrong token" after changing the token in Settings. The server now reads the token on every request.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.
GogglesView 0.9.1 (pre-release)
Confirmed on real goggles (two units side by side, replug, 12 s helper freeze, Camera View Recording on, HDMI program output). Tested as a pre-release.
Fixed
- A goggles window with no keyframe reconnected every 8 s forever: the reconnect itself ended the "waiting" state, which reset the back-off timer. The back-off (8, 16, 32 s) now survives that gap and resets only when a real picture shows.
- A goggles display that shows nothing moving sends one keyframe and then no video at all. The app took that silence for a dead stream, reconnected 13 s later and lost the picture. A background service that still reports live with fresh stats now counts as an alive link.
- Second goggles stayed black in a two-goggles setup: see Troubleshooting. The goggles pause Liveview sharing ("Goggles operating. Liveview sharing temporarily paused") while their menu is in use or when sharing was reset after a power cycle; toggle Share Liveview off and on once on that unit. Mixed firmware (1.0.0.8 and 1.0.0.15) was in use in the test: update all units to the same version before an event.
Added
- A "Back to the list" button appears in the goggles window when the goggles have not been found (or could not be claimed) for 8 seconds, so you can pick again without looking for the menu.
Changed
- The overlay notice (first stream, capture window), the README and the site no longer suggest the display-scale trick. They now say to turn the goggles' overlay off at its source: Settings > Camera > Advanced camera settings > Camera View Recording > off.
Changed
- After a reconnect, a replug or a reopened window the picture no longer stays black. The background service keeps the last real keyframe the goggles sent (they send one only when Share Liveview starts) and starts every new window or decoder from it; the live frames then update it. Static content comes out exact (measured error 0.2 of 255 on a synthetic stream); with moving content ghosts of moving things stay (about 20 of 255) until you turn Share Liveview off and on, which sends a fresh keyframe and heals the picture. Not yet seen on real goggles.
- A goggles window that has lost its picture now says what actually fixes it: "No picture: turn Share Liveview off and on on the goggles" (menu bar, status pill, Operator Overview, phone status page). The goggles send a keyframe only when sharing starts, and nothing the app can send makes them send another.
Fixed
-
The app now waits 8 s (was 3 s) before reconnecting while it waits for a keyframe, so its reconnect no longer cuts off the stream the pipeline resumed on its own after 2.5 s.
-
After a reconnect the goggles resume the video without a keyframe (they send one only when Share Liveview starts), so the picture stayed gone. If video has been arriving for 2.5 s with the parameter sets known but no keyframe, the pipeline now opens its gate anyway. A decoder that still holds the previous picture carries on from the next frames (possibly with artifacts); one that does not ignores them until a real keyframe. Seen on live goggles: the helper goes live 2.85 s after the first video packet. Not yet seen on screen with a live decoder.
-
After a long silence (12 s was enough to make the goggles drop the session) the window showed "reconnecting" forever without ever reconnecting. A live stream that stays silent now makes the app reconnect by itself, with the same backoff as the keyframe recovery.
-
The picture no longer stays gone after a short silence from the goggles. A 2 second gap in the video (a brief radio dropout; seen unattended after 9.5 minutes) re-armed the keyframe gate, which threw away every frame until a keyframe arrived, and the goggles send one keyframe only when Share Liveview starts, so the picture never came back by itself. A pause loses no frames, so the stream now simply continues; real frame loss still re-arms the gate. Checked on live goggles by freezing the helper for 6 s: it logged the stall and went straight back to live.
-
Stabilization: on real footage about 3% of frames reported nonsense motion of 30 to 80% of the picture width (motion-blurred frames), which threw the whole correction off and made hard shake come out worse than it went in. Implausible motion is now ignored: on recorded hand shake the remaining shake dropped by about 80% at full strength (it was about 33%). The zoom that hides the edges is now adaptive: about 4% while the picture is steady, growing only when a correction needs the room and easing back afterwards, instead of a constant 8 to 25% crop.
-
When frames were dropped, the app waited for a keyframe forever: its automatic recovery only ran while the background service said "live". It now also asks for a keyframe and reconnects while the service itself waits for one. Recovery is limited by the goggles: they send a keyframe only when Share Liveview starts, so switching it off and on again on the goggles is still the reliable fix.
-
Several goggles at once: DJI goggles report the same placeholder USB serial (
987654321ABCDEF), so every unit got the same device ID, window position and profile. The real serial number (the tail of the product name, for example753XM567024TS7) is now used, so each goggles has its own ID that stays the same after a replug. The window title and feed name read "Goggles 3 · 753XM567024TS7". Window positions saved under the old shared ID are reused once for the first goggles. -
The app restarts its own background service when it is older than the app: after replacing the app by hand, a DMG drag or
brew upgrade, the old service kept running the old code until it was restarted from the terminal. The app now notices at launch (the service started before its file was installed) and restarts it, with no password or terminal command.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.
GogglesView 0.9.0
Added
- Operator overview (Goggles menu): one window with a row per open goggles (state, outputs sending, fps, battery, warnings), a Record button each, Start all / Stop all outputs, a big-tile view and full screen. While something records it also shows Stop all recordings and a free-disk line that warns when fewer than 3 hours are left.
- Warnings per feed: battery under 25% / 10%, a black picture for 10 s, a picture not changing for 15 s. They show on the overview, the program output tiles, the menu-bar icon and the web status page. Lost feeds pulse red on the program output, and the signal-lost alert names the feed.
- Status page for a phone (
/statuson the web viewer): one tile per goggles, read-only, no serial numbers. - "Event" preset for several goggles over many hours: signal-lost alert on, clean video, no recording, no replay.
- SRT output can start automatically, like the UDP stream.
Fixed
- When the signal drops (for example the air unit disconnects), the last picture now stays on screen, dimmed, under the "reconnecting" card. Before, it disappeared after 5 seconds.
- Program output no longer reopens its full screen windows at launch (they hid the normal window). Turn on "Open the program outputs when the app starts" in Settings > Display to get the old behaviour.
- Slow start after an update: when macOS refused to restart the background service, the app stopped and retried it on every launch. It now retries a few times within one launch and gives up after two launches, with a message in Settings. Run
defaults delete com.kburiasco.gogglesview updateHelperChangedto clear an old stuck marker.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.
GogglesView 0.8.2
Added
- Several goggles at once: a separate SRT/UDP port per goggles window (window 1 keeps the configured port, the next windows add 1, 2, ...), and NDI source names with a number. On by default, switchable in Settings > Streaming > OBS Studio.
- "Add all feeds to OBS" (Settings > Streaming > OBS Studio): creates one Media Source per open goggles over the OBS WebSocket connection, pointing at that window's SRT or UDP output. Existing sources are updated, never deleted. Not checked against a real OBS yet.
- "Re-encode at 30 fps" (Settings > Streaming): halves the hardware encoder load of recordings and streams so more goggles fit on one Mac. Measured: 6 windows keep 52 fps with it, 27 fps without.
- A multi-goggles soak test (
GOGGLES_SOAK_FEEDS=6 GOGGLES_SOAK_SECONDS=600 swift test --filter MultiFeedSoak) anddocs/events.mdcapacity table. - Program output (Settings > Display, Goggles menu): up to four clean full screen outputs, each on its own display (for example one HDMI per feed into a vision mixer, or a multiview). Either a grid of every open goggles feed with names and a NO SIGNAL marker, or one feed on its own. Feed names are chosen by you and never contain a serial number. See
docs/events.md. - Dutch. The app follows the macOS language: set macOS to Dutch and the interface appears in Dutch (791 strings, same scope as Italian and French). The translation is machine-assisted: corrections are welcome, see
docs/localization.md.
Known limits
- OBS rules act only on live and lost events that happen while OBS is connected; start OBS first. Chapters are added when a recording stops, so a crash leaves the video without chapters (the sidecar still has the markers), and stopping a very large recording takes a few seconds longer.
- None of the new features has been tried against real OBS, a real iPad or in QuickTime and editors yet, and the earlier list still stands: unplug and replug, sleep and wake, the signal alert, RTMP and SRT outputs, the setup assistant flow and the Shortcuts actions.