RELAYCAST 0.2.0 BETA — MULTISTREAM FOR OBS
Windows x64 | Built for OBS Studio 32.2.2 | November 5, 2026

Send one OBS program to YouTube, Twitch, Kick, Patreon, and additional custom
RTMP/RTMPS destinations. There is no subscription, activation, destination paywall,
relay service, or telemetry in this plugin. Each destination uses your own upload.

GET STARTED

1. Run RelayCast-Setup-0.2.0.exe, click Install RelayCast, and approve the Windows
   installation prompt. The installer places the plugin in OBS's standard folder.
   This beta is unsigned. Review its source/checksum before installing. The ZIP
   also includes Install.ps1 and the files for manual installation below.
2. Restart OBS. Open Tools > RelayCast — Multistream. Existing saved keys are kept.
3. Select a destination. Paste its stream key and, when needed, its server URL.
   Check the box beside each destination you want to send to.
4. Choose 720p or 1080p and 30 or 60 fps. Save settings. Set up your OBS scene.
   For true 1080p, set OBS Settings > Video > Output (Scaled) Resolution to
   1920x1080. Set the OBS frame rate to 60 if you want 60 fps. The panel displays
   the actual output resolution/frame rate; it never upscales a smaller source.
5. Click Start all in RelayCast. Check each platform's preview and publish the
   broadcast if its dashboard requires a separate Go Live / Start Live action.
6. Click Stop all in RelayCast to end all its outputs.

The normal OBS Start/Stop Streaming button operates independently of RelayCast.
Closing the RelayCast panel keeps its streams running. Exiting OBS or changing
OBS profiles / scene collections stops RelayCast. No stream starts automatically.
Do not enter account passwords for YouTube/Twitch/Kick/Patreon. Their stream keys
provide the required ingest credentials. The optional username/password fields
are only for a custom RTMP server that explicitly requires server authentication.

MANUAL INSTALLATION

Create these folders if needed, then copy the files:
  plugin\bin\64bit\relay-cast.dll
    -> C:\ProgramData\obs-studio\plugins\relay-cast\bin\64bit\relay-cast.dll
  README.txt
    -> C:\ProgramData\obs-studio\plugins\relay-cast\data\README.txt

Restart OBS after installation. For portable OBS, copy the DLL into its
obs-plugins\64bit folder and create data\obs-plugins\relay-cast with README.txt.
Install only one copy of the plugin. The installer keeps an existing binary as
a backup and can swap the file without closing OBS when Windows permits it.
The running OBS process keeps its current version until you restart it. If Windows
locks the file against replacement, close OBS and run the installer again.
To uninstall, close OBS and remove only the relay-cast plugin folder you installed.
Your encrypted configuration is separate and can be retained for a reinstall.

PLATFORM SETUP

YouTube: the RTMPS server is prefilled. Get the stream key from Live Control Room.
Set the title, privacy, and broadcast details there. If automatic start is off,
publish from YouTube after its preview appears.
https://support.google.com/youtube/answer/10364924

Twitch: a standard ingest address is prefilled. Get your Primary Stream Key from
the creator dashboard. The server field is editable for regional ingest choices.
https://dev.twitch.tv/docs/video-broadcast/

Kick: paste BOTH the Stream URL and Stream Key from your creator dashboard.
Bare Kick AWS ingest URLs such as rtmps://HOST.global-contribute.live-video.net/
are automatically completed to rtmps://HOST.global-contribute.live-video.net:443/app.
An existing explicit port is preserved. The stream key remains a separate field.
Set your title and category in Kick's dashboard before starting.
https://help.kick.com/en/articles/7066931-how-to-stream-on-kick-com

Patreon: create a Live and choose Other streaming service. Paste the URL and key
for that session. After RelayCast connects, return to Patreon and click Start Live.
Each new Live has a new URL/key. Native Patreon Live is subject to account
eligibility; the plugin cannot unlock unavailable platform features.
https://support.patreon.com/hc/en-us/articles/35597591801997-Going-Live-on-Patreon-through-OBS

STREAM SETTINGS AND BANDWIDTH

This beta uses one shared x264 software H.264 encoder and one AAC audio encoder.
Video: CBR 4500 kbps by default, two-second keyframes, veryfast preset.
With Kick enabled, H.264 Main profile and zerolatency tuning are applied to the
shared encoder. OBS audio must be stereo at 48 kHz or lower for Kick.
Audio: 160 kbps, OBS audio track 1. Enable track 1 for sources you want included.
Video preserves the OBS output aspect ratio and fits within 1280x720 or 1920x1080,
without upscaling. 1080p / 30 fps is the new default, including migrated v0.1 settings.
The frame-rate selector sets a cap of 30 or 60 using an integer divisor. For example,
at the 30 fps cap, 60 becomes 30, 50 becomes 25, and 29.97 stays 29.97. At a 60 fps
cap, a 30 fps OBS source stays at 30. Higher resolution/fps requires more CPU.
Use an SDR Rec. 709 OBS video profile. HDR is rejected before streaming starts.
Bitrate can be set between 1000 and 8000 kbps; each platform has its own limits.
This beta has no hardware encoder selection, per-destination encoding, chat
aggregation, OAuth account linking, vertical second scene, or cloud relay.

