def script_properties():  # ui
    props = S.obs_properties_create()
    p = S.obs_properties_add_list(
        props,
        "source",
        "Text Source",
        S.OBS_COMBO_TYPE_EDITABLE,
        S.OBS_COMBO_FORMAT_STRING,
    )
    sources = S.obs_enum_sources()
    if sources is not None:
        for source in sources:
            source_id = S.obs_source_get_unversioned_id(source)
            name = S.obs_source_get_name(source)
            S.obs_property_list_add_string(p, name, name)

        S.source_list_release(sources)

    _p = S.obs_properties_add_list(
        props,
        "scene",
        "Scene",
        S.OBS_COMBO_TYPE_EDITABLE,
        S.OBS_COMBO_FORMAT_STRING,
    )

    scenes = S.obs_frontend_get_scenes()
    for scene in scenes:
        name = S.obs_source_get_name(scene)
        S.obs_property_list_add_string(_p, name, name)
    S.source_list_release(scenes)

    S.obs_properties_add_button(props, "button", "Duplicate", button_pressed)
    return props
Example #2
0
def transition(scene):
    print("Transition: " + scene)
    scenes = obs.obs_frontend_get_scenes()
    for s in scenes:
        if obs.obs_source_get_name(s) == scene:
            obs.obs_frontend_set_current_scene(s)
        obs.obs_source_release(s)
    def dup(self):
        current_scene = S.obs_scene_from_source(
            S.obs_frontend_get_current_scene())
        scene_item = S.obs_scene_find_source(current_scene, self.source_name)
        info = S.obs_transform_info()
        crop = S.obs_sceneitem_crop()
        S.obs_sceneitem_get_info(scene_item, info)
        S.obs_sceneitem_get_crop(scene_item, crop)
        duplicate = S.obs_sceneitem_get_source(scene_item)
        duplicated = S.obs_source_duplicate(duplicate,
                                            "duplicate" + self.source_name,
                                            False)

        scenes = S.obs_frontend_get_scenes()
        for scene in scenes:
            name = S.obs_source_get_name(scene)
            if name == self.scene_name:
                scene = S.obs_scene_from_source(scene)
                scene_item2 = S.obs_scene_add(scene, duplicated)
                S.obs_sceneitem_set_info(scene_item2, info)
                S.obs_sceneitem_set_crop(scene_item2, crop)
                S.obs_scene_release(scene)

        S.obs_source_release(duplicated)
        S.source_list_release(scenes)
        S.obs_scene_release(current_scene)
 def set_current_scene(self):
     scenes = obs.obs_frontend_get_scenes()
     for scene in scenes:
         name = obs.obs_source_get_name(scene)
         if name == self.scene_name:
             obs.obs_frontend_set_current_scene(scene)
     obs.source_list_release(scenes)
Example #5
0
def scene_handler(address, *args):
    print(f"{address}: {args}")
    control, id_type, i_str = address.split("/")[3:6]

    if control == "button":
        i = int(i_str) - 1
        scn = obspython.obs_frontend_get_scenes()[i]
        obspython.obs_frontend_set_current_scene(scn)
Example #6
0
def set_scene_by_name(scene_name):
    scenes = obs.obs_frontend_get_scenes()

    scene = find_source_by_name_in_list(scenes, scene_name)
    if scene is not None:
        obs.obs_frontend_set_current_scene(scene)

    obs.source_list_release(scenes)
Example #7
0
def check_for_scene(name):
    check = False
    scenes = obs.obs_frontend_get_scenes()
    if scenes is not None:
        for scene in scenes:
            if obs.obs_source_get_name(scene) == name:
                check = True
    obs.source_list_release(scenes)
    return check
Example #8
0
def nextScene():
    scenes = obs.obs_frontend_get_scenes()
    if len(scenes) > 1:
        c_scene = obs.obs_frontend_get_current_preview_scene()
        if c_scene != None:
            i = scenes.index(c_scene) + 1
            if i < len(scenes):
                return scenes[i]
    return scenes[0]
