The README claimed the macOS artifact is "a bare streamer-tools-camera.so" with a relative libobs install name that "will not load in OBS.app as it stands" — and contradicted the release notes for the same build. Downloading and inspecting the shipped streamer-tools-camera-v0.1.0-macos.zip settles it the other way:
Proper bundle:streamer-tools-camera.plugin/Contents/MacOS/streamer-tools-camera is Mach-O MH_BUNDLE (what OBS loads), with Info.plist (BNDL, correct CFBundleExecutable), Contents/Resources/locale/en-US.ini, and both LiveKit dylibs in Contents/Frameworks/.
Install names are right — the specific doubt in the old text. The module loads @rpath/libobs.framework/Versions/A/libobs and carries LC_RPATH @executable_path/../Frameworks, which inside OBS.app resolves to OBS.app/Contents/Frameworks. @rpath/liblivekit.dylib resolves through LC_RPATH @loader_path/../Frameworks to the bundle's own copy, and liblivekit.dylib finds liblivekit_ffi.dylib through its own LC_RPATH @loader_path. Nothing points into a build tree.
All three binaries are code-signed (LC_CODE_SIGNATURE, superblob 0xfade0cc0) — not optional, since arm64 macOS refuses to load unsigned code.
The real macOS limitation is different, and now stated: the bundle is arm64-only (no x86_64 slice), macOS 13+. Intel Macs can't load it regardless. And nobody has still ever opened it in OBS.app — well-formed and signed is a prior, not a load.
2. Linux and Windows are confirmed in the GUI — including a live show
Video and audio both arrive and hold up across a session: Linux verified by the project owner, Windows by two directors independently, and the plugin carried a live broadcast on 2026-09-07.
Because listing cameras requires an API call, that also retires "the WinHTTP backend has never run against a real streamer-tools server, only the loopback test server".
Deliberately not inflated — still on the unverified list:
Measured A/V sync and end-to-end latency against the existing egress path. No reported drift is not a measurement, and the os_gettime_ns() timestamp caveat is exactly why numbers are wanted.
Whether a publisher restarting mid-show recovers cleanly on screen.
macOS in the GUI.
The "Not verified anywhere" list is also deduplicated — my earlier edit left two overlapping macOS bullets and two A/V sync bullets.
3. Stale CI row
The table still said Windows was "Failing, fix pushed and awaiting a completed run". It's green, after the WinHTTP deadline fix (PR #5).
Release notes
Template updated to match, and v0.1.0's published notes regenerated through it so the public download page stops repeating the bare-.so claim. Rendered locally before publishing; bash -n clean.
## 1. The macOS "packaging gap" was wrong
The README claimed the macOS artifact is *"a bare `streamer-tools-camera.so`"* with a relative libobs install name that *"will not load in OBS.app as it stands"* — and contradicted the release notes for the same build. Downloading and inspecting the shipped `streamer-tools-camera-v0.1.0-macos.zip` settles it the other way:
- **Proper bundle:** `streamer-tools-camera.plugin/Contents/MacOS/streamer-tools-camera` is Mach-O **`MH_BUNDLE`** (what OBS loads), with `Info.plist` (`BNDL`, correct `CFBundleExecutable`), `Contents/Resources/locale/en-US.ini`, and both LiveKit dylibs in `Contents/Frameworks/`.
- **Install names are right** — the specific doubt in the old text. The module loads `@rpath/libobs.framework/Versions/A/libobs` and carries `LC_RPATH @executable_path/../Frameworks`, which inside OBS.app resolves to `OBS.app/Contents/Frameworks`. `@rpath/liblivekit.dylib` resolves through `LC_RPATH @loader_path/../Frameworks` to the bundle's own copy, and `liblivekit.dylib` finds `liblivekit_ffi.dylib` through its own `LC_RPATH @loader_path`. Nothing points into a build tree.
- **All three binaries are code-signed** (`LC_CODE_SIGNATURE`, superblob `0xfade0cc0`) — not optional, since arm64 macOS refuses to load unsigned code.
**The real macOS limitation is different, and now stated:** the bundle is **arm64-only** (no x86_64 slice), macOS 13+. Intel Macs can't load it regardless. And nobody has still ever opened it in OBS.app — well-formed and signed is a prior, not a load.
## 2. Linux and Windows are confirmed in the GUI — including a live show
Video and audio both arrive and hold up across a session: **Linux** verified by the project owner, **Windows** by two directors independently, and the plugin **carried a live broadcast on 2026-09-07**.
Because listing cameras requires an API call, that also retires *"the WinHTTP backend has never run against a real streamer-tools server, only the loopback test server"*.
Deliberately **not** inflated — still on the unverified list:
- **Measured** A/V sync and end-to-end latency against the existing egress path. No reported drift is not a measurement, and the `os_gettime_ns()` timestamp caveat is exactly why numbers are wanted.
- Whether a publisher restarting mid-show recovers cleanly on screen.
- macOS in the GUI.
The "Not verified anywhere" list is also deduplicated — my earlier edit left two overlapping macOS bullets and two A/V sync bullets.
## 3. Stale CI row
The table still said Windows was *"Failing, fix pushed and awaiting a completed run"*. It's green, after the WinHTTP deadline fix (PR #5).
## Release notes
Template updated to match, and **v0.1.0's published notes regenerated through it** so the public download page stops repeating the bare-`.so` claim. Rendered locally before publishing; `bash -n` clean.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01AzGnvQ6wfD7bw7PZN35ft9
Two corrections and one promotion, all from evidence rather than inference.
1. The "macOS packaging gap (known, unfixed)" section was WRONG, and it
contradicted the release notes for the same build. It claimed the artifact
is "a bare streamer-tools-camera.so" with a relative libobs install name
that "will not load in OBS.app as it stands". Downloading and inspecting
the shipped streamer-tools-camera-v0.1.0-macos.zip shows otherwise:
- a proper streamer-tools-camera.plugin bundle -- Contents/MacOS/<name> is
Mach-O MH_BUNDLE (what OBS loads), with Info.plist (BNDL, correct
CFBundleExecutable), Contents/Resources/locale/en-US.ini, and both
LiveKit dylibs in Contents/Frameworks/
- install names are right: the module loads
@rpath/libobs.framework/Versions/A/libobs and carries
LC_RPATH @executable_path/../Frameworks, which inside OBS.app resolves to
OBS.app/Contents/Frameworks; @rpath/liblivekit.dylib resolves through
LC_RPATH @loader_path/../Frameworks to the bundle's own copy, and
liblivekit.dylib finds liblivekit_ffi.dylib through LC_RPATH @loader_path.
Nothing points into a build tree.
- all three binaries carry LC_CODE_SIGNATURE, which is not optional:
arm64 macOS refuses to load unsigned code.
The real macOS limitation is different and now stated: the bundle is
arm64-only (no x86_64 slice), macOS 13+. Nobody has still ever opened it in
OBS.app -- well formed and signed is a prior, not a load.
2. Linux and Windows are confirmed working in the OBS GUI: video and audio
both arrive and hold up across a session, Linux by the project owner and
Windows by two directors independently, and the plugin carried a live show
on 2026-09-07. Since listing cameras requires an API call, that also
retires "the WinHTTP backend has never run against a real streamer-tools
server".
Scoped, not inflated: MEASURED A/V sync and latency against the egress path
are still unverified (no drift reported is not a measurement), as is
mid-show publisher restart. The "Not verified anywhere" list is now
deduplicated and says exactly that.
3. The CI table's Windows row still said "Failing, fix pushed and awaiting a
completed run". It is green, after the WinHTTP deadline fix.
Release notes template updated to match, and v0.1.0's published notes have
been regenerated through it so the public page stops repeating the bare-.so
claim.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AzGnvQ6wfD7bw7PZN35ft9
jknapp
merged commit 48a74e8c67 into main2026-09-10 12:31:33 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
1. The macOS "packaging gap" was wrong
The README claimed the macOS artifact is "a bare
streamer-tools-camera.so" with a relative libobs install name that "will not load in OBS.app as it stands" — and contradicted the release notes for the same build. Downloading and inspecting the shippedstreamer-tools-camera-v0.1.0-macos.zipsettles it the other way:streamer-tools-camera.plugin/Contents/MacOS/streamer-tools-camerais Mach-OMH_BUNDLE(what OBS loads), withInfo.plist(BNDL, correctCFBundleExecutable),Contents/Resources/locale/en-US.ini, and both LiveKit dylibs inContents/Frameworks/.@rpath/libobs.framework/Versions/A/libobsand carriesLC_RPATH @executable_path/../Frameworks, which inside OBS.app resolves toOBS.app/Contents/Frameworks.@rpath/liblivekit.dylibresolves throughLC_RPATH @loader_path/../Frameworksto the bundle's own copy, andliblivekit.dylibfindsliblivekit_ffi.dylibthrough its ownLC_RPATH @loader_path. Nothing points into a build tree.LC_CODE_SIGNATURE, superblob0xfade0cc0) — not optional, since arm64 macOS refuses to load unsigned code.The real macOS limitation is different, and now stated: the bundle is arm64-only (no x86_64 slice), macOS 13+. Intel Macs can't load it regardless. And nobody has still ever opened it in OBS.app — well-formed and signed is a prior, not a load.
2. Linux and Windows are confirmed in the GUI — including a live show
Video and audio both arrive and hold up across a session: Linux verified by the project owner, Windows by two directors independently, and the plugin carried a live broadcast on 2026-09-07.
Because listing cameras requires an API call, that also retires "the WinHTTP backend has never run against a real streamer-tools server, only the loopback test server".
Deliberately not inflated — still on the unverified list:
os_gettime_ns()timestamp caveat is exactly why numbers are wanted.The "Not verified anywhere" list is also deduplicated — my earlier edit left two overlapping macOS bullets and two A/V sync bullets.
3. Stale CI row
The table still said Windows was "Failing, fix pushed and awaiting a completed run". It's green, after the WinHTTP deadline fix (PR #5).
Release notes
Template updated to match, and v0.1.0's published notes regenerated through it so the public download page stops repeating the bare-
.soclaim. Rendered locally before publishing;bash -nclean.🤖 Generated with Claude Code
https://claude.ai/code/session_01AzGnvQ6wfD7bw7PZN35ft9
Two corrections and one promotion, all from evidence rather than inference. 1. The "macOS packaging gap (known, unfixed)" section was WRONG, and it contradicted the release notes for the same build. It claimed the artifact is "a bare streamer-tools-camera.so" with a relative libobs install name that "will not load in OBS.app as it stands". Downloading and inspecting the shipped streamer-tools-camera-v0.1.0-macos.zip shows otherwise: - a proper streamer-tools-camera.plugin bundle -- Contents/MacOS/<name> is Mach-O MH_BUNDLE (what OBS loads), with Info.plist (BNDL, correct CFBundleExecutable), Contents/Resources/locale/en-US.ini, and both LiveKit dylibs in Contents/Frameworks/ - install names are right: the module loads @rpath/libobs.framework/Versions/A/libobs and carries LC_RPATH @executable_path/../Frameworks, which inside OBS.app resolves to OBS.app/Contents/Frameworks; @rpath/liblivekit.dylib resolves through LC_RPATH @loader_path/../Frameworks to the bundle's own copy, and liblivekit.dylib finds liblivekit_ffi.dylib through LC_RPATH @loader_path. Nothing points into a build tree. - all three binaries carry LC_CODE_SIGNATURE, which is not optional: arm64 macOS refuses to load unsigned code. The real macOS limitation is different and now stated: the bundle is arm64-only (no x86_64 slice), macOS 13+. Nobody has still ever opened it in OBS.app -- well formed and signed is a prior, not a load. 2. Linux and Windows are confirmed working in the OBS GUI: video and audio both arrive and hold up across a session, Linux by the project owner and Windows by two directors independently, and the plugin carried a live show on 2026-09-07. Since listing cameras requires an API call, that also retires "the WinHTTP backend has never run against a real streamer-tools server". Scoped, not inflated: MEASURED A/V sync and latency against the egress path are still unverified (no drift reported is not a measurement), as is mid-show publisher restart. The "Not verified anywhere" list is now deduplicated and says exactly that. 3. The CI table's Windows row still said "Failing, fix pushed and awaiting a completed run". It is green, after the WinHTTP deadline fix. Release notes template updated to match, and v0.1.0's published notes have been regenerated through it so the public page stops repeating the bare-.so claim. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AzGnvQ6wfD7bw7PZN35ft9