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)
Esempio n. 2
0
def run_import(props, prop):
  global template_scene_name
  global image_directory

  template_source = obs.obs_get_source_by_name(template_scene_name)
  template_scene = obs.obs_scene_from_source(template_source)

  # expecting filenames like '01 - test.jpg'
  files = glob.glob(image_directory + "/*")
  files.sort()
  for filename in files:
    # try to remove the initial ordinal, but don't error if it isn't present.
    # '01 - test.jpg' -> 'test'
    #      'test.jpg' -> 'test'
    parts = Path(filename).stem.split('-')
    bare_name = parts[len(parts) - 1].strip()

    new_scene = obs.obs_scene_duplicate(template_scene, bare_name, obs.OBS_SCENE_DUP_REFS)

    source_data = obs.obs_data_create()
    obs.obs_data_set_string(source_data, 'file', filename)
    source = obs.obs_source_create('image_source', 'Image - ' + bare_name, source_data, None)
    scene_item = obs.obs_scene_add(new_scene, source)
    obs.obs_sceneitem_set_order(scene_item, obs.OBS_ORDER_MOVE_BOTTOM)
    import_utils.fit_to_screen(scene_item)

    obs.obs_source_release(source)
    obs.obs_scene_release(new_scene)

    obs.script_log(obs.LOG_INFO, "created scene '" + bare_name + "' from " + filename)

  obs.obs_source_release(template_source)
def run_import(props, prop):
    global template_scene_name
    global video_directory

    template_source = obs.obs_get_source_by_name(template_scene_name)
    template_scene = obs.obs_scene_from_source(template_source)

    files = glob.glob(video_directory + "/*")
    files.sort()
    transition_number = 0
    for filename in files:
        transition_number += 1

        bare_name = "Transition " + str(transition_number)

        new_scene = obs.obs_scene_duplicate(template_scene, bare_name,
                                            obs.OBS_SCENE_DUP_REFS)

        source_data = obs.obs_data_create()
        obs.obs_data_set_string(source_data, 'local_file', filename)
        source = obs.obs_source_create('ffmpeg_source', 'Video - ' + bare_name,
                                       source_data, None)

        scene_item = obs.obs_scene_add(new_scene, source)
        obs.obs_sceneitem_set_order(scene_item, obs.OBS_ORDER_MOVE_BOTTOM)
        import_utils.fit_to_screen(scene_item)

        obs.obs_source_release(source)
        obs.obs_scene_release(new_scene)

        obs.script_log(obs.LOG_INFO,
                       "created scene '" + bare_name + "' from " + filename)

    obs.obs_source_release(template_source)
    def update_cursor(self):
        source = obs.obs_get_source_by_name(self.source_name)
        settings = obs.obs_data_create()
        if source is not None:
            scene_source = obs.obs_frontend_get_current_scene()
            scene_width = obs.obs_source_get_width(source)
            scene_height = obs.obs_source_get_height(source)
            scene = obs.obs_scene_from_source(scene_source)
            scene_item = obs.obs_scene_find_source(scene, self.source_name)
            if scene_item:
                scale = obs.vec2()
                obs.obs_sceneitem_get_scale(scene_item, scale)
                scene_width, scene_height = apply_scale(
                    scale.x, scale.y, scene_width, scene_height
                )
                next_pos = obs.vec2()
                next_pos.x, next_pos.y = get_position()
                next_pos.x -= scene_width / 2
                next_pos.y -= scene_height / 2
                # set position to center of source where cursor is
                obs.obs_sceneitem_set_pos(scene_item, next_pos)

            obs.obs_data_release(settings)
            obs.obs_scene_release(scene)
            obs.obs_source_release(source)