Example #9
0
def switch_scenes():
    if is_active and should_switch_scenes():
        sources = obs.obs_enum_sources()
        scenes = obs.obs_frontend_get_scenes(sources)
        obs.source_list_release(sources)
        current = obs.obs_frontend_get_current_scene()
        for s in scenes:
            if s != current and obs.obs_source_get_name(s) in scene_names:
                obs.obs_frontend_set_current_scene(s)
        obs.obs_source_release(current)
def change_to_scene(scene_name):

    scenes = obs.obs_frontend_get_scenes()
    for scene in scenes:
        print(obs.obs_source_get_name(scene))
        if obs.obs_source_get_name(scene) == scene_name:

            current_scene = obs.obs_frontend_get_current_scene()
            scenes.remove(current_scene)
            obs.obs_frontend_set_current_scene(scene)
Example #11
0
def set_logo(blue_config, orange_config): #reused for logo later
    default_logo = os.path.join(files_path, 'logo.png')

    blue_config_bun = get_bot_config_bundle(blue_config)

    orange_config_bun = get_bot_config_bundle(orange_config)

    blue_logo = blue_config_bun.get_logo_file()
    if blue_logo is None:
        blue_logo = default_logo
    orange_logo = orange_config_bun.get_logo_file()
    if orange_logo is None:
        orange_logo = default_logo

    default_logo_scale = 0.25
    default_logo_size = [400*default_logo_scale, 300*default_logo_scale]

    blue_logo_size = list(Image.open(blue_logo).size)
    blue_scale = default_logo_size[0]/blue_logo_size[0]
    orange_logo_size = list(Image.open(orange_logo).size)
    orange_scale = default_logo_size[0]/orange_logo_size[0]

    scenes = obs.obs_frontend_get_scenes()
    if scenes is not None:
        for scene in scenes:
            if obs.obs_source_get_name(scene) == 'RLBot - AutoLeague':
                scene = obs.obs_scene_from_source(scene)
                items = obs.obs_scene_enum_items(scene)
                for item in items:
                    if item is not None:
                        source_t = obs.obs_sceneitem_get_source(item)
                        if obs.obs_source_get_name(source_t) == "Logo-0":
                            source = source_t
                            settings = obs.obs_data_create()
                            obs.obs_data_set_string(settings, "file", blue_logo)
                            obs.obs_source_update(source, settings)
                            obs.obs_data_release(settings)

                            vec = obs.vec2()
                            obs.vec2_set(vec, blue_scale, blue_scale)
                            obs.obs_sceneitem_set_scale(item, vec)

                        if obs.obs_source_get_name(source_t) == "Logo-1":
                            source = source_t
                            settings = obs.obs_data_create()
                            obs.obs_data_set_string(settings, "file", orange_logo)
                            obs.obs_source_update(source, settings)
                            obs.obs_data_release(settings)

                            vec = obs.vec2()
                            obs.vec2_set(vec, orange_scale, orange_scale)
                            obs.obs_sceneitem_set_scale(item, vec)

                obs.source_list_release(scenes)
                obs.sceneitem_list_release(items)
Example #12
0
    def transition(self, num, value):
        trans = obs.obs_frontend_get_current_transition()

        scenes = obs.obs_frontend_get_scenes()
        if num > len(scenes):
            print(f"Invalid scene number: {num}")
            return

        print(f"start transition to scene #{num}")
        duration = int(self.duration * (value / 100))
        obs.obs_transition_start(trans, obs.OBS_TRANSITION_MODE_AUTO, duration, scenes[num])
Example #13
0
def script_load(settings):
	global settngs
	settngs = settings
	print('toggle script loaded')
	scenes = obs.obs_frontend_get_scenes()
	if len(scenes) > 0:
		global loaded
		loaded = True
		_register_hot_keys(settings)
	obs.source_list_release(scenes)
	obs.obs_frontend_add_event_callback(on_event)
