Skip to main content

A Python SDK for OBS Studio WebSocket v5.0

Project description

PyPI version License: GPL v3 Code style: black Imports: isort

A Python SDK for OBS Studio WebSocket v5.0

Not all endpoints in the official documentation are implemented.

Requirements

  • OBS Studio
  • OBS Websocket v5 Plugin
    • With the release of OBS Studio version 28, Websocket plugin is included by default. But it should be manually installed for earlier versions of OBS.
  • Python 3.9 or greater

How to install using pip

pip install obsws-python

How to Use

By default the clients connect with parameters:

  • host: "localhost"
  • port: 4455
  • password: ""
  • timeout: None

You may override these parameters by storing them in a toml config file or passing them as keyword arguments.

Order of precedence: keyword arguments then config file then default values.

config file

A valid config.toml might look like this:

[connection]
host = "localhost"
port = 4455
password = "mystrongpass"

It should be placed in your user home directory.

Otherwise:

Example __main__.py:

import obsws_python as obs

# pass conn info if not in config.toml
cl = obs.ReqClient(host='localhost', port=4455, password='mystrongpass', timeout=3)

# Toggle the mute state of your Mic input
cl.toggle_input_mute('Mic/Aux')

Requests

Method names for requests match the API calls but snake cased. If a successful call is made with the Request client and the response is expected to contain fields then a response object will be returned. You may then access the response fields as class attributes. They will be snake cased.

example:

# load conn info from config.toml
cl = obs.ReqClient()

# GetVersion, returns a response object
resp = cl.get_version()
# Access it's field as an attribute
print(f"OBS Version: {resp.obs_version}")


# SetCurrentProgramScene
cl.set_current_program_scene("BRB")

send(param, data=None, raw=False)

If you prefer to work with the JSON data directly the {ReqClient}.send() method accepts an argument, raw. If set to True the raw response data will be returned, instead of a response object.

example:

resp = cl_req.send("GetVersion", raw=True)

print(f"response data: {resp}")

For a full list of requests refer to Requests

Events

When registering a callback function use the name of the expected API event in snake case form, prepended with "on_".

example:

# load conn info from config.toml
cl = obs.EventClient()

def on_scene_created(data):
    ...

# SceneCreated
cl.callback.register(on_scene_created)

def on_input_mute_state_changed(data):
    ...

# InputMuteStateChanged
cl.callback.register(on_input_mute_state_changed)

# returns a list of currently registered events
print(cl.callback.get())

# You may also deregister a callback
cl.callback.deregister(on_input_mute_state_changed)

register(fns) and deregister(fns) accept both single functions and lists of functions.

For a full list of events refer to Events

Attributes

For both request responses and event data you may inspect the available attributes using attrs().

example:

resp = cl.get_version()
print(resp.attrs())

def on_scene_created(data):
    print(data.attrs())

Errors

  • OBSSDKError: Base error class.
  • OBSSDKTimeoutError: Raised if a timeout occurs during sending/receiving a request or receiving an event
  • OBSSDKRequestError: Raised when a request returns an error code.
    • The following attributes are available:
      • req_name: name of the request.
      • code: request status code.
    • For a full list of status codes refer to Codes

Logging

If you want to see the raw messages simply set log level to DEBUG

example:

import obsws_python as obs
import logging


logging.basicConfig(level=logging.DEBUG)
...

Tests

First install development dependencies:

pip install -e .['dev']

To run all tests:

pytest -v

Official Documentation

For the full documentation:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

obsws_python-1.7.0.tar.gz (28.7 kB view details)

Uploaded Source

Built Distribution

obsws_python-1.7.0-py3-none-any.whl (30.8 kB view details)

Uploaded Python 3

File details

Details for the file obsws_python-1.7.0.tar.gz.

File metadata

  • Download URL: obsws_python-1.7.0.tar.gz
  • Upload date:
  • Size: 28.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.24.1

File hashes

Hashes for obsws_python-1.7.0.tar.gz
Algorithm Hash digest
SHA256 4d80d90df29c3e1561b8ac04bac423ddf7edc97f7e61209733f0c44dae6e4699
MD5 500adac0b57d4c8619f853ebe087d154
BLAKE2b-256 73476b28776bfbf70e41e2c31708937523d961a3fae1d46ac0b750d09cad6039

See more details on using hashes here.

File details

Details for the file obsws_python-1.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for obsws_python-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e71d4f8f7459b99976b5b5faf504cbcbc6cc490d45b6a625d85ae2fdf076784b
MD5 33e05cf7804d1ef720ce4417470198bb
BLAKE2b-256 2229dcb5286c9301eee8b72aee1e997761fb2cca9bf963fcd373acdfca353af3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page