Esempio n. 5
0
def findSceneItem(source_name):
    scene_item = None
    currentSceneName = findCurrentSceneName()
    if currentSceneName:
        src = obs.obs_get_source_by_name(currentSceneName)
        if src:
            scene = obs.obs_scene_from_source(src)
            if scene:
                scene_item = obs.obs_scene_find_source(scene, source_name)
        obs.obs_scene_release(scene)
        obs.obs_source_release(src)
        return scene_item
    def crete_text_source(self):
        current_scene = obs.obs_frontend_get_current_scene()
        scene = obs.obs_scene_from_source(current_scene)
        settings = obs.obs_data_create()

        obs.obs_data_set_string(settings, "text",
                                "The quick brown fox jumps over the lazy dog")
        source = obs.obs_source_create_private("text_gdiplus", "test_py",
                                               settings)
        obs.obs_scene_add(scene, source)

        obs.obs_scene_release(scene)
        obs.obs_data_release(settings)
        obs.obs_source_release(source)
Esempio n. 7
0
 def refresh_screen(self):
     source = obs.obs_frontend_get_current_scene()
     scene = obs.obs_scene_from_source(source)
     sceneitem = obs.obs_scene_find_source_recursive(scene, self.source_name)
     if sceneitem is not None:
         obs.obs_sceneitem_set_visible(sceneitem, False)
         if self.debug:
             print("off")
         time.sleep(self.blink_speed)
         obs.obs_sceneitem_set_visible(sceneitem, True)
         if self.debug:
             print("on")
     obs.obs_sceneitem_release(sceneitem)
     obs.obs_scene_release(scene)
     obs.obs_source_release(source)
Esempio n. 8
0
 def save(self):
     currentScene = obs.obs_frontend_get_current_scene()
     sceneName = obs.obs_source_get_name(currentScene)
     sceneObject = obs.obs_scene_from_source(currentScene)
     items = obs.obs_scene_enum_items(sceneObject)
     transformations = getTransformationList(items)
     loc = filedialog.asksaveasfilename(filetypes=[("JSON", "*.json")],
                                        defaultextension=".json",
                                        title="Save Template File",
                                        initialfile=sceneName + ".json")
     f = open(loc, 'w')
     f.write(json.dumps(transformations))
     f.close()
     obs.obs_scene_release(sceneObject)
     obs.obs_source_release(currentScene)
    def move_text_source(self):
        current_scene = obs.obs_frontend_get_current_scene()
        source = obs.obs_get_source_by_name("test_py")
        scene = obs.obs_scene_from_source(current_scene)
        scene_item = obs.obs_scene_find_source(scene, "test_py")
        if scene_item:
            dx, dy = 10, 10
            print("old values", self.location.x)
            obs.obs_sceneitem_get_pos(
                scene_item, self.location
            )  # update to last position if its changed from OBS
            self.location.x += dx
            self.location.y += dy
            print("new values", self.location.x)
            obs.obs_sceneitem_set_pos(scene_item, self.location)

        obs.obs_scene_release(scene)
        obs.obs_source_release(source)
def scene_ar(scene):
    scene = obs.obs_scene_from_source(scene)
    try:
        yield scene
    finally:
        obs.obs_scene_release(scene)
Esempio n. 11
0
 def toggle(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)
     boolean = not S.obs_sceneitem_visible(scene_item)
     S.obs_sceneitem_set_visible(scene_item, boolean)
     S.obs_scene_release(current_scene)
def scene_create_ar(name):
    try:
        _scene = obs.obs_scene_create(name)
        yield _scene
    finally:
        obs.obs_scene_release(_scene)
