Skip to main content

OBScheduler User Manual

1. Introduction

What is OBScheduler?

OBScheduler automates your OBS Studio production by letting you plan content schedules in advance. It works like a TV station's programming grid: you create a schedule in a web calendar, and OBScheduler automatically switches sources in OBS at the right times, seamlessly and without visual glitches, 24/7.

Who is this for?

Content creators, streamers, and broadcasters who want to automate their OBS productions without manual intervention.

⚠️ Software Expiration Notice
This version expires on January 1, 2026. After this date, the application will display an error message and will not start. Contact support for an updated version before expiration.

2. Prerequisites

Before installing OBScheduler, ensure you have:

In OBS Studio:

  1. WebSocket Server enabled:
    • Go to Tools → WebSocket Server Settings
    • Enable "Enable WebSocket server"
    • Note the port (default: 4455)
    • Set a password
  2. Two empty scenes created:
    • Create two new, empty scenes in OBS
    • Recommended names: _MAIN and _TEMP
    • These names must match your config.json exactly
  3. Virtual Camera started (for live preview feature):
    • In OBS, click "Start Virtual Camera"

3. Installation (5 Minutes)

Step 1: Extract Files

Unzip the downloaded archive to a folder on your computer. You'll find:

  • obscheduler.exe - The main application
  • config.json - Configuration file (you'll edit this)
  • schedule.json - Your schedule storage (initially empty)

Step 2: Configure config.json

Open config.json with a text editor. You only need to configure these mandatory fields:

{
  "obs": {
    "port": 4455,
    "password": "your_obs_password_here",
    "scheduleScene": "_MAIN",
    "scheduleSceneTmp": "_TEMP"
  },
  "webServer": {
    "port": "8080"
  },
  "mediaSource": {
    "videoDeviceIdentifier": "OBS Virtual Camera",
    "audioDeviceIdentifier": "",
    "quality": "low"
  }
}

Field explanations:

  • obs.port - Must match OBS WebSocket port
  • obs.password - Must match OBS WebSocket password
  • obs.scheduleScene - Name of your main visible scene
  • obs.scheduleSceneTmp - Name of your temporary scene
  • webServer.port - Port to access the web interface (default: 8080)
💡 Finding device identifiers:
If you don't know the exact names of your devices, run this in a terminal:
./obscheduler.exe -list-devices
Copy the "Friendly Name" or "DeviceID" to your config.

Step 3: First Launch

Double-click obscheduler.exe. A status window will appear and must remain open while using OBScheduler.

OBScheduler Status Window
Figure 1: The OBScheduler status window showing connection status, current/next programs, and activity log

This window shows:

  • OBS connection status (top-left)
  • Web server address and port
  • Active and upcoming programs
  • Real-time activity log

To stop OBScheduler: Simply close this window.

Step 4: Access the Web Interface

Open your browser and navigate to: http://localhost:8080

If you configured a username/password in config.json, you'll be prompted to log in.

OBScheduler Web Interface
Figure 2: The main web interface with live preview (left), server messages (bottom-left), and calendar (right)

4. First Use

Creating Your First Event

Quick Start Workflow:
  1. Click menu → "Get from Server"
  2. Click on calendar to create event
  3. Double-click event to edit details
  4. Click menu → "Commit to Server"

1. Load the current schedule

  • Click the menu (top-right of calendar)
  • Select "Get from Server"
  • Confirm to load the (initially empty) schedule

2. Create an event

  • Single click on an empty time slot in the calendar
  • Or click and drag to create an event with duration

3. Edit the event

Double-click the event to open the editor modal. You'll see five tabs:

General Tab
General Tab
Figure 3: General tab - Configure title, description, tags, and visual styling
  • Title: Event name shown in calendar (e.g., "Morning News")
  • Enabled: Toggle to enable/disable without deleting
  • Description: Optional notes about the event
  • Tags: Space-separated keywords for organization
  • Colors: Text, background, and border colors for visual identification
Source Tab ⭐ (Most Important)
Source Tab
Figure 4: Source tab - Define what content OBS will display

This tab defines what OBS will display:

Field Description Example
Input Name Unique technical name in OBS MorningNews
Input Kind Type of source browser_source
URI Path to content or URL https://www.rtve.es/play/videos/directo/...
Settings (JSON) Advanced source-specific configuration {"width": 1920, "height": 1080}
Transform (JSON) Position and size adjustments {} (usually empty)

Common Input Kinds:

  • ffmpeg_source - Video/audio files
  • image_source - Image files
  • browser_source - Web pages/URLs
  • vlc_source - Playlist support
  • text_ft2_source - Text overlay
Timing Tab
Timing Tab
Figure 5: Timing tab - Schedule when content plays, including recurring events

Non-recurring events:

  • Set Start and End date/time
  • Event plays once at the specified time

Recurring events:

  • Enable "Recurring" toggle
  • Set time in Start/End fields (date is ignored for recurring)
  • Set From/Until date range for the recurrence period
  • Select days of week when the event should repeat
Behavior Tab
Behavior Tab
Figure 6: Behavior tab - Advanced options for preloading and end-of-event actions

Advanced options (for future use):

  • Preload seconds: How early to prepare the source
  • On end action: What to do when the event ends (hide/stop/none)
Preview Tab
Preview Tab
Figure 7: Preview tab - See a preview of video sources before committing changes

For video sources, this tab shows a preview player to verify the content before saving.

4. Save to server

  • Click the menu again
  • Select "Commit to Server"
  • Your schedule is now active!

Verify It Works

Watch the OBS status window. When the scheduled time arrives, you should see:

  • Log messages indicating the source switch
  • The content appearing in your OBS _MAIN scene

5. Daily Operations

The Web Interface

Left Panel - Top: Live Preview
Real-time view of what OBS is currently outputting (requires Virtual Camera to be running).

Left Panel - Bottom: Server Messages
Connection status and server notifications.

Right Panel: Calendar
Your main workspace for managing the schedule.

Menu Actions (⋯)

  • New Schedule - Clear the entire calendar (use with caution)
  • Load from File - Import a .json schedule from your computer
  • Save to File - Export current schedule to your computer
  • Get from Server ⭐ - Load the active schedule from OBScheduler
  • Commit to Server ⭐ - Save your changes and activate them in OBS

Working with Events

Action Method
Create event Single click on empty slot OR click and drag
Edit event Double-click the event
Move event Drag and drop to new time slot
Resize event Drag the bottom edge
Delete event Select event and press Delete key

6. Quick Reference

Common Source Configurations

Video File:

Input Kind: ffmpeg_source
URI: C:/Videos/myfile.mp4
Settings: {"is_local_file": true}

Image:

Input Kind: image_source
URI: C:/Images/logo.png
Settings: {"file": "C:/Images/logo.png"}

Web Page:

Input Kind: browser_source
URI: https://example.com
Settings: {"width": 1920, "height": 1080}

Troubleshooting

Problem Solution
Application closes immediately Check config.json syntax. Ensure scheduleScene and scheduleSceneTmp are defined
Can't access web interface Verify status window is open. Check port in config.json matches the URL
OBS scenes don't change 1. Verify OBS is running
2. Check WebSocket port and password match
3. Review logs in status window
4. Ensure scene names match exactly
"Device not found" error Run ./obscheduler.exe -list-devices and use the exact name shown
Preview not working Start OBS Virtual Camera before launching OBScheduler

Daily Workflow Checklist

  1. ✓ Open OBScheduler (keep status window open)
  2. ✓ Open web interface in browser
  3. ✓ Click ⋯ → Get from Server
  4. ✓ Make your changes in the calendar
  5. ✓ Click ⋯ → Commit to Server
  6. ✓ Verify in OBS status window

7. Technical Appendix

A.1 Complete config.json Reference

obs Section

OBS WebSocket connection configuration.

Key Description Required Default
host OBS computer address No "localhost"
port WebSocket server port No 4455
password WebSocket password No ""
reconnectInterval Seconds between reconnection attempts No 15
scheduleScene Main visible scene name Yes N/A
scheduleSceneTmp Temporary internal scene name Yes N/A
sourceNamePrefix Prefix for managed sources No "_sched_"

webServer Section

Web interface configuration.

Key Description Required Default
port Web interface port No "8080"
user Username for authentication (optional) No ""
password Password for authentication (optional) No ""
enableTls Enable HTTPS No false
certFilePath SSL certificate path (if TLS enabled) Conditional ""
keyFilePath SSL key path (if TLS enabled) Conditional ""

scheduler Section

Key Description Required
defaultSource Fallback source when nothing scheduled (object with name, inputKind, uri, inputSettings, transform) No

mediaSource Section

Key Description Required Default
videoDeviceIdentifier Video device name/ID No ""
audioDeviceIdentifier Audio device name/ID No ""
quality Encoding quality: low, medium, high, ultra No "low"
💡 Quality Profile: The quality setting automatically configures resolution, bitrate, and other encoding parameters. You don't need to configure these manually.

paths Section

Key Description Default
ffmpeg Path to ffmpeg executable "ffmpeg"
logFile Application log file path ""
schedule Schedule file path "schedule.json"

A.2 Complete config.json Example

{
  "scheduler": {
    "defaultSource": {
      "name": "DefaultBackupSource",
      "inputKind": "image_source",
      "uri": "C:/Images/backup.png",
      "inputSettings": {
        "file": "C:/Images/backup.png"
      }
    }
  },
  "mediaSource": {
    "videoDeviceIdentifier": "OBS Virtual Camera",
    "audioDeviceIdentifier": "Monitor of Built-in Audio",
    "quality": "low"
  },
  "webServer": {
    "port": "8080",
    "user": "admin",
    "password": "secure_password_123"
  },
  "obs": {
    "host": "localhost",
    "port": 4455,
    "password": "my_obs_password",
    "reconnectInterval": 15,
    "scheduleScene": "_OBSCHEDULER_MAIN",
    "scheduleSceneTmp": "_OBSCHEDULER_TEMP",
    "sourceNamePrefix": "_sched_"
  },
  "paths": {
    "ffmpeg": "ffmpeg",
    "logFile": "obscheduler.log",
    "schedule": "schedule.json"
  }
}

A.3 Finding Device Identifiers

To find exact device names for videoDeviceIdentifier and audioDeviceIdentifier:

  1. Open terminal/command prompt
  2. Navigate to OBScheduler folder
  3. Run: ./obscheduler.exe -list-devices
  4. Copy the "Friendly Name" or "DeviceID" shown in the output
  5. Paste into your config.json

Example output:

----------- Available Media Devices -----------
VIDEO DEVICES:
  #1:
    Friendly Name : OBS Virtual Camera
    DeviceID      : v4l2:/dev/video6
    
AUDIO DEVICES:
  #1:
    Friendly Name : Monitor of Built-in Audio Analog Stereo
    DeviceID      : alsa:pulse

A.4 Support and Updates

For technical support, bug reports, or to request an updated version after expiration, contact your software provider.

Version Information:

  • Valid until: January 1, 2026
  • Recommended OBS version: 28.0 or higher

End of User Manual