OBSWebSocket.JS allows Javascript-based connections to the Open Broadcaster plugin obs-websocket.
Created by Brendan Hagan
Maintained by OBS Websocket Community
Download | Samples | Changelog
You are currently reading the documentation for upcoming v5. For v4 documentation look here
# with npm npm install obs-websocket-js --save # with yarn yarn add obs-websocket-js # with bower bower install obs-websocket-js --saveTypescript definitions are included in this package, and are automatically generated to match the latest obs-websocket release.
The web distributable exposes a global named OBSWebSocket.
<script type='text/javascript' src='./dist/obs-websocket.js'></script>In node...
const { OBSWebSocket } = require('obs-websocket-js');Create a new WebSocket connection using the following.
- Address is optional; defaults to
localhostwith a port of4444. - Password is optional.
const obs = new OBSWebSocket(); obs.connect({ address: 'localhost:4444', password: '$up3rSecretP@ssw0rd' });All requests support the following two Syntax options where both err and data will contain the raw response from the WebSocket plugin.
Note that all response objects will supply both the original obs-websocket response items in their original format (ex: 'response-item'), but also camelCased (ex: 'responseItem') for convenience.
- RequestName must exactly match what is defined by the
obs-websocketplugin. {args}are optional. Note that bothrequest-typeandmessage-idwill be bound automatically.- To use callbacks instead of promises, use the
sendCallbackmethod instead ofsend.
// Promise API obs.send('RequestName', {args}) // returns Promise // The following are additional supported requests. obs.connect({ address: 'address', password: 'password' }) // returns Promise obs.disconnect();For all events, data will contain the raw response from the WebSocket plugin.
Note that all response objects will supply both the original obs-websocket response items in their original format (ex: 'response-item'), but also camelCased (ex: 'responseItem') for convenience.
- EventName must exactly match what is defined by the
obs-websocketplugin.
const callback = (data) => { console.log(data); }; obs.on('EventName', (data) => callback(data)); // The following are additional supported events. obs.on('ConnectionOpened', (data) => callback(data)); obs.on('ConnectionClosed', (data) => callback(data)); obs.on('AuthenticationSuccess', (data) => callback(data)); obs.on('AuthenticationFailure', (data) => callback(data));By default, certain types of WebSocket errors will be thrown as uncaught exceptions. To ensure that you are handling every error, you must do the following:
- Add a
.catch()handler to every returned Promise. - Add a
errorevent listener to theOBSWebSocketobject. By default only errors on the initial socket connection will be caught. Any subsequent errors will be emit here and will be considered uncaught without this handler.
// You must add this handler to avoid uncaught exceptions. obs.on('error', err => { console.error('socket error:', err); });See more examples in \samples.
const { OBSWebSocket } = require('obs-websocket-js'); const obs = new OBSWebSocket(); obs.connect({ address: 'localhost:4444', password: '$up3rSecretP@ssw0rd' }) .then(() => { console.log(`Success! We're connected & authenticated.`); return obs.send('GetSceneList'); }) .then(data => { console.log(`${data.scenes.length} Available Scenes!`); data.scenes.forEach(scene => { if (scene.name !== data.currentScene) { console.log(`Found a different scene! Switching to Scene: ${scene.name}`); obs.send('SetCurrentScene', { 'scene-name': scene.name }); } }); }) .catch(err => { // Promise convention dicates you have a catch on every chain. console.log(err); }); obs.on('SwitchScenes', data => { console.log(`New Active Scene: ${data.sceneName}`); }); // You must add this handler to avoid uncaught exceptions. obs.on('error', err => { console.error('socket error:', err); });To enable debug logging, set the DEBUG environment variable:
# Enables debug logging for all modules of osb-websocket-js DEBUG=obs-websocket-js:* # on Windows set DEBUG=obs-websocket-js:*If you have multiple libraries or application which use the DEBUG environment variable, they can be joined with commas:
DEBUG=foo,bar:*,obs-websocket-js:* # on Windows set DEBUG=foo,bar:*,obs-websocket-js:*Browser debugging uses localStorage
localStorage.debug = 'obs-websocket-js:*'; localStorage.debug = 'foo,bar:*,obs-websocket-js:*';For more information, see the debug documentation.
In order to better decouple the javascript library from the obs-websocket plugin the decision has been made to no longer provide method definitions for request/event methods. You are responsible for aligning your method calls with the plugin version that you would like to support.
// No longer supported. obs.getVersion(); obs.onSwitchScenes(); // Supported. obs.send('GetVersion'); obs.on('SwitchScenes');-
The
es5build is no longer provided. If you're in an environment which must run ES5-compatible code, continue using the latest 2.x release. -
The Callback API has been separated from the Promise API. If you use callbacks in your
sendinvocations, you will need to update them to use the newsendCallbackmethod:// No longer supported! obs.send('StartStreaming', (error) => { // Code here... }); // Use this instead: obs.send('StartStreaming').catch(error => { // Code here... });
-
The
connectmethod no longer accepts a callback. Use the promise it returns instead.// No longer supported! obs.connect({address: 'localhost: 4444'}, (error) => { // Code here... }); // Use this instead: obs.connect({address: 'localhost: 4444'}).then(() => { console.log('connected'); }).catch((error) => { console.error(error); });
To add your project to this list, submit a Pull Request.