Example #14
0
def on_visibility_toggle(calldata):
    scenes_as_sources = obs.obs_frontend_get_scenes()
    sceneitem = obs.calldata_sceneitem(calldata, "item")
    visibility = obs.calldata_bool(calldata, "visible")
    name = obs.obs_source_get_name(obs.obs_sceneitem_get_source(sceneitem))
    for scene_as_source in scenes_as_sources:
        scene = obs.obs_scene_from_source(scene_as_source)
        match = obs.obs_scene_find_source(scene, name)
        if match:
            obs.obs_sceneitem_set_visible(match, visibility)
    obs.source_list_release(scenes_as_sources)
Example #15
0
    def set_visible_all(self, visible):
        """Cycle through all scenes, manually toggling visibility of the source

        Idea from GitHub user LukyLurks
        """
        scenes = obs.obs_frontend_get_scenes()
        for scene in scenes:
            scene_test = obs.obs_scene_from_source(scene)
            in_scene = obs.obs_scene_find_source(scene_test, self.source_name)
            if in_scene:
                obs.obs_sceneitem_set_visible(in_scene, visible)
        obs.source_list_release(scenes)
Example #16
0
def _register_hot_keys(settings):
	global scenes

	scenes = obs.obs_frontend_get_scenes()
	for i in range(len(scenes)):
		scene = scenes[i]
		scene_id = obs.obs_source_get_name(scene)
		callback = _handle_key(scene, scene_id)
		name = 'toggle.' + scene_id
		hot_key_id = obs.obs_hotkey_register_frontend(name, "Toggle '" + scene_id + "'", callback)
		save_array = obs.obs_data_get_array(settings, name)
		obs.obs_hotkey_load(hot_key_id, save_array)
		obs.obs_data_array_release(save_array)
		hot_keys.append({'callback': callback, 'scene_id': hot_key_id, 'name': name})
Example #17
0
def testInput(cmdType, channel, value):
    global midiParams
    scenes = obs.obs_frontend_get_scenes()
    transitions = obs.obs_frontend_get_transitions()

    if midiParams[0] == cmdType and midiParams[1] == channel:
        transition()
    if midiParams[2] == cmdType and channel >= midiParams[
            3] and channel < midiParams[3] + len(scenes):
        setPreview(channel - midiParams[3])
    if midiParams[4] == cmdType and channel >= midiParams[
            5] and channel < midiParams[5] + len(transitions):
        setTransition(channel - midiParams[5])
    if midiParams[6]:
        print(cmdType + "\t" + str(channel) + "\t" + str(value))
Example #18
0
def script_update(settings):
    global is_active, visibility_handler
    is_active = obs.obs_data_get_bool(settings, "is_active")
    if is_active:
        scenes = obs.obs_frontend_get_scenes()
        for scene in scenes:
            visibility_handler = obs.obs_source_get_signal_handler(scene)
            obs.signal_handler_connect(visibility_handler, "item_visible",
                                       on_visibility_toggle)
        obs.source_list_release(scenes)
    else:
        obs.signal_handler_disconnect(visibility_handler, "item_visible",
                                      on_visibility_toggle)
        visibility_handler = None
    obs.remove_current_callback()
def change_to_scene(bot, message, args):
    time_to_wait = time.time() - last_scene_change["t"]
    last_scene_change["t"] = time.time()
    if time_to_wait < DELAY:
        message['ttw'] = "{:.1f}".format(time_to_wait)
        return "CommandToSoon"
    scene_name = args['scene']
    scenes = obs.obs_frontend_get_scenes()
    for scene in scenes:
        print(obs.obs_source_get_name(scene))
        if obs.obs_source_get_name(scene) == scene_name:

            current_scene = obs.obs_frontend_get_current_scene()
            scenes.remove(current_scene)
            obs.obs_frontend_set_current_scene(scene)
    return 'Success'
