Releases: dripster82/ar_workspace_manager_for_xreal
Release list
V0.9.0
AR Workspace Manager V0.9.0
🎧 The media player now plays audio — MP3s and M4B audiobooks
Audio files used to hang the player forever on "Loading…", silently playing muted underneath:
the player's whole ready-state was gated on decoding a first video frame, which an audio
file never produces. The player now detects audio-only files the moment decoding starts and
brings them up properly — sound unmuted, transport and scrubber live, resume-position saved and
restored exactly like video.
- Cover art in AR: audio items show their embedded artwork (M4B/M4A iTunes covers, MP3 ID3
pictures) at its true aspect ratio — in the corner positions and full view alike. - No artwork? No problem: files without art get a clean dark card with the file name, shown
the instant the file is ready (art swaps in a beat later if found). - Plain video files are completely untouched — they stream frames exactly as before.
📖 Chapter-aware Next / Previous
For chaptered files — M4B audiobooks, chaptered MKV/MP4s — the Next/Previous controls (⌃⌥ media
shortcuts and the panel buttons) now navigate chapters the way a CD player navigates tracks:
- Next jumps to the next chapter; past the last chapter it moves to the next playlist item.
- Previous restarts the current chapter — or, within the first 3 seconds of one, jumps to
the chapter before. At the very start of the file it falls back to the playlist. - Rapid presses work: Prev-Prev-Prev steps back three chapters deterministically, even though
libvlc reports positions with a slight lag after each seek.
Unchaptered files keep the old playlist behaviour exactly.
🩺 Media diagnostics
- The media pipeline now logs every state transition (
[media]prefix in Console.app / stderr):
loads, ready events, the audio-only probe's decisions, and why playback is or isn't running. - For files that still refuse to play:
defaults write uk.co.ketelle.ar.workspace.manager media.vlcVerbose -bool YES
turns on libvlc's own (very chatty) demux/decoder debug stream.
🛠️ Also fixed
- Voice control no longer burns CPU in a hot recycle loop when macOS refuses speech
recognition — it stops cleanly and says why. - Release builds never leave the Intel slice behind in
build/, and the app warns when it's
running under Rosetta.
Requirements: XREAL Air/Air 2/Air 2 Pro or One/One Pro, macOS 14+, Apple Silicon or Intel.
Both DMGs are notarized and stapled.
V0.8.0
AR Workspace Manager V0.8.0
🖱️ Click & drag reliability — a deep input-path cleanup
Three separate root causes of sluggish clicks, phantom drags, and drags sticking to the cursor
were found and fixed:
- The window-drag detector did synchronous Accessibility work on every left-click
system-wide (up to seconds against slow apps like Electron). Clicks now cost nothing — the
detection is deferred, async, and only runs during AR. - The ⌃⌥-brightness hotkey tap sat in the delivery path of every mouse click's system events
via the app's main thread. It's now completely inert except while ⌃⌥ is physically held, and
runs on its own thread. - The cursor boundary at the glasses display no longer warps mid-click (clicks near that edge
could turn into drags).
🗺️ Workspace layout editor, rebuilt
- Snap to 5° and snap to screen edges toggles (hold ⌘ while dragging to bypass; snapped
edges glow cyan). Edges and centres align exactly. - The map now matches AR faithfully: screen tiles render at true angular size (no more
inflated minimums), widgets and stacks use their real rendered size and anchoring, and the four
media corner positions (⌃⌥1–4) show as dashed reference outlines. - Degree grid with angle labels, an FOV tag, live yaw/pitch readout while dragging, hover
highlighting, tooltips on every tile, and zoom % with click-to-reset. - The OS display arrangement now honours your layout's topology: screens whose edges touch in
the map land exactly edge-to-edge — including stacked-beside-tall arrangements the old row
model couldn't express — with side-by-side vertical offsets preserved. - Wide curved canvas controls moved from Settings → Glasses to the Workspace page, and its
distance slider actually does something now (nearer = bigger, farther = smaller — previously
the maths cancelled out).
⌨️ New controls
- ⌃⌥+ / ⌃⌥− — grow/shrink the mouse cursor in steps, with a brightness-style popup showing
the size (Cursor size +3). - Esc dismisses any open popup — help, find-cursor, window picker, settle warning,
calibration prompt — one per press, most important first. - Manual calibration editor (Settings → Glasses): the values ⌃⌥B measures are now visible and
hand-tunable in 0.1 steps — yaw-drift compensation on all models, mount pitch/roll on
One-series.
🔊 Mic stays put
If you pick a specific microphone, the app now keeps it when macOS tries to reassign the
input — including when Bluetooth earbuds connect mid-session. Choose "System default" to let
macOS manage it.
🩺 Diagnostics
The ColorSync daemon readout is now a live graph: three hours of history plus a real-time
10-minute pane, sampled every 2 s, with the "pinned" threshold marked — short bursts that release
are normal; a sustained plateau is the stuck state.
🛠️ Also fixed
- Find-cursor (⌃⌥C) reliably toggles off (it fought the help overlay for a render slot).
- The "display service didn't settle" warning no longer truncates mid-sentence.
Requirements: XREAL Air/Air 2/Air 2 Pro or One/One Pro, macOS 14+, Apple Silicon or Intel.
Both DMGs are notarized and stapled.
V0.7.1
AR Workspace Manager V0.7.1
Small, recommended update for everyone on 0.7.0.
🩹 Fixed: a crash during long AR sessions
A rare race condition in the render loop could crash the app mid-session: macOS can
occasionally deliver a display-refresh tick on a second thread while a frame is still
being drawn, and the two colliding frames corrupted internal render state. This was the
root cause behind a family of intermittent crashes some users (and the author) have hit
during multi-hour sessions — including with the new media player running.
Render ticks are now serialized: a colliding tick is simply skipped (one dropped frame
at 120 Hz — invisible), which removes the crash entirely.
Everything else is identical to V0.7.0
— see its notes for the full what's-new (media player, Intel support, update channels,
ColorSync stability work, and more).
Requirements: XREAL Air/Air 2/Air 2 Pro or One/One Pro, macOS 14+, Apple Silicon or Intel.
Both DMGs are notarized and stapled.
V0.7.0
AR Workspace Manager V0.7.0
🎬 New: Media player
Watch your own videos inside AR on a head-locked screen:
- Plays almost everything — MP4, MOV, MKV, AVI and more, with subtitles (text and
image-based) rendered consistently for every file. Playback is powered by bundled
VLCKit/libVLC. Files can live on your Mac or a mounted network drive. - Playlist — add multiple videos, drag to reorder, auto-advance, per-item durations, and
Loop and Shuffle toggles (shuffle plays everything once before any repeats). Your
playlist and playback position survive app restarts — stop mid-film and resume days later. - Five positions — pin the video to any corner of your view or go full view, from the panel or
by hotkey: ⌃⌥1–4 corners, ⌃⌥5 full view, ⌃⌥K play/pause, ⌃⌥←/→ ±10 s,
⌃⌥↑/↓ next/previous (Previous retraces what actually played, even shuffled), ⌃⌥0 stop.
A progress bar flashes in-view on every transport action; a scrub slider on the Media page jumps
anywhere in the file. (The shortcuts help — ⌃⌥H — is now three columns.) - Full view keeps the film's aspect ratio with cinematic black bars (an opt-in "stretch to
fill" toggle restores edge-to-edge), and background screen captures throttle automatically to
save power while you watch.
🩺 ColorSync stability (Air series)
A macOS bug can drive the colour service to a sustained CPU spin while XREAL glasses are
connected (XREAL's own Nebula app triggers it too). After a week of controlled measurement, the
trigger is now understood — display reconfiguration while the service is mid-burst — and the app
actively avoids it:
- Settle guard: before starting AR or switching workspaces, the app waits for a calm window
(a few seconds, bounded) instead of reconfiguring displays into a busy daemon. A small toast
shows while it waits — press ⏎ to proceed immediately. - Smarter recovery: the capture watchdog no longer rebuilds displays on false alarms
(static screens legitimately go quiet); a rebuild now requires real evidence of failure. - Opt-in alert (Diagnostics) when the service is genuinely stuck for 6+ minutes, with the
remedy that actually works: unplug the glasses for a minute or two. - Diagnostics gained per-session display-churn counters, a session log with crash detection, and
"Clear saved configs" now clears both registry locations.
🖱️ Click reliability in AR
Fixed clicks near the screen edge bordering the glasses display being swallowed or turning into
phantom drags (files "sticking" to the cursor until Esc). The cursor boundary now acts as a
gentle wall and is never enforced mid-click.
🔊 Slack messages, read aloud
Optional text-to-speech for new Slack messages — "Slack message from Jeff" — with a selectable
system voice (Settings → Slack, off by default, includes a test button and voice-download guide).
🖥️ Intel Macs now supported
Releases ship two builds with friendly names: …-Apple-Silicon.dmg and …-Intel.dmg.
The in-app updater detects your machine's chip at runtime (even under Rosetta) and downloads the
right one automatically.
📅 Calendar widget
Today and Tomorrow are always shown (with "no events" when they're clear), day headers carry
the date — Today (Tue 30 Jun) — and busy days show "+N more" instead of hiding events.
🔄 Update channels
Settings → About now has an Updates dropdown: Stable, Release candidates, or Betas.
Pre-releases only reach users who opt in — and switching back to Stable offers a clean downgrade
to the latest stable build.
🛠️ Fixes & quality of life
- Voice control — microphone changes apply instantly, the wake-word popup can no longer get
stuck listening, and your chosen mic is remembered across launches (re-asserted at startup
even when macOS reassigns the default). New warning when voice listens on a Bluetooth headset
mic (which forces the headset into low-quality call mode). - Connected widgets survive login races — if the Mac hasn't finished joining Wi-Fi when the
app starts, GitHub / Google Calendar / Slack now show "Waiting for the network — retrying…"
and reconnect automatically every 20 s instead of failing once and giving up. - Fixed a recurring crash (heap corruption in the render pipeline): a video frame-buffer
lifetime bug plus a capture watchdog that needlessly restarted healthy captures up to
1,800×/day. Both fixed. - Fixed a bug where every click in file-picker dialogs could stall for ~5 seconds.
📄 Licensing
The bundled VLCKit/libVLC is © VideoLAN, LGPL 2.1 — credited on the About page with the license
text included and a link to the source. Dynamically linked, replaceable in the app bundle.
Requirements: XREAL Air/Air 2/Air 2 Pro or One/One Pro, macOS 14+, Apple Silicon or Intel.
Both DMGs are notarized and stapled.
V0.7.0-RC1
AR Workspace Manager V0.7.0-RC1
Release candidate — feature-complete and tested, published for wider testing before the 0.7.0
stable release. If you prefer finished releases only, stay on V0.6.4.
🎬 New: Media player
Watch your own videos inside AR on a head-locked screen:
- Plays almost everything — MP4, MOV, MKV, AVI and more, with subtitles (text and
image-based) rendered consistently for every file. Playback is powered by bundled
VLCKit/libVLC. Files can live on your Mac or a mounted network drive. - Playlist — add multiple videos, drag to reorder, auto-advance to the next when one ends.
Your playlist and playback position survive app restarts. - Five positions — pin the video to any corner of your view or go full view, from the panel or
by hotkey: ⌃⌥1–4 corners, ⌃⌥5 full view, ⌃⌥K play/pause, ⌃⌥←/→ ±10 s,
⌃⌥↑/↓ next/previous in the playlist, ⌃⌥0 stop. A progress bar flashes in-view on every
transport action. (The shortcuts help — ⌃⌥H — is now three columns.) - Full-view watching automatically throttles the background screen captures to save power.
🔊 Slack messages, read aloud
Optional text-to-speech for new Slack messages — "Slack message from Jeff" — with a selectable
system voice (Settings → Slack, off by default, includes a test button and voice-download guide).
🖥️ Intel Macs now supported (experimental)
Releases now ship two builds: …-arm64.dmg for Apple Silicon and …-x86_64.dmg for Intel.
The in-app updater picks the right one automatically. Intel support is new — feedback welcome.
📅 Calendar widget
Today and Tomorrow are always shown (with "no events" when they're clear), day headers carry
the date — Today (Tue 30 Jun) — and busy days show "+N more" instead of hiding events.
🔄 Update channels
Settings → About now has an Updates dropdown: Stable, Release candidates, or Betas.
Pre-releases like this one only reach users who opt in — and switching back to Stable offers a
clean downgrade to the latest stable build.
🩺 Stability & diagnostics
- Fixed a recurring crash (heap corruption in the render pipeline) with two root causes: a
video frame-buffer lifetime bug, and a capture watchdog that was needlessly restarting healthy
screen captures up to 1,800×/day. Both fixed. - Voice control fixes — microphone changes now apply instantly (no more toggling voice
off/on), the wake-word popup can no longer get stuck listening, and the timing sliders apply to
both push-to-talk and wake word. New warning when voice listens on a Bluetooth headset mic
(which forces the headset into low-quality call mode). - ColorSync runaway (Air-series, macOS bug — XREAL's own Nebula app triggers it too): the app
no longer pretends it can auto-fix it. Instead there's an opt-in alert when the colour
service has been genuinely stuck for 6+ minutes, with the remedy that actually works (unplug the
glasses for ~30 s). Diagnostics gained per-session display-churn counters, a session log with
crash detection, and "Clear saved configs" now correctly clears both registry locations.
📄 Licensing
The bundled VLCKit/libVLC is © VideoLAN, LGPL 2.1 — credited on the About page with the license
text included and a link to the source. Dynamically linked, replaceable in the app bundle.
Requirements: XREAL Air/Air 2/Air 2 Pro or One/One Pro, macOS 14+, Apple Silicon or Intel.
Both DMGs are notarized and stapled.
V0.6.4
AR Workspace Manager for XREAL V0.6.4
XREAL One / One Pro / One S — automatic per-device calibration
The One-series IMU sits at a slight physical tilt that differs between models, so the previous fixed correction (tuned on the One Pro) left other One models a little off — turning your head could tilt or roll the screen.
This release measures your specific device's mount tilt and corrects it automatically:
- The first time you start AR with a new One-series device, you'll be asked to calibrate: put the glasses on, look straight ahead, and keep your head level and still for a few seconds.
- The result is saved per device, so it's a one-time step — your glasses are remembered next time you plug them in.
- You can re-run it any time from Settings ▸ Calibrate (or ⌃⌥B).
- If a calibration won't settle, you can still start AR and try again later — you're never locked out.
- Air-series glasses are unaffected — they're mounted flat and need no tilt correction.
Smoother workspace switching + ColorSync cleanup
Switching workspaces now reuses existing virtual displays when the resolution matches, instead of destroying and recreating them every time. This cuts the macOS colorsync background work that could slowly build up CPU over a long session.
- New System Health section in Settings shows live ColorSync daemon CPU and profile/config counts, with a "Clean ColorSync now" button.
Notarized and stapled. Requires macOS 14+ on Apple Silicon.
V0.6.3
AR Workspace Manager for XREAL V0.6.3
Bug fix:
- Fixed a crash that could happen when starting push-to-talk voice control after the Mac woke from sleep (or after the microphone was changed). The audio engine now fails gracefully with a message instead of quitting the app — just press the shortcut again to retry.
V0.6.2
AR Workspace Manager for XREAL V0.6.2
Bug fix:
- Fixed the GitHub widget repeatedly showing "not connected" / "token expired" when your token was actually fine. GitHub returns a 403 when it's rate-limiting requests, and that was being mistaken for an expired token. The widget now stays connected through rate limits and quietly backs off, and the PR-count queries are spaced out to avoid tripping GitHub's secondary rate limit in the first place.
V0.6.1
AR Workspace Manager for XREAL V0.6.1
Bug fix:
- Fixed a bug where wake-word voice recognition would stop responding after the first command — it now keeps listening for repeated commands.
V0.6.0
AR Workspace Manager for XREAL V0.6.0
New
- List HUD widget — a head-locked checklist in your glasses. Switch each widget between an in-app list (typed in the control panel) or a linked Apple Reminders list (syncs via iCloud; tick items off in the panel and it writes back to Reminders).
- Apple Calendar support — the Calendar widget can now read Apple Calendar (EventKit), not just Google. Pick the source per widget — Google / Apple / Both (merged & sorted) — and choose which Apple calendars feed it. Apple events also trigger the in-AR meeting alarms.
- Calendar display options — per widget, set how many events to show (1–10) and the time range: All upcoming / Today only / Today + tomorrow.
- Voice control — hands-free commands with push-to-talk and a wake word, on-device recognition, editable per-command phrases, a mic-level meter, and a quiet-until-wake popup.
- Drag boundary overlay — a dot-grid guide appears on transparent screens while you drag windows, to help placement.
Improved
- Consistent widget sizing — HUD widgets now use two standard sizes so they line up cleanly in a stack: small (clock, power) and medium (Slack, GitHub, Calendar, List).
- ColorSync runaway watchdog — self-heals the occasional ColorSync CPU spike.