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:
Metadata
Release files for obsws-python 1.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| obsws_python-1.8.1-py3-none-any.whl | Python 3 | none | any | Details for obsws_python-1.8.1-py3-none-any.whl |
Release files / obsws_python-1.8.1-py3-none-any.whl
| Download URL | obsws_python-1.8.1-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dbdba02b8641ac3f30bff16107c1bba11c6e5b6884ae85698038f0d593baaf6c
|
|
BLAKE2b-256 checksum How to use checksums |
aaba0bafc1bdb5502e0ea5004d1d1eb0a1c3b4700edd1edb156075c9223a3088
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.2
|
Security for obsws-python 1.8.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.