Example #20
0
def get_scene_item(name):
    scenes = obs.obs_frontend_get_scenes()
    if scenes is not None:
        for scene in scenes:
            if obs.obs_source_get_name(scene) == 'RLBot - AutoLeague':
                scene = obs.obs_scene_from_source(scene)
                items = obs.obs_scene_enum_items(scene)
                for item in items:
                    if item is not None:
                        scene_source = obs.obs_sceneitem_get_source(item)
                        if obs.obs_source_get_name(scene_source) == name:
                            sceneItem = obs.obs_scene_find_sceneitem_by_id(scene, obs.obs_sceneitem_get_id(item))
                            obs.source_list_release(scenes)
                            obs.obs_sceneitem_addref(sceneItem)
                            obs.sceneitem_list_release(items)
                            return sceneItem
                obs.sceneitem_list_release(items)
    obs.source_list_release(scenes)
def script_properties():  # ui
    props = obs.obs_properties_create()
    p = obs.obs_properties_add_list(
        props,
        "scene",
        "Scene",
        obs.OBS_COMBO_TYPE_EDITABLE,
        obs.OBS_COMBO_FORMAT_STRING,
    )

    scenes = obs.obs_frontend_get_scenes()
    for scene in scenes:
        name = obs.obs_source_get_name(scene)
        obs.obs_property_list_add_string(p, name, name)
    obs.source_list_release(scenes)

    obs.obs_properties_add_button(props, "button", "Set current scene", set_pressed)
    return props
Example #22
0
def set_names(source_name, string):
    scenes = obs.obs_frontend_get_scenes()
    if scenes is not None:
        for scene in scenes:
            if obs.obs_source_get_name(scene) == 'RLBot - AutoLeague':
                scene = obs.obs_scene_from_source(scene)
                items = obs.obs_scene_enum_items(scene)
                for item in items:
                    if item is not None:
                        source_t = obs.obs_sceneitem_get_source(item)
                        if obs.obs_source_get_name(source_t) == source_name:
                            source = source_t
                            settings = obs.obs_data_create()
                            obs.obs_data_set_string(settings, "text", str(string))
                            obs.obs_source_update(source, settings)
                            obs.obs_data_release(settings)
                            obs.source_list_release(scenes)
                obs.sceneitem_list_release(items)
Example #23
0
def script_properties():
    props = obs.obs_properties_create()

    s = obs.obs_properties_add_list(props, "scene", "Scene",
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)
    p = obs.obs_properties_add_list(props, "source", "Text Source",
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)

    obs.obs_properties_add_bool(props, "reset_time",
                                "Reset time on scene switch")

    obs.obs_properties_add_int(props, "stop_stream_time",
                               "Stop stream/record after (seconds):", 10, 7200,
                               1)
    obs.obs_properties_add_bool(props, "stop_stream", "Enabled")
    sources = obs.obs_enum_sources()

    if sources is not None:

        for source in sources:
            name = obs.obs_source_get_name(source)
            source_id = obs.obs_source_get_unversioned_id(source)
            if source_id == "text_gdiplus" or source_id == "text_ft2_source":
                name = obs.obs_source_get_name(source)
                obs.obs_property_list_add_string(p, name, name)

        obs.source_list_release(sources)

    scenes = obs.obs_frontend_get_scenes()
    if scenes is not None:
        for scene in scenes:
            name = obs.obs_source_get_name(scene)
            obs.obs_property_list_add_string(s, name, name)

        obs.source_list_release(scenes)

    obs.obs_properties_add_button(props, "reset_button", "Reset Stopwatch",
                                  reset_stopwatch_pressed)
    obs.obs_properties_add_button(props, "button", "Refresh", refresh_pressed)
    return props
