OBScheduler User Manual
Table of Contents
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.
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:
- WebSocket Server enabled:
- Go to
Tools → WebSocket Server Settings - Enable "Enable WebSocket server"
- Note the port (default: 4455)
- Set a password
- Go to
- Two empty scenes created:
- Create two new, empty scenes in OBS
- Recommended names:
_MAINand_TEMP - These names must match your config.json exactly
- 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 applicationconfig.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 portobs.password- Must match OBS WebSocket passwordobs.scheduleScene- Name of your main visible sceneobs.scheduleSceneTmp- Name of your temporary scenewebServer.port- Port to access the web interface (default: 8080)
If you don't know the exact names of your devices, run this in a terminal:
./obscheduler.exe -list-devicesCopy 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.
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.
4. First Use
Creating Your First Event
- Click
⋯menu → "Get from Server" - Click on calendar to create event
- Double-click event to edit details
- 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
- 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)
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 filesimage_source- Image filesbrowser_source- Web pages/URLsvlc_source- Playlist supporttext_ft2_source- Text overlay
Timing Tab
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
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
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
_MAINscene
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
- ✓ Open OBScheduler (keep status window open)
- ✓ Open web interface in browser
- ✓ Click ⋯ → Get from Server
- ✓ Make your changes in the calendar
- ✓ Click ⋯ → Commit to Server
- ✓ 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" |
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:
- Open terminal/command prompt
- Navigate to OBScheduler folder
- Run:
./obscheduler.exe -list-devices - Copy the "Friendly Name" or "DeviceID" shown in the output
- 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