OBS Control Skill — Claude Code
A comprehensive skill for Claude Code that enables full automation of OBS Studio: scene management, source positioning, filters, dual recording (16:9 + 9:16), and Aitum Vertical Canvas integration.
What this skill does
When loaded into Claude Code, this skill gives Claude deep knowledge to:
- Control OBS via WebSocket — scenes, sources, transforms, filters, audio, stream/record
- Edit OBS scene JSON directly — when WebSocket isn't available, modify the scene collection file offline
- Set up dual recording — simultaneous 16:9 (YouTube) + 9:16 (TikTok/Reels/Shorts) using the Aitum Vertical Canvas plugin
- Apply rounded corner masks — generate RGBA mask PNGs and apply them correctly via
mask_filter - Generate gradient backgrounds — mesh IDW gradients and Gaussian blob gradients using Pillow + NumPy
- Troubleshoot common OBS issues — docks locked, filters not applying, sources not filling frame, UnicodeErrors on Windows
Files
obs-control/
├── skill.md ← Main skill guide (WebSocket API, JSON editing, mask_filter, nested scenes)
├── aitum-vertical.md ← Aitum Vertical Canvas deep guide (9:16 layout, dual recording)
└── references/
├── api-requests.md ← Full OBS WebSocket v5 request reference (150+ requests)
└── inputs-kinds.md ← Source types by platform (Windows/Mac/Linux)
Key concepts covered
OBS WebSocket v5 (Python)
import obsws_python as obs
cl = obs.ReqClient(host='localhost', port=4455, password='yourpassword', timeout=3)
cl.set_current_program_scene('My Scene')
cl.set_scene_item_transform('My Scene', item_id, {
'positionX': 0, 'positionY': 0,
'boundsType': 'OBS_BOUNDS_SCALE_INNER',
'boundsWidth': 1920, 'boundsHeight': 1080,
})
cl.disconnect()
mask_filter — Rounded Corners (RGBA required)
from PIL import Image, ImageDraw
# type=0 (alpha mask) requires RGBA PNG — RGB silently produces NO effect
img = Image.new('RGBA', (1920, 1080), (0, 0, 0, 0))
ImageDraw.Draw(img).rounded_rectangle([0, 0, 1919, 1079], radius=25, fill=(255, 255, 255, 255))
img.save('rounded_mask.png')