Esempio n. 13
0
def auto_setup(props, prop): # Todo: add BO3 and BO5
    global game_item
    global social_item
    global overlay_item
    global bar_0_item
    global blue_cheer_item
    global orange_cheer_item
    global bar_1_item
    global blue_name_item
    global orange_name_item
    global blue_dev_name_item
    global orange_dev_name_item
    global blue_boost_item
    global orange_boost_item
    global boost_0_item
    global boost_1_item
    global goal_item
    global game_source
    global social_source
    global overlay_source
    global bar_0_source
    global blue_cheer_source
    global orange_cheer_source
    global bar_1_source
    global blue_name_source
    global orange_name_source
    global blue_boost_source
    global orange_boost_source
    global boost_0_source
    global boost_1_source
    global goal_source

    if not check_for_scene('RLBot - AutoLeague'):
        main_scene = obs.obs_scene_create('RLBot - AutoLeague')

        # Game Capture
        temp_settings = get_settings('Game Capture')
        game_source = obs.obs_source_create('game_capture', 'Game', temp_settings, None)
        game_item = obs.obs_scene_add(main_scene, game_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(game_source)
        # obs.obs_sceneitem_release(game_item)

        # Social
        temp_settings = get_settings('Social')
        temp_path = os.path.join(files_path, 'social.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        social_source = obs.obs_source_create('image_source', 'Social', temp_settings, None)
        social_item = obs.obs_scene_add(main_scene, social_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(social_source)
        # obs.obs_sceneitem_release(social_item)

        # RLBot Overlay
        temp_settings = get_settings('RLBot Overlay')
        temp_path = os.path.join(files_path, 'overlay.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        overlay_source = obs.obs_source_create('image_source', 'Overlay', temp_settings, None)
        overlay_item = obs.obs_scene_add(main_scene, overlay_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(overlay_source)
        # obs.obs_sceneitem_release(overlay_item)

        # Blue-Name
        temp_settings = get_settings('Blue Team Name')
        blue_name_source = obs.obs_source_create('text_gdiplus', 'Blue-Name', temp_settings, None)
        blue_name_item = obs.obs_scene_add(main_scene, blue_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(blue_name_source)
        # obs.obs_sceneitem_release(blue_name_item)

        # Orange-Name
        temp_settings = get_settings('Orange Team Name')
        orange_name_source = obs.obs_source_create('text_gdiplus', 'Orange-Name', temp_settings, None)
        orange_name_item = obs.obs_scene_add(main_scene, orange_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(orange_name_source)
        # obs.obs_sceneitem_release(orange_name_item)

        # Blue-Dev-Name
        temp_settings = get_settings('Blue Dev Name')
        blue_dev_name_source = obs.obs_source_create('text_gdiplus', 'Blue-Dev-Name', temp_settings, None)
        blue_dev_name_item = obs.obs_scene_add(main_scene, blue_dev_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(blue_dev_name_source)
        # obs.obs_sceneitem_release(blue_name_item)

        # Orange-Dev-Name
        temp_settings = get_settings('Orange Dev Name')
        orange_dev_name_source = obs.obs_source_create('text_gdiplus', 'Orange-Dev-Name', temp_settings, None)
        orange_dev_name_item = obs.obs_scene_add(main_scene, orange_dev_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(orange_dev_name_source)
        # obs.obs_sceneitem_release(orange_name_item)

        logo_pos = [300, 10]
        logo_scale = 0.25

        # Logo-0
        temp_settings = get_settings('Logo')
        temp_path = os.path.join(files_path, 'logo.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        logo_0_source = obs.obs_source_create('image_source', 'Logo-0', temp_settings, None)
        logo_0_item = obs.obs_scene_add(main_scene, logo_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(logo_0_source)
        vec = obs.vec2()
        obs.vec2_set(vec, logo_pos[0], logo_pos[1])
        obs.obs_sceneitem_set_pos(logo_0_item, vec)
        obs.vec2_set(vec, logo_scale, logo_scale)
        obs.obs_sceneitem_set_scale(logo_0_item, vec)
        # obs.obs_sceneitem_release(social_item)

        # Logo-1
        temp_settings = get_settings('Logo')
        temp_path = os.path.join(files_path, 'logo.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        logo_0_source = obs.obs_source_create('image_source', 'Logo-1', temp_settings, None)
        logo_0_item = obs.obs_scene_add(main_scene, logo_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(logo_0_source)
        vec = obs.vec2()
        obs.vec2_set(vec, 1920-100-logo_pos[0], logo_pos[1])
        obs.obs_sceneitem_set_pos(logo_0_item, vec)
        obs.vec2_set(vec, logo_scale, logo_scale)
        obs.obs_sceneitem_set_scale(logo_0_item, vec)
        # obs.obs_sceneitem_release(social_item)

        # Goal
        temp_settings = get_settings('Goal')
        temp_path = os.path.join(files_path, 'goal.mov')
        obs.obs_data_set_string(temp_settings, 'local_file', temp_path)
        goal_source = obs.obs_source_create('ffmpeg_source', 'Goal', temp_settings, None)
        goal_item = obs.obs_scene_add(main_scene, goal_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(goal_source)
        # obs.obs_sceneitem_release(goal_item)

        obs.obs_scene_release(main_scene)
        set_text_pos()
        do_reset_bar()
    else:

        print('Scene already exists, please delete or rename RLBot scene before continuing')
def scene_from_source_ar(source):
    source = S.obs_scene_from_source(source)
    try:
        yield source
    finally:
        S.obs_scene_release(source)
Esempio n. 15
0
def auto_setup(props, prop):  # Todo: add BO3 and BO5
    global game_item
    global social_item
    global overlay_item
    global bar_0_item
    global blue_cheer_item
    global orange_cheer_item
    global bar_1_item
    global blue_name_item
    global orange_name_item
    global blue_boost_item
    global orange_boost_item
    global boost_0_item
    global boost_1_item
    global goal_item
    global game_source
    global social_source
    global overlay_source
    global bar_0_source
    global blue_cheer_source
    global orange_cheer_source
    global bar_1_source
    global blue_name_source
    global orange_name_source
    global blue_boost_source
    global orange_boost_source
    global boost_0_source
    global boost_1_source
    global goal_source

    if not check_for_scene('RLBot - AutoLeague'):
        main_scene = obs.obs_scene_create('RLBot - AutoLeague')

        # Game Capture
        temp_settings = get_settings('Game Capture')
        game_source = obs.obs_source_create('game_capture', 'Game',
                                            temp_settings, None)
        game_item = obs.obs_scene_add(main_scene, game_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(game_source)
        # obs.obs_sceneitem_release(game_item)

        # Social
        temp_settings = get_settings('Social')
        temp_path = os.path.join(files_path, 'social.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        social_source = obs.obs_source_create('image_source', 'Social',
                                              temp_settings, None)
        social_item = obs.obs_scene_add(main_scene, social_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(social_source)
        # obs.obs_sceneitem_release(social_item)

        # RLBot Overlay
        temp_settings = get_settings('RLBot Overlay')
        temp_path = os.path.join(files_path, 'overlay.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        overlay_source = obs.obs_source_create('image_source', 'Overlay',
                                               temp_settings, None)
        overlay_item = obs.obs_scene_add(main_scene, overlay_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(overlay_source)
        # obs.obs_sceneitem_release(overlay_item)

        # Bar-0
        temp_settings = get_settings('bar-0')
        temp_path = os.path.join(files_path, 'bar-0.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        bar_0_source = obs.obs_source_create('image_source', 'Bar-0',
                                             temp_settings, None)
        bar_0_item = obs.obs_scene_add(main_scene, bar_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(bar_0_source)
        # obs.obs_sceneitem_release(bar_0_item)

        # Bar-1
        temp_settings = get_settings('bar-1')
        temp_path = os.path.join(files_path, 'bar-1.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        bar_1_source = obs.obs_source_create('image_source', 'Bar-1',
                                             temp_settings, None)
        bar_1_item = obs.obs_scene_add(main_scene, bar_1_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(bar_1_source)
        # obs.obs_sceneitem_release(bar_1_item)

        # Blue-Name
        temp_settings = get_settings('Blue Team Name')
        blue_name_source = obs.obs_source_create('text_gdiplus', 'Blue-Name',
                                                 temp_settings, None)
        blue_name_item = obs.obs_scene_add(main_scene, blue_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(blue_name_source)
        # obs.obs_sceneitem_release(blue_name_item)

        # Orange-Name
        temp_settings = get_settings('Orange Team Name')
        orange_name_source = obs.obs_source_create('text_gdiplus',
                                                   'Orange-Name',
                                                   temp_settings, None)
        orange_name_item = obs.obs_scene_add(main_scene, orange_name_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(orange_name_source)
        # obs.obs_sceneitem_release(orange_name_item)

        # Blue-Boost-0
        temp_settings = get_settings('Blue Boost 0')
        blue_boost_0_source = obs.obs_source_create('color_source',
                                                    'Blue-Boost-0',
                                                    temp_settings, None)
        blue_boost_0_item = obs.obs_scene_add(main_scene, blue_boost_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(blue_boost_0_source)
        # obs.obs_sceneitem_release(blue_boost_item)

        # Orange-Boost-0
        temp_settings = get_settings('Orange Boost 0')
        orange_boost_0_source = obs.obs_source_create('color_source',
                                                      'Orange-Boost-0',
                                                      temp_settings, None)
        orange_boost_0_item = obs.obs_scene_add(main_scene,
                                                orange_boost_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(orange_boost_0_source)
        # obs.obs_sceneitem_release(orange_boost_item)

        # Boost-0
        temp_settings = get_settings('Boost-0')
        temp_path = os.path.join(files_path, 'Boost-0.png')
        obs.obs_data_set_string(temp_settings, 'file', temp_path)
        boost_0_source = obs.obs_source_create('image_source', 'Boost-0',
                                               temp_settings, None)
        boost_0_item = obs.obs_scene_add(main_scene, boost_0_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(boost_0_source)
        # obs.obs_sceneitem_release(bar_1_item)

        # Goal
        temp_settings = get_settings('Goal')
        temp_path = os.path.join(files_path, 'goal.mov')
        obs.obs_data_set_string(temp_settings, 'local_file', temp_path)
        goal_source = obs.obs_source_create('ffmpeg_source', 'Goal',
                                            temp_settings, None)
        goal_item = obs.obs_scene_add(main_scene, goal_source)
        obs.obs_data_release(temp_settings)
        obs.obs_source_release(goal_source)
        # obs.obs_sceneitem_release(goal_item)

        obs.obs_scene_release(main_scene)
        set_text_pos()
        do_reset_bar()
    else:
        print(
            'Scene already exists, please delete or rename RLBot scene before continuing'
        )
Esempio n. 16
0
def cache_scenes():

    global scene_win_map
    global cached_items
    global tagRegex
    global dimensions

    clear_cache()

    cached_num = 0

    currentScene = obs.obs_frontend_get_current_scene()
    sceneName = obs.obs_source_get_name(currentScene)
    sceneObject = obs.obs_scene_from_source(currentScene)
    items = obs.obs_scene_enum_items(sceneObject)

    if items is not None:

        for item in items:

            source = obs.obs_sceneitem_get_source(item)

            source_id = obs.obs_source_get_id(source)
            source_name = obs.obs_source_get_name(source)

            #find = re.match(tagRegex, source_name)
            #print(tagRegex, source_name)

            
            if (re.match(tagRegex, source_name) and source_id == "window_capture"):

                modifiers = {}

                flagsSearch = re.findall(tagRegex, source_name)
                flags = flagsSearch[0].split(",")

                for flag in flags:
                    modifiers[flag.lower()] = True

                data = obs.obs_source_get_settings(source)

                windowData = obs.obs_data_get_string(data, "window")
                windowSplit = windowData.split(":")

                windowTitle = windowSplit[0].replace("#3A", ":")
                #print("Window Title: " + windowData[0])
                #print("Window EXE: " + windowData[1])
                
                obs.obs_data_release(data)
                
                try:
                    if (windowData in scene_win_map):
                        myWin = scene_win_map[windowData]
                    else:
                        myWin = win.FindWindow(None, windowTitle)
                        scene_win_map[windowData] = myWin
                except:
                    pass

                cached_items[cached_num] = {
                        "item": item,
                        "source": source,
                        "modifiers": modifiers,
                        "win32gui": myWin
                    }
                cached_num += 1

            else:

                #obs.obs_source_release(source)
                obs.obs_sceneitem_release(item)
                pass

            #obs.obs_source_release(source)
            #obs.obs_sceneitem_release(item)

    obs.obs_scene_release(sceneObject)
    #obs.obs_source_release(currentScene)
    
    #print("Cached %d items." % (cached_num))
    
    dimensions = obs.obs_video_info()
    obs.obs_get_video_info(dimensions)