# OBS Studio Control via WebSocket

This guide demonstrates how to control OBS Studio programmatically using Python. It uses the `obsws-python` library to communicate with the OBS WebSocket server (standard in OBS Studio 28+).

**Modules Used:**
*   `obsws-python`: The official Python library for OBS WebSocket v5.

## Prerequisites

1.  **Install OBS Studio** (Version 28 or newer recommended).
2.  **Enable WebSocket Server**:
    *   Open OBS Studio.
    *   Go to **Tools** -> **WebSocket Server Settings**.
    *   Check **Enable WebSocket server**.
    *   Note the **Server Port** (default `4455`) and **Server Password**.

## Installation

```bash
pip install obsws-python
```

## The Code

Save this as `obs_control.py`.

```python
import obsws_python as obs
import time
import sys

# Configuration (Match these with your OBS WebSocket Settings)
HOST = 'localhost'
PORT = 4455
PASSWORD = 'your_password_here'

def main():
    try:
        # 1. Connect to OBS
        # ReqClient is used to send requests (commands) to OBS
        client = obs.ReqClient(host=HOST, port=PORT, password=PASSWORD)
        
        version = client.get_version()
        print(f"Connected to OBS Studio {version.obs_version}")
        print(f"WebSocket Version: {version.obs_web_socket_version}")

        # 2. Get Current Scene
        current_scene = client.get_current_program_scene().current_program_scene_name
        print(f"Current Scene: {current_scene}")

        # 3. List All Scenes
        print("\nAvailable Scenes:")
        scenes = client.get_scene_list().scenes
        for s in scenes:
            # 'sceneName' key might vary slightly depending on version, usually it's 'sceneName'
            name = getattr(s, 'scene_name', s.get('sceneName')) 
            print(f" - {name}")

        # 4. Get Stream Status
        status = client.get_stream_status()
        print(f"\nStreaming Active: {status.output_active}")
        print(f"Stream Timecode: {status.output_timecode}")

        # --- Examples of Actions (Uncomment to use) ---

        # Switch Scene
        # client.set_current_program_scene("Scene 2")
        # print("Switched to Scene 2")

        # Toggle Recording
        # client.toggle_record()
        # print("Toggled recording")

    except Exception as e:
        print(f"Error: {e}")
        print("Ensure OBS is running and WebSocket server is enabled.")

if __name__ == "__main__":
    main()
```

## Usage

1.  Ensure OBS is running.
2.  Update the `PASSWORD` variable in the script.
3.  Run the script:
    ```bash
    python obs_control.py
    ```

[[programming/python/python]]