SpoutBrowser adds Spout texture-sending support to a Chromium-based browser.
This enables using any web content - WebGL, shaders, interactive pages - as a live video source in VJ software such as Resolume, MadMapper, and others.
Demo video: https://www.youtube.com/watch?v=vOFj6aN5QR4
This project is a fork of the Chromium Embedded Framework (CEF): https://github.com/chromiumembedded/cef
It is based on the classic CEF sample application cefclient.
Modifications to the CEF source are intentionally minimal to keep upgrading to newer CEF versions straightforward.
This is the key difference from the existing cef-spout project by Florian Geiselhart and the reason this project was created.
Spout integration uses CEF's off-screen rendering mode with shared textures and D3D11 rendering.
See the SpoutBrowser_TextureSender module for details.
If you prefer not to build from source, prebuilt Windows binaries are available on itch.io: https://bntr.itch.io/spout-browser
Two versions are provided:
- Free Demo - fully functional, with a subtle checker-style watermark.
- Full Version - no watermark, available for a small coffee-like price.
Purchasing the full version is simply a way to support ongoing development.
Of course, you can always build SpoutBrowser yourself - see the instructions below.
Prerequisites: Visual Studio 2022; CMake 3.21+; Python 3.9–3.11.
Refer to the CEF Project Setup for details.
- Run
_SpoutBrowser_generate_solution.bat. - Open the generated solution:
/_cef_binary/[cef_distribution_name]/build/cef.sln. - Build the cefclient project.
The build script automates the setup by working on top of prebuilt CEF binaries (similar to cef-project):
- Download: Fetches the specified CEF distribution into
/_cef_binary. - Patch: Injects SpoutBrowser source code and modifies CMake scripts within the CEF directory.
- Generate: Runs CMake to create the VS solution (this also fetches the Spout2 dependency).
The diagram below illustrates the sequence of operations performed during the build process.
SpoutBrowser supports standard cefclient command-line switches (see cefclient/README.md).
Common switches:
- --url="https://your-content.com" - Sets the starting page.
- --transparent-painting-enabled - Enables the Alpha channel, useful for overlaying web content over other layers.
- --off-screen-frame-rate=60 - Sets preferred FPS; default is 30.
Note: use fps 60 with --multi-threaded-message-loop to avoid dragging/resizing issues, related to #4008. - --always-on-top - Keeps the browser window in the foreground.
- --hide-controls - Hides the address bar and navigation buttons.
- --cache-path="cache" - Specifies the directory where cache data will be stored.
Using different paths allows running multiple isolated instances.
Full list of switches: common/client_switches.cc.
The following switches are ignored and forced to true: --off-screen-rendering-enabled, --shared-texture-enabled, --use-alloy-style.
Pro Tip: Create a .bat file for quick startup:
SpoutBrowser.exe --transparent-painting-enabled ^
--off-screen-frame-rate=60 --multi-threaded-message-loop ^
--url="https://threejs.org/examples/"Multiple Instances: By default, cefclient reuses the main browser process. This means if you launch multiple windows, subsequent ones will inherit some parameter values from the first process. To run completely independent instances with their own settings, specify a unique --cache-path for each.
SpoutBrowser consists of several components with different licenses:
-
Chromium Embedded Framework (CEF)
Licensed under the BSD 3-Clause License. See LICENSE.txt for the original CEF license. -
Spout (external dependency)
Spout is not included in this repository but is downloaded during CMake configuration. Spout is licensed under the BSD 2-Clause License: https://github.com/leadedge/Spout2 -
SpoutBrowser code
All additional code written specifically for SpoutBrowser is licensed under the MIT License. See LICENSE.spoutbrowser.txt for details.