Bezel v0.3.4
macOS: this build installs
0.3.3 and 0.3.2 were rejected by Gatekeeper on Apple Silicon — macOS threw them straight in the trash, and the usual xattr workaround no longer helped. The signature really was invalid: the app was signed from the outside in, which leaves the nested helpers and frameworks unsigned.
Bezel is now signed inside-out — every nested binary first, the outer app last — and the build itself verifies the result with codesign --verify --deep --strict and fails if it doesn't hold. If the dmg exists, its signature passed.
It is still ad-hoc signed rather than notarised, so on first launch use right-click → Open (or System Settings → Privacy & Security → Open Anyway). After that it opens normally.
Speedrun timer with automatic splits
Turn it on for any game in its Details panel and a timer appears in the corner when you launch. It splits by itself when you reach a new stage — no configuration, no manual split hotkey.
It works because Bezel already reads live game memory and already knows each game's stage and position fields, which is exactly the part that takes hours to set up in other timers. Splits show green when you're ahead of your best and red when you're behind, and your golds are kept per split, so a good first stage still counts even if the run dies later.
Times are casual-PB grade (about a tenth of a second), not leaderboard grade — the timer says so in its own footer. RetroArch games only.
Play with a friend, without the dump roulette
Netplay's real failure has never been the connection — it's that both sides need the same core on the same ROM, and when they don't you get a desync a minute in instead of an error.
Bezel knows exactly which dump you have, so the friend code carries that identity. Host, hit "Make code", send the string. When your friend pastes it, Bezel checks it against their shelf before anything launches and tells them plainly: you're good, or you both have the game but not the same dump (naming every copy they own, so they check the right file), or they don't have it at all.
It does not solve NAT — there's no relay or lobby. The host still needs to be reachable: same network, port-forwarded, or something like Tailscale. That's said in the panel too, rather than left for you to discover after three failed joins.
Soundtrack radio
Your music library now has stations built from what's actually in it — by composer and by era. Pick one and it fills the queue on shuffle. There is deliberately no "music from games you own" station: nothing in the tracks links them to a game, and guessing by title would be wrong more often than right.
Coming from LaunchBox or EmulationStation
Point Bezel at your existing setup and it adopts your favourites, playlists and titles.
It never copies, moves or touches a ROM. Re-scanning ROMs is cheap; rebuilding years of curation isn't. It reports what it found first ("412 matched, 38 favourites, 21 you don't have") and only writes when you confirm, and running it twice won't undo the first run.
Steam Deck
The on-screen keyboard no longer pops up over text boxes and hijacks controller navigation.
Bezelie
- She says "43 seconds" instead of "43 second" — and gets other spoken numbers right.
- Her stammer lands properly, so tsundere lines sound the way they read.
- Starting a game no longer queues up a pile of sentences she then has to work through.
- She stops burning attention on thoughts she can't voice, so what she does say arrives when it's relevant.
Fixes
- Album art no longer stays a blank placeholder after you identify, rip or scan an album. It used to need leaving the Music tab and coming back.
- A personal best in the last fraction of a minute displayed as
0:60.0instead of1:00.0.