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: 4455password: ""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 eventOBSSDKRequestError: 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
- The following attributes are available:
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
Install hatch and then:
hatch test
Official Documentation
For the full documentation:
Release files for obsws-python 1.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| obsws_python-1.8.0.tar.gz | 28.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsws_python-1.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 59.5 kB
Release files / obsws_python-1.8.0.tar.gz
| Download URL | obsws_python-1.8.0.tar.gz |
|---|---|
| Size | 28.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e082894f80deb0836861fdc3c222e497308c8f66328da6075baba5b456a20971
|
|
BLAKE2b-256 checksum How to use checksums |
d62f624af34a5b0f09fbf858bf6743521a8626d712671ac49573e625ad1c97d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.28.1
|
Release files / obsws_python-1.8.0-py3-none-any.whl
| Download URL | obsws_python-1.8.0-py3-none-any.whl |
|---|---|
| Size | 30.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
537bde416e149b6f59e0b2f31761d4a40329feafec171bde6fc1346ab8516e28
|
|
BLAKE2b-256 checksum How to use checksums |
974b537f3d372f065b2aeeac3812228066eb70f47436adf88aaacc94eb5fd4e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.28.1
|