Skip to content

Instantly share code, notes, and snippets.

@otivedani
Created November 3, 2021 01:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save otivedani/4bca9579055457ae9d8a02fb36295d88 to your computer and use it in GitHub Desktop.
Save otivedani/4bca9579055457ae9d8a02fb36295d88 to your computer and use it in GitHub Desktop.
Python scripts to open multiview OBS
import obspython as obs
import base64
import binascii
projector_width = 1280
projector_height = 720
# computed values
_magic_number = '01d9d0cb'
_major_version = 3
_minor_version = 0
_frame_left = 0
_frame_top = 0
_frame_right = _frame_left + projector_width
_frame_bottom = _frame_top + projector_height
_normal_left = 0
_normal_top = 0 # +22
_normal_right = _normal_left + projector_width
_normal_bottom = _normal_top + projector_height
_screen_number = 0
_is_maximized = 0
_is_fullscreen = 0
_screen_width = 0
_screen_geometry_left = 0
_screen_geometry_top = 0 # +22
_screen_geometry_right = _screen_geometry_left + projector_width
_screen_geometry_bottom = _screen_geometry_top + projector_height
# concat all values
d2hs = lambda x: f'{x:0{4}X}' # 4 digit hexes
d2hl = lambda x: f'{x:0{8}X}' # 8 digit hexes
geometry_hex = ''.join([_magic_number,
d2hs(_major_version),
d2hs(_minor_version),
d2hl(_frame_left),
d2hl(_frame_top),
d2hl(_frame_right),
d2hl(_frame_bottom),
d2hl(_normal_left),
d2hl(_normal_top),
d2hl(_normal_right),
d2hl(_normal_bottom),
d2hs(_screen_number),
d2hs(_is_maximized),
d2hs(_is_fullscreen),
d2hl(_screen_width),
d2hl(_screen_geometry_left),
d2hl(_screen_geometry_top),
d2hl(_screen_geometry_right),
d2hl(_screen_geometry_bottom),
])
# `Encoded in Base64 using Qt’s geometry encoding`
geometry = base64.b64encode(binascii.unhexlify(geometry_hex)).decode()
obs.obs_frontend_open_projector("Multiview", -1, geometry, "")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment