obs = obslua function script_properties() local props = obs.obs_properties_create() local p = obs.obs_properties_add_editable_list(props, "sources", "Group Sources",obs.OBS_EDITABLE_LIST_TYPE_STRINGS,nil,nil) return props end function script_description() return "toggle between sources visible in a scene" end function item_visible(calldata) local visible = obs.calldata_bool(calldata,"visible") if not visible then return end local item = obs.calldata_sceneitem(calldata,"item") local source = obs.obs_sceneitem_get_source(item) local sourceName = obs.obs_source_get_name(source) local scene = obs.obs_sceneitem_get_scene(item) local sceneitems = obs.obs_scene_enum_items(scene) for i, sceneitem in ipairs(sceneitems) do local itemsource = obs.obs_sceneitem_get_source(sceneitem) local isn = obs.obs_source_get_name(itemsource) if sourceName ~= isn then obs.obs_sceneitem_set_visible(sceneitem, false) end end obs.sceneitem_list_release(sceneitems) end function script_update(settings) local sourceNames = obs.obs_data_get_array(settings, "sources"); local count = obs.obs_data_array_count(sourceNames); for i = 0,count do local item = obs.obs_data_array_item(sourceNames, i); local sourceName = obs.obs_data_get_string(item, "value"); local source = obs.obs_get_source_by_name(sourceName) if source ~= nil then local sh = obs.obs_source_get_signal_handler(source); obs.signal_handler_disconnect(sh,"item_visible",item_visible) obs.signal_handler_connect(sh,"item_visible",item_visible) end end end function script_defaults(settings) end function script_save(settings) end function script_load(settings) script_update(settings) end