def update():
    global url
    try:
        with urllib.request.urlopen(url) as response:
            data = response.read()
            response = json.loads(data)

            _scenes = zip(obs.obs_frontend_get_scene_names(),
                          obs.obs_frontend_get_scenes())
            scenes = {}
            for scene in _scenes:
                scenes[scene[0]] = scene[1]
            if scenes.get(response['camera']) is not None:
                print("Switching to scene: " + response['camera'])
                obs.obs_frontend_set_current_scene(scenes[response['camera']])

    except urllib.error.URLError as err:
        obs.script_log(obs.LOG_WARNING,
                       "Error opening URL '" + url + "': " + err.reason)
        obs.remove_current_callback()
Example #25
0
def hidesource():
    #obs.script_log(obs.LOG_DEBUG,"Trying to hide source "+sourcename)

    frontendscenes = obs.obs_frontend_get_scenes()
    #obs.script_log(obs.LOG_DEBUG,str(frontendscenes))

    for scenesource in frontendscenes:
        #obs.script_log(obs.LOG_DEBUG,str(scenesource))

        #scenesource = obs.obs_frontend_get_current_scene()
        scene = obs.obs_scene_from_source(scenesource)
        #obs.script_log(obs.LOG_DEBUG,"Scene "+str(scene))

        sceneitem = obs.obs_scene_find_source(scene, sourcename)
        if sceneitem:
            #obs.script_log(obs.LOG_DEBUG,"Scene item "+str(sceneitem))

            obs.obs_sceneitem_set_visible(sceneitem, False)

        #obs.obs_source_release(scenesource)
    obs.source_list_release(frontendscenes)
def on_event(event):
    if event == obs.OBS_FRONTEND_EVENT_SCENE_CHANGED:
        if get_current_scene_name() == closing_scene:
            if manage_recording and obs.obs_frontend_recording_active():
                if stop_recording_delay == 0:
                    stop_recording()
                else:
                    obs.timer_add(stop_recording, stop_recording_delay * 1000)
            if manage_streaming and obs.obs_frontend_streaming_active():
                if stop_streaming_delay == 0:
                    stop_streaming()
                else:
                    obs.timer_add(stop_streaming, stop_streaming_delay * 1000)
        else:
            if manage_recording and obs.obs_frontend_recording_active():
                obs.timer_remove(stop_recording)
            if manage_streaming and obs.obs_frontend_streaming_active():
                obs.timer_remove(stop_streaming)
    elif not (obs.obs_frontend_streaming_active()
              or obs.obs_frontend_recording_active()) and (
                  event == obs.OBS_FRONTEND_EVENT_STREAMING_STARTING
                  or event == obs.OBS_FRONTEND_EVENT_RECORDING_STARTING
              ) and get_current_scene_name() != start_scene:
        scenes = obs.obs_frontend_get_scenes()
        if scenes != None:
            for scene_source in scenes:
                print(str(obs.obs_source_get_type(scene_source)))
                scene_name = obs.obs_source_get_name(scene_source)
                if scene_name == start_scene:
                    print(scene_name)
                    obs.obs_frontend_set_current_scene(scene_source)
                    break
            obs.source_list_release(scenes)
    elif (event == obs.OBS_FRONTEND_EVENT_STREAMING_STOPPING
          and not obs.obs_frontend_recording_active()) or (
              event == obs.OBS_FRONTEND_EVENT_RECORDING_STOPPING
              and not obs.obs_frontend_streaming_active()):
        obs.obs_frontend_remove_event_callback(on_event)
Example #27
0
def set_preview(idx):
    scenes = obs.obs_frontend_get_scenes()
    if idx < len(scenes) and idx >= 0:
        obs.obs_frontend_set_current_preview_scene(scenes[idx])
Example #28
0
def set_scene(scene_name):
    scenes = obs.obs_frontend_get_scenes()
    for scene in scenes:
        name = obs.obs_source_get_name(scene)
        if name == scene_name:
            obs.obs_frontend_set_current_scene(scene)