Four destinations at the default settings send about 18.6 Mbps before overhead.
Allow roughly 23.3 Mbps of reliable upload capacity (25% headroom), plus other
internet traffic. There is no extra encoding pass per destination, but software
encoding still consumes CPU. Monitor OBS rendering/encoding load during a trial.

CONNECTION STATUS

Connecting: attempting a connection; it does not yet mean the platform is live.
Sending: the RTMP connection is established. Confirm publication in the dashboard.
Reconnecting: an established connection dropped; OBS retries automatically.
Failed: that destination stopped. Other destinations continue independently.
Stop all, correct the destination, and Start all to begin a new session.

Validation runs on all enabled destinations before any of them starts. Empty keys,
unsupported URLs, duplicate endpoints, and invalid bitrate values block startup.
Connection errors can still happen after that. Automatic reconnect uses OBS's
retry mechanism with 20 attempts and an initial two-second retry interval.

LOCAL CREDENTIAL STORAGE

The entire settings document is encrypted with Windows DPAPI for the current
Windows user. It is written atomically to the OBS plugin configuration directory:
  %APPDATA%\obs-studio\plugin_config\relay-cast\settings.dpapi
Portable OBS uses its own config directory. The exact path is provided by OBS.
Configuration is shared by OBS profiles in the same installation.
Credentials are sent directly to your selected streaming providers when you start.
RTMPS encrypts transport; plain RTMP does not. Prefer provider-supported RTMPS URLs.
Do not put stream keys in the Server URL field. OBS's native logging may include
server addresses. This plugin never logs key/password values itself.
Encrypted files are not portable between Windows users/machines. Re-enter keys
on another PC. A corrupt or undecryptable file is left untouched and saving is
disabled; recover or rename it while OBS is closed before setting up again.

RESELLING AND DISTRIBUTION

The source in this package is GPL-2.0-or-later, compatible with the OBS interfaces
it links to. See LICENSE.txt. You may sell copies, branded builds, installation,
or support. When distributing binaries, provide complete corresponding source,
build instructions, notices, and the GPL rights with them. Recipients retain the
right to modify and redistribute, including free redistribution. This is not an
exclusive proprietary plugin license. Keep the source folder with the binary.
https://www.gnu.org/licenses/gpl-faq.en.html#DoesTheGPLAllowMoney

RelayCast is a working name, not a cleared trademark. No platform affiliation is
claimed. This is an unsigned beta, not a certified commercial release. Before
selling it, complete UI/accessibility testing, real-platform trials, long-running
streams and network-loss tests, version compatibility testing, and signing.

Platform requirements still apply. Twitch's simulcasting rules include keeping
its experience at least as good and restrictions on combined activity overlays.
https://www.twitch.tv/p/terms-of-service#11-simulcasting
Kick Partners should review their multistream toggle and payout rules.
https://help.kick.com/en/articles/11091744-multistreaming-on-the-kick-partner-program

BUILD AND TEST

Install Python 3.10+, Git, Visual Studio 2022's Desktop development with C++ workload,
and OBS Studio 32.2.2 x64. From source:
  python build.py --tests --preview

The script downloads the official OBS 32.2.2 source headers and verifies its pinned
commit. It creates import libraries from the installed OBS DLL exports. It does not
bundle or replace OBS/Qt. Build output is source\.build. You may provide --sdk-dir,
--obs-dir, and --build-dir. The generated obsconfig.h contains plugin-facing build
macros only; the installed OBS runtime supplies the implementation.

To run unit tests, add OBS's bin\64bit directory to PATH, then:
  .build\relay-tests.exe .build\unit-results

To test four local RTMP outputs (requires actual FFmpeg and FFprobe executables):
  python test-streams.py --test-exe .build\relay-tests.exe --work .build\stream-test
Repeat using --mode failure, --mode reconnect, --mode cancel, --mode 1080,
--mode 1080-60, --mode downscale, and --mode audio as needed.
Use --ffmpeg and --ffprobe to supply absolute executable paths. Avoid launcher
shims: a shim can leave its child receiver running when terminated by a test.
Tests send synthetic black video to 127.0.0.1 only. The audio test feeds distinct
440 Hz left / 880 Hz right tones through OBS track 1 and checks decoded AAC for
audible level and correct stereo channels on all four receivers. Other modes
use silent audio. No account credentials or real broadcasts are involved.
The stock OBS RTMP module may independently refresh its public service catalog.

See TEST-REPORT.txt for what was and was not verified on the build machine.

To build the self-contained installer after building the DLL:
  python build-setup.py --build-dir .build/setup --output ../RelayCast-Setup-0.2.0.exe
The installer embeds the plugin, README, GPL license, and corresponding source ZIP.
For an isolated installer check, run it with --test-dir followed by an absolute
temporary folder. This uses that folder instead of the system OBS plugin folder.

The optional relay-preview.exe is a hidden UI layout fixture. Pass an absolute
PNG path as its first argument. It renders its own controls using fake credentials,
does not capture the desktop or load your saved keys, and cannot start a stream.
