Skip to main content

PyPI version License: GPL v3 Hatch project 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

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)

Source distribution for obsws-python 1.8.0
File Size Uploaded
obsws_python-1.8.0.tar.gz 28.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for obsws-python 1.8.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.8.0 This release

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.5

2 release files

1.0.4

1 release file

1.0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page