Example #29
0
def script_properties():
    props = obs.obs_properties_create()
    obs.obs_properties_add_text(
        props, "scripted_text", "Scripted text", obs.OBS_TEXT_MULTILINE
    )
    bool = obs.obs_properties_add_bool(props, "use_file", "Use file(UTF-8)")
    bool2 = obs.obs_properties_add_bool(props, "reload_file", "Auto reload file")

    fp = obs.obs_properties_add_path(
        props, "file_path", "Select file", obs.OBS_PATH_FILE, "*.*", std.path
    )

    obs.obs_property_set_visible(fp, std.use_file)
    obs.obs_property_set_visible(bool2, std.use_file)
    obs.obs_property_set_modified_callback(bool, check_file_use)
    obs.obs_property_set_modified_callback(bool2, check_file_use)
    obs.obs_properties_add_int(
        props, "refresh_rate", "Refresh rate(ms)", 15, 5 * 1000, 1
    )
    obs.obs_properties_add_int(props, "duration", "Duration shown(s)", 1, 3600, 1)

    p = obs.obs_properties_add_list(
        props,
        "source",
        "<h2>Text Source</h2>",
        obs.OBS_COMBO_TYPE_EDITABLE,
        obs.OBS_COMBO_FORMAT_STRING,
    )
    sp = obs.obs_properties_add_list(
        props,
        "playsound",
        "Media Source",
        obs.OBS_COMBO_TYPE_EDITABLE,
        obs.OBS_COMBO_FORMAT_STRING,
    )
    tp = obs.obs_properties_add_list(
        props,
        "text_effect",
        "Text effect",
        obs.OBS_COMBO_TYPE_EDITABLE,
        obs.OBS_COMBO_FORMAT_STRING,
    )

    lp = obs.obs_properties_add_list(
        props,
        "layer",
        "Layer(img,video,gif,etc..)",
        obs.OBS_COMBO_TYPE_EDITABLE,
        obs.OBS_COMBO_FORMAT_STRING,
    )

    obs.obs_property_set_long_description(
        tp, "<h1>Description of current text effect</h1>"
    )

    for i in std.txt_efcts.keys():
        obs.obs_property_list_add_string(tp, i, i)
    obs.obs_property_set_modified_callback(tp, show_tooltip)

    sources = obs.obs_enum_sources()
    if sources is not None:
        for source in sources:
            # exclude Desktop Audio and Mic/Aux by their capabilities
            capability_flags = obs.obs_source_get_output_flags(source)
            if (
                capability_flags & obs.OBS_SOURCE_DO_NOT_SELF_MONITOR
            ) == 0 and capability_flags != (
                obs.OBS_SOURCE_AUDIO | obs.OBS_SOURCE_DO_NOT_DUPLICATE
            ):
                source_id = obs.obs_source_get_unversioned_id(source)
                if source_id == "text_gdiplus" or source_id == "text_ft2_source":
                    name = obs.obs_source_get_name(source)
                    obs.obs_property_list_add_string(p, name, name)
                if source_id == "ffmpeg_source":
                    name = obs.obs_source_get_name(source)
                    obs.obs_property_list_add_string(sp, name, name)
                else:
                    name = obs.obs_source_get_name(source)
                    obs.obs_property_list_add_string(lp, name, name)

        obs.source_list_release(sources)

    scenes = obs.obs_frontend_get_scenes()  # for layered scene source
    for scene in scenes:
        name = obs.obs_source_get_name(scene)
        obs.obs_property_list_add_string(lp, name, name)
    obs.source_list_release(scenes)

    obs.obs_properties_add_button(
        props, "button1", "PREVIEW", lambda *props: std.hotkey_hook()
    )

    obs.obs_properties_add_button(
        props, "button2", "RESET", lambda *props: std.reset_duration()
    )

    return props
Example #30
0
def refresh_scenes():
    for i, scene_source in enumerate(obspython.obs_frontend_get_scenes()):
        scene_name = obspython.obs_source_get_name(scene_source)
        client.send_message(f"/obs/scene/label/num/{i+1}", scene_name)