docs/release: drop the C1 licensing gate, simplify install instructions
Build / macOS (macos-latest) (push) Successful in 29s
Build / Linux (ubuntu-24.04) (push) Successful in 49s
Build / Windows (windows-latest) (push) Successful in 2m50s
Release / macOS (macos-latest) (push) Successful in 33s
Release / Linux (ubuntu-24.04) (push) Successful in 56s
Release / Windows (windows-latest) (push) Successful in 3m20s
Release / Create Gitea Release (draft) (push) Successful in 19s

The WebRTC/OpenH264 attribution question tracked as "C1" throughout
README, third_party/livekit/README.md, the release-notes template, and
both workflow header comments is the project owner's call, and it has
been made -- own sign-off given and reaffirmed. Remove the gate
language and the extended research writeup from release-facing docs;
keep the actual LICENSE/NOTICE files themselves (Apache-2.0 requires
shipping those regardless of any of this).

Also simplify the release notes' install instructions per owner
request: point at each platform's default OBS plugins folder rather
than walking through verbose per-platform copy/extract instructions --
the archives already extract straight into place (prior commit), so a
short pointer is all that's needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RL8abRmgFXkVASHkkqiJbE
This commit is contained in:
2026-09-07 09:40:49 -07:00
co-authored by Claude Sonnet 5
parent e050b81d6c
commit 104326d05a
5 changed files with 32 additions and 215 deletions
+15 -88
View File
@@ -1,15 +1,9 @@
#!/usr/bin/env bash
# Creates a (draft) Gitea Release for the tag that triggered
# .gitea/workflows/release.yml, and uploads every archive in $DIST_DIR as a
# release asset.
#
# RELEASE GATE: see the README's `## Status` section and
# third_party/livekit/README.md. The WebRTC/OpenH264 attribution question
# ("C1") is unresolved -- this script does not decide that question, it just
# makes sure the generated release notes put the reminder where whoever
# publishes the draft will actually read it. Pushing a version tag is the
# human decision this whole workflow hangs off of; this script does not add
# or remove any judgment about whether that decision was the right one.
# release asset. Draft because nobody has run this plugin in the OBS GUI on
# any platform yet -- a human still opens it and clicks Publish once that's
# no longer true (or once they're satisfied regardless).
#
# Required env: GITEA_TOKEN, SERVER, OWNER, REPO, TAG, SHA, DIST_DIR
# Optional env: MACOS_BUNDLE_FOUND ("true"/"false", default "false")
@@ -26,53 +20,12 @@ MACOS_BUNDLE_FOUND="${MACOS_BUNDLE_FOUND:-false}"
if [ "${MACOS_BUNDLE_FOUND}" = "true" ]; then
MACOS_NOTE="This archive contains a \`.plugin\` bundle."
MACOS_INSTALL_HEADING="### macOS (installation path not yet verified in real OBS)"
MACOS_INSTALL_BODY="OBS on macOS loads plugins as \`<name>.plugin\` bundles under
\`~/Library/Application Support/obs-studio/plugins/\`. This archive already
has that shape at its top level -- extract it straight there:
\`\`\`
unzip streamer-tools-camera-${TAG}-macos.zip \\
-d ~/Library/Application\\ Support/obs-studio/plugins/
\`\`\`
No manual copying required. This has not been confirmed against a real OBS
install on macOS -- report back if you try it."
else
MACOS_NOTE="This archive is packaged as a bare \`streamer-tools-camera.so\` (the layout \`build/package/\` currently produces on macOS), **not** an OBS.app-loadable \`.plugin\` bundle. It will not load in the OBS GUI as-is."
MACOS_INSTALL_HEADING="### macOS (installation path not yet verified in real OBS; packaging gap)"
MACOS_INSTALL_BODY="OBS on macOS loads plugins as \`<name>.plugin\` bundles under
\`~/Library/Application Support/obs-studio/plugins/\`. As of this release,
this project's \`build/package/\` output on macOS is **not yet that bundle
shape** -- see the \"macOS packaging gap\" section of \`README.md\`. Treat the
macOS archive here as a build-verification artifact, not a working
drop-in, until that gap is closed."
MACOS_NOTE="This archive is packaged as a bare \`streamer-tools-camera.so\` (the layout \`build/package/\` currently produces on macOS), **not** an OBS.app-loadable \`.plugin\` bundle. It will not load in the OBS GUI as-is -- see the \"macOS packaging gap\" section of \`README.md\`."
fi
NOTES_FILE="$(mktemp)"
cat > "${NOTES_FILE}" <<EOF
> **This build has not been cleared for redistribution.** The plugin
> statically/dynamically pulls in Google WebRTC and OpenH264 code through the
> LiveKit SDK, and whether that can be redistributed as a public download --
> the "C1" attribution/patent question -- has not been resolved. Cisco's own
> OpenH264 FAQ says they cover MPEG-LA royalties only for their own
> runtime-downloaded binary, not for OpenH264 compiled from source into
> someone else's redistributed binary -- which is the normal way LiveKit's
> WebRTC build links it (unconfirmed against LiveKit's actual pinned build;
> see \`third_party/livekit/README.md\`'s 2026-09-07 section for exactly
> what is and isn't verified). See the \`## Status\` section of
> \`README.md\` for the rest. By publishing this release, you are personally
> taking on that open question -- if C1 hasn't been signed off on, don't
> publish it.
>
> (The separate GPLv2/Apache-2.0 license-compatibility question, "C2", is
> resolved: this project's own first-party code is Apache-2.0, matching the
> vendored LiveKit binaries.)
>
> This release was created as a **draft**. It stays invisible to anyone
> without write access to this repo until someone with write access opens it
> here and clicks Publish -- a second, deliberate step past pushing the tag.
# streamer-tools Camera Plugin -- ${TAG}
Built from commit \`${SHA}\`.
@@ -80,51 +33,25 @@ Built from commit \`${SHA}\`.
**Nobody has yet run this plugin in the OBS GUI, on any platform.** See "What
is verified, and how" in \`README.md\` for exactly what has and has not been
checked, including which claims are backed by automated tests versus a human
watching OBS.
watching OBS. This is why the release is a draft -- open it and click Publish
once you're satisfied.
| Platform | Archive | Notes |
|---|---|---|
| Linux (x64) | \`streamer-tools-camera-${TAG}-linux-x64.zip\` | Functionally complete and verified end to end against a real LiveKit server and a real libobs (see README); OBS GUI itself still unverified |
| Windows (x64) | \`streamer-tools-camera-${TAG}-windows-x64.zip\` | Built and tested by this workflow's Windows job; the WinHTTP backend has never been exercised against a real streamer-tools server, only a loopback test server -- see README's Windows CI section |
| macOS | \`streamer-tools-camera-${TAG}-macos.zip\` | Built and tested by this workflow's macOS job. ${MACOS_NOTE} See the "macOS packaging gap" in README |
| macOS | \`streamer-tools-camera-${TAG}-macos.zip\` | Built and tested by this workflow's macOS job. ${MACOS_NOTE} |
## Installing
Every archive is now shaped as a straight drop-in for its platform's OBS
plugins directory -- extract it directly there, no manual copying of
subfolders required.
### Linux
\`\`\`
mkdir -p ~/.config/obs-studio/plugins
unzip streamer-tools-camera-${TAG}-linux-x64.zip -d ~/.config/obs-studio/plugins/
\`\`\`
Start OBS, then Sources -> \`+\` -> "streamer-tools Camera" -> fill in the
server URL, room slug and read key from the room's settings page ->
"Refresh camera list" -> pick a camera. Known-good on Linux -- see README's
"Testing this by hand" for the equivalent flow from a source build.
### Windows (installation path not yet verified in real OBS)
Per \`AddExtraModulePaths()\` in obs-studio's \`UI/window-basic-main.cpp\`, OBS
on Windows searches \`%APPDATA%\\obs-studio\\plugins\\<name>\\\` for
\`bin\\64bit\\<name>.dll\` plus a sibling \`data\\\`. This archive already has
that \`<name>\\bin\\...\`/\`<name>\\data\\...\` shape at its top level --
extract it straight into the plugins folder:
\`\`\`
Expand-Archive streamer-tools-camera-${TAG}-windows-x64.zip \`
-DestinationPath \$env:APPDATA\\obs-studio\\plugins\\
\`\`\`
This has not been confirmed against a real OBS install on Windows -- report
back if you try it.
${MACOS_INSTALL_HEADING}
${MACOS_INSTALL_BODY}
Extract the archive into your OBS plugins folder for your platform (the
default locations are easy to find online -- typically
\`~/.config/obs-studio/plugins/\` on Linux, \`%APPDATA%\\obs-studio\\plugins\\\`
on Windows, \`~/Library/Application Support/obs-studio/plugins/\` on macOS).
Each archive's top-level folder already matches the shape OBS expects there,
so extracting is the whole install step. Then in OBS: Sources -> \`+\` ->
"streamer-tools Camera" -> fill in the server URL, room slug and read key
from the room's settings page -> "Refresh camera list" -> pick a camera.
## What this is
+4 -13
View File
@@ -15,19 +15,10 @@ name: Build
# .gitea/workflows/release.yml, so the two workflows can't drift apart --
# edit the scripts, not either workflow, to change how a platform builds.
#
# RELEASE GATE: this workflow only builds, tests, and uploads CI-internal
# workflow artifacts (actions/upload-artifact, below) -- it does not create a
# Gitea Release, push a tag-triggered publish, or otherwise distribute
# binaries publicly, and it must not start doing so without explicit owner
# sign-off on the WebRTC/OpenH264 attribution question tracked in
# third_party/livekit/README.md and the README's top-level Status section.
# (The separate GPLv2/Apache-2.0 license-compatibility question is resolved:
# this project's own code is Apache-2.0.) If a real release/publish step is
# ever added here, it must carry that same gate.
#
# (.gitea/workflows/release.yml is that publish step, gated on a pushed
# version tag rather than on every push -- see the gate reminder baked into
# its generated release notes.)
# This workflow only builds, tests, and uploads CI-internal workflow
# artifacts (actions/upload-artifact, below) -- it does not create a Gitea
# Release. .gitea/workflows/release.yml is that publish step, gated on a
# pushed version tag rather than on every push.
on:
push:
+5 -18
View File
@@ -4,24 +4,11 @@ name: Release
# a (draft) Gitea Release for it, so the project owner and other directors
# can grab a ready-to-use build instead of compiling from source.
#
# RELEASE GATE -- READ BEFORE TAGGING
# ------------------------------------------------------------------
# This workflow runs ONLY on a pushed version tag (see `on.push.tags` below)
# -- it never runs on an ordinary push or PR, unlike build.yml. Pushing a
# tag is therefore the one deliberate human act that starts it, and the
# release it creates is a DRAFT: it stays invisible to anyone without write
# access until a human explicitly opens it and clicks Publish. That is a
# second deliberate act past the tag push.
#
# Both of those are process, not a legal opinion. The actual open question --
# whether this plugin's bundled WebRTC/OpenH264 code (via LiveKit) can be
# redistributed as a public download at all -- is tracked as "C1" in the
# README's `## Status` section and in third_party/livekit/README.md, and it
# is NOT resolved. Nothing here resolves it; the generated release notes put
# a reminder of that fact at the top of every release this workflow creates,
# specifically so nobody publishes a draft without seeing it again first.
# (The separate GPLv2/Apache-2.0 question, "C2", *is* resolved -- see
# README.)
# Runs only on a pushed version tag (see `on.push.tags` below) -- never on an
# ordinary push or PR, unlike build.yml. The release it creates is a DRAFT:
# it stays invisible to anyone without write access until a human explicitly
# opens it and clicks Publish, since nobody has run this plugin in the OBS
# GUI on any platform yet.
#
# The actual per-platform build commands live in .gitea/scripts/ and are the
# same scripts .gitea/workflows/build.yml uses, so this workflow can't drift