A Python SDK for OBS Studio WebSocket v5.0
Go to file
Adem 468c63f697 auth logger for clients
added RpcVersion in auth loggers for both requests and events clients.
removed the check in baseclient auth function and returned the whole response.
2023-06-23 01:48:45 +03:00
examples update README 2023-03-09 01:36:21 +00:00
obsws_python auth logger for clients 2023-06-23 01:48:45 +03:00
tests ensure studio mode is disabled at end of test run 2022-12-05 16:43:07 +00:00
.gitignore update readme Errors section 2023-06-19 17:46:43 +01:00
LICENSE initial commit including request calls to obswebsocket 2022-06-05 14:40:55 +03:00
pyproject.toml lower min python required version to 3.9 2022-12-05 16:49:17 +00:00
README.md update readme Errors section 2023-06-19 17:46:43 +01:00
setup.py lower min python required version to 3.9 2022-12-05 16:49:17 +00:00

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.

example:

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

# GetVersion
resp = cl.get_version()

# SetCurrentProgramScene
cl.set_current_program_scene("BRB")

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

If a request fails an OBSSDKError will be raised with a status code.

For a full list of status codes refer to Codes

If a timeout occurs during sending/receiving a request or receiving an event an OBSSDKTimeoutError will be raised.

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: