Skip to content

Latest commit

 

History

History
177 lines (126 loc) · 8.06 KB

File metadata and controls

177 lines (126 loc) · 8.06 KB

OBS WebSocket v5 Implementation Status for obs-cmd

Executive Summary

Overall Implementation Coverage: ~85% of OBS WebSocket v5 specification

The obs-cmd tool provides comprehensive coverage of OBS functionality with particular strength in scene management, outputs, inputs, and UI features. The modular architecture using Rust and the obws library provides a solid foundation for automation workflows. Recent additions have significantly improved input management capabilities, addressing previous critical gaps.


Implementation Status by Request Category

General

  • GetVersion - Full implementation showing OBS/WebSocket version info, platform, and available requests
  • TriggerHotkeyByName - Complete hotkey triggering by name

Config

  • Profile Management: GetProfileList, SetCurrentProfile, CreateProfile, RemoveProfile
  • Video Settings: GetVideoSettings, SetVideoSettings (resolution, FPS control)
  • Stream Service: GetStreamServiceSettings, SetStreamServiceSettings (RTMP configuration)
  • Recording Directory: GetRecordDirectory, SetRecordDirectory
  • Scene Collections: GetSceneCollectionList, SetCurrentSceneCollection, CreateSceneCollection (fully implemented)

Scenes

  • Basic Scene Operations: GetSceneList, GetCurrentProgramScene, SetCurrentProgramScene, CreateScene, RemoveScene, SetSceneName
  • Transition Management: GetSceneTransitionList, GetCurrentSceneTransition, SetCurrentSceneTransition, SetCurrentSceneTransitionDuration, TriggerStudioModeTransition
  • Studio Mode Control: GetStudioModeEnabled, SetStudioModeEnabled (enable/disable/toggle)
  • Preview Scene Control: GetCurrentPreviewScene, SetCurrentPreviewScene (studio mode only)

Scene Items

  • Basic Operations: GetSceneItemList, CreateSceneItem, RemoveSceneItem, DuplicateSceneItem
  • Visibility Control: GetSceneItemEnabled, SetSceneItemEnabled (show/hide/toggle)
  • Lock Control: GetSceneItemLocked, SetSceneItemLocked (lock/unlock)
  • Transform Control: GetSceneItemTransform, SetSceneItemTransform (position, scale, rotation, crop)
  • Order Control: GetSceneItemIndex, SetSceneItemIndex (Z-order management)
  • Blend Mode Control: GetSceneItemBlendMode, SetSceneItemBlendMode
  • Group Support: Handles nested sources using "Group/SourceName" syntax

Outputs

  • Streaming: GetStreamStatus, StartStream, StopStream, ToggleStream (full streaming control)
  • Recording: GetRecordStatus, StartRecord, StopRecord, ToggleRecord
  • Recording Advanced: PauseRecord, ResumeRecord, ToggleRecordPause, CreateRecordChapter (Hybrid MP4 support)
  • Virtual Camera: GetVirtualCamStatus, StartVirtualCam, StopVirtualCam, ToggleVirtualCam
  • Replay Buffer: GetReplayBufferStatus, StartReplayBuffer, StopReplayBuffer, ToggleReplayBuffer, SaveReplayBuffer, GetLastReplayBufferReplay

Missing Features:

  • Stream caption support (SendStreamCaption)

Media Inputs

  • Media Control: GetMediaInputStatus, SetMediaInputCursor, TriggerMediaInputAction (Play, Pause, Stop, Restart)
  • Missing: OffsetMediaInputCursor (cursor position offset functionality)

UI

  • Studio Mode: GetStudioModeEnabled, SetStudioModeEnabled
  • Monitor Management: GetMonitorList
  • Projectors: OpenVideoMixProjector (fullscreen), OpenSourceProjector (source-specific)

Sources

  • Implemented: SaveSourceScreenshot (with format, compression, dimension options)
  • Missing Core Functionality:
    • GetSourceActive (source active/show state)
    • GetInputList (list all inputs/sources)
    • GetInputKindList (available input types)
    • CreateInput (create new sources)
    • RemoveInput (remove sources)
    • SetInputName (rename sources)
    • GetInputSettings / SetInputSettings (source configuration)
    • GetInputDefaultSettings (default settings for input types)
    • GetInputMute / SetInputMute / ToggleInputMute (audio mute control)
    • GetInputVolume / SetInputVolume (audio volume control)
    • Advanced Input Control: Audio balance, sync offset, monitor type, audio tracks, deinterlacing
    • Input properties access (GetInputPropertiesListPropertyItems, PressInputPropertiesButton)

Filters

  • Implemented: SetSourceFilterEnabled (enable/disable/toggle filters)
  • Missing Core Functionality:
    • GetSourceFilterList (list filters on source)
    • GetSourceFilterKindList (available filter types)
    • GetSourceFilterDefaultSettings (default filter settings)
    • CreateSourceFilter (create new filters)
    • RemoveSourceFilter (remove filters)
    • SetSourceFilterName (rename filters)
    • GetSourceFilter (get filter info)
    • SetSourceFilterIndex (reorder filters)
    • SetSourceFilterSettings (configure filter settings)

Transitions

Missing Dedicated Transition Requests:

  • GetTransitionKindList (list available transition types)
  • SetCurrentSceneTransitionSettings (configure transition settings)
  • GetCurrentSceneTransitionCursor (get transition cursor position)
  • SetTBarPosition (control T-bar position)

Note: Basic transition switching is handled through the Scenes module, but dedicated transition configuration requests are missing

Stream

Implemented: Basic streaming control (start/stop/toggle/status) Missing Features:

  • SendStreamCaption (CEA-608 caption support)

Inputs

Major Improvements Implemented:

  • Input Management: GetInputList, CreateInput, RemoveInput, SetInputName
  • Input Settings: GetInputSettings, SetInputSettings, GetInputDefaultSettings
  • Audio Controls: GetInputMute/SetInputMute/ToggleInputMute, GetInputVolume/SetInputVolume
  • Advanced Audio: Audio balance, sync offset, monitor type, audio tracks configuration
  • Input Discovery: GetInputKindList, GetSpecialInputs

Current Status: Full input management suite implemented (experimental status)

Record

Missing Features:

  • SplitRecordFile (manual recording file splitting)

Architecture Assessment

Strengths:

  1. Modular Architecture: Clean separation of concerns with trait-based handlers
  2. Error Handling: Comprehensive error types using thiserror
  3. Connection Management: Robust retry logic and health checks
  4. CLI Design: Intuitive subcommand structure with clap derive macros
  5. Advanced Features: Studio mode, scene item transforms, recording chapters
  6. Output Coverage: Complete streaming, recording, virtual camera, replay buffer
  7. Input Management: Comprehensive input CRUD operations with full audio control

Areas for Development Priority:

  1. Filter Management (High) - Full filter lifecycle: create, remove, configure, reorder
  2. Transition System (Medium) - Dedicated transition configuration and control
  3. Media Control (Medium) - Complete seeking and position control
  4. Stream Features (Low) - Caption support and advanced streaming features
  5. Input Property Access (Low) - Advanced input properties and deinterlacing controls

Recommendations

Immediate Development Focus:

  1. Expand Filter System - Add comprehensive filter management
  2. Dedicated Transition Control - Implement missing transition-specific requests
  3. Enhanced Media Control - Add cursor offset functionality
  4. Advanced Recording Features - Implement manual file splitting
  5. Stream Caption Support - Add SendStreamCaption request
  6. Complete Input Property Access - Implement advanced input properties controls

Technical Improvements:

  1. Add Comprehensive Tests - Unit tests for all handler modules
  2. Documentation Updates - Update AGENTS.md with architectural decisions
  3. Error Recovery - Implement retry logic for failed requests
  4. Batch Operations - Support for WebSocket request batching
  5. Event Subscription - Allow configurable event subscriptions

Summary

obs-cmd provides a comprehensive foundation for OBS automation with excellent coverage of core functionality. The modular Rust architecture handles complex operations well, with particular strengths in scene management, input management, and output control. Recent additions have addressed the major gaps in input management, making it a robust tool for OBS automation workflows.