diff --git a/.config/.gitignore b/.config/.gitignore index 54be35d..001ccce 100644 --- a/.config/.gitignore +++ b/.config/.gitignore @@ -28,9 +28,27 @@ !sxhkd/** !polybar/ !polybar/** +!waybar/ +!waybar/** !sway/ !sway/** !hypr/ !hypr/** +!flameshot/ +!flameshot/** +!godot/ +!godot/** +!mpd/ +!mpd/** +!mpv/ +!mpv/** +!ncmpcpp/ +!ncmpcpp/** +!nvim/ +!nvim/** +!obs-studio/ +!obs-studio/** + + !.gitignore diff --git a/.config/flameshot/flameshot.ini b/.config/flameshot/flameshot.ini new file mode 100644 index 0000000..edf0cc7 --- /dev/null +++ b/.config/flameshot/flameshot.ini @@ -0,0 +1,45 @@ +[General] +contrastOpacity=188 +disabledTrayIcon=true +drawColor=#ff0005 +drawFontSize=43 +drawThickness=5 +ignoreUpdateToVersion=11.0.0 +savePath=/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/map_projects/xonotic/zombieofficeroom +savePathFixed=false +showStartupLaunchMessage=true +startupLaunch=true + +[Shortcuts] +TYPE_ARROW=A +TYPE_CIRCLE=C +TYPE_CIRCLECOUNT= +TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return +TYPE_COPY=Ctrl+C +TYPE_DELETE_CURRENT_TOOL=Del +TYPE_DRAWER=D +TYPE_EXIT=Ctrl+Q +TYPE_IMAGEUPLOADER=Return +TYPE_MARKER=M +TYPE_MOVESELECTION=Ctrl+M +TYPE_MOVE_DOWN=Down +TYPE_MOVE_LEFT=Left +TYPE_MOVE_RIGHT=Right +TYPE_MOVE_UP=Up +TYPE_OPEN_APP=Ctrl+O +TYPE_PENCIL=P +TYPE_PIN= +TYPE_PIXELATE=B +TYPE_RECTANGLE=R +TYPE_REDO=Ctrl+Shift+Z +TYPE_RESIZE_DOWN=Shift+Down +TYPE_RESIZE_LEFT=Shift+Left +TYPE_RESIZE_RIGHT=Shift+Right +TYPE_RESIZE_UP=Shift+Up +TYPE_SAVE=Ctrl+S +TYPE_SELECTION=S +TYPE_SELECTIONINDICATOR= +TYPE_SELECT_ALL=Ctrl+A +TYPE_TEXT=T +TYPE_TOGGLE_PANEL=Space +TYPE_UNDO=Ctrl+Z diff --git a/.config/godot/editor_settings-3.tres b/.config/godot/editor_settings-3.tres new file mode 100644 index 0000000..355468d --- /dev/null +++ b/.config/godot/editor_settings-3.tres @@ -0,0 +1,139 @@ +[gd_resource type="EditorSettings" format=2] + +[resource] +text_editor/highlighting/symbol_color = Color( 0.67, 0.785, 1, 1 ) +text_editor/highlighting/keyword_color = Color( 1, 0.44, 0.52, 1 ) +text_editor/highlighting/control_flow_keyword_color = Color( 1, 0.55, 0.8, 1 ) +text_editor/highlighting/base_type_color = Color( 0.26, 1, 0.76, 1 ) +text_editor/highlighting/engine_type_color = Color( 0.556, 1, 0.856, 1 ) +text_editor/highlighting/user_type_color = Color( 0.778, 1, 0.928, 1 ) +text_editor/highlighting/comment_color = Color( 0.8, 0.8075, 0.8275, 0.5 ) +text_editor/highlighting/string_color = Color( 1, 0.925, 0.63, 1 ) +text_editor/highlighting/background_color = Color( 0.125, 0.14375, 0.19375, 1 ) +text_editor/highlighting/completion_background_color = Color( 0.2, 0.23, 0.31, 1 ) +text_editor/highlighting/completion_selected_color = Color( 1, 1, 1, 0.07 ) +text_editor/highlighting/completion_existing_color = Color( 1, 1, 1, 0.14 ) +text_editor/highlighting/completion_font_color = Color( 0.8, 0.8075, 0.8275, 1 ) +text_editor/highlighting/text_color = Color( 0.8, 0.8075, 0.8275, 1 ) +text_editor/highlighting/line_number_color = Color( 0.8, 0.8075, 0.8275, 0.5 ) +text_editor/highlighting/safe_line_number_color = Color( 0.8, 0.969, 0.8275, 0.75 ) +text_editor/highlighting/caret_color = Color( 1, 1, 1, 1 ) +text_editor/highlighting/text_selected_color = Color( 0.1, 0.115, 0.155, 1 ) +text_editor/highlighting/brace_mismatch_color = Color( 1, 0.47, 0.42, 1 ) +text_editor/highlighting/current_line_color = Color( 1, 1, 1, 0.07 ) +text_editor/highlighting/line_length_guideline_color = Color( 0.2, 0.23, 0.31, 1 ) +text_editor/highlighting/word_highlighted_color = Color( 1, 1, 1, 0.07 ) +text_editor/highlighting/number_color = Color( 0.63, 1, 0.88, 1 ) +text_editor/highlighting/function_color = Color( 0.34, 0.7, 1, 1 ) +text_editor/highlighting/member_variable_color = Color( 0.736, 0.88, 1, 1 ) +text_editor/highlighting/mark_color = Color( 1, 0.47, 0.42, 0.3 ) +text_editor/highlighting/breakpoint_color = Color( 1, 0.47, 0.42, 1 ) +text_editor/highlighting/code_folding_color = Color( 1, 1, 1, 0.7 ) +text_editor/highlighting/search_result_color = Color( 1, 1, 1, 0.07 ) +asset_library/available_urls = { +"godotengine.org (Official)": "https://godotengine.org/asset-library/api" +} +asset_library/use_threads = true +projects/::run::media::zombie::zombienas::organized_data::absolutely-unique::projects::godot::3drigidbodycharatordemo = "/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/godot/3drigidbodycharatordemo" +export/android/android_sdk_path = "" +export/android/debug_keystore = "" +export/android/debug_keystore_user = "androiddebugkey" +export/android/debug_keystore_pass = "android" +export/android/force_system_user = false +export/android/shutdown_adb_on_exit = true +export/web/http_host = "localhost" +export/web/http_port = 8060 +export/web/use_ssl = false +export/web/ssl_key = "" +export/web/ssl_certificate = "" +export/macos/force_builtin_codesign = false +export/windows/rcedit = "" +export/windows/osslsigncode = "" +export/windows/wine = "" +interface/scene_tabs/always_show_close_button = false +interface/editor/save_on_focus_loss = false +interface/editor/show_update_spinner = false +interface/editor/update_continuously = false +interface/editor/update_vital_only = false +interface/editor/localize_settings = true +interface/scene_tabs/restore_scenes_on_load = false +interface/inspector/default_property_name_style = 1 +interface/inspector/default_float_step = 0.001 +interface/inspector/disable_folding = false +interface/inspector/auto_unfold_foreign_scenes = true +interface/inspector/horizontal_vector2_editing = false +interface/inspector/horizontal_vector_types_editing = true +interface/inspector/open_resources_in_current_inspector = true +interface/inspector/resources_to_open_in_new_inspector = "Script,MeshLibrary,TileSet" +interface/inspector/default_color_picker_mode = 0 +version_control/username = "" +version_control/ssh_public_key_path = "" +version_control/ssh_private_key_path = "" +_default_feature_profile = "" +interface/editors/show_scene_tree_root_selection = true +interface/editors/derive_script_globals_by_name = true +_use_favorites_root_selection = false +filesystem/file_server/port = 6010 +filesystem/file_server/password = "" +editors/3d/manipulator_gizmo_size = 80 +editors/3d/manipulator_gizmo_opacity = 0.9 +editors/3d/navigation/show_viewport_rotation_gizmo = true +debugger/auto_switch_to_remote_scene_tree = false +debugger/remote_scene_tree_refresh_interval = 1.0 +debugger/remote_inspect_refresh_interval = 0.2 +debugger/profiler_frame_history_size = 1800 +debugger/profiler_frame_max_functions = 512 +text_editor/files/open_dominant_script_on_scene_change = true +text_editor/external/use_external_editor = false +text_editor/external/exec_path = "" +text_editor/script_list/script_temperature_enabled = true +text_editor/script_list/highlight_current_script = true +text_editor/script_list/script_temperature_history_size = 15 +text_editor/script_list/current_script_background_color = Color( 1, 1, 1, 0.3 ) +text_editor/script_list/group_help_pages = true +text_editor/script_list/sort_scripts_by = 0 +text_editor/script_list/list_script_names_as = 0 +text_editor/external/exec_flags = "{file}" +editors/tile_map/preview_size = 64 +editors/tile_map/palette_min_width = 80 +editors/tile_map/palette_item_hseparation = 8 +editors/tile_map/show_tile_names = true +editors/tile_map/show_tile_ids = false +editors/tile_map/sort_tiles_by_name = true +editors/tile_map/bucket_fill_preview = true +editors/tile_map/editor_side = 1 +editors/tile_map/display_grid = true +editors/tile_map/grid_color = Color( 1, 0.3, 0.1, 0.2 ) +editors/tile_map/axis_color = Color( 1, 0.8, 0.2, 0.5 ) +editors/3d_gizmos/gizmo_colors/room_edge = Color( 0.5, 1, 0, 1 ) +editors/3d_gizmos/gizmo_colors/room_overlap = Color( 1, 0, 0, 1 ) +editors/3d_gizmos/gizmo_colors/portal_margin = Color( 1, 0.1, 0.1, 0.3 ) +editors/3d_gizmos/gizmo_colors/portal_edge = Color( 0, 0, 0, 0.3 ) +editors/3d_gizmos/gizmo_colors/portal_arrow = Color( 1, 1, 1, 1 ) +editors/3d_gizmos/gizmo_colors/occluder = Color( 1, 0, 1, 1 ) +editors/3d_gizmos/gizmo_colors/path = Color( 0.5, 0.5, 1, 0.8 ) +editors/3d_gizmos/gizmo_colors/csg = Color( 0, 0.4, 1, 0.15 ) +editors/grid_map/editor_side = 1 +editors/grid_map/palette_min_width = 230 +network/language_server/remote_host = "127.0.0.1" +network/language_server/remote_port = 6008 +network/language_server/enable_smart_resolve = true +network/language_server/show_native_symbols_in_editor = false +network/language_server/use_thread = false +editors/3d_gizmos/gizmo_colors/camera = Color( 0.8, 0.4, 0.8, 1 ) +editors/3d_gizmos/gizmo_colors/stream_player_3d = Color( 0.4, 0.8, 1, 1 ) +editors/3d_gizmos/gizmo_colors/skeleton = Color( 1, 0.8, 0.4, 1 ) +editors/3d_gizmos/gizmo_colors/visibility_notifier = Color( 0.8, 0.5, 0.7, 1 ) +editors/3d_gizmos/gizmo_colors/particles = Color( 0.8, 0.7, 0.4, 1 ) +editors/3d_gizmos/gizmo_colors/reflection_probe = Color( 0.6, 1, 0.5, 1 ) +editors/3d_gizmos/gizmo_colors/gi_probe = Color( 0.5, 1, 0.6, 1 ) +editors/3d_gizmos/gizmo_colors/baked_indirect_light = Color( 0.5, 0.6, 1, 1 ) +editors/3d_gizmos/gizmo_colors/navigation_edge = Color( 0.5, 1, 1, 1 ) +editors/3d_gizmos/gizmo_colors/navigation_edge_disabled = Color( 0.7, 0.7, 0.7, 1 ) +editors/3d_gizmos/gizmo_colors/navigation_solid = Color( 0.5, 1, 1, 0.4 ) +editors/3d_gizmos/gizmo_colors/navigation_solid_disabled = Color( 0.7, 0.7, 0.7, 0.4 ) +editors/3d_gizmos/gizmo_colors/joint_body_a = Color( 0.6, 0.8, 1, 1 ) +editors/3d_gizmos/gizmo_colors/joint_body_b = Color( 0.6, 0.9, 1, 1 ) +text_editor/highlighting/gdscript/function_definition_color = Color( 0.4, 0.9, 1, 1 ) +text_editor/highlighting/gdscript/node_path_color = Color( 0.39, 0.76, 0.35, 1 ) +projects/::run::media::zombie::zombienas::organized_data::absolutely-unique::projects::godot::firstpersonstarter = "/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/godot/firstpersonstarter" diff --git a/.config/godot/editor_settings-4.tres b/.config/godot/editor_settings-4.tres new file mode 100644 index 0000000..a06fd98 --- /dev/null +++ b/.config/godot/editor_settings-4.tres @@ -0,0 +1,149 @@ +[gd_resource type="EditorSettings" format=3] + +[resource] +interface/theme/base_color = Color(0.21, 0.24, 0.29, 1) +interface/theme/accent_color = Color(0.44, 0.73, 0.98, 1) +interface/theme/contrast = 0.3 +text_editor/theme/highlighting/symbol_color = Color(0.67, 0.79, 1, 1) +text_editor/theme/highlighting/keyword_color = Color(1, 0.44, 0.52, 1) +text_editor/theme/highlighting/control_flow_keyword_color = Color(1, 0.55, 0.8, 1) +text_editor/theme/highlighting/base_type_color = Color(0.26, 1, 0.76, 1) +text_editor/theme/highlighting/engine_type_color = Color(0.56, 1, 0.86, 1) +text_editor/theme/highlighting/user_type_color = Color(0.78, 1, 0.93, 1) +text_editor/theme/highlighting/comment_color = Color(0.8025, 0.81, 0.8225, 0.5) +text_editor/theme/highlighting/string_color = Color(1, 0.93, 0.63, 1) +text_editor/theme/highlighting/background_color = Color(0.1155, 0.132, 0.1595, 1) +text_editor/theme/highlighting/completion_background_color = Color(0.21, 0.24, 0.29, 1) +text_editor/theme/highlighting/completion_selected_color = Color(1, 1, 1, 0.07) +text_editor/theme/highlighting/completion_existing_color = Color(1, 1, 1, 0.14) +text_editor/theme/highlighting/completion_font_color = Color(0.8025, 0.81, 0.8225, 1) +text_editor/theme/highlighting/text_color = Color(0.8025, 0.81, 0.8225, 1) +text_editor/theme/highlighting/line_number_color = Color(0.8025, 0.81, 0.8225, 0.5) +text_editor/theme/highlighting/safe_line_number_color = Color(0.8025, 0.972, 0.8225, 0.75) +text_editor/theme/highlighting/caret_color = Color(1, 1, 1, 1) +text_editor/theme/highlighting/selection_color = Color(0.44, 0.73, 0.98, 0.4) +text_editor/theme/highlighting/brace_mismatch_color = Color(1, 0.47, 0.42, 1) +text_editor/theme/highlighting/current_line_color = Color(1, 1, 1, 0.07) +text_editor/theme/highlighting/line_length_guideline_color = Color(0.21, 0.24, 0.29, 1) +text_editor/theme/highlighting/word_highlighted_color = Color(1, 1, 1, 0.07) +text_editor/theme/highlighting/number_color = Color(0.63, 1, 0.88, 1) +text_editor/theme/highlighting/function_color = Color(0.34, 0.7, 1, 1) +text_editor/theme/highlighting/member_variable_color = Color(0.736, 0.88, 1, 1) +text_editor/theme/highlighting/mark_color = Color(1, 0.47, 0.42, 0.3) +text_editor/theme/highlighting/breakpoint_color = Color(1, 0.47, 0.42, 1) +text_editor/theme/highlighting/code_folding_color = Color(1, 1, 1, 0.27) +text_editor/theme/highlighting/search_result_color = Color(1, 1, 1, 0.07) +asset_library/available_urls = { +"godotengine.org (Official)": "https://godotengine.org/asset-library/api" +} +asset_library/use_threads = true +export/android/android_sdk_path = "" +export/android/debug_keystore = "" +export/android/debug_keystore_user = "androiddebugkey" +export/android/debug_keystore_pass = "android" +export/android/force_system_user = false +export/android/shutdown_adb_on_exit = true +export/android/one_click_deploy_clear_previous_install = false +export/macos/rcodesign = "" +export/web/http_host = "localhost" +export/web/http_port = 8060 +export/web/use_tls = false +export/web/tls_key = "" +export/web/tls_certificate = "" +export/windows/rcedit = "" +export/windows/osslsigncode = "" +export/windows/wine = "" +interface/editor/save_on_focus_loss = false +interface/editor/show_update_spinner = false +interface/editor/update_continuously = false +interface/editor/localize_settings = true +interface/scene_tabs/restore_scenes_on_load = true +interface/inspector/default_property_name_style = 1 +interface/inspector/default_float_step = 0.001 +interface/inspector/disable_folding = false +interface/inspector/auto_unfold_foreign_scenes = true +interface/inspector/horizontal_vector2_editing = false +interface/inspector/horizontal_vector_types_editing = true +interface/inspector/open_resources_in_current_inspector = true +interface/inspector/resources_to_open_in_new_inspector = PackedStringArray("Script", "MeshLibrary") +interface/inspector/default_color_picker_mode = 0 +interface/inspector/default_color_picker_shape = 3 +_default_feature_profile = "" +interface/editors/show_scene_tree_root_selection = true +interface/editors/derive_script_globals_by_name = true +docks/scene_tree/ask_before_deleting_related_animation_tracks = true +_use_favorites_root_selection = false +filesystem/file_server/port = 6010 +filesystem/file_server/password = "" +editors/3d/manipulator_gizmo_size = 80 +editors/3d/manipulator_gizmo_opacity = 0.9 +editors/3d/navigation/show_viewport_rotation_gizmo = true +editors/3d/navigation/show_viewport_navigation_gizmo = false +text_editor/behavior/files/auto_reload_and_parse_scripts_on_save = true +text_editor/behavior/files/open_dominant_script_on_scene_change = true +text_editor/external/use_external_editor = false +text_editor/external/exec_path = "" +text_editor/script_list/script_temperature_enabled = true +text_editor/script_list/script_temperature_history_size = 15 +text_editor/script_list/group_help_pages = true +text_editor/script_list/sort_scripts_by = 0 +text_editor/script_list/list_script_names_as = 0 +text_editor/external/exec_flags = "{file}" +version_control/username = "" +version_control/ssh_public_key_path = "" +version_control/ssh_private_key_path = "" +editors/bone_mapper/handle_colors/unset = Color(0.3, 0.3, 0.3, 1) +editors/bone_mapper/handle_colors/set = Color(0.1, 0.6, 0.25, 1) +editors/bone_mapper/handle_colors/missing = Color(0.8, 0.2, 0.8, 1) +editors/bone_mapper/handle_colors/error = Color(0.8, 0.2, 0.2, 1) +network/debug_adapter/remote_port = 6006 +network/debug_adapter/request_timeout = 1000 +network/debug_adapter/sync_breakpoints = false +editors/3d_gizmos/gizmo_colors/path = Color(0.5, 0.5, 1, 0.8) +editors/3d_gizmos/gizmo_colors/skeleton = Color(1, 0.8, 0.4, 1) +editors/3d_gizmos/gizmo_colors/selected_bone = Color(0.8, 0.3, 0, 1) +editors/3d_gizmos/gizmo_settings/bone_axis_length = 0.1 +editors/3d_gizmos/gizmo_settings/bone_shape = 1 +editors/3d_gizmos/gizmo_colors/csg = Color(0, 0.4, 1, 0.15) +editors/grid_map/editor_side = 1 +editors/grid_map/palette_min_width = 230 +editors/grid_map/preview_size = 64 +export/ssh/ssh = "" +export/ssh/scp = "" +network/language_server/remote_host = "127.0.0.1" +network/language_server/remote_port = 6005 +network/language_server/enable_smart_resolve = true +network/language_server/show_native_symbols_in_editor = false +network/language_server/use_thread = false +filesystem/import/blender/rpc_port = 6011 +filesystem/import/blender/rpc_server_uptime = 5 +filesystem/import/blender/blender3_path = "" +filesystem/import/fbx/fbx2gltf_path = "" +editors/3d_gizmos/gizmo_colors/camera = Color(0.8, 0.4, 0.8, 1) +editors/3d_gizmos/gizmo_colors/stream_player_3d = Color(0.4, 0.8, 1, 1) +editors/3d_gizmos/gizmo_colors/occluder = Color(0.8, 0.5, 1, 1) +editors/3d_gizmos/gizmo_colors/visibility_notifier = Color(0.8, 0.5, 0.7, 1) +editors/3d_gizmos/gizmo_colors/particles = Color(0.8, 0.7, 0.4, 1) +editors/3d_gizmos/gizmo_colors/particle_attractor = Color(1, 0.7, 0.5, 1) +editors/3d_gizmos/gizmo_colors/particle_collision = Color(0.5, 0.7, 1, 1) +editors/3d_gizmos/gizmo_colors/reflection_probe = Color(0.6, 1, 0.5, 1) +editors/3d_gizmos/gizmo_colors/decal = Color(0.6, 0.5, 1, 1) +editors/3d_gizmos/gizmo_colors/voxel_gi = Color(0.5, 1, 0.6, 1) +editors/3d_gizmos/gizmo_colors/lightmap_lines = Color(0.5, 0.6, 1, 1) +editors/3d_gizmos/gizmo_colors/lightprobe_lines = Color(0.5, 0.6, 1, 1) +editors/3d_gizmos/gizmo_colors/joint_body_a = Color(0.6, 0.8, 1, 1) +editors/3d_gizmos/gizmo_colors/joint_body_b = Color(0.6, 0.9, 1, 1) +editors/3d_gizmos/gizmo_colors/fog_volume = Color(0.5, 0.7, 1, 1) +dotnet/editor/external_editor = 0 +dotnet/editor/custom_exec_path = "" +dotnet/editor/custom_exec_path_args = "" +dotnet/build/verbosity_level = 2 +dotnet/build/no_console_logging = false +dotnet/build/create_binary_log = false +text_editor/theme/highlighting/gdscript/function_definition_color = Color(0.4, 0.9, 1, 1) +text_editor/theme/highlighting/gdscript/global_function_color = Color(0.64, 0.64, 0.96, 1) +text_editor/theme/highlighting/gdscript/node_path_color = Color(0.72, 0.77, 0.49, 1) +text_editor/theme/highlighting/gdscript/node_reference_color = Color(0.39, 0.76, 0.35, 1) +text_editor/theme/highlighting/gdscript/annotation_color = Color(1, 0.7, 0.45, 1) +text_editor/theme/highlighting/gdscript/string_name_color = Color(1, 0.76, 0.65, 1) +metadata/export_template_download_directory = "/home/zombie/.cache/godot" diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cube.glb-c6bf6ebacd621473d1ca4ff4a368b9dc.scn-folding-bba361c19cb077e3327f80701ca79e79.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cube.glb-c6bf6ebacd621473d1ca4ff4a368b9dc.scn-folding-bba361c19cb077e3327f80701ca79e79.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cube.glb-c6bf6ebacd621473d1ca4ff4a368b9dc.scn-folding-bba361c19cb077e3327f80701ca79e79.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cubelib.tres-folding-5b4aebb23a1fbd51ad963ea582dc495d.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cubelib.tres-folding-5b4aebb23a1fbd51ad963ea582dc495d.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/cubelib.tres-folding-5b4aebb23a1fbd51ad963ea582dc495d.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/editor_layout.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/editor_layout.cfg new file mode 100644 index 0000000..8f66f17 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/editor_layout.cfg @@ -0,0 +1,37 @@ +[docks] + +dock_3="Scene,Import" +dock_4="FileSystem" +dock_5="Inspector,Node" +dock_filesystem_split=0 +dock_filesystem_display_mode=0 +dock_filesystem_file_list_display_mode=1 +dock_split_2=0 +dock_split_3=0 +dock_hsplit_1=0 +dock_hsplit_2=70 +dock_hsplit_3=-70 +dock_hsplit_4=0 + +[EditorNode] + +open_scenes=[ "res://level.tscn" ] + +[ScriptEditor] + +open_scripts=[ { +"path": "res://level.gd", +"state": { +"bookmarks": [ ], +"breakpoints": [ ], +"column": 0, +"folded_lines": PoolIntArray( ), +"h_scroll_position": 0, +"row": 0, +"scroll_position": 0.0, +"selection": false, +"syntax_highlighter": "GDScript" +} +} ] +open_help=[ ] +split_offset=70 diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_cache6 b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_cache6 new file mode 100644 index 0000000..4d4cbde --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_cache6 @@ -0,0 +1,20 @@ +4d0945c123b4d9da334c68e554cda834 +::res://::1668280555 +cubelib.tres::MeshLibrary::1668280553::0::1::::<><>::res://models/cube.mesh +cube_rigidbody.tscn::PackedScene::1668280553::0::1::::<><>::res://models/white_wood.png +default_env.tres::Environment::1668280553::0::1::::<><>:: +gi_probe_data.res::GIProbeData::1668280553::0::1::::<><>:: +icon.png::StreamTexture::1668280553::1668280557::1::::<><>:: +level.gd::GDScript::1668280553::0::1::::<>Spatial<>::res://cube_rigidbody.tscn +level.tscn::PackedScene::1668280553::0::1::::<><>::res://cubelib.tres<>res://player/cubio.tscn<>res://models/cube.mesh<>res://models/mushroom.glb<>res://level.gd<>res://cube_rigidbody.tscn +::res://models/::1668280553 +cube.glb::PackedScene::1668280553::1668280557::1::::<><>::res://models/cube_material.tres +cube.mesh::ArrayMesh::1668280553::0::1::::<><>::res://models/cube_material.tres +cube_material.tres::SpatialMaterial::1668280553::0::1::::<><>::res://models/white_wood.png +mushroom.glb::PackedScene::1668280553::1668280557::1::::<><>:: +white_cube_material.tres::SpatialMaterial::1668280553::0::1::::<><>::res://models/white_wood.png +white_wood.png::StreamTexture::1668280553::1668280557::1::::<><>:: +::res://player/::1668280553 +cubio.gd::GDScript::1668280553::0::1::::<>RigidBody<>:: +cubio.tscn::PackedScene::1668280553::0::1::::<><>::res://player/cubio.gd<>res://player/follow_camera.gd<>res://models/white_cube_material.tres +follow_camera.gd::GDScript::1668280553::0::1::::<>Camera<>:: diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_update4 b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_update4 new file mode 100644 index 0000000..f25a3e2 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/filesystem_update4 @@ -0,0 +1,3 @@ +res://cubelib.tres +res://default_env.tres +res://level.tscn diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-editstate-d85448a68f01bbd6644b4b40ef87233e.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-editstate-d85448a68f01bbd6644b4b40ef87233e.cfg new file mode 100644 index 0000000..776c36b --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-editstate-d85448a68f01bbd6644b4b40ef87233e.cfg @@ -0,0 +1,165 @@ +[editor_states] + +Anim={ +"visible": false +} +2D={ +"grid_offset": Vector2( 0, 0 ), +"grid_snap_active": false, +"grid_step": Vector2( 8, 8 ), +"grid_visibility": 1, +"ofs": Vector2( -165, -110 ), +"primary_grid_steps": 8, +"show_edit_locks": true, +"show_guides": true, +"show_helpers": false, +"show_origin": true, +"show_rulers": true, +"show_viewport": true, +"show_zoom_control": true, +"skeleton_show_bones": true, +"smart_snap_active": false, +"snap_guides": true, +"snap_node_anchors": true, +"snap_node_center": true, +"snap_node_parent": true, +"snap_node_sides": true, +"snap_other_nodes": true, +"snap_pixel": true, +"snap_relative": false, +"snap_rotation": false, +"snap_rotation_offset": 0.0, +"snap_rotation_step": 0.261799, +"snap_scale": false, +"snap_scale_step": 0.1, +"zoom": 1.0 +} +3D={ +"fov": 70.0, +"gizmos_status": { +"AudioStreamPlayer3D": 0, +"BakedLightmap": 0, +"CPUParticles": 0, +"CSGShapes": 0, +"Camera": 0, +"CollisionObject": 0, +"CollisionPolygon": 0, +"CollisionShape": 0, +"GIProbe": 0, +"Joints": 0, +"Lights": 0, +"Listener": 0, +"NavigationMeshInstance": 0, +"Occluder": 0, +"Particles": 0, +"Path": 0, +"PhysicalBones": 0, +"Portal": 0, +"Position3D": 0, +"RayCast": 0, +"ReflectionProbe": 0, +"Room": 0, +"Skeleton": 0, +"SoftBody": 0, +"SpringArm": 0, +"VehicleWheel": 0, +"VisibilityNotifier": 0 +}, +"local_coords": false, +"rotate_snap": 15.0, +"scale_snap": 10.0, +"show_grid": true, +"show_origin": true, +"snap_enabled": false, +"translate_snap": 1.0, +"viewport_mode": 1, +"viewports": [ { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 2.01254, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": true, +"position": Vector3( 0.86912, 4.04702, 3.09044 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.569812, +"y_rotation": -7.01008 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +} ], +"zfar": 500.0, +"znear": 0.05 +} +TileSet={ +"keep_inside_tile": true, +"show_information": false, +"snap_enabled": false, +"snap_offset": Vector2( 10, 10 ), +"snap_separation": Vector2( 0, 0 ), +"snap_step": Vector2( 32, 32 ) +} +TextureRegion={ +"snap_mode": 0, +"snap_offset": Vector2( 0, 0 ), +"snap_separation": Vector2( 0, 0 ), +"snap_step": Vector2( 10, 10 ) +} diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-folding-d85448a68f01bbd6644b4b40ef87233e.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-folding-d85448a68f01bbd6644b4b40ef87233e.cfg new file mode 100644 index 0000000..fdd4a8e --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/level.tscn-folding-d85448a68f01bbd6644b4b40ef87233e.cfg @@ -0,0 +1,5 @@ +[folding] + +node_unfolds=[ NodePath("."), PoolStringArray( "Visibility" ), NodePath("GridMap"), PoolStringArray( "Cell" ), NodePath("DirectionalLight"), PoolStringArray( "Directional Shadow", "Light", "Matrix", "Shadow", "Transform" ), NodePath("Cubio"), PoolStringArray( "Matrix", "Transform" ), NodePath("Elevator1"), PoolStringArray( "Input", "Matrix", "Transform" ), NodePath("Elevator1/AnimationPlayer"), PoolStringArray( "Playback Options" ), NodePath("Elevator2"), PoolStringArray( "Matrix", "Transform" ), NodePath("Elevator2/AnimationPlayer"), PoolStringArray( "Playback Options" ), NodePath("Princess"), PoolStringArray( "Matrix", "Transform" ), NodePath("Princess/CollisionShape"), PoolStringArray( "Matrix", "Transform" ), NodePath("cube_rigidbody"), PoolStringArray( "Matrix", "Transform" ) ] +resource_unfolds=[ "res://level.tscn::1", PoolStringArray( "Resource" ), "res://level.tscn::4", PoolStringArray( "Resource" ) ] +nodes_folded=[ ] diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/mushroom.glb-32cf35844b7be6455c0c736b26eb7163.scn-folding-87f9a06e6ebcf7fca632886da3d5a61e.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/mushroom.glb-32cf35844b7be6455c0c736b26eb7163.scn-folding-87f9a06e6ebcf7fca632886da3d5a61e.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/mushroom.glb-32cf35844b7be6455c0c736b26eb7163.scn-folding-87f9a06e6ebcf7fca632886da3d5a61e.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/project_metadata.cfg b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/project_metadata.cfg new file mode 100644 index 0000000..e5a03d5 --- /dev/null +++ b/.config/godot/projects/3drigidbodycharatordemo-caf7e33c7504976ac42a88d541c02ca0/project_metadata.cfg @@ -0,0 +1,13 @@ +[editor_metadata] + +executable_path="/usr/bin/godot" + +[debug_options] + +run_live_debug=true +run_reload_scripts=true + +[recent_files] + +scenes=[ "res://level.tscn" ] +scripts=[ "res://level.gd" ] diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/Environment.tres-folding-a42a26c7ce482ad8acac48d5d0d98402.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/Environment.tres-folding-a42a26c7ce482ad8acac48d5d0d98402.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/Environment.tres-folding-a42a26c7ce482ad8acac48d5d0d98402.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-editstate-779a0e1f7bd88b28c4a1413c5fb169f2.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-editstate-779a0e1f7bd88b28c4a1413c5fb169f2.cfg new file mode 100644 index 0000000..a2a5e98 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-editstate-779a0e1f7bd88b28c4a1413c5fb169f2.cfg @@ -0,0 +1,165 @@ +[editor_states] + +Anim={ +"visible": false +} +2D={ +"grid_offset": Vector2( 0, 0 ), +"grid_snap_active": false, +"grid_step": Vector2( 8, 8 ), +"grid_visibility": 1, +"ofs": Vector2( -165, -110 ), +"primary_grid_steps": 8, +"show_edit_locks": true, +"show_guides": true, +"show_helpers": false, +"show_origin": true, +"show_rulers": true, +"show_viewport": true, +"show_zoom_control": true, +"skeleton_show_bones": true, +"smart_snap_active": false, +"snap_guides": true, +"snap_node_anchors": true, +"snap_node_center": true, +"snap_node_parent": true, +"snap_node_sides": true, +"snap_other_nodes": true, +"snap_pixel": true, +"snap_relative": false, +"snap_rotation": false, +"snap_rotation_offset": 0.0, +"snap_rotation_step": 0.261799, +"snap_scale": false, +"snap_scale_step": 0.1, +"zoom": 1.0 +} +3D={ +"fov": 70.0, +"gizmos_status": { +"AudioStreamPlayer3D": 0, +"BakedLightmap": 0, +"CPUParticles": 0, +"CSGShapes": 0, +"Camera": 0, +"CollisionObject": 0, +"CollisionPolygon": 0, +"CollisionShape": 0, +"GIProbe": 0, +"Joints": 0, +"Lights": 0, +"Listener": 0, +"NavigationMeshInstance": 0, +"Occluder": 0, +"Particles": 0, +"Path": 0, +"PhysicalBones": 0, +"Portal": 0, +"Position3D": 0, +"RayCast": 0, +"ReflectionProbe": 0, +"Room": 0, +"Skeleton": 0, +"SoftBody": 0, +"SpringArm": 0, +"VehicleWheel": 0, +"VisibilityNotifier": 0 +}, +"local_coords": false, +"rotate_snap": 15.0, +"scale_snap": 10.0, +"show_grid": true, +"show_origin": true, +"snap_enabled": false, +"translate_snap": 1.0, +"viewport_mode": 1, +"viewports": [ { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": true, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +}, { +"auto_orthogonal": false, +"auto_orthogonal_enabled": true, +"cinematic_preview": false, +"display_mode": 19, +"distance": 4.0, +"doppler": true, +"fps": false, +"gizmos": true, +"half_res": false, +"information": false, +"listener": false, +"position": Vector3( 0, 0, 0 ), +"use_environment": false, +"use_orthogonal": false, +"view_type": 0, +"x_rotation": 0.5, +"y_rotation": -0.5 +} ], +"zfar": 500.0, +"znear": 0.05 +} +TileSet={ +"keep_inside_tile": true, +"show_information": false, +"snap_enabled": false, +"snap_offset": Vector2( 10, 10 ), +"snap_separation": Vector2( 0, 0 ), +"snap_step": Vector2( 32, 32 ) +} +TextureRegion={ +"snap_mode": 0, +"snap_offset": Vector2( 0, 0 ), +"snap_separation": Vector2( 0, 0 ), +"snap_step": Vector2( 10, 10 ) +} diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-folding-779a0e1f7bd88b28c4a1413c5fb169f2.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-folding-779a0e1f7bd88b28c4a1413c5fb169f2.cfg new file mode 100644 index 0000000..068390f --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/L_Main.tscn-folding-779a0e1f7bd88b28c4a1413c5fb169f2.cfg @@ -0,0 +1,5 @@ +[folding] + +node_unfolds=[ NodePath("."), PoolStringArray( "Visibility" ), NodePath("Player"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Wall1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Wall2"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Wall3"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Wall4"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Cube1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Slope1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform2"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform3"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform4"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/SlopeEnd1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/SlopeEnd2"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Slope2"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Slope3"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform5"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform6"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform7"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform8"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform9"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform10"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform11"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform12"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform13"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/Platform14"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/TooSteep1"), PoolStringArray( "Matrix", "Transform" ), NodePath("ArenaGeometry/TooSteep2"), PoolStringArray( "Matrix", "Transform" ), NodePath("Lighting/DirectionalLight"), PoolStringArray( "Directional Shadow", "Matrix", "Shadow", "Transform" ) ] +resource_unfolds=[ "res://Levels/Main/Geometry/Floor.tscn::1", PoolStringArray( "Resource" ), "res://Levels/Main/Geometry/Wall.tscn::2", PoolStringArray( "Resource" ), "res://Levels/Main/Geometry/Cube.tscn::1", PoolStringArray( "Resource" ) ] +nodes_folded=[ ] diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg new file mode 100644 index 0000000..1a054e1 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/default_env.tres-folding-7cf3fd67ad9f55210191d77b582b8209.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PoolStringArray( ) diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/editor_layout.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/editor_layout.cfg new file mode 100644 index 0000000..bcd419a --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/editor_layout.cfg @@ -0,0 +1,37 @@ +[docks] + +dock_3="Scene,Import" +dock_4="FileSystem" +dock_5="Inspector,Node" +dock_filesystem_split=0 +dock_filesystem_display_mode=0 +dock_filesystem_file_list_display_mode=1 +dock_split_2=0 +dock_split_3=0 +dock_hsplit_1=0 +dock_hsplit_2=70 +dock_hsplit_3=-70 +dock_hsplit_4=0 + +[EditorNode] + +open_scenes=[ "res://Levels/Main/L_Main.tscn" ] + +[ScriptEditor] + +open_scripts=[ { +"path": "res://Levels/Main/L_Main.gd", +"state": { +"bookmarks": [ ], +"breakpoints": [ ], +"column": 0, +"folded_lines": PoolIntArray( ), +"h_scroll_position": 0, +"row": 0, +"scroll_position": 0.0, +"selection": false, +"syntax_highlighter": "GDScript" +} +} ] +open_help=[ ] +split_offset=70 diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_cache6 b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_cache6 new file mode 100644 index 0000000..2ba3fc2 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_cache6 @@ -0,0 +1,23 @@ +679959e7917290c4d1380dafd36febcc +::res://::1668280984 +default_env.tres::Environment::1668280982::0::1::::<><>:: +icon.png::StreamTexture::1668280982::1668280985::1::::<><>:: +::res://Levels/::1668280982 +::res://Levels/Main/::1668280982 +Environment.tres::Environment::1668280982::0::1::::<><>:: +L_Main.gd::GDScript::1668280982::0::1::::<>Spatial<>:: +L_Main.tscn::PackedScene::1668280982::0::1::::<><>::res://Player/Player.tscn<>res://Levels/Main/Geometry/Floor.tscn<>res://Levels/Main/Environment.tres<>res://Levels/Main/L_Main.gd<>res://Levels/Main/Geometry/Wall.tscn<>res://Levels/Main/Geometry/Cube.tscn +::res://Levels/Main/Geometry/::1668280982 +Cube.tscn::PackedScene::1668280982::0::1::::<><>::res://Levels/Main/Materials/M_Dark.tres +Floor.tscn::PackedScene::1668280982::0::1::::<><>::res://Levels/Main/Materials/M_Dark.tres +Wall.tscn::PackedScene::1668280982::0::1::::<><>::res://Levels/Main/Materials/M_Dark.tres +::res://Levels/Main/Materials/::1668280982 +M_Dark.tres::SpatialMaterial::1668280982::0::1::::<><>::res://Levels/Main/Materials/T_Grid.png +T_Grid.png::StreamTexture::1668280982::1668280985::1::::<><>:: +::res://Player/::1668280982 +Head.gd::GDScript::1668280982::0::1::::<>Spatial<>:: +Head.tscn::PackedScene::1668280982::0::1::::<><>::res://Player/Head.gd +MovementController.gd::GDScript::1668280982::0::1::::MovementController<>KinematicBody<>:: +MovementController.tscn::PackedScene::1668280982::0::1::::<><>::res://Player/MovementController.gd +Player.tscn::PackedScene::1668280982::0::1::::<><>::res://Player/MovementController.tscn<>res://Player/Head.tscn<>res://Player/Sprint.gd +Sprint.gd::GDScript::1668280982::0::1::::<>Node<>:: diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_update4 b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_update4 new file mode 100644 index 0000000..ecd61f6 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/filesystem_update4 @@ -0,0 +1,3 @@ +res://Levels/Main/Environment.tres +res://Levels/Main/L_Main.tscn +res://default_env.tres diff --git a/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/project_metadata.cfg b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/project_metadata.cfg new file mode 100644 index 0000000..13cb5f8 --- /dev/null +++ b/.config/godot/projects/firstpersonstarter-578aa2e747945730ce19d2ddb8e60bd0/project_metadata.cfg @@ -0,0 +1,13 @@ +[editor_metadata] + +executable_path="/usr/bin/godot" + +[debug_options] + +run_live_debug=true +run_reload_scripts=true + +[recent_files] + +scenes=[ "res://Levels/Main/L_Main.tscn" ] +scripts=[ "res://Levels/Main/L_Main.gd" ] diff --git a/.config/godot/recent_dirs b/.config/godot/recent_dirs new file mode 100644 index 0000000..48a0949 --- /dev/null +++ b/.config/godot/recent_dirs @@ -0,0 +1,2 @@ +/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/git_dumping/funnymemellama/old +/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/git_dumping/funnymemellama/funnymemellama diff --git a/.config/godot/script_templates/empty.gd b/.config/godot/script_templates/empty.gd new file mode 100644 index 0000000..c3c8a18 --- /dev/null +++ b/.config/godot/script_templates/empty.gd @@ -0,0 +1,2 @@ +extends %BASE% + diff --git a/.config/godot/script_templates/no_comments.gd b/.config/godot/script_templates/no_comments.gd new file mode 100644 index 0000000..8f35b0b --- /dev/null +++ b/.config/godot/script_templates/no_comments.gd @@ -0,0 +1,5 @@ +extends %BASE% + + +func _ready()%VOID_RETURN%: +%TS%pass diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index bc5263e..db76f55 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -46,6 +46,9 @@ input { sensitivity = 0 # -1.0 - 1.0, 0 means no modification. force_no_accel = 1 + numlock_by_default = true + repeat_rate = 100 + repeat_delay = 300 } general { @@ -64,10 +67,10 @@ decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more rounding = 1 - blur = yes - blur_size = 3 - blur_passes = 1 - blur_new_optimizations = on + #blur = yes + #blur_size = 1 + #blur_passes = 1 + #blur_new_optimizations = on idkwhy this broke it drop_shadow = yes shadow_range = 4 @@ -76,11 +79,12 @@ decoration { } animations { - enabled = yes + enabled = no # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + old animations animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% @@ -88,6 +92,9 @@ animations { animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default + animation = workspaces, 1, 6, default + + } dwindle { @@ -113,9 +120,22 @@ device:epic mouse V1 { } #psookyshitbro -# exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +#hyprload (the plugin manger) +exec-once=$HOME/.local/share/hyprload/hyprload.sh + +#clipboard +exec-once = wl-paste --type text --watch cliphist store #Stores only text data +exec-once = wl-paste --type image --watch cliphist store #Stores only image data + +#shit i wanna auto run bro +#exec-once=waybar +#exec-once=alacritty +#exec-once=nm-applet +#exec-once=mako + + # Example windowrule v1 # windowrule = float, ^(kitty)$ @@ -174,3 +194,6 @@ bind = $mainMod, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow + +#print +bind=,Print,exec,grimshot save screen /run/media/zombie/zombienas/organized_data/absolutely-unique/pictures/screenshots/$(hostname)/$(date +"%Y-%m-%d_%H-%M-%S").png & grimshot copy area diff --git a/.config/hypr/hyprload.toml b/.config/hypr/hyprload.toml new file mode 100644 index 0000000..b2c764d --- /dev/null +++ b/.config/hypr/hyprload.toml @@ -0,0 +1,8 @@ +plugins = [ + # Installs the plugin from https://github.com/Duckonaut/split-monitor-workspaces + #"Duckonaut/split-monitor-workspaces", + # A more explicit definition of the git install + { git = "https://github.com/Duckonaut/split-monitor-workspaces", branch = "main", name = "split-monitor-workspaces" }, + # Installs the same plugin from a local folder + #{ local = "/home/duckonaut/repos/split-monitor-workspaces" }, +] diff --git a/.config/mpd/db b/.config/mpd/db new file mode 100644 index 0000000..100e43b Binary files /dev/null and b/.config/mpd/db differ diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf new file mode 100644 index 0000000..d8b8586 --- /dev/null +++ b/.config/mpd/mpd.conf @@ -0,0 +1,413 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "/run/media/zombie/zombienas/organized_data/purchased_media/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +#playlist_directory "~/.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +#db_file "~/.config/mpd/database" + +# These settings are the locations for the daemon log files for the daemon. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +# If you use systemd, do not configure a log_file. With systemd, MPD +# defaults to the systemd journal, which is fine. +# +#log_file "~/.mpd/log" + +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +# If you use systemd, do not configure a pid_file. +# +#pid_file "~/.mpd/pid" + +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +#state_file "~/.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other than the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activation is in use. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# Suppress all messages below the given threshold. Use "verbose" for +# troubleshooting. Available setting arguments are "notice", "info", "verbose", +# "warning" and "error". +# +#log_level "notice" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# +# An example of a database section instead of the old 'db_file' setting. +# It enables mounting other storages into the music directory. +# +database { + plugin "simple" + path "~/.config/mpd/db" + cache_directory "~/.config/mpd/cache" +} +# +# An example of database config for a satellite setup +# +#music_directory "nfs://fileserver.local/srv/mp3" +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +audio_output { + type "pipewire" + name "pipewire" +} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +## media_role "media_role" #optional +#} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of a wasapi output (Windows multimedia API). +# +#audio_output { +# type "wasapi" +# name "My WASAPI output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## Exclusive mode blocks all other audio source, and get best audio quality without resampling. +## exclusive "no" # optional +## Enumerate all devices in log. +## enumerate "no" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for +# more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/.config/ncmpcpp/error.log b/.config/ncmpcpp/error.log new file mode 100644 index 0000000..e69de29 diff --git a/.config/nvim/autoload/plug.vim b/.config/nvim/autoload/plug.vim new file mode 100644 index 0000000..652caa8 --- /dev/null +++ b/.config/nvim/autoload/plug.vim @@ -0,0 +1,2812 @@ +" vim-plug: Vim plugin manager +" ============================ +" +" Download plug.vim and put it in ~/.vim/autoload +" +" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ +" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +" +" Edit your .vimrc +" +" call plug#begin('~/.vim/plugged') +" +" " Make sure you use single quotes +" +" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align +" Plug 'junegunn/vim-easy-align' +" +" " Any valid git URL is allowed +" Plug 'https://github.com/junegunn/vim-github-dashboard.git' +" +" " Multiple Plug commands can be written in a single line using | separators +" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' +" +" " On-demand loading +" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } +" +" " Using a non-default branch +" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } +" +" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) +" Plug 'fatih/vim-go', { 'tag': '*' } +" +" " Plugin options +" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } +" +" " Plugin outside ~/.vim/plugged with post-update hook +" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +" +" " Unmanaged plugin (manually installed and updated) +" Plug '~/my-prototype-plugin' +" +" " Initialize plugin system +" call plug#end() +" +" Then reload .vimrc and :PlugInstall to install plugins. +" +" Plug options: +" +"| Option | Description | +"| ----------------------- | ------------------------------------------------ | +"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | +"| `rtp` | Subdirectory that contains Vim plugin | +"| `dir` | Custom directory for the plugin | +"| `as` | Use different name for the plugin | +"| `do` | Post-update hook (string or funcref) | +"| `on` | On-demand loading: Commands or ``-mappings | +"| `for` | On-demand loading: File types | +"| `frozen` | Do not update unless explicitly specified | +" +" More information: https://github.com/junegunn/vim-plug +" +" +" Copyright (c) 2017 Junegunn Choi +" +" MIT License +" +" Permission is hereby granted, free of charge, to any person obtaining +" a copy of this software and associated documentation files (the +" "Software"), to deal in the Software without restriction, including +" without limitation the rights to use, copy, modify, merge, publish, +" distribute, sublicense, and/or sell copies of the Software, and to +" permit persons to whom the Software is furnished to do so, subject to +" the following conditions: +" +" The above copyright notice and this permission notice shall be +" included in all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +if exists('g:loaded_plug') + finish +endif +let g:loaded_plug = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let s:plug_src = 'https://github.com/junegunn/vim-plug.git' +let s:plug_tab = get(s:, 'plug_tab', -1) +let s:plug_buf = get(s:, 'plug_buf', -1) +let s:mac_gui = has('gui_macvim') && has('gui_running') +let s:is_win = has('win32') +let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) +let s:vim8 = has('patch-8.0.0039') && exists('*job_start') +if s:is_win && &shellslash + set noshellslash + let s:me = resolve(expand(':p')) + set shellslash +else + let s:me = resolve(expand(':p')) +endif +let s:base_spec = { 'branch': '', 'frozen': 0 } +let s:TYPE = { +\ 'string': type(''), +\ 'list': type([]), +\ 'dict': type({}), +\ 'funcref': type(function('call')) +\ } +let s:loaded = get(s:, 'loaded', {}) +let s:triggers = get(s:, 'triggers', {}) + +function! s:is_powershell(shell) + return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$' +endfunction + +function! s:isabsolute(dir) abort + return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)') +endfunction + +function! s:git_dir(dir) abort + let gitdir = s:trim(a:dir) . '/.git' + if isdirectory(gitdir) + return gitdir + endif + if !filereadable(gitdir) + return '' + endif + let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*') + if len(gitdir) && !s:isabsolute(gitdir) + let gitdir = a:dir . '/' . gitdir + endif + return isdirectory(gitdir) ? gitdir : '' +endfunction + +function! s:git_origin_url(dir) abort + let gitdir = s:git_dir(a:dir) + let config = gitdir . '/config' + if empty(gitdir) || !filereadable(config) + return '' + endif + return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze') +endfunction + +function! s:git_revision(dir) abort + let gitdir = s:git_dir(a:dir) + let head = gitdir . '/HEAD' + if empty(gitdir) || !filereadable(head) + return '' + endif + + let line = get(readfile(head), 0, '') + let ref = matchstr(line, '^ref: \zs.*') + if empty(ref) + return line + endif + + if filereadable(gitdir . '/' . ref) + return get(readfile(gitdir . '/' . ref), 0, '') + endif + + if filereadable(gitdir . '/packed-refs') + for line in readfile(gitdir . '/packed-refs') + if line =~# ' ' . ref + return matchstr(line, '^[0-9a-f]*') + endif + endfor + endif + + return '' +endfunction + +function! s:git_local_branch(dir) abort + let gitdir = s:git_dir(a:dir) + let head = gitdir . '/HEAD' + if empty(gitdir) || !filereadable(head) + return '' + endif + let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*') + return len(branch) ? branch : 'HEAD' +endfunction + +function! s:git_origin_branch(spec) + if len(a:spec.branch) + return a:spec.branch + endif + + " The file may not be present if this is a local repository + let gitdir = s:git_dir(a:spec.dir) + let origin_head = gitdir.'/refs/remotes/origin/HEAD' + if len(gitdir) && filereadable(origin_head) + return matchstr(get(readfile(origin_head), 0, ''), + \ '^ref: refs/remotes/origin/\zs.*') + endif + + " The command may not return the name of a branch in detached HEAD state + let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir)) + return v:shell_error ? '' : result[-1] +endfunction + +if s:is_win + function! s:plug_call(fn, ...) + let shellslash = &shellslash + try + set noshellslash + return call(a:fn, a:000) + finally + let &shellslash = shellslash + endtry + endfunction +else + function! s:plug_call(fn, ...) + return call(a:fn, a:000) + endfunction +endif + +function! s:plug_getcwd() + return s:plug_call('getcwd') +endfunction + +function! s:plug_fnamemodify(fname, mods) + return s:plug_call('fnamemodify', a:fname, a:mods) +endfunction + +function! s:plug_expand(fmt) + return s:plug_call('expand', a:fmt, 1) +endfunction + +function! s:plug_tempname() + return s:plug_call('tempname') +endfunction + +function! plug#begin(...) + if a:0 > 0 + let s:plug_home_org = a:1 + let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) + elseif exists('g:plug_home') + let home = s:path(g:plug_home) + elseif has('nvim') + let home = stdpath('data') . '/plugged' + elseif !empty(&rtp) + let home = s:path(split(&rtp, ',')[0]) . '/plugged' + else + return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') + endif + if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp + return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') + endif + + let g:plug_home = home + let g:plugs = {} + let g:plugs_order = [] + let s:triggers = {} + + call s:define_commands() + return 1 +endfunction + +function! s:define_commands() + command! -nargs=+ -bar Plug call plug#() + if !executable('git') + return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') + endif + if has('win32') + \ && &shellslash + \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell)) + return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') + endif + if !has('nvim') + \ && (has('win32') || has('win32unix')) + \ && !has('multi_byte') + return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.') + endif + command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(0, []) + command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(0, []) + command! -nargs=0 -bar -bang PlugClean call s:clean(0) + command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif + command! -nargs=0 -bar PlugStatus call s:status() + command! -nargs=0 -bar PlugDiff call s:diff() + command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(0, ) +endfunction + +function! s:to_a(v) + return type(a:v) == s:TYPE.list ? a:v : [a:v] +endfunction + +function! s:to_s(v) + return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" +endfunction + +function! s:glob(from, pattern) + return s:lines(globpath(a:from, a:pattern)) +endfunction + +function! s:source(from, ...) + let found = 0 + for pattern in a:000 + for vim in s:glob(a:from, pattern) + execute 'source' s:esc(vim) + let found = 1 + endfor + endfor + return found +endfunction + +function! s:assoc(dict, key, val) + let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) +endfunction + +function! s:ask(message, ...) + call inputsave() + echohl WarningMsg + let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) + echohl None + call inputrestore() + echo "\r" + return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 +endfunction + +function! s:ask_no_interrupt(...) + try + return call('s:ask', a:000) + catch + return 0 + endtry +endfunction + +function! s:lazy(plug, opt) + return has_key(a:plug, a:opt) && + \ (empty(s:to_a(a:plug[a:opt])) || + \ !isdirectory(a:plug.dir) || + \ len(s:glob(s:rtp(a:plug), 'plugin')) || + \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) +endfunction + +function! plug#end() + if !exists('g:plugs') + return s:err('plug#end() called without calling plug#begin() first') + endif + + if exists('#PlugLOD') + augroup PlugLOD + autocmd! + augroup END + augroup! PlugLOD + endif + let lod = { 'ft': {}, 'map': {}, 'cmd': {} } + + if get(g:, 'did_load_filetypes', 0) + filetype off + endif + for name in g:plugs_order + if !has_key(g:plugs, name) + continue + endif + let plug = g:plugs[name] + if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') + let s:loaded[name] = 1 + continue + endif + + if has_key(plug, 'on') + let s:triggers[name] = { 'map': [], 'cmd': [] } + for cmd in s:to_a(plug.on) + if cmd =~? '^.\+' + if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) + call s:assoc(lod.map, cmd, name) + endif + call add(s:triggers[name].map, cmd) + elseif cmd =~# '^[A-Z]' + let cmd = substitute(cmd, '!*$', '', '') + if exists(':'.cmd) != 2 + call s:assoc(lod.cmd, cmd, name) + endif + call add(s:triggers[name].cmd, cmd) + else + call s:err('Invalid `on` option: '.cmd. + \ '. Should start with an uppercase letter or ``.') + endif + endfor + endif + + if has_key(plug, 'for') + let types = s:to_a(plug.for) + if !empty(types) + augroup filetypedetect + call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') + augroup END + endif + for type in types + call s:assoc(lod.ft, type, name) + endfor + endif + endfor + + for [cmd, names] in items(lod.cmd) + execute printf( + \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , %s)', + \ cmd, string(cmd), string(names)) + endfor + + for [map, names] in items(lod.map) + for [mode, map_prefix, key_prefix] in + \ [['i', '', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] + execute printf( + \ '%snoremap %s %s:call lod_map(%s, %s, %s, "%s")', + \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) + endfor + endfor + + for [ft, names] in items(lod.ft) + augroup PlugLOD + execute printf('autocmd FileType %s call lod_ft(%s, %s)', + \ ft, string(ft), string(names)) + augroup END + endfor + + call s:reorg_rtp() + filetype plugin indent on + if has('vim_starting') + if has('syntax') && !exists('g:syntax_on') + syntax enable + end + else + call s:reload_plugins() + endif +endfunction + +function! s:loaded_names() + return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') +endfunction + +function! s:load_plugin(spec) + call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') +endfunction + +function! s:reload_plugins() + for name in s:loaded_names() + call s:load_plugin(g:plugs[name]) + endfor +endfunction + +function! s:trim(str) + return substitute(a:str, '[\/]\+$', '', '') +endfunction + +function! s:version_requirement(val, min) + for idx in range(0, len(a:min) - 1) + let v = get(a:val, idx, 0) + if v < a:min[idx] | return 0 + elseif v > a:min[idx] | return 1 + endif + endfor + return 1 +endfunction + +function! s:git_version_requirement(...) + if !exists('s:git_version') + let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)') + endif + return s:version_requirement(s:git_version, a:000) +endfunction + +function! s:progress_opt(base) + return a:base && !s:is_win && + \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' +endfunction + +function! s:rtp(spec) + return s:path(a:spec.dir . get(a:spec, 'rtp', '')) +endfunction + +if s:is_win + function! s:path(path) + return s:trim(substitute(a:path, '/', '\', 'g')) + endfunction + + function! s:dirpath(path) + return s:path(a:path) . '\' + endfunction + + function! s:is_local_plug(repo) + return a:repo =~? '^[a-z]:\|^[%~]' + endfunction + + " Copied from fzf + function! s:wrap_cmds(cmds) + let cmds = [ + \ '@echo off', + \ 'setlocal enabledelayedexpansion'] + \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) + \ + ['endlocal'] + if has('iconv') + if !exists('s:codepage') + let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0) + endif + return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage)) + endif + return map(cmds, 'v:val."\r"') + endfunction + + function! s:batchfile(cmd) + let batchfile = s:plug_tempname().'.bat' + call writefile(s:wrap_cmds(a:cmd), batchfile) + let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) + if s:is_powershell(&shell) + let cmd = '& ' . cmd + endif + return [batchfile, cmd] + endfunction +else + function! s:path(path) + return s:trim(a:path) + endfunction + + function! s:dirpath(path) + return substitute(a:path, '[/\\]*$', '/', '') + endfunction + + function! s:is_local_plug(repo) + return a:repo[0] =~ '[/$~]' + endfunction +endif + +function! s:err(msg) + echohl ErrorMsg + echom '[vim-plug] '.a:msg + echohl None +endfunction + +function! s:warn(cmd, msg) + echohl WarningMsg + execute a:cmd 'a:msg' + echohl None +endfunction + +function! s:esc(path) + return escape(a:path, ' ') +endfunction + +function! s:escrtp(path) + return escape(a:path, ' ,') +endfunction + +function! s:remove_rtp() + for name in s:loaded_names() + let rtp = s:rtp(g:plugs[name]) + execute 'set rtp-='.s:escrtp(rtp) + let after = globpath(rtp, 'after') + if isdirectory(after) + execute 'set rtp-='.s:escrtp(after) + endif + endfor +endfunction + +function! s:reorg_rtp() + if !empty(s:first_rtp) + execute 'set rtp-='.s:first_rtp + execute 'set rtp-='.s:last_rtp + endif + + " &rtp is modified from outside + if exists('s:prtp') && s:prtp !=# &rtp + call s:remove_rtp() + unlet! s:middle + endif + + let s:middle = get(s:, 'middle', &rtp) + let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') + let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') + let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') + \ . ','.s:middle.',' + \ . join(map(afters, 'escape(v:val, ",")'), ',') + let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') + let s:prtp = &rtp + + if !empty(s:first_rtp) + execute 'set rtp^='.s:first_rtp + execute 'set rtp+='.s:last_rtp + endif +endfunction + +function! s:doautocmd(...) + if exists('#'.join(a:000, '#')) + execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '' : '') join(a:000) + endif +endfunction + +function! s:dobufread(names) + for name in a:names + let path = s:rtp(g:plugs[name]) + for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] + if len(finddir(dir, path)) + if exists('#BufRead') + doautocmd BufRead + endif + return + endif + endfor + endfor +endfunction + +function! plug#load(...) + if a:0 == 0 + return s:err('Argument missing: plugin name(s) required') + endif + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 + let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') + if !empty(unknowns) + let s = len(unknowns) > 1 ? 's' : '' + return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) + end + let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') + if !empty(unloaded) + for name in unloaded + call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + endfor + call s:dobufread(unloaded) + return 1 + end + return 0 +endfunction + +function! s:remove_triggers(name) + if !has_key(s:triggers, a:name) + return + endif + for cmd in s:triggers[a:name].cmd + execute 'silent! delc' cmd + endfor + for map in s:triggers[a:name].map + execute 'silent! unmap' map + execute 'silent! iunmap' map + endfor + call remove(s:triggers, a:name) +endfunction + +function! s:lod(names, types, ...) + for name in a:names + call s:remove_triggers(name) + let s:loaded[name] = 1 + endfor + call s:reorg_rtp() + + for name in a:names + let rtp = s:rtp(g:plugs[name]) + for dir in a:types + call s:source(rtp, dir.'/**/*.vim') + endfor + if a:0 + if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) + execute 'runtime' a:1 + endif + call s:source(rtp, a:2) + endif + call s:doautocmd('User', name) + endfor +endfunction + +function! s:lod_ft(pat, names) + let syn = 'syntax/'.a:pat.'.vim' + call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) + execute 'autocmd! PlugLOD FileType' a:pat + call s:doautocmd('filetypeplugin', 'FileType') + call s:doautocmd('filetypeindent', 'FileType') +endfunction + +function! s:lod_cmd(cmd, bang, l1, l2, args, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) +endfunction + +function! s:lod_map(map, names, with_prefix, prefix) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + let extra = '' + while 1 + let c = getchar(0) + if c == 0 + break + endif + let extra .= nr2char(c) + endwhile + + if a:with_prefix + let prefix = v:count ? v:count : '' + let prefix .= '"'.v:register.a:prefix + if mode(1) == 'no' + if v:operator == 'c' + let prefix = "\" . prefix + endif + let prefix .= v:operator + endif + call feedkeys(prefix, 'n') + endif + call feedkeys(substitute(a:map, '^', "\", '') . extra) +endfunction + +function! plug#(repo, ...) + if a:0 > 1 + return s:err('Invalid number of arguments (1..2)') + endif + + try + let repo = s:trim(a:repo) + let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec + let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) + let spec = extend(s:infer_properties(name, repo), opts) + if !has_key(g:plugs, name) + call add(g:plugs_order, name) + endif + let g:plugs[name] = spec + let s:loaded[name] = get(s:loaded, name, 0) + catch + return s:err(repo . ' ' . v:exception) + endtry +endfunction + +function! s:parse_options(arg) + let opts = copy(s:base_spec) + let type = type(a:arg) + let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)' + if type == s:TYPE.string + if empty(a:arg) + throw printf(opt_errfmt, 'tag', 'string') + endif + let opts.tag = a:arg + elseif type == s:TYPE.dict + for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as'] + if has_key(a:arg, opt) + \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt])) + throw printf(opt_errfmt, opt, 'string') + endif + endfor + for opt in ['on', 'for'] + if has_key(a:arg, opt) + \ && type(a:arg[opt]) != s:TYPE.list + \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt])) + throw printf(opt_errfmt, opt, 'string or list') + endif + endfor + if has_key(a:arg, 'do') + \ && type(a:arg.do) != s:TYPE.funcref + \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do)) + throw printf(opt_errfmt, 'do', 'string or funcref') + endif + call extend(opts, a:arg) + if has_key(opts, 'dir') + let opts.dir = s:dirpath(s:plug_expand(opts.dir)) + endif + else + throw 'Invalid argument type (expected: string or dictionary)' + endif + return opts +endfunction + +function! s:infer_properties(name, repo) + let repo = a:repo + if s:is_local_plug(repo) + return { 'dir': s:dirpath(s:plug_expand(repo)) } + else + if repo =~ ':' + let uri = repo + else + if repo !~ '/' + throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) + endif + let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') + let uri = printf(fmt, repo) + endif + return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } + endif +endfunction + +function! s:install(force, names) + call s:update_impl(0, a:force, a:names) +endfunction + +function! s:update(force, names) + call s:update_impl(1, a:force, a:names) +endfunction + +function! plug#helptags() + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + for spec in values(g:plugs) + let docd = join([s:rtp(spec), 'doc'], '/') + if isdirectory(docd) + silent! execute 'helptags' s:esc(docd) + endif + endfor + return 1 +endfunction + +function! s:syntax() + syntax clear + syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber + syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX + syn match plugNumber /[0-9]\+[0-9.]*/ contained + syn match plugBracket /[[\]]/ contained + syn match plugX /x/ contained + syn match plugDash /^-\{1}\ / + syn match plugPlus /^+/ + syn match plugStar /^*/ + syn match plugMessage /\(^- \)\@<=.*/ + syn match plugName /\(^- \)\@<=[^ ]*:/ + syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ + syn match plugTag /(tag: [^)]\+)/ + syn match plugInstall /\(^+ \)\@<=[^:]*/ + syn match plugUpdate /\(^* \)\@<=[^:]*/ + syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag + syn match plugEdge /^ \X\+$/ + syn match plugEdge /^ \X*/ contained nextgroup=plugSha + syn match plugSha /[0-9a-f]\{7,9}/ contained + syn match plugRelDate /([^)]*)$/ contained + syn match plugNotLoaded /(not loaded)$/ + syn match plugError /^x.*/ + syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ + syn match plugH2 /^.*:\n-\+$/ + syn match plugH2 /^-\{2,}/ + syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean + hi def link plug1 Title + hi def link plug2 Repeat + hi def link plugH2 Type + hi def link plugX Exception + hi def link plugBracket Structure + hi def link plugNumber Number + + hi def link plugDash Special + hi def link plugPlus Constant + hi def link plugStar Boolean + + hi def link plugMessage Function + hi def link plugName Label + hi def link plugInstall Function + hi def link plugUpdate Type + + hi def link plugError Error + hi def link plugDeleted Ignore + hi def link plugRelDate Comment + hi def link plugEdge PreProc + hi def link plugSha Identifier + hi def link plugTag Constant + + hi def link plugNotLoaded Comment +endfunction + +function! s:lpad(str, len) + return a:str . repeat(' ', a:len - len(a:str)) +endfunction + +function! s:lines(msg) + return split(a:msg, "[\r\n]") +endfunction + +function! s:lastline(msg) + return get(s:lines(a:msg), -1, '') +endfunction + +function! s:new_window() + execute get(g:, 'plug_window', 'vertical topleft new') +endfunction + +function! s:plug_window_exists() + let buflist = tabpagebuflist(s:plug_tab) + return !empty(buflist) && index(buflist, s:plug_buf) >= 0 +endfunction + +function! s:switch_in() + if !s:plug_window_exists() + return 0 + endif + + if winbufnr(0) != s:plug_buf + let s:pos = [tabpagenr(), winnr(), winsaveview()] + execute 'normal!' s:plug_tab.'gt' + let winnr = bufwinnr(s:plug_buf) + execute winnr.'wincmd w' + call add(s:pos, winsaveview()) + else + let s:pos = [winsaveview()] + endif + + setlocal modifiable + return 1 +endfunction + +function! s:switch_out(...) + call winrestview(s:pos[-1]) + setlocal nomodifiable + if a:0 > 0 + execute a:1 + endif + + if len(s:pos) > 1 + execute 'normal!' s:pos[0].'gt' + execute s:pos[1] 'wincmd w' + call winrestview(s:pos[2]) + endif +endfunction + +function! s:finish_bindings() + nnoremap R :call retry() + nnoremap D :PlugDiff + nnoremap S :PlugStatus + nnoremap U :call status_update() + xnoremap U :call status_update() + nnoremap ]] :silent! call section('') + nnoremap [[ :silent! call section('b') +endfunction + +function! s:prepare(...) + if empty(s:plug_getcwd()) + throw 'Invalid current working directory. Cannot proceed.' + endif + + for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] + if exists(evar) + throw evar.' detected. Cannot proceed.' + endif + endfor + + call s:job_abort() + if s:switch_in() + if b:plug_preview == 1 + pc + endif + enew + else + call s:new_window() + endif + + nnoremap q :call close_pane() + if a:0 == 0 + call s:finish_bindings() + endif + let b:plug_preview = -1 + let s:plug_tab = tabpagenr() + let s:plug_buf = winbufnr(0) + call s:assign_name() + + for k in ['', 'L', 'o', 'X', 'd', 'dd'] + execute 'silent! unmap ' k + endfor + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell + if exists('+colorcolumn') + setlocal colorcolumn= + endif + setf vim-plug + if exists('g:syntax_on') + call s:syntax() + endif +endfunction + +function! s:close_pane() + if b:plug_preview == 1 + pc + let b:plug_preview = -1 + else + bd + endif +endfunction + +function! s:assign_name() + " Assign buffer name + let prefix = '[Plugins]' + let name = prefix + let idx = 2 + while bufexists(name) + let name = printf('%s (%s)', prefix, idx) + let idx = idx + 1 + endwhile + silent! execute 'f' fnameescape(name) +endfunction + +function! s:chsh(swap) + let prev = [&shell, &shellcmdflag, &shellredir] + if !s:is_win + set shell=sh + endif + if a:swap + if s:is_powershell(&shell) + let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s' + elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$' + set shellredir=>%s\ 2>&1 + endif + endif + return prev +endfunction + +function! s:bang(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(a:0) + " FIXME: Escaping is incomplete. We could use shellescape with eval, + " but it won't work on Windows. + let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') + execute "normal! :execute g:_plug_bang\\" + finally + unlet g:_plug_bang + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + return v:shell_error ? 'Exit status: ' . v:shell_error : '' +endfunction + +function! s:regress_bar() + let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') + call s:progress_bar(2, bar, len(bar)) +endfunction + +function! s:is_updated(dir) + return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir)) +endfunction + +function! s:do(pull, force, todo) + for [name, spec] in items(a:todo) + if !isdirectory(spec.dir) + continue + endif + let installed = has_key(s:update.new, name) + let updated = installed ? 0 : + \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) + if a:force || installed || updated + execute 'cd' s:esc(spec.dir) + call append(3, '- Post-update hook for '. name .' ... ') + let error = '' + let type = type(spec.do) + if type == s:TYPE.string + if spec.do[0] == ':' + if !get(s:loaded, name, 0) + let s:loaded[name] = 1 + call s:reorg_rtp() + endif + call s:load_plugin(spec) + try + execute spec.do[1:] + catch + let error = v:exception + endtry + if !s:plug_window_exists() + cd - + throw 'Warning: vim-plug was terminated by the post-update hook of '.name + endif + else + let error = s:bang(spec.do) + endif + elseif type == s:TYPE.funcref + try + call s:load_plugin(spec) + let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') + call spec.do({ 'name': name, 'status': status, 'force': a:force }) + catch + let error = v:exception + endtry + else + let error = 'Invalid hook type' + endif + call s:switch_in() + call setline(4, empty(error) ? (getline(4) . 'OK') + \ : ('x' . getline(4)[1:] . error)) + if !empty(error) + call add(s:update.errors, name) + call s:regress_bar() + endif + cd - + endif + endfor +endfunction + +function! s:hash_match(a, b) + return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 +endfunction + +function! s:checkout(spec) + let sha = a:spec.commit + let output = s:git_revision(a:spec.dir) + if !empty(output) && !s:hash_match(sha, s:lines(output)[0]) + let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : '' + let output = s:system( + \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) + endif + return output +endfunction + +function! s:finish(pull) + let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) + if new_frozen + let s = new_frozen > 1 ? 's' : '' + call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) + endif + call append(3, '- Finishing ... ') | 4 + redraw + call plug#helptags() + call plug#end() + call setline(4, getline(4) . 'Done!') + redraw + let msgs = [] + if !empty(s:update.errors) + call add(msgs, "Press 'R' to retry.") + endif + if a:pull && len(s:update.new) < len(filter(getline(5, '$'), + \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) + call add(msgs, "Press 'D' to see the updated changes.") + endif + echo join(msgs, ' ') + call s:finish_bindings() +endfunction + +function! s:retry() + if empty(s:update.errors) + return + endif + echo + call s:update_impl(s:update.pull, s:update.force, + \ extend(copy(s:update.errors), [s:update.threads])) +endfunction + +function! s:is_managed(name) + return has_key(g:plugs[a:name], 'uri') +endfunction + +function! s:names(...) + return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) +endfunction + +function! s:check_ruby() + silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") + if !exists('g:plug_ruby') + redraw! + return s:warn('echom', 'Warning: Ruby interface is broken') + endif + let ruby_version = split(g:plug_ruby, '\.') + unlet g:plug_ruby + return s:version_requirement(ruby_version, [1, 8, 7]) +endfunction + +function! s:update_impl(pull, force, args) abort + let sync = index(a:args, '--sync') >= 0 || has('vim_starting') + let args = filter(copy(a:args), 'v:val != "--sync"') + let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? + \ remove(args, -1) : get(g:, 'plug_threads', 16) + + let managed = filter(copy(g:plugs), 's:is_managed(v:key)') + let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : + \ filter(managed, 'index(args, v:key) >= 0') + + if empty(todo) + return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) + endif + + if !s:is_win && s:git_version_requirement(2, 3) + let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' + let $GIT_TERMINAL_PROMPT = 0 + for plug in values(todo) + let plug.uri = substitute(plug.uri, + \ '^https://git::@github\.com', 'https://github.com', '') + endfor + endif + + if !isdirectory(g:plug_home) + try + call mkdir(g:plug_home, 'p') + catch + return s:err(printf('Invalid plug directory: %s. '. + \ 'Try to call plug#begin with a valid directory', g:plug_home)) + endtry + endif + + if has('nvim') && !exists('*jobwait') && threads > 1 + call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') + endif + + let use_job = s:nvim || s:vim8 + let python = (has('python') || has('python3')) && !use_job + let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() + + let s:update = { + \ 'start': reltime(), + \ 'all': todo, + \ 'todo': copy(todo), + \ 'errors': [], + \ 'pull': a:pull, + \ 'force': a:force, + \ 'new': {}, + \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, + \ 'bar': '', + \ 'fin': 0 + \ } + + call s:prepare(1) + call append(0, ['', '']) + normal! 2G + silent! redraw + + " Set remote name, overriding a possible user git config's clone.defaultRemoteName + let s:clone_opt = ['--origin', 'origin'] + if get(g:, 'plug_shallow', 1) + call extend(s:clone_opt, ['--depth', '1']) + if s:git_version_requirement(1, 7, 10) + call add(s:clone_opt, '--no-single-branch') + endif + endif + + if has('win32unix') || has('wsl') + call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input']) + endif + + let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' + + " Python version requirement (>= 2.7) + if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 + redir => pyv + silent python import platform; print platform.python_version() + redir END + let python = s:version_requirement( + \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) + endif + + if (python || ruby) && s:update.threads > 1 + try + let imd = &imd + if s:mac_gui + set noimd + endif + if ruby + call s:update_ruby() + else + call s:update_python() + endif + catch + let lines = getline(4, '$') + let printed = {} + silent! 4,$d _ + for line in lines + let name = s:extract_name(line, '.', '') + if empty(name) || !has_key(printed, name) + call append('$', line) + if !empty(name) + let printed[name] = 1 + if line[0] == 'x' && index(s:update.errors, name) < 0 + call add(s:update.errors, name) + end + endif + endif + endfor + finally + let &imd = imd + call s:update_finish() + endtry + else + call s:update_vim() + while use_job && sync + sleep 100m + if s:update.fin + break + endif + endwhile + endif +endfunction + +function! s:log4(name, msg) + call setline(4, printf('- %s (%s)', a:msg, a:name)) + redraw +endfunction + +function! s:update_finish() + if exists('s:git_terminal_prompt') + let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt + endif + if s:switch_in() + call append(3, '- Updating ...') | 4 + for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) + let [pos, _] = s:logpos(name) + if !pos + continue + endif + if has_key(spec, 'commit') + call s:log4(name, 'Checking out '.spec.commit) + let out = s:checkout(spec) + elseif has_key(spec, 'tag') + let tag = spec.tag + if tag =~ '\*' + let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) + if !v:shell_error && !empty(tags) + let tag = tags[0] + call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) + call append(3, '') + endif + endif + call s:log4(name, 'Checking out '.tag) + let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) + else + let branch = s:git_origin_branch(spec) + call s:log4(name, 'Merging origin/'.s:esc(branch)) + let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' + \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) + endif + if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && + \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) + call s:log4(name, 'Updating submodules. This may take a while.') + let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) + endif + let msg = s:format_message(v:shell_error ? 'x': '-', name, out) + if v:shell_error + call add(s:update.errors, name) + call s:regress_bar() + silent execute pos 'd _' + call append(4, msg) | 4 + elseif !empty(out) + call setline(pos, msg[0]) + endif + redraw + endfor + silent 4 d _ + try + call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) + catch + call s:warn('echom', v:exception) + call s:warn('echo', '') + return + endtry + call s:finish(s:update.pull) + call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') + call s:switch_out('normal! gg') + endif +endfunction + +function! s:job_abort() + if (!s:nvim && !s:vim8) || !exists('s:jobs') + return + endif + + for [name, j] in items(s:jobs) + if s:nvim + silent! call jobstop(j.jobid) + elseif s:vim8 + silent! call job_stop(j.jobid) + endif + if j.new + call s:rm_rf(g:plugs[name].dir) + endif + endfor + let s:jobs = {} +endfunction + +function! s:last_non_empty_line(lines) + let len = len(a:lines) + for idx in range(len) + let line = a:lines[len-idx-1] + if !empty(line) + return line + endif + endfor + return '' +endfunction + +function! s:job_out_cb(self, data) abort + let self = a:self + let data = remove(self.lines, -1) . a:data + let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') + call extend(self.lines, lines) + " To reduce the number of buffer updates + let self.tick = get(self, 'tick', -1) + 1 + if !self.running || self.tick % len(s:jobs) == 0 + let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') + let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) + call s:log(bullet, self.name, result) + endif +endfunction + +function! s:job_exit_cb(self, data) abort + let a:self.running = 0 + let a:self.error = a:data != 0 + call s:reap(a:self.name) + call s:tick() +endfunction + +function! s:job_cb(fn, job, ch, data) + if !s:plug_window_exists() " plug window closed + return s:job_abort() + endif + call call(a:fn, [a:job, a:data]) +endfunction + +function! s:nvim_cb(job_id, data, event) dict abort + return (a:event == 'stdout' || a:event == 'stderr') ? + \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : + \ s:job_cb('s:job_exit_cb', self, 0, a:data) +endfunction + +function! s:spawn(name, cmd, opts) + let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], + \ 'new': get(a:opts, 'new', 0) } + let s:jobs[a:name] = job + + if s:nvim + if has_key(a:opts, 'dir') + let job.cwd = a:opts.dir + endif + let argv = a:cmd + call extend(job, { + \ 'on_stdout': function('s:nvim_cb'), + \ 'on_stderr': function('s:nvim_cb'), + \ 'on_exit': function('s:nvim_cb'), + \ }) + let jid = s:plug_call('jobstart', argv, job) + if jid > 0 + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = [jid < 0 ? argv[0].' is not executable' : + \ 'Invalid arguments (or job table is full)'] + endif + elseif s:vim8 + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) + if has_key(a:opts, 'dir') + let cmd = s:with_cd(cmd, a:opts.dir, 0) + endif + let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] + let jid = job_start(s:is_win ? join(argv, ' ') : argv, { + \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ 'err_mode': 'raw', + \ 'out_mode': 'raw' + \}) + if job_status(jid) == 'run' + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = ['Failed to start job'] + endif + else + let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) + let job.error = v:shell_error != 0 + let job.running = 0 + endif +endfunction + +function! s:reap(name) + let job = s:jobs[a:name] + if job.error + call add(s:update.errors, a:name) + elseif get(job, 'new', 0) + let s:update.new[a:name] = 1 + endif + let s:update.bar .= job.error ? 'x' : '=' + + let bullet = job.error ? 'x' : '-' + let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) + call s:log(bullet, a:name, empty(result) ? 'OK' : result) + call s:bar() + + call remove(s:jobs, a:name) +endfunction + +function! s:bar() + if s:switch_in() + let total = len(s:update.all) + call setline(1, (s:update.pull ? 'Updating' : 'Installing'). + \ ' plugins ('.len(s:update.bar).'/'.total.')') + call s:progress_bar(2, s:update.bar, total) + call s:switch_out() + endif +endfunction + +function! s:logpos(name) + let max = line('$') + for i in range(4, max > 4 ? max : 4) + if getline(i) =~# '^[-+x*] '.a:name.':' + for j in range(i + 1, max > 5 ? max : 5) + if getline(j) !~ '^ ' + return [i, j - 1] + endif + endfor + return [i, i] + endif + endfor + return [0, 0] +endfunction + +function! s:log(bullet, name, lines) + if s:switch_in() + let [b, e] = s:logpos(a:name) + if b > 0 + silent execute printf('%d,%d d _', b, e) + if b > winheight('.') + let b = 4 + endif + else + let b = 4 + endif + " FIXME For some reason, nomodifiable is set after :d in vim8 + setlocal modifiable + call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) + call s:switch_out() + endif +endfunction + +function! s:update_vim() + let s:jobs = {} + + call s:bar() + call s:tick() +endfunction + +function! s:tick() + let pull = s:update.pull + let prog = s:progress_opt(s:nvim || s:vim8) +while 1 " Without TCO, Vim stack is bound to explode + if empty(s:update.todo) + if empty(s:jobs) && !s:update.fin + call s:update_finish() + let s:update.fin = 1 + endif + return + endif + + let name = keys(s:update.todo)[0] + let spec = remove(s:update.todo, name) + let new = empty(globpath(spec.dir, '.git', 1)) + + call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') + redraw + + let has_tag = has_key(spec, 'tag') + if !new + let [error, _] = s:git_validate(spec, 0) + if empty(error) + if pull + let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch'] + if has_tag && !empty(globpath(spec.dir, '.git/shallow')) + call extend(cmd, ['--depth', '99999999']) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, cmd, { 'dir': spec.dir }) + else + let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } + endif + else + let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } + endif + else + let cmd = ['git', 'clone'] + if !has_tag + call extend(cmd, s:clone_opt) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) + endif + + if !s:jobs[name].running + call s:reap(name) + endif + if len(s:jobs) >= s:update.threads + break + endif +endwhile +endfunction + +function! s:update_python() +let py_exe = has('python') ? 'python' : 'python3' +execute py_exe "<< EOF" +import datetime +import functools +import os +try: + import queue +except ImportError: + import Queue as queue +import random +import re +import shutil +import signal +import subprocess +import tempfile +import threading as thr +import time +import traceback +import vim + +G_NVIM = vim.eval("has('nvim')") == '1' +G_PULL = vim.eval('s:update.pull') == '1' +G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 +G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) +G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt')) +G_PROGRESS = vim.eval('s:progress_opt(1)') +G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) +G_STOP = thr.Event() +G_IS_WIN = vim.eval('s:is_win') == '1' + +class PlugError(Exception): + def __init__(self, msg): + self.msg = msg +class CmdTimedOut(PlugError): + pass +class CmdFailed(PlugError): + pass +class InvalidURI(PlugError): + pass +class Action(object): + INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] + +class Buffer(object): + def __init__(self, lock, num_plugs, is_pull): + self.bar = '' + self.event = 'Updating' if is_pull else 'Installing' + self.lock = lock + self.maxy = int(vim.eval('winheight(".")')) + self.num_plugs = num_plugs + + def __where(self, name): + """ Find first line with name in current buffer. Return line num. """ + found, lnum = False, 0 + matcher = re.compile('^[-+x*] {0}:'.format(name)) + for line in vim.current.buffer: + if matcher.search(line) is not None: + found = True + break + lnum += 1 + + if not found: + lnum = -1 + return lnum + + def header(self): + curbuf = vim.current.buffer + curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) + + num_spaces = self.num_plugs - len(self.bar) + curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') + + with self.lock: + vim.command('normal! 2G') + vim.command('redraw') + + def write(self, action, name, lines): + first, rest = lines[0], lines[1:] + msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] + msg.extend([' ' + line for line in rest]) + + try: + if action == Action.ERROR: + self.bar += 'x' + vim.command("call add(s:update.errors, '{0}')".format(name)) + elif action == Action.DONE: + self.bar += '=' + + curbuf = vim.current.buffer + lnum = self.__where(name) + if lnum != -1: # Found matching line num + del curbuf[lnum] + if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): + lnum = 3 + else: + lnum = 3 + curbuf.append(msg, lnum) + + self.header() + except vim.error: + pass + +class Command(object): + CD = 'cd /d' if G_IS_WIN else 'cd' + + def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): + self.cmd = cmd + if cmd_dir: + self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) + self.timeout = timeout + self.callback = cb if cb else (lambda msg: None) + self.clean = clean if clean else (lambda: None) + self.proc = None + + @property + def alive(self): + """ Returns true only if command still running. """ + return self.proc and self.proc.poll() is None + + def execute(self, ntries=3): + """ Execute the command with ntries if CmdTimedOut. + Returns the output of the command if no Exception. + """ + attempt, finished, limit = 0, False, self.timeout + + while not finished: + try: + attempt += 1 + result = self.try_command() + finished = True + return result + except CmdTimedOut: + if attempt != ntries: + self.notify_retry() + self.timeout += limit + else: + raise + + def notify_retry(self): + """ Retry required for command, notify user. """ + for count in range(3, 0, -1): + if G_STOP.is_set(): + raise KeyboardInterrupt + msg = 'Timeout. Will retry in {0} second{1} ...'.format( + count, 's' if count != 1 else '') + self.callback([msg]) + time.sleep(1) + self.callback(['Retrying ...']) + + def try_command(self): + """ Execute a cmd & poll for callback. Returns list of output. + Raises CmdFailed -> return code for Popen isn't 0 + Raises CmdTimedOut -> command exceeded timeout without new output + """ + first_line = True + + try: + tfile = tempfile.NamedTemporaryFile(mode='w+b') + preexec_fn = not G_IS_WIN and os.setsid or None + self.proc = subprocess.Popen(self.cmd, stdout=tfile, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, shell=True, + preexec_fn=preexec_fn) + thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) + thrd.start() + + thread_not_started = True + while thread_not_started: + try: + thrd.join(0.1) + thread_not_started = False + except RuntimeError: + pass + + while self.alive: + if G_STOP.is_set(): + raise KeyboardInterrupt + + if first_line or random.random() < G_LOG_PROB: + first_line = False + line = '' if G_IS_WIN else nonblock_read(tfile.name) + if line: + self.callback([line]) + + time_diff = time.time() - os.path.getmtime(tfile.name) + if time_diff > self.timeout: + raise CmdTimedOut(['Timeout!']) + + thrd.join(0.5) + + tfile.seek(0) + result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] + + if self.proc.returncode != 0: + raise CmdFailed([''] + result) + + return result + except: + self.terminate() + raise + + def terminate(self): + """ Terminate process and cleanup. """ + if self.alive: + if G_IS_WIN: + os.kill(self.proc.pid, signal.SIGINT) + else: + os.killpg(self.proc.pid, signal.SIGTERM) + self.clean() + +class Plugin(object): + def __init__(self, name, args, buf_q, lock): + self.name = name + self.args = args + self.buf_q = buf_q + self.lock = lock + self.tag = args.get('tag', 0) + + def manage(self): + try: + if os.path.exists(self.args['dir']): + self.update() + else: + self.install() + with self.lock: + thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) + except PlugError as exc: + self.write(Action.ERROR, self.name, exc.msg) + except KeyboardInterrupt: + G_STOP.set() + self.write(Action.ERROR, self.name, ['Interrupted!']) + except: + # Any exception except those above print stack trace + msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) + self.write(Action.ERROR, self.name, msg.split('\n')) + raise + + def install(self): + target = self.args['dir'] + if target[-1] == '\\': + target = target[0:-1] + + def clean(target): + def _clean(): + try: + shutil.rmtree(target) + except OSError: + pass + return _clean + + self.write(Action.INSTALL, self.name, ['Installing ...']) + callback = functools.partial(self.write, Action.INSTALL, self.name) + cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( + '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], + esc(target)) + com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + + def repo_uri(self): + cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' + command = Command(cmd, self.args['dir'], G_TIMEOUT,) + result = command.execute(G_RETRIES) + return result[-1] + + def update(self): + actual_uri = self.repo_uri() + expect_uri = self.args['uri'] + regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') + ma = regex.match(actual_uri) + mb = regex.match(expect_uri) + if ma is None or mb is None or ma.groups() != mb.groups(): + msg = ['', + 'Invalid URI: {0}'.format(actual_uri), + 'Expected {0}'.format(expect_uri), + 'PlugClean required.'] + raise InvalidURI(msg) + + if G_PULL: + self.write(Action.UPDATE, self.name, ['Updating ...']) + callback = functools.partial(self.write, Action.UPDATE, self.name) + fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' + cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) + com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + else: + self.write(Action.DONE, self.name, ['Already installed']) + + def write(self, action, name, msg): + self.buf_q.put((action, name, msg)) + +class PlugThread(thr.Thread): + def __init__(self, tname, args): + super(PlugThread, self).__init__() + self.tname = tname + self.args = args + + def run(self): + thr.current_thread().name = self.tname + buf_q, work_q, lock = self.args + + try: + while not G_STOP.is_set(): + name, args = work_q.get_nowait() + plug = Plugin(name, args, buf_q, lock) + plug.manage() + work_q.task_done() + except queue.Empty: + pass + +class RefreshThread(thr.Thread): + def __init__(self, lock): + super(RefreshThread, self).__init__() + self.lock = lock + self.running = True + + def run(self): + while self.running: + with self.lock: + thread_vim_command('noautocmd normal! a') + time.sleep(0.33) + + def stop(self): + self.running = False + +if G_NVIM: + def thread_vim_command(cmd): + vim.session.threadsafe_call(lambda: vim.command(cmd)) +else: + def thread_vim_command(cmd): + vim.command(cmd) + +def esc(name): + return '"' + name.replace('"', '\"') + '"' + +def nonblock_read(fname): + """ Read a file with nonblock flag. Return the last line. """ + fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) + buf = os.read(fread, 100000).decode('utf-8', 'replace') + os.close(fread) + + line = buf.rstrip('\r\n') + left = max(line.rfind('\r'), line.rfind('\n')) + if left != -1: + left += 1 + line = line[left:] + + return line + +def main(): + thr.current_thread().name = 'main' + nthreads = int(vim.eval('s:update.threads')) + plugs = vim.eval('s:update.todo') + mac_gui = vim.eval('s:mac_gui') == '1' + + lock = thr.Lock() + buf = Buffer(lock, len(plugs), G_PULL) + buf_q, work_q = queue.Queue(), queue.Queue() + for work in plugs.items(): + work_q.put(work) + + start_cnt = thr.active_count() + for num in range(nthreads): + tname = 'PlugT-{0:02}'.format(num) + thread = PlugThread(tname, (buf_q, work_q, lock)) + thread.start() + if mac_gui: + rthread = RefreshThread(lock) + rthread.start() + + while not buf_q.empty() or thr.active_count() != start_cnt: + try: + action, name, msg = buf_q.get(True, 0.25) + buf.write(action, name, ['OK'] if not msg else msg) + buf_q.task_done() + except queue.Empty: + pass + except KeyboardInterrupt: + G_STOP.set() + + if mac_gui: + rthread.stop() + rthread.join() + +main() +EOF +endfunction + +function! s:update_ruby() + ruby << EOF + module PlugStream + SEP = ["\r", "\n", nil] + def get_line + buffer = '' + loop do + char = readchar rescue return + if SEP.include? char.chr + buffer << $/ + break + else + buffer << char + end + end + buffer + end + end unless defined?(PlugStream) + + def esc arg + %["#{arg.gsub('"', '\"')}"] + end + + def killall pid + pids = [pid] + if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM + pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } + else + unless `which pgrep 2> /dev/null`.empty? + children = pids + until children.empty? + children = children.map { |pid| + `pgrep -P #{pid}`.lines.map { |l| l.chomp } + }.flatten + pids += children + end + end + pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } + end + end + + def compare_git_uri a, b + regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} + regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) + end + + require 'thread' + require 'fileutils' + require 'timeout' + running = true + iswin = VIM::evaluate('s:is_win').to_i == 1 + pull = VIM::evaluate('s:update.pull').to_i == 1 + base = VIM::evaluate('g:plug_home') + all = VIM::evaluate('s:update.todo') + limit = VIM::evaluate('get(g:, "plug_timeout", 60)') + tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 + nthr = VIM::evaluate('s:update.threads').to_i + maxy = VIM::evaluate('winheight(".")').to_i + vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ + cd = iswin ? 'cd /d' : 'cd' + tot = VIM::evaluate('len(s:update.todo)') || 0 + bar = '' + skip = 'Already installed' + mtx = Mutex.new + take1 = proc { mtx.synchronize { running && all.shift } } + logh = proc { + cnt = bar.length + $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" + $curbuf[2] = '[' + bar.ljust(tot) + ']' + VIM::command('normal! 2G') + VIM::command('redraw') + } + where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } + log = proc { |name, result, type| + mtx.synchronize do + ing = ![true, false].include?(type) + bar += type ? '=' : 'x' unless ing + b = case type + when :install then '+' when :update then '*' + when true, nil then '-' else + VIM::command("call add(s:update.errors, '#{name}')") + 'x' + end + result = + if type || type.nil? + ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] + elsif result =~ /^Interrupted|^Timeout/ + ["#{b} #{name}: #{result}"] + else + ["#{b} #{name}"] + result.lines.map { |l| " " << l } + end + if lnum = where.call(name) + $curbuf.delete lnum + lnum = 4 if ing && lnum > maxy + end + result.each_with_index do |line, offset| + $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) + end + logh.call + end + } + bt = proc { |cmd, name, type, cleanup| + tried = timeout = 0 + begin + tried += 1 + timeout += limit + fd = nil + data = '' + if iswin + Timeout::timeout(timeout) do + tmp = VIM::evaluate('tempname()') + system("(#{cmd}) > #{tmp}") + data = File.read(tmp).chomp + File.unlink tmp rescue nil + end + else + fd = IO.popen(cmd).extend(PlugStream) + first_line = true + log_prob = 1.0 / nthr + while line = Timeout::timeout(timeout) { fd.get_line } + data << line + log.call name, line.chomp, type if name && (first_line || rand < log_prob) + first_line = false + end + fd.close + end + [$? == 0, data.chomp] + rescue Timeout::Error, Interrupt => e + if fd && !fd.closed? + killall fd.pid + fd.close + end + cleanup.call if cleanup + if e.is_a?(Timeout::Error) && tried < tries + 3.downto(1) do |countdown| + s = countdown > 1 ? 's' : '' + log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type + sleep 1 + end + log.call name, 'Retrying ...', type + retry + end + [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] + end + } + main = Thread.current + threads = [] + watcher = Thread.new { + if vim7 + while VIM::evaluate('getchar(1)') + sleep 0.1 + end + else + require 'io/console' # >= Ruby 1.9 + nil until IO.console.getch == 3.chr + end + mtx.synchronize do + running = false + threads.each { |t| t.raise Interrupt } unless vim7 + end + threads.each { |t| t.join rescue nil } + main.kill + } + refresh = Thread.new { + while true + mtx.synchronize do + break unless running + VIM::command('noautocmd normal! a') + end + sleep 0.2 + end + } if VIM::evaluate('s:mac_gui') == 1 + + clone_opt = VIM::evaluate('s:clone_opt').join(' ') + progress = VIM::evaluate('s:progress_opt(1)') + nthr.times do + mtx.synchronize do + threads << Thread.new { + while pair = take1.call + name = pair.first + dir, uri, tag = pair.last.values_at *%w[dir uri tag] + exists = File.directory? dir + ok, result = + if exists + chdir = "#{cd} #{iswin ? dir : esc(dir)}" + ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil + current_uri = data.lines.to_a.last + if !ret + if data =~ /^Interrupted|^Timeout/ + [false, data] + else + [false, [data.chomp, "PlugClean required."].join($/)] + end + elsif !compare_git_uri(current_uri, uri) + [false, ["Invalid URI: #{current_uri}", + "Expected: #{uri}", + "PlugClean required."].join($/)] + else + if pull + log.call name, 'Updating ...', :update + fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' + bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil + else + [true, skip] + end + end + else + d = esc dir.sub(%r{[\\/]+$}, '') + log.call name, 'Installing ...', :install + bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { + FileUtils.rm_rf dir + } + end + mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok + log.call name, result, ok + end + } if running + end + end + threads.each { |t| t.join rescue nil } + logh.call + refresh.kill if refresh + watcher.kill +EOF +endfunction + +function! s:shellesc_cmd(arg, script) + let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') + return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') +endfunction + +function! s:shellesc_ps1(arg) + return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" +endfunction + +function! s:shellesc_sh(arg) + return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" +endfunction + +" Escape the shell argument based on the shell. +" Vim and Neovim's shellescape() are insufficient. +" 1. shellslash determines whether to use single/double quotes. +" Double-quote escaping is fragile for cmd.exe. +" 2. It does not work for powershell. +" 3. It does not work for *sh shells if the command is executed +" via cmd.exe (ie. cmd.exe /c sh -c command command_args) +" 4. It does not support batchfile syntax. +" +" Accepts an optional dictionary with the following keys: +" - shell: same as Vim/Neovim 'shell' option. +" If unset, fallback to 'cmd.exe' on Windows or 'sh'. +" - script: If truthy and shell is cmd.exe, escape for batchfile syntax. +function! plug#shellescape(arg, ...) + if a:arg =~# '^[A-Za-z0-9_/:.-]\+$' + return a:arg + endif + let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} + let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') + let script = get(opts, 'script', 1) + if shell =~# 'cmd\(\.exe\)\?$' + return s:shellesc_cmd(a:arg, script) + elseif s:is_powershell(shell) + return s:shellesc_ps1(a:arg) + endif + return s:shellesc_sh(a:arg) +endfunction + +function! s:glob_dir(path) + return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') +endfunction + +function! s:progress_bar(line, bar, total) + call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') +endfunction + +function! s:compare_git_uri(a, b) + " See `git help clone' + " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] + " [git@] github.com[:port] : junegunn/vim-plug [.git] + " file:// / junegunn/vim-plug [/] + " / junegunn/vim-plug [/] + let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' + let ma = matchlist(a:a, pat) + let mb = matchlist(a:b, pat) + return ma[1:2] ==# mb[1:2] +endfunction + +function! s:format_message(bullet, name, message) + if a:bullet != 'x' + return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] + else + let lines = map(s:lines(a:message), '" ".v:val') + return extend([printf('x %s:', a:name)], lines) + endif +endfunction + +function! s:with_cd(cmd, dir, ...) + let script = a:0 > 0 ? a:1 : 1 + return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) +endfunction + +function! s:system(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + if type(a:cmd) == s:TYPE.list + " Neovim's system() supports list argument to bypass the shell + " but it cannot set the working directory for the command. + " Assume that the command does not rely on the shell. + if has('nvim') && a:0 == 0 + return system(a:cmd) + endif + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) + if s:is_powershell(&shell) + let cmd = '& ' . cmd + endif + else + let cmd = a:cmd + endif + if a:0 > 0 + let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list) + endif + if s:is_win && type(a:cmd) != s:TYPE.list + let [batchfile, cmd] = s:batchfile(cmd) + endif + return system(cmd) + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry +endfunction + +function! s:system_chomp(...) + let ret = call('s:system', a:000) + return v:shell_error ? '' : substitute(ret, '\n$', '', '') +endfunction + +function! s:git_validate(spec, check_branch) + let err = '' + if isdirectory(a:spec.dir) + let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)] + let remote = result[-1] + if empty(remote) + let err = join([remote, 'PlugClean required.'], "\n") + elseif !s:compare_git_uri(remote, a:spec.uri) + let err = join(['Invalid URI: '.remote, + \ 'Expected: '.a:spec.uri, + \ 'PlugClean required.'], "\n") + elseif a:check_branch && has_key(a:spec, 'commit') + let sha = s:git_revision(a:spec.dir) + if empty(sha) + let err = join(add(result, 'PlugClean required.'), "\n") + elseif !s:hash_match(sha, a:spec.commit) + let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', + \ a:spec.commit[:6], sha[:6]), + \ 'PlugUpdate required.'], "\n") + endif + elseif a:check_branch + let current_branch = result[0] + " Check tag + let origin_branch = s:git_origin_branch(a:spec) + if has_key(a:spec, 'tag') + let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) + if a:spec.tag !=# tag && a:spec.tag !~ '\*' + let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', + \ (empty(tag) ? 'N/A' : tag), a:spec.tag) + endif + " Check branch + elseif origin_branch !=# current_branch + let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', + \ current_branch, origin_branch) + endif + if empty(err) + let [ahead, behind] = split(s:lastline(s:system([ + \ 'git', 'rev-list', '--count', '--left-right', + \ printf('HEAD...origin/%s', origin_branch) + \ ], a:spec.dir)), '\t') + if !v:shell_error && ahead + if behind + " Only mention PlugClean if diverged, otherwise it's likely to be + " pushable (and probably not that messed up). + let err = printf( + \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" + \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind) + else + let err = printf("Ahead of origin/%s by %d commit(s).\n" + \ .'Cannot update until local changes are pushed.', + \ origin_branch, ahead) + endif + endif + endif + endif + else + let err = 'Not found' + endif + return [err, err =~# 'PlugClean'] +endfunction + +function! s:rm_rf(dir) + if isdirectory(a:dir) + return s:system(s:is_win + \ ? 'rmdir /S /Q '.plug#shellescape(a:dir) + \ : ['rm', '-rf', a:dir]) + endif +endfunction + +function! s:clean(force) + call s:prepare() + call append(0, 'Searching for invalid plugins in '.g:plug_home) + call append(1, '') + + " List of valid directories + let dirs = [] + let errs = {} + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + if !s:is_managed(name) + call add(dirs, spec.dir) + else + let [err, clean] = s:git_validate(spec, 1) + if clean + let errs[spec.dir] = s:lines(err)[0] + else + call add(dirs, spec.dir) + endif + endif + let cnt += 1 + call s:progress_bar(2, repeat('=', cnt), total) + normal! 2G + redraw + endfor + + let allowed = {} + for dir in dirs + let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 + let allowed[dir] = 1 + for child in s:glob_dir(dir) + let allowed[child] = 1 + endfor + endfor + + let todo = [] + let found = sort(s:glob_dir(g:plug_home)) + while !empty(found) + let f = remove(found, 0) + if !has_key(allowed, f) && isdirectory(f) + call add(todo, f) + call append(line('$'), '- ' . f) + if has_key(errs, f) + call append(line('$'), ' ' . errs[f]) + endif + let found = filter(found, 'stridx(v:val, f) != 0') + end + endwhile + + 4 + redraw + if empty(todo) + call append(line('$'), 'Already clean.') + else + let s:clean_count = 0 + call append(3, ['Directories to delete:', '']) + redraw! + if a:force || s:ask_no_interrupt('Delete all directories?') + call s:delete([6, line('$')], 1) + else + call setline(4, 'Cancelled.') + nnoremap d :set opfunc=delete_opg@ + nmap dd d_ + xnoremap d :call delete_op(visualmode(), 1) + echo 'Delete the lines (d{motion}) to delete the corresponding directories' + endif + endif + 4 + setlocal nomodifiable +endfunction + +function! s:delete_op(type, ...) + call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) +endfunction + +function! s:delete(range, force) + let [l1, l2] = a:range + let force = a:force + let err_count = 0 + while l1 <= l2 + let line = getline(l1) + if line =~ '^- ' && isdirectory(line[2:]) + execute l1 + redraw! + let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) + let force = force || answer > 1 + if answer + let err = s:rm_rf(line[2:]) + setlocal modifiable + if empty(err) + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + else + delete _ + call append(l1 - 1, s:format_message('x', line[1:], err)) + let l2 += len(s:lines(err)) + let err_count += 1 + endif + let msg = printf('Removed %d directories.', s:clean_count) + if err_count > 0 + let msg .= printf(' Failed to remove %d directories.', err_count) + endif + call setline(4, msg) + setlocal nomodifiable + endif + endif + let l1 += 1 + endwhile +endfunction + +function! s:upgrade() + echo 'Downloading the latest version of vim-plug' + redraw + let tmp = s:plug_tempname() + let new = tmp . '/plug.vim' + + try + let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp]) + if v:shell_error + return s:err('Error upgrading vim-plug: '. out) + endif + + if readfile(s:me) ==# readfile(new) + echo 'vim-plug is already up-to-date' + return 0 + else + call rename(s:me, s:me . '.old') + call rename(new, s:me) + unlet g:loaded_plug + echo 'vim-plug has been upgraded' + return 1 + endif + finally + silent! call s:rm_rf(tmp) + endtry +endfunction + +function! s:upgrade_specs() + for spec in values(g:plugs) + let spec.frozen = get(spec, 'frozen', 0) + endfor +endfunction + +function! s:status() + call s:prepare() + call append(0, 'Checking plugins') + call append(1, '') + + let ecnt = 0 + let unloaded = 0 + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + let is_dir = isdirectory(spec.dir) + if has_key(spec, 'uri') + if is_dir + let [err, _] = s:git_validate(spec, 1) + let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] + else + let [valid, msg] = [0, 'Not found. Try PlugInstall.'] + endif + else + if is_dir + let [valid, msg] = [1, 'OK'] + else + let [valid, msg] = [0, 'Not found.'] + endif + endif + let cnt += 1 + let ecnt += !valid + " `s:loaded` entry can be missing if PlugUpgraded + if is_dir && get(s:loaded, name, -1) == 0 + let unloaded = 1 + let msg .= ' (not loaded)' + endif + call s:progress_bar(2, repeat('=', cnt), total) + call append(3, s:format_message(valid ? '-' : 'x', name, msg)) + normal! 2G + redraw + endfor + call setline(1, 'Finished. '.ecnt.' error(s).') + normal! gg + setlocal nomodifiable + if unloaded + echo "Press 'L' on each line to load plugin, or 'U' to update" + nnoremap L :call status_load(line('.')) + xnoremap L :call status_load(line('.')) + end +endfunction + +function! s:extract_name(str, prefix, suffix) + return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') +endfunction + +function! s:status_load(lnum) + let line = getline(a:lnum) + let name = s:extract_name(line, '-', '(not loaded)') + if !empty(name) + call plug#load(name) + setlocal modifiable + call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) + setlocal nomodifiable + endif +endfunction + +function! s:status_update() range + let lines = getline(a:firstline, a:lastline) + let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') + if !empty(names) + echo + execute 'PlugUpdate' join(names) + endif +endfunction + +function! s:is_preview_window_open() + silent! wincmd P + if &previewwindow + wincmd p + return 1 + endif +endfunction + +function! s:find_name(lnum) + for lnum in reverse(range(1, a:lnum)) + let line = getline(lnum) + if empty(line) + return '' + endif + let name = s:extract_name(line, '-', '') + if !empty(name) + return name + endif + endfor + return '' +endfunction + +function! s:preview_commit() + if b:plug_preview < 0 + let b:plug_preview = !s:is_preview_window_open() + endif + + let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') + if empty(sha) + let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$') + if empty(name) + return + endif + let title = 'HEAD@{1}..' + let command = 'git diff --no-color HEAD@{1}' + else + let title = sha + let command = 'git show --no-color --pretty=medium '.sha + let name = s:find_name(line('.')) + endif + + if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) + return + endif + + if exists('g:plug_pwindow') && !s:is_preview_window_open() + execute g:plug_pwindow + execute 'e' title + else + execute 'pedit' title + wincmd P + endif + setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + execute 'silent %!' cmd + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + setlocal nomodifiable + nnoremap q :q + wincmd p +endfunction + +function! s:section(flags) + call search('\(^[x-] \)\@<=[^:]\+:', a:flags) +endfunction + +function! s:format_git_log(line) + let indent = ' ' + let tokens = split(a:line, nr2char(1)) + if len(tokens) != 5 + return indent.substitute(a:line, '\s*$', '', '') + endif + let [graph, sha, refs, subject, date] = tokens + let tag = matchstr(refs, 'tag: [^,)]\+') + let tag = empty(tag) ? ' ' : ' ('.tag.') ' + return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) +endfunction + +function! s:append_ul(lnum, text) + call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) +endfunction + +function! s:diff() + call s:prepare() + call append(0, ['Collecting changes ...', '']) + let cnts = [0, 0] + let bar = '' + let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') + call s:progress_bar(2, bar, len(total)) + for origin in [1, 0] + let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + if empty(plugs) + continue + endif + call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') + for [k, v] in plugs + let branch = s:git_origin_branch(v) + if len(branch) + let range = origin ? '..origin/'.branch : 'HEAD@{1}..' + let cmd = ['git', 'log', '--graph', '--color=never'] + if s:git_version_requirement(2, 10, 0) + call add(cmd, '--no-show-signature') + endif + call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range]) + if has_key(v, 'rtp') + call extend(cmd, ['--', v.rtp]) + endif + let diff = s:system_chomp(cmd, v.dir) + if !empty(diff) + let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' + call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) + let cnts[origin] += 1 + endif + endif + let bar .= '=' + call s:progress_bar(2, bar, len(total)) + normal! 2G + redraw + endfor + if !cnts[origin] + call append(5, ['', 'N/A']) + endif + endfor + call setline(1, printf('%d plugin(s) updated.', cnts[0]) + \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) + + if cnts[0] || cnts[1] + nnoremap (plug-preview) :silent! call preview_commit() + if empty(maparg("\", 'n')) + nmap (plug-preview) + endif + if empty(maparg('o', 'n')) + nmap o (plug-preview) + endif + endif + if cnts[0] + nnoremap X :call revert() + echo "Press 'X' on each block to revert the update" + endif + normal! gg + setlocal nomodifiable +endfunction + +function! s:revert() + if search('^Pending updates', 'bnW') + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || + \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' + return + endif + + call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) + setlocal modifiable + normal! "_dap + setlocal nomodifiable + echo 'Reverted' +endfunction + +function! s:snapshot(force, ...) abort + call s:prepare() + setf vim + call append(0, ['" Generated by vim-plug', + \ '" '.strftime("%c"), + \ '" :source this file in vim to restore the snapshot', + \ '" or execute: vim -S snapshot.vim', + \ '', '', 'PlugUpdate!']) + 1 + let anchor = line('$') - 3 + let names = sort(keys(filter(copy(g:plugs), + \'has_key(v:val, "uri") && isdirectory(v:val.dir)'))) + for name in reverse(names) + let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir) + if !empty(sha) + call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) + redraw + endif + endfor + + if a:0 > 0 + let fn = s:plug_expand(a:1) + if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) + return + endif + call writefile(getline(1, '$'), fn) + echo 'Saved as '.a:1 + silent execute 'e' s:esc(fn) + setf vim + endif +endfunction + +function! s:split_rtp() + return split(&rtp, '\\\@ "+y +map "+P +"" Misc +set mouse=a +set ttyfast +set backupdir=~/.cache/vim + diff --git a/.config/obs-studio/basic/profiles/Untitled/basic.ini b/.config/obs-studio/basic/profiles/Untitled/basic.ini new file mode 100644 index 0000000..a7d89a2 --- /dev/null +++ b/.config/obs-studio/basic/profiles/Untitled/basic.ini @@ -0,0 +1,109 @@ +[General] +Name=Untitled + +[Video] +BaseCX=1920 +BaseCY=1080 +OutputCX=1920 +OutputCY=1080 +FPSType=0 +FPSCommon=29.97 +FPSInt=30 +FPSNum=30 +FPSDen=1 +ScaleType=bicubic +ColorFormat=NV12 +ColorSpace=709 +ColorRange=Partial +SdrWhiteLevel=300 +HdrNominalPeakLevel=1000 + +[Panels] +CookieId=FD7BC7488ECA0E47 + +[Output] +Mode=Simple +FilenameFormatting=%CCYY-%MM-%DD %hh-%mm-%ss +DelayEnable=false +DelaySec=20 +DelayPreserve=true +Reconnect=true +RetryDelay=2 +MaxRetries=25 +BindIP=default +NewSocketLoopEnable=false +LowLatencyEnable=false + +[SimpleOutput] +StreamEncoder=x264 +Preset=veryfast +VBitrate=2000 +UseAdvanced=false +FilePath=/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/ +RecFormat2=mkv +ABitrate=256 +NVENCPreset2=p5 +RecQuality=HQ +RecRB=false +RecRBTime=20 +RecRBSize=512 +RecRBPrefix=Replay +StreamAudioEncoder=aac +RecAudioEncoder=opus +RecTracks=15 +RecEncoder=x264 +AMDPreset=balanced + +[AdvOut] +TrackIndex=1 +RecType=Standard +RecTracks=1 +FLVTrack=1 +FFOutputToFile=true +FFFormat= +FFFormatMimeType= +FFVEncoderId=0 +FFVEncoder= +FFAEncoderId=0 +FFAEncoder= +FFAudioMixes=1 +VodTrackIndex=2 +RecSplitFileType=Time +ApplyServiceSettings=true +UseRescale=false +Encoder=obs_x264 +RecFilePath=/home/zombie +RecFormat2=mkv +RecUseRescale=false +RecEncoder=none +FFFilePath=/home/zombie +FFVBitrate=2500 +FFVGOPSize=250 +FFUseRescale=false +FFIgnoreCompat=false +FFABitrate=160 +Track1Bitrate=160 +Track2Bitrate=160 +Track3Bitrate=160 +Track4Bitrate=160 +Track5Bitrate=160 +Track6Bitrate=160 +RecSplitFileTime=15 +RecSplitFileSize=2048 +RecRB=false +RecRBTime=20 +RecRBSize=512 +AudioEncoder=libfdk_aac +RecAudioEncoder=libfdk_aac +FFExtension=mp4 + +[Stream1] +IgnoreRecommended=false + +[Audio] +MonitoringDeviceId=default +MonitoringDeviceName=Default +SampleRate=48000 +ChannelSetup=Stereo +MeterDecayRate=23.53 +PeakMeterType=0 diff --git a/.config/obs-studio/basic/profiles/Untitled/service.json b/.config/obs-studio/basic/profiles/Untitled/service.json new file mode 100644 index 0000000..027e6ff --- /dev/null +++ b/.config/obs-studio/basic/profiles/Untitled/service.json @@ -0,0 +1,9 @@ +{ + "settings": { + "bwtest": false, + "key": "live_37562453_G8Qx3xyAVbnIrr0EXYxXjffzggAHIz", + "server": "auto", + "service": "Twitch" + }, + "type": "rtmp_common" +} \ No newline at end of file diff --git a/.config/obs-studio/basic/scenes/Untitled.json b/.config/obs-studio/basic/scenes/Untitled.json new file mode 100644 index 0000000..29052eb --- /dev/null +++ b/.config/obs-studio/basic/scenes/Untitled.json @@ -0,0 +1 @@ +{"DesktopAudioDevice1":{"prev_ver":486604803,"name":"Desktop Audio","uuid":"1c1a0d55-e634-4fac-b1b5-22c498729b67","id":"pulse_output_capture","versioned_id":"pulse_output_capture","settings":{"device_id":"default"},"mixers":195,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"AuxAudioDevice1":{"prev_ver":486604803,"name":"Mic/Aux","uuid":"fbe2d4e7-a223-4761-af07-8571f53627b4","id":"pulse_input_capture","versioned_id":"pulse_input_capture","settings":{"device_id":"alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback"},"mixers":201,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"AuxAudioDevice2":{"prev_ver":486604803,"name":"HDMI Capture","uuid":"c9526784-a9d0-43e5-9b88-a4414b00e76f","id":"pulse_input_capture","versioned_id":"pulse_input_capture","settings":{"device_id":"alsa_input.usb-MACROSILICON_USB_Video-02.3.analog-stereo"},"mixers":197,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"current_scene":"screen","current_program_scene":"screen","scene_order":[{"name":"Screen with camera"},{"name":"game with camera"},{"name":"game"},{"name":"screen"},{"name":"camera"},{"name":"Camera with scope"},{"name":"game with screen"}],"name":"Untitled","sources":[{"prev_ver":486604803,"name":"Video Capture Device (V4L2)","uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","Brightness":0,"input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen with camera","uuid":"91ff3600-23a4-4289-a8c8-89d8d86c6af8","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":5,"items":[{"name":"Screen Capture","source_uuid":"13d7f7d3-2e8c-4d1f-afa3-2274df660bb4","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.42786458134651184,"y":0.42777776718139648},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25208333134651184,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":5,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Screen Capture":[],"libobs.hide_scene_item.Screen Capture":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture","uuid":"13d7f7d3-2e8c-4d1f-afa3-2274df660bb4","id":"xshm_input","versioned_id":"xshm_input","settings":{},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Camera Capture","uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"border","uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","id":"image_source","versioned_id":"image_source","settings":{"file":"/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/streaming_assets/retardedasstwitchborder.png"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game with camera","uuid":"47f4ca14-5902-4c2b-b3f3-82e6dc90d361","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":4,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25156250596046448,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"capture acrd","source_uuid":"8902652b-109b-49ac-aabd-c2c3610dba72","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.74947917461395264,"y":0.74907410144805908},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[],"libobs.show_scene_item.capture acrd":[],"libobs.hide_scene_item.capture acrd":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"capture acrd","uuid":"8902652b-109b-49ac-aabd-c2c3610dba72","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game","uuid":"bafcd11e-4c29-4f3d-a109-03741dc851ea","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":3,"items":[{"name":"Video Capture Device (V4L2)","source_uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":1.5,"y":1.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Video Capture Device (V4L2)":[],"libobs.hide_scene_item.Video Capture Device (V4L2)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"screen","uuid":"d2575e5f-f004-4b2b-be1b-ec7660026de5","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":11,"items":[{"name":"Screen Capture (XSHM) second monitor","source_uuid":"b2031e25-7a92-437d-b025-d21a2427bd6d","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":5,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (XSHM)","source_uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.5,"y":0.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (PipeWire)","source_uuid":"b3294e1f-787d-46cd-9b75-9f83389e13df","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.5,"y":0.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":8,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Text (FreeType 2)","source_uuid":"491fd895-5bad-45fb-8b11-416fc06d01ac","visible":true,"locked":false,"rot":0.0,"pos":{"x":1861.0,"y":-67.0},"scale":{"x":0.7674252986907959,"y":3.6086957454681396},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":11,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Screen Capture (XSHM) second monitor":[],"libobs.hide_scene_item.Screen Capture (XSHM) second monitor":[],"libobs.show_scene_item.Screen Capture (XSHM)":[],"libobs.hide_scene_item.Screen Capture (XSHM)":[],"libobs.show_scene_item.Screen Capture (PipeWire)":[],"libobs.hide_scene_item.Screen Capture (PipeWire)":[],"libobs.show_scene_item.Text (FreeType 2)":[],"libobs.hide_scene_item.Text (FreeType 2)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (XSHM)","uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","id":"xshm_input","versioned_id":"xshm_input","settings":{},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"camera","uuid":"0b6712a1-eccf-4749-b24f-bca15e446199","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":1,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":1.0,"y":1.0},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Camera with scope","uuid":"4d8c1d12-248d-4873-a105-2a495560b1da","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":4,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25208333134651184,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"scope caputre","source_uuid":"3dc90e3a-62f7-4028-947f-289ea06d010b","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.74895834922790527,"y":0.74907410144805908},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[],"libobs.show_scene_item.scope caputre":[],"libobs.hide_scene_item.scope caputre":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"scope caputre","uuid":"3dc90e3a-62f7-4028-947f-289ea06d010b","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video4","input":0,"pixelformat":1196444237},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game with screen","uuid":"693bf831-b588-42d9-b7be-12f75b99b9f4","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":2,"items":[{"name":"Video Capture Device (V4L2)","source_uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.85104167461395264,"y":0.85092592239379883},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (XSHM)","source_uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","visible":true,"locked":false,"rot":0.0,"pos":{"x":1176.0,"y":661.0},"scale":{"x":0.19374999403953552,"y":0.19398148357868195},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Video Capture Device (V4L2)":[],"libobs.hide_scene_item.Video Capture Device (V4L2)":[],"libobs.show_scene_item.Screen Capture (XSHM)":[],"libobs.hide_scene_item.Screen Capture (XSHM)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (XSHM) second monitor","uuid":"b2031e25-7a92-437d-b025-d21a2427bd6d","id":"xshm_input","versioned_id":"xshm_input","settings":{"screen":1},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (PipeWire)","uuid":"b3294e1f-787d-46cd-9b75-9f83389e13df","id":"pipewire-desktop-capture-source","versioned_id":"pipewire-desktop-capture-source","settings":{"RestoreToken":"4e47d88a-9592-4028-8330-a43635ebed41"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Text (FreeType 2)","uuid":"491fd895-5bad-45fb-8b11-416fc06d01ac","id":"text_ft2_source","versioned_id":"text_ft2_source_v2","settings":{"text":"Thomas gay"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}}],"groups":[],"quick_transitions":[{"name":"Cut","duration":300,"hotkeys":[],"id":1,"fade_to_black":false},{"name":"Fade","duration":300,"hotkeys":[],"id":2,"fade_to_black":false},{"name":"Fade","duration":300,"hotkeys":[],"id":3,"fade_to_black":true}],"transitions":[{"name":"Swipe","id":"swipe_transition","settings":{"direction":"left","swipe_in":true}}],"saved_projectors":[],"current_transition":"Fade","transition_duration":283,"preview_locked":false,"scaling_enabled":false,"scaling_level":0,"scaling_off_x":0.0,"scaling_off_y":0.0,"virtual-camera":{"type":0,"internal":0},"modules":{"scripts-tool":[],"output-timer":{"streamTimerHours":0,"streamTimerMinutes":0,"streamTimerSeconds":30,"recordTimerHours":0,"recordTimerMinutes":0,"recordTimerSeconds":30,"autoStartStreamTimer":false,"autoStartRecordTimer":false,"pauseRecordTimer":true},"auto-scene-switcher":{"interval":300,"non_matching_scene":"","switch_if_not_matching":false,"active":false,"switches":[]}}} \ No newline at end of file diff --git a/.config/obs-studio/basic/scenes/Untitled.json.bak b/.config/obs-studio/basic/scenes/Untitled.json.bak new file mode 100644 index 0000000..2a54e23 --- /dev/null +++ b/.config/obs-studio/basic/scenes/Untitled.json.bak @@ -0,0 +1 @@ +{"DesktopAudioDevice1":{"prev_ver":486604803,"name":"Desktop Audio","uuid":"1c1a0d55-e634-4fac-b1b5-22c498729b67","id":"pulse_output_capture","versioned_id":"pulse_output_capture","settings":{"device_id":"default"},"mixers":195,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"AuxAudioDevice1":{"prev_ver":486604803,"name":"Mic/Aux","uuid":"fbe2d4e7-a223-4761-af07-8571f53627b4","id":"pulse_input_capture","versioned_id":"pulse_input_capture","settings":{"device_id":"alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback"},"mixers":201,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"AuxAudioDevice2":{"prev_ver":486604803,"name":"HDMI Capture","uuid":"c9526784-a9d0-43e5-9b88-a4414b00e76f","id":"pulse_input_capture","versioned_id":"pulse_input_capture","settings":{"device_id":"alsa_input.usb-MACROSILICON_USB_Video-02.3.analog-stereo"},"mixers":197,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"libobs.mute":[],"libobs.unmute":[],"libobs.push-to-mute":[],"libobs.push-to-talk":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},"current_scene":"screen","current_program_scene":"screen","scene_order":[{"name":"Screen with camera"},{"name":"game with camera"},{"name":"game"},{"name":"screen"},{"name":"camera"},{"name":"Camera with scope"},{"name":"game with screen"}],"name":"Untitled","sources":[{"prev_ver":486604803,"name":"Video Capture Device (V4L2)","uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","Brightness":0,"input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen with camera","uuid":"91ff3600-23a4-4289-a8c8-89d8d86c6af8","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":5,"items":[{"name":"Screen Capture","source_uuid":"13d7f7d3-2e8c-4d1f-afa3-2274df660bb4","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.42786458134651184,"y":0.42777776718139648},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25208333134651184,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":5,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Screen Capture":[],"libobs.hide_scene_item.Screen Capture":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture","uuid":"13d7f7d3-2e8c-4d1f-afa3-2274df660bb4","id":"xshm_input","versioned_id":"xshm_input","settings":{},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Camera Capture","uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"border","uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","id":"image_source","versioned_id":"image_source","settings":{"file":"/run/media/zombie/zombienas/organized_data/absolutely-unique/projects/streaming_assets/retardedasstwitchborder.png"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game with camera","uuid":"47f4ca14-5902-4c2b-b3f3-82e6dc90d361","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":4,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25156250596046448,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"capture acrd","source_uuid":"8902652b-109b-49ac-aabd-c2c3610dba72","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.74947917461395264,"y":0.74907410144805908},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[],"libobs.show_scene_item.capture acrd":[],"libobs.hide_scene_item.capture acrd":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"capture acrd","uuid":"8902652b-109b-49ac-aabd-c2c3610dba72","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video0","input":0,"pixelformat":842093913},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game","uuid":"bafcd11e-4c29-4f3d-a109-03741dc851ea","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":3,"items":[{"name":"Video Capture Device (V4L2)","source_uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":1.5,"y":1.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Video Capture Device (V4L2)":[],"libobs.hide_scene_item.Video Capture Device (V4L2)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"screen","uuid":"d2575e5f-f004-4b2b-be1b-ec7660026de5","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":11,"items":[{"name":"Screen Capture (XSHM) second monitor","source_uuid":"b2031e25-7a92-437d-b025-d21a2427bd6d","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":5,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (XSHM)","source_uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.5,"y":0.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (PipeWire)","source_uuid":"b3294e1f-787d-46cd-9b75-9f83389e13df","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.5,"y":0.5},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":8,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Text (FreeType 2)","source_uuid":"491fd895-5bad-45fb-8b11-416fc06d01ac","visible":true,"locked":false,"rot":0.0,"pos":{"x":667.0,"y":-101.0},"scale":{"x":0.7674252986907959,"y":3.6086957454681396},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":11,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Screen Capture (XSHM) second monitor":[],"libobs.hide_scene_item.Screen Capture (XSHM) second monitor":[],"libobs.show_scene_item.Screen Capture (XSHM)":[],"libobs.hide_scene_item.Screen Capture (XSHM)":[],"libobs.show_scene_item.Screen Capture (PipeWire)":[],"libobs.hide_scene_item.Screen Capture (PipeWire)":[],"libobs.show_scene_item.Text (FreeType 2)":[],"libobs.hide_scene_item.Text (FreeType 2)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (XSHM)","uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","id":"xshm_input","versioned_id":"xshm_input","settings":{},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"camera","uuid":"0b6712a1-eccf-4749-b24f-bca15e446199","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":1,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":1.0,"y":1.0},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Camera with scope","uuid":"4d8c1d12-248d-4873-a105-2a495560b1da","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":4,"items":[{"name":"Camera Capture","source_uuid":"bd92ac28-af52-4e5c-b5e3-208b3f550ad9","visible":true,"locked":false,"rot":0.0,"pos":{"x":1920.0,"y":1080.0},"scale":{"x":0.25208333134651184,"y":0.25185185670852661},"align":10,"bounds_type":0,"bounds_align":0,"bounds":{"x":1.0,"y":1.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"border","source_uuid":"f853acd5-6872-4824-b51a-7d28f80a19dc","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.75,"y":0.75},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":3,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"scope caputre","source_uuid":"3dc90e3a-62f7-4028-947f-289ea06d010b","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.74895834922790527,"y":0.74907410144805908},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":4,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Camera Capture":[],"libobs.hide_scene_item.Camera Capture":[],"libobs.show_scene_item.border":[],"libobs.hide_scene_item.border":[],"libobs.show_scene_item.scope caputre":[],"libobs.hide_scene_item.scope caputre":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"scope caputre","uuid":"3dc90e3a-62f7-4028-947f-289ea06d010b","id":"v4l2_input","versioned_id":"v4l2_input","settings":{"device_id":"/dev/video4","input":0,"pixelformat":1196444237},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"game with screen","uuid":"693bf831-b588-42d9-b7be-12f75b99b9f4","id":"scene","versioned_id":"scene","settings":{"custom_size":false,"id_counter":2,"items":[{"name":"Video Capture Device (V4L2)","source_uuid":"c67d0844-f2b0-4a1a-b8b0-975040fa5ade","visible":true,"locked":false,"rot":0.0,"pos":{"x":0.0,"y":0.0},"scale":{"x":0.85104167461395264,"y":0.85092592239379883},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":1,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}},{"name":"Screen Capture (XSHM)","source_uuid":"cc39907e-e650-4333-a80d-2bdde94c7ea0","visible":true,"locked":false,"rot":0.0,"pos":{"x":1176.0,"y":661.0},"scale":{"x":0.19374999403953552,"y":0.19398148357868195},"align":5,"bounds_type":0,"bounds_align":0,"bounds":{"x":0.0,"y":0.0},"crop_left":0,"crop_top":0,"crop_right":0,"crop_bottom":0,"id":2,"group_item_backup":false,"scale_filter":"disable","blend_method":"default","blend_type":"normal","show_transition":{"duration":0},"hide_transition":{"duration":0},"private_settings":{}}]},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{"OBSBasic.SelectScene":[],"libobs.show_scene_item.Video Capture Device (V4L2)":[],"libobs.hide_scene_item.Video Capture Device (V4L2)":[],"libobs.show_scene_item.Screen Capture (XSHM)":[],"libobs.hide_scene_item.Screen Capture (XSHM)":[]},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (XSHM) second monitor","uuid":"b2031e25-7a92-437d-b025-d21a2427bd6d","id":"xshm_input","versioned_id":"xshm_input","settings":{"screen":1},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Screen Capture (PipeWire)","uuid":"b3294e1f-787d-46cd-9b75-9f83389e13df","id":"pipewire-desktop-capture-source","versioned_id":"pipewire-desktop-capture-source","settings":{"RestoreToken":"4e47d88a-9592-4028-8330-a43635ebed41"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}},{"prev_ver":486604803,"name":"Text (FreeType 2)","uuid":"491fd895-5bad-45fb-8b11-416fc06d01ac","id":"text_ft2_source","versioned_id":"text_ft2_source_v2","settings":{"text":"Thomas gay"},"mixers":0,"sync":0,"flags":0,"volume":1.0,"balance":0.5,"enabled":true,"muted":false,"push-to-mute":false,"push-to-mute-delay":0,"push-to-talk":false,"push-to-talk-delay":0,"hotkeys":{},"deinterlace_mode":0,"deinterlace_field_order":0,"monitoring_type":0,"private_settings":{}}],"groups":[],"quick_transitions":[{"name":"Cut","duration":300,"hotkeys":[],"id":1,"fade_to_black":false},{"name":"Fade","duration":300,"hotkeys":[],"id":2,"fade_to_black":false},{"name":"Fade","duration":300,"hotkeys":[],"id":3,"fade_to_black":true}],"transitions":[{"name":"Swipe","id":"swipe_transition","settings":{"direction":"left","swipe_in":true}}],"saved_projectors":[],"current_transition":"Fade","transition_duration":283,"preview_locked":false,"scaling_enabled":false,"scaling_level":0,"scaling_off_x":0.0,"scaling_off_y":0.0,"virtual-camera":{"type":0,"internal":0},"modules":{"scripts-tool":[],"output-timer":{"streamTimerHours":0,"streamTimerMinutes":0,"streamTimerSeconds":30,"recordTimerHours":0,"recordTimerMinutes":0,"recordTimerSeconds":30,"autoStartStreamTimer":false,"autoStartRecordTimer":false,"pauseRecordTimer":true},"auto-scene-switcher":{"interval":300,"non_matching_scene":"","switch_if_not_matching":false,"active":false,"switches":[]}}} \ No newline at end of file diff --git a/.config/obs-studio/global.ini b/.config/obs-studio/global.ini new file mode 100644 index 0000000..d3a5c82 --- /dev/null +++ b/.config/obs-studio/global.ini @@ -0,0 +1,88 @@ +[General] +Pre19Defaults=false +Pre21Defaults=false +Pre23Defaults=false +Pre24.1Defaults=false +FirstRun=true +LastVersion=486604803 +MaxLogs=10 +InfoIncrement=-1 +ProcessPriority=Normal +EnableAutoUpdates=true +ConfirmOnExit=true +HotkeyFocusType=NeverDisableHotkeys +InstallGUID=fe756bdf30934cf7ac79444f1dc3278ed581e6d0 + +[Basic] +Profile=Untitled +ProfileDir=Untitled +SceneCollection=Untitled +SceneCollectionFile=Untitled +ConfigOnNewProfile=true + +[BasicWindow] +gridMode=false +geometry=AdnQywADAAAAABMDAAAAGgAAHPwAAAWcAAATBQAAABwAABz6AAAFmgAAAAEAAAAABAAAABMFAAAAHAAAHPoAAAWa +DockState=AAAA/wAAAAD9AAAAAQAAAAMAAAn2AAABAfwBAAAABvsAAAAUAHMAYwBlAG4AZQBzAEQAbwBjAGsBAAAAAAAAAdYAAACgAP////sAAAAWAHMAbwB1AHIAYwBlAHMARABvAGMAawEAAAHaAAAB2gAAAKAA////+wAAABIAbQBpAHgAZQByAEQAbwBjAGsBAAADuAAAAosAAADeAP////sAAAAeAHQAcgBhAG4AcwBpAHQAaQBvAG4AcwBEAG8AYwBrAQAABkcAAAHaAAAAoAD////7AAAAGABjAG8AbgB0AHIAbwBsAHMARABvAGMAawEAAAglAAAB0QAAAJ4A////+wAAABIAcwB0AGEAdABzAEQAbwBjAGsCAAAUAAAAAmwAAAK8AAAAyAAACfYAAARKAAAABAAAAAQAAAAIAAAACPwAAAAA +PreviewEnabled=true +AlwaysOnTop=false +SceneDuplicationMode=true +SwapScenesMode=true +EditPropertiesMode=false +PreviewProgramMode=false +DocksLocked=false +SnappingEnabled=true +ScreenSnapping=true +SourceSnapping=true +CenterSnapping=false +SnapDistance=9.0 +SpacingHelpersEnabled=true +RecordWhenStreaming=false +KeepRecordingWhenStreamStops=false +SysTrayEnabled=true +SysTrayWhenStarted=false +SaveProjectors=false +ShowTransitions=true +ShowListboxToolbars=true +ShowStatusBar=true +ShowSourceIcons=true +ShowContextToolbars=true +StudioModeLabels=true +VerticalVolControl=false +MultiviewMouseSwitch=true +MultiviewDrawNames=true +MultiviewDrawAreas=true +MediaControlsCountdownTimer=true +WarnBeforeStartingStream=false +WarnBeforeStoppingStream=false +WarnBeforeStoppingRecord=false +ExtraBrowserDocks=[] + +[ScriptLogWindow] +geometry=AdnQywADAAAAAAUBAAAAGQAAB1gAAAGoAAAFAQAAABkAAAdYAAABqAAAAAAAAAAADwAAAAUBAAAAGQAAB1gAAAGo + +[PropertiesWindow] +cx=720 +cy=580 + +[Video] +Renderer=OpenGL + +[Accessibility] +SelectRed=255 +SelectGreen=65280 +SelectBlue=16744192 +MixerGreen=2522918 +MixerYellow=2523007 +MixerRed=2500223 +MixerGreenActive=5046092 +MixerYellowActive=5046271 +MixerRedActive=5000447 + +[OBSWebSocket] +FirstLoad=false +ServerEnabled=false +ServerPort=4455 +AlertsEnabled=false +AuthRequired=true +ServerPassword=UkzQ5OIFcND0ZlV1 diff --git a/.config/obs-studio/logs/2023-10-06 20-33-52.txt b/.config/obs-studio/logs/2023-10-06 20-33-52.txt new file mode 100644 index 0000000..5206e7c --- /dev/null +++ b/.config/obs-studio/logs/2023-10-06 20-33-52.txt @@ -0,0 +1,147 @@ +20:33:52.106: Using EGL/X11 +20:33:52.106: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +20:33:52.106: CPU Speed: 2066.220MHz +20:33:52.107: Physical Cores: 8, Logical Cores: 16 +20:33:52.107: Physical Memory: 15918MB Total, 2899MB Free +20:33:52.107: Kernel Version: Linux 6.5.5-zen1-1-zen +20:33:52.107: Distribution: "Arch Linux" Unknown +20:33:52.107: Desktop Environment: +20:33:52.107: Session Type: x11 +20:33:52.107: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +20:33:52.108: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +20:33:52.108: Portable mode: false +20:33:52.149: OBS 29.1.3-1 (linux) +20:33:52.149: --------------------------------- +20:33:52.149: --------------------------------- +20:33:52.149: audio settings reset: +20:33:52.149: samples per sec: 48000 +20:33:52.149: speakers: 2 +20:33:52.149: max buffering: 960 milliseconds +20:33:52.149: buffering type: dynamically increasing +20:33:52.155: --------------------------------- +20:33:52.155: Initializing OpenGL... +20:33:52.245: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +20:33:52.245: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.1, shading language 4.60 +20:33:52.285: --------------------------------- +20:33:52.285: video settings reset: +20:33:52.285: base resolution: 1920x1080 +20:33:52.285: output resolution: 1920x1080 +20:33:52.285: downscale filter: Bicubic +20:33:52.285: fps: 30000/1001 +20:33:52.285: format: NV12 +20:33:52.285: YUV mode: Rec. 709/Partial +20:33:52.285: NV12 texture support not available +20:33:52.285: P010 texture support not available +20:33:52.290: Audio monitoring device: +20:33:52.290: name: Default +20:33:52.290: id: default +20:33:52.290: --------------------------------- +20:33:52.300: Failed to load 'en-US' text for module: 'decklink-captions.so' +20:33:52.310: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +20:33:52.320: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +20:33:52.320: Failed to initialize module 'decklink.so' +20:33:52.571: [pipewire] Available captures: +20:33:52.571: [pipewire] - Desktop capture +20:33:52.605: [obs-browser]: Version 2.21.1 +20:33:52.605: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +20:33:52.868: VAAPI: Failed to initialize display in vaapi_device_h264_supported +20:33:52.868: FFmpeg VAAPI H264 encoding not supported +20:33:52.868: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +20:33:52.868: FFmpeg VAAPI HEVC encoding not supported +20:33:52.928: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +20:33:52.928: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +20:33:52.928: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +20:33:52.933: [obs-websocket] [obs_module_load] Module loaded. +20:33:52.969: --------------------------------- +20:33:52.969: Loaded Modules: +20:33:52.969: text-freetype2.so +20:33:52.969: rtmp-services.so +20:33:52.969: obs-x264.so +20:33:52.969: obs-websocket.so +20:33:52.969: obs-vst.so +20:33:52.969: obs-transitions.so +20:33:52.969: obs-outputs.so +20:33:52.969: obs-filters.so +20:33:52.969: obs-ffmpeg.so +20:33:52.969: obs-browser.so +20:33:52.969: linux-v4l2.so +20:33:52.969: linux-pulseaudio.so +20:33:52.969: linux-pipewire.so +20:33:52.969: linux-jack.so +20:33:52.969: linux-capture.so +20:33:52.969: linux-alsa.so +20:33:52.969: image-source.so +20:33:52.969: frontend-tools.so +20:33:52.969: decklink-output-ui.so +20:33:52.969: decklink-captions.so +20:33:52.969: --------------------------------- +20:33:52.970: ==== Startup complete =============================================== +20:33:53.003: All scene data cleared +20:33:53.003: ------------------------------------------------ +20:33:53.007: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:33:53.007: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +20:33:53.007: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +20:33:53.007: [Loaded global audio device]: 'Desktop Audio' +20:33:53.008: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:33:53.008: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +20:33:53.008: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +20:33:53.008: [Loaded global audio device]: 'Mic/Aux' +20:33:53.008: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:33:53.008: pulse-input: An error occurred while getting the source info! +20:33:53.008: [Loaded global audio device]: 'HDMI Capture' +20:33:53.008: v4l2-input: Start capture from /dev/video0 +20:33:53.010: v4l2-input: Input: 0 +20:33:53.024: v4l2-input: Resolution: 1920x1080 +20:33:53.024: v4l2-input: Pixelformat: YU12 +20:33:53.024: v4l2-input: Linesize: 1920 Bytes +20:33:53.024: v4l2-input: Framerate: 30.00 fps +20:33:53.026: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +20:33:53.028: xshm-input: Geometry 3840x2160 @ 0,0 +20:33:53.034: v4l2-input: Start capture from /dev/video0 +20:33:53.035: v4l2-input: Unable to set input 0 +20:33:53.035: v4l2-input: Initialization failed, errno: Device or resource busy +20:33:53.164: v4l2-input: Start capture from /dev/video0 +20:33:53.165: v4l2-input: Unable to set input 0 +20:33:53.165: v4l2-input: Initialization failed, errno: Device or resource busy +20:33:53.165: xshm-input: Geometry 3840x2160 @ 0,0 +20:33:53.169: v4l2-input: Start capture from /dev/video4 +20:33:53.169: v4l2-input: Unable to open device +20:33:53.169: v4l2-input: Initialization failed, errno: No such file or directory +20:33:53.169: xshm-input: Geometry 2560x1440 @ 3840,0 +20:33:53.172: PipeWire initialized +20:33:53.174: Switched to scene 'screen' +20:33:53.175: ------------------------------------------------ +20:33:53.175: Loaded scenes: +20:33:53.175: - scene 'Screen with camera': +20:33:53.175: - source: 'Screen Capture' (xshm_input) +20:33:53.175: - source: 'Camera Capture' (v4l2_input) +20:33:53.175: - source: 'border' (image_source) +20:33:53.175: - scene 'game with camera': +20:33:53.175: - source: 'Camera Capture' (v4l2_input) +20:33:53.175: - source: 'border' (image_source) +20:33:53.175: - source: 'capture acrd' (v4l2_input) +20:33:53.175: - scene 'game': +20:33:53.175: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:33:53.175: - scene 'screen': +20:33:53.175: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +20:33:53.175: - source: 'Screen Capture (XSHM)' (xshm_input) +20:33:53.175: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +20:33:53.175: - scene 'camera': +20:33:53.175: - source: 'Camera Capture' (v4l2_input) +20:33:53.175: - scene 'Camera with scope': +20:33:53.175: - source: 'Camera Capture' (v4l2_input) +20:33:53.175: - source: 'border' (image_source) +20:33:53.175: - source: 'scope caputre' (v4l2_input) +20:33:53.175: - scene 'game with screen': +20:33:53.175: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:33:53.175: - source: 'Screen Capture (XSHM)' (xshm_input) +20:33:53.175: ------------------------------------------------ +20:33:53.579: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +20:33:53.579: +20:33:54.449: NV12 texture support not available +20:33:54.449: P010 texture support not available +20:33:54.455: Virtual camera started +20:33:54.475: ==== Virtual Camera Start ========================================== +20:34:18.173: [pipewire] Error creating screencast session: Timeout was reached +20:50:13.420: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +20:50:13.420: diff --git a/.config/obs-studio/logs/2023-10-06 23-07-03.txt b/.config/obs-studio/logs/2023-10-06 23-07-03.txt new file mode 100644 index 0000000..8f8279e --- /dev/null +++ b/.config/obs-studio/logs/2023-10-06 23-07-03.txt @@ -0,0 +1,170 @@ +23:07:03.521: Using EGL/X11 +23:07:03.521: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +23:07:03.521: CPU Speed: 4122.068MHz +23:07:03.522: Physical Cores: 8, Logical Cores: 16 +23:07:03.522: Physical Memory: 15918MB Total, 12047MB Free +23:07:03.522: Kernel Version: Linux 6.5.5-zen1-1-zen +23:07:03.522: Distribution: "Arch Linux" Unknown +23:07:03.522: Desktop Environment: +23:07:03.522: Session Type: x11 +23:07:03.522: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +23:07:03.523: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +23:07:03.523: Portable mode: false +23:07:03.565: OBS 29.1.3-1 (linux) +23:07:03.565: --------------------------------- +23:07:03.566: --------------------------------- +23:07:03.566: audio settings reset: +23:07:03.566: samples per sec: 48000 +23:07:03.566: speakers: 2 +23:07:03.566: max buffering: 960 milliseconds +23:07:03.566: buffering type: dynamically increasing +23:07:03.572: --------------------------------- +23:07:03.572: Initializing OpenGL... +23:07:03.630: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +23:07:03.630: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.1, shading language 4.60 +23:07:03.660: --------------------------------- +23:07:03.660: video settings reset: +23:07:03.660: base resolution: 1920x1080 +23:07:03.660: output resolution: 1920x1080 +23:07:03.660: downscale filter: Bicubic +23:07:03.660: fps: 30000/1001 +23:07:03.660: format: NV12 +23:07:03.660: YUV mode: Rec. 709/Partial +23:07:03.660: NV12 texture support not available +23:07:03.660: P010 texture support not available +23:07:03.663: Audio monitoring device: +23:07:03.663: name: Default +23:07:03.663: id: default +23:07:03.663: --------------------------------- +23:07:03.671: Failed to load 'en-US' text for module: 'decklink-captions.so' +23:07:03.681: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +23:07:03.690: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +23:07:03.690: Failed to initialize module 'decklink.so' +23:07:10.326: [pipewire] No captures available +23:07:10.360: [obs-browser]: Version 2.21.1 +23:07:10.361: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +23:07:10.501: VAAPI: Failed to initialize display in vaapi_device_h264_supported +23:07:10.501: FFmpeg VAAPI H264 encoding not supported +23:07:10.502: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +23:07:10.502: FFmpeg VAAPI HEVC encoding not supported +23:07:10.561: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +23:07:10.561: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +23:07:10.561: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +23:07:10.565: [obs-websocket] [obs_module_load] Module loaded. +23:07:10.595: --------------------------------- +23:07:10.595: Loaded Modules: +23:07:10.595: text-freetype2.so +23:07:10.595: rtmp-services.so +23:07:10.595: obs-x264.so +23:07:10.595: obs-websocket.so +23:07:10.595: obs-vst.so +23:07:10.595: obs-transitions.so +23:07:10.595: obs-outputs.so +23:07:10.595: obs-filters.so +23:07:10.595: obs-ffmpeg.so +23:07:10.595: obs-browser.so +23:07:10.595: linux-v4l2.so +23:07:10.595: linux-pulseaudio.so +23:07:10.595: linux-pipewire.so +23:07:10.595: linux-jack.so +23:07:10.596: linux-capture.so +23:07:10.596: linux-alsa.so +23:07:10.596: image-source.so +23:07:10.596: frontend-tools.so +23:07:10.596: decklink-output-ui.so +23:07:10.596: decklink-captions.so +23:07:10.596: --------------------------------- +23:07:10.596: ==== Startup complete =============================================== +23:07:10.649: All scene data cleared +23:07:10.649: ------------------------------------------------ +23:07:10.654: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:07:10.654: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +23:07:10.654: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +23:07:10.654: [Loaded global audio device]: 'Desktop Audio' +23:07:10.654: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:07:10.654: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +23:07:10.654: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +23:07:10.654: [Loaded global audio device]: 'Mic/Aux' +23:07:10.655: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:07:10.655: pulse-input: An error occurred while getting the source info! +23:07:10.655: [Loaded global audio device]: 'HDMI Capture' +23:07:10.655: v4l2-input: Start capture from /dev/video0 +23:07:10.656: v4l2-input: Input: 0 +23:07:10.671: v4l2-input: Resolution: 1920x1080 +23:07:10.671: v4l2-input: Pixelformat: YU12 +23:07:10.671: v4l2-input: Linesize: 1920 Bytes +23:07:10.671: v4l2-input: Framerate: 30.00 fps +23:07:10.672: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +23:07:10.674: xshm-input: Geometry 3840x2160 @ 0,0 +23:07:10.680: v4l2-input: Start capture from /dev/video0 +23:07:10.681: v4l2-input: Unable to set input 0 +23:07:10.681: v4l2-input: Initialization failed, errno: Device or resource busy +23:07:10.847: v4l2-input: /dev/video0: select timed out +23:07:10.847: v4l2-input: /dev/video0: failed to log status +23:07:10.894: v4l2-input: Start capture from /dev/video0 +23:07:10.894: v4l2-input: Unable to set input 0 +23:07:10.894: v4l2-input: Initialization failed, errno: Device or resource busy +23:07:10.895: xshm-input: Geometry 3840x2160 @ 0,0 +23:07:10.898: v4l2-input: Start capture from /dev/video4 +23:07:10.898: v4l2-input: Unable to open device +23:07:10.898: v4l2-input: Initialization failed, errno: No such file or directory +23:07:10.898: xshm-input: Geometry 2560x1440 @ 3840,0 +23:07:10.901: Source ID 'pipewire-desktop-capture-source' not found +23:07:10.901: Failed to create source 'Screen Capture (PipeWire)'! +23:07:10.903: Switched to scene 'screen' +23:07:10.903: ------------------------------------------------ +23:07:10.903: Loaded scenes: +23:07:10.903: - scene 'Screen with camera': +23:07:10.903: - source: 'Screen Capture' (xshm_input) +23:07:10.903: - source: 'Camera Capture' (v4l2_input) +23:07:10.903: - source: 'border' (image_source) +23:07:10.903: - scene 'game with camera': +23:07:10.903: - source: 'Camera Capture' (v4l2_input) +23:07:10.903: - source: 'border' (image_source) +23:07:10.903: - source: 'capture acrd' (v4l2_input) +23:07:10.903: - scene 'game': +23:07:10.903: - source: 'Video Capture Device (V4L2)' (v4l2_input) +23:07:10.903: - scene 'screen': +23:07:10.903: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +23:07:10.903: - source: 'Screen Capture (XSHM)' (xshm_input) +23:07:10.903: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +23:07:10.903: - scene 'camera': +23:07:10.903: - source: 'Camera Capture' (v4l2_input) +23:07:10.903: - scene 'Camera with scope': +23:07:10.903: - source: 'Camera Capture' (v4l2_input) +23:07:10.903: - source: 'border' (image_source) +23:07:10.903: - source: 'scope caputre' (v4l2_input) +23:07:10.903: - scene 'game with screen': +23:07:10.903: - source: 'Video Capture Device (V4L2)' (v4l2_input) +23:07:10.903: - source: 'Screen Capture (XSHM)' (xshm_input) +23:07:10.903: ------------------------------------------------ +23:07:11.204: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +23:07:11.204: +23:07:11.246: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +23:07:11.246: +23:07:13.733: NV12 texture support not available +23:07:13.733: P010 texture support not available +23:07:13.737: Virtual camera started +23:07:13.751: ==== Virtual Camera Start ========================================== +23:08:54.038: v4l2-input: /dev/video0: failed to enqueue buffer +23:08:54.038: v4l2-input: /dev/video0: Stopped capture after 3095 frames +23:08:54.039: v4l2-helpers: unable to stop stream +23:08:54.041: v4l2-input: Device /dev/video0 disconnected +23:08:54.044: v4l2-input: Device /dev/video0 disconnected +23:08:54.044: v4l2-input: Device /dev/video0 disconnected +23:08:54.689: v4l2-input: Device /dev/video0 reconnected +23:08:54.689: v4l2-input: Start capture from /dev/video0 +23:08:54.690: v4l2-input: Input: 0 +23:08:54.716: v4l2-input: Resolution: 1920x1080 +23:08:54.716: v4l2-input: Pixelformat: YU12 +23:08:54.716: v4l2-input: Linesize: 1920 Bytes +23:08:54.761: v4l2-input: Framerate: 30.00 fps +23:08:54.764: v4l2-input: Device /dev/video0 reconnected +23:08:54.764: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +23:08:54.764: v4l2-input: Start capture from /dev/video0 +23:08:54.784: v4l2-input: Unable to set input 0 +23:08:54.784: v4l2-input: Initialization failed, errno: Device or resource busy +23:08:54.784: v4l2-input: Device /dev/video0 reconnected +23:08:54.784: v4l2-input: Start capture from /dev/video0 +23:08:54.796: v4l2-input: Unable to set input 0 +23:08:54.796: v4l2-input: Initialization failed, errno: Device or resource busy diff --git a/.config/obs-studio/logs/2023-10-06 23-30-26.txt b/.config/obs-studio/logs/2023-10-06 23-30-26.txt new file mode 100644 index 0000000..6a34673 --- /dev/null +++ b/.config/obs-studio/logs/2023-10-06 23-30-26.txt @@ -0,0 +1,143 @@ +23:30:26.208: Using EGL/X11 +23:30:26.208: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +23:30:26.208: CPU Speed: 2754.668MHz +23:30:26.209: Physical Cores: 8, Logical Cores: 16 +23:30:26.209: Physical Memory: 15917MB Total, 12501MB Free +23:30:26.209: Kernel Version: Linux 6.5.5-zen1-1-zen +23:30:26.209: Distribution: "Arch Linux" Unknown +23:30:26.209: Desktop Environment: +23:30:26.209: Session Type: x11 +23:30:26.209: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +23:30:26.210: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +23:30:26.210: Portable mode: false +23:30:26.247: OBS 29.1.3-1 (linux) +23:30:26.247: --------------------------------- +23:30:26.247: --------------------------------- +23:30:26.247: audio settings reset: +23:30:26.247: samples per sec: 48000 +23:30:26.247: speakers: 2 +23:30:26.247: max buffering: 960 milliseconds +23:30:26.247: buffering type: dynamically increasing +23:30:26.253: --------------------------------- +23:30:26.253: Initializing OpenGL... +23:30:26.308: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +23:30:26.308: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +23:30:26.412: --------------------------------- +23:30:26.412: video settings reset: +23:30:26.412: base resolution: 1920x1080 +23:30:26.412: output resolution: 1920x1080 +23:30:26.412: downscale filter: Bicubic +23:30:26.412: fps: 30000/1001 +23:30:26.412: format: NV12 +23:30:26.412: YUV mode: Rec. 709/Partial +23:30:26.412: NV12 texture support not available +23:30:26.412: P010 texture support not available +23:30:26.415: Audio monitoring device: +23:30:26.415: name: Default +23:30:26.415: id: default +23:30:26.415: --------------------------------- +23:30:26.424: Failed to load 'en-US' text for module: 'decklink-captions.so' +23:30:26.434: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +23:30:26.444: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +23:30:26.444: Failed to initialize module 'decklink.so' +23:30:26.669: [pipewire] No captures available +23:30:26.710: [obs-browser]: Version 2.21.1 +23:30:26.711: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +23:30:26.846: VAAPI: Failed to initialize display in vaapi_device_h264_supported +23:30:26.846: FFmpeg VAAPI H264 encoding not supported +23:30:26.846: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +23:30:26.846: FFmpeg VAAPI HEVC encoding not supported +23:30:26.904: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +23:30:26.904: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +23:30:26.904: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +23:30:26.908: [obs-websocket] [obs_module_load] Module loaded. +23:30:26.939: --------------------------------- +23:30:26.939: Loaded Modules: +23:30:26.939: text-freetype2.so +23:30:26.939: rtmp-services.so +23:30:26.939: obs-x264.so +23:30:26.939: obs-websocket.so +23:30:26.939: obs-vst.so +23:30:26.939: obs-transitions.so +23:30:26.939: obs-outputs.so +23:30:26.939: obs-filters.so +23:30:26.939: obs-ffmpeg.so +23:30:26.939: obs-browser.so +23:30:26.939: linux-v4l2.so +23:30:26.939: linux-pulseaudio.so +23:30:26.939: linux-pipewire.so +23:30:26.939: linux-jack.so +23:30:26.939: linux-capture.so +23:30:26.939: linux-alsa.so +23:30:26.939: image-source.so +23:30:26.939: frontend-tools.so +23:30:26.939: decklink-output-ui.so +23:30:26.939: decklink-captions.so +23:30:26.939: --------------------------------- +23:30:26.940: ==== Startup complete =============================================== +23:30:26.994: All scene data cleared +23:30:26.995: ------------------------------------------------ +23:30:27.001: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:30:27.001: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +23:30:27.001: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +23:30:27.001: [Loaded global audio device]: 'Desktop Audio' +23:30:27.002: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:30:27.002: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +23:30:27.002: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +23:30:27.002: [Loaded global audio device]: 'Mic/Aux' +23:30:27.002: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +23:30:27.003: pulse-input: An error occurred while getting the source info! +23:30:27.003: [Loaded global audio device]: 'HDMI Capture' +23:30:27.003: v4l2-input: Start capture from /dev/video0 +23:30:27.004: v4l2-input: Unable to set input 0 +23:30:27.004: v4l2-input: Initialization failed, errno: Device or resource busy +23:30:27.005: xshm-input: Geometry 3840x2160 @ 0,0 +23:30:27.012: v4l2-input: Start capture from /dev/video0 +23:30:27.012: v4l2-input: Unable to set input 0 +23:30:27.012: v4l2-input: Initialization failed, errno: Device or resource busy +23:30:27.243: v4l2-input: Start capture from /dev/video0 +23:30:27.244: v4l2-input: Unable to set input 0 +23:30:27.244: v4l2-input: Initialization failed, errno: Device or resource busy +23:30:27.244: xshm-input: Geometry 3840x2160 @ 0,0 +23:30:27.247: v4l2-input: Start capture from /dev/video4 +23:30:27.247: v4l2-input: Unable to open device +23:30:27.247: v4l2-input: Initialization failed, errno: No such file or directory +23:30:27.248: xshm-input: Geometry 2560x1440 @ 3840,0 +23:30:27.250: Source ID 'pipewire-desktop-capture-source' not found +23:30:27.250: Failed to create source 'Screen Capture (PipeWire)'! +23:30:27.252: Switched to scene 'screen' +23:30:27.252: ------------------------------------------------ +23:30:27.252: Loaded scenes: +23:30:27.252: - scene 'Screen with camera': +23:30:27.252: - source: 'Screen Capture' (xshm_input) +23:30:27.252: - source: 'Camera Capture' (v4l2_input) +23:30:27.252: - source: 'border' (image_source) +23:30:27.252: - scene 'game with camera': +23:30:27.252: - source: 'Camera Capture' (v4l2_input) +23:30:27.252: - source: 'border' (image_source) +23:30:27.252: - source: 'capture acrd' (v4l2_input) +23:30:27.252: - scene 'game': +23:30:27.252: - source: 'Video Capture Device (V4L2)' (v4l2_input) +23:30:27.252: - scene 'screen': +23:30:27.252: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +23:30:27.252: - source: 'Screen Capture (XSHM)' (xshm_input) +23:30:27.252: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +23:30:27.252: - scene 'camera': +23:30:27.252: - source: 'Camera Capture' (v4l2_input) +23:30:27.252: - scene 'Camera with scope': +23:30:27.252: - source: 'Camera Capture' (v4l2_input) +23:30:27.252: - source: 'border' (image_source) +23:30:27.252: - source: 'scope caputre' (v4l2_input) +23:30:27.252: - scene 'game with screen': +23:30:27.252: - source: 'Video Capture Device (V4L2)' (v4l2_input) +23:30:27.252: - source: 'Screen Capture (XSHM)' (xshm_input) +23:30:27.252: ------------------------------------------------ +23:30:27.549: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +23:30:27.549: +23:30:27.570: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +23:30:27.570: +23:30:28.662: NV12 texture support not available +23:30:28.662: P010 texture support not available +23:30:28.669: Virtual camera started +23:30:28.699: ==== Virtual Camera Start ========================================== +23:30:28.703: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop diff --git a/.config/obs-studio/logs/2023-10-07 02-20-56.txt b/.config/obs-studio/logs/2023-10-07 02-20-56.txt new file mode 100644 index 0000000..83fce84 --- /dev/null +++ b/.config/obs-studio/logs/2023-10-07 02-20-56.txt @@ -0,0 +1,246 @@ +02:20:56.133: Using EGL/X11 +02:20:56.133: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +02:20:56.133: CPU Speed: 4093.179MHz +02:20:56.134: Physical Cores: 8, Logical Cores: 16 +02:20:56.134: Physical Memory: 15917MB Total, 4056MB Free +02:20:56.134: Kernel Version: Linux 6.5.5-zen1-1-zen +02:20:56.134: Distribution: "Arch Linux" Unknown +02:20:56.134: Desktop Environment: +02:20:56.134: Session Type: x11 +02:20:56.134: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +02:20:56.135: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +02:20:56.135: Portable mode: false +02:20:56.175: OBS 29.1.3-1 (linux) +02:20:56.175: --------------------------------- +02:20:56.176: --------------------------------- +02:20:56.176: audio settings reset: +02:20:56.176: samples per sec: 48000 +02:20:56.176: speakers: 2 +02:20:56.176: max buffering: 960 milliseconds +02:20:56.176: buffering type: dynamically increasing +02:20:56.182: --------------------------------- +02:20:56.182: Initializing OpenGL... +02:20:56.235: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +02:20:56.235: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +02:20:56.265: --------------------------------- +02:20:56.265: video settings reset: +02:20:56.265: base resolution: 1920x1080 +02:20:56.265: output resolution: 1920x1080 +02:20:56.265: downscale filter: Bicubic +02:20:56.265: fps: 30000/1001 +02:20:56.265: format: NV12 +02:20:56.265: YUV mode: Rec. 709/Partial +02:20:56.265: NV12 texture support not available +02:20:56.265: P010 texture support not available +02:20:56.267: Audio monitoring device: +02:20:56.267: name: Default +02:20:56.267: id: default +02:20:56.267: --------------------------------- +02:20:56.276: Failed to load 'en-US' text for module: 'decklink-captions.so' +02:20:56.285: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +02:20:56.296: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +02:20:56.296: Failed to initialize module 'decklink.so' +02:20:56.518: [pipewire] No captures available +02:20:56.552: [obs-browser]: Version 2.21.1 +02:20:56.552: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +02:20:56.668: VAAPI: Failed to initialize display in vaapi_device_h264_supported +02:20:56.668: FFmpeg VAAPI H264 encoding not supported +02:20:56.668: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +02:20:56.668: FFmpeg VAAPI HEVC encoding not supported +02:20:56.728: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +02:20:56.728: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +02:20:56.728: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +02:20:56.734: [obs-websocket] [obs_module_load] Module loaded. +02:20:56.767: --------------------------------- +02:20:56.767: Loaded Modules: +02:20:56.767: text-freetype2.so +02:20:56.767: rtmp-services.so +02:20:56.767: obs-x264.so +02:20:56.767: obs-websocket.so +02:20:56.767: obs-vst.so +02:20:56.767: obs-transitions.so +02:20:56.767: obs-outputs.so +02:20:56.767: obs-filters.so +02:20:56.767: obs-ffmpeg.so +02:20:56.767: obs-browser.so +02:20:56.767: linux-v4l2.so +02:20:56.767: linux-pulseaudio.so +02:20:56.767: linux-pipewire.so +02:20:56.767: linux-jack.so +02:20:56.767: linux-capture.so +02:20:56.768: linux-alsa.so +02:20:56.768: image-source.so +02:20:56.768: frontend-tools.so +02:20:56.768: decklink-output-ui.so +02:20:56.768: decklink-captions.so +02:20:56.768: --------------------------------- +02:20:56.768: ==== Startup complete =============================================== +02:20:56.816: All scene data cleared +02:20:56.817: ------------------------------------------------ +02:20:56.821: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +02:20:56.821: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +02:20:56.821: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +02:20:56.821: [Loaded global audio device]: 'Desktop Audio' +02:20:56.821: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +02:20:56.821: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +02:20:56.821: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +02:20:56.821: [Loaded global audio device]: 'Mic/Aux' +02:20:56.822: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +02:20:56.822: pulse-input: An error occurred while getting the source info! +02:20:56.822: [Loaded global audio device]: 'HDMI Capture' +02:20:56.822: v4l2-input: Start capture from /dev/video0 +02:20:56.823: v4l2-input: Unable to set input 0 +02:20:56.823: v4l2-input: Initialization failed, errno: Device or resource busy +02:20:56.823: xshm-input: Geometry 3840x2160 @ 0,0 +02:20:56.830: v4l2-input: Start capture from /dev/video0 +02:20:56.830: v4l2-input: Unable to set input 0 +02:20:56.830: v4l2-input: Initialization failed, errno: Device or resource busy +02:20:56.993: v4l2-input: Start capture from /dev/video0 +02:20:56.993: v4l2-input: Unable to set input 0 +02:20:56.993: v4l2-input: Initialization failed, errno: Device or resource busy +02:20:56.994: xshm-input: Geometry 3840x2160 @ 0,0 +02:20:56.997: v4l2-input: Start capture from /dev/video4 +02:20:56.997: v4l2-input: Unable to open device +02:20:56.997: v4l2-input: Initialization failed, errno: No such file or directory +02:20:56.997: xshm-input: Geometry 2560x1440 @ 3840,0 +02:20:57.000: Source ID 'pipewire-desktop-capture-source' not found +02:20:57.000: Failed to create source 'Screen Capture (PipeWire)'! +02:20:57.002: Switched to scene 'screen' +02:20:57.002: ------------------------------------------------ +02:20:57.002: Loaded scenes: +02:20:57.002: - scene 'Screen with camera': +02:20:57.002: - source: 'Screen Capture' (xshm_input) +02:20:57.002: - source: 'Camera Capture' (v4l2_input) +02:20:57.002: - source: 'border' (image_source) +02:20:57.002: - scene 'game with camera': +02:20:57.002: - source: 'Camera Capture' (v4l2_input) +02:20:57.002: - source: 'border' (image_source) +02:20:57.002: - source: 'capture acrd' (v4l2_input) +02:20:57.002: - scene 'game': +02:20:57.002: - source: 'Video Capture Device (V4L2)' (v4l2_input) +02:20:57.002: - scene 'screen': +02:20:57.002: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +02:20:57.002: - source: 'Screen Capture (XSHM)' (xshm_input) +02:20:57.002: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +02:20:57.002: - scene 'camera': +02:20:57.002: - source: 'Camera Capture' (v4l2_input) +02:20:57.002: - scene 'Camera with scope': +02:20:57.002: - source: 'Camera Capture' (v4l2_input) +02:20:57.002: - source: 'border' (image_source) +02:20:57.002: - source: 'scope caputre' (v4l2_input) +02:20:57.002: - scene 'game with screen': +02:20:57.002: - source: 'Video Capture Device (V4L2)' (v4l2_input) +02:20:57.002: - source: 'Screen Capture (XSHM)' (xshm_input) +02:20:57.002: ------------------------------------------------ +02:20:57.392: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +02:20:57.392: +02:20:58.027: NV12 texture support not available +02:20:58.027: P010 texture support not available +02:20:58.031: Virtual camera started +02:20:58.044: ==== Virtual Camera Start ========================================== +02:20:58.049: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +03:14:17.414: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Desktop Audio) +03:14:17.414: +03:59:32.649: v4l2-input: Device /dev/video0 disconnected +03:59:32.649: v4l2-input: Device /dev/video0 disconnected +03:59:32.649: v4l2-input: Device /dev/video0 disconnected +03:59:33.312: v4l2-input: Device /dev/video0 reconnected +03:59:33.312: v4l2-input: Start capture from /dev/video0 +03:59:33.324: v4l2-input: Input: 0 +03:59:33.357: v4l2-input: Resolution: 1920x1080 +03:59:33.357: v4l2-input: Pixelformat: YU12 +03:59:33.357: v4l2-input: Linesize: 1920 Bytes +03:59:33.357: v4l2-input: Framerate: 30.00 fps +03:59:33.359: v4l2-input: Device /dev/video0 reconnected +03:59:33.359: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +03:59:33.359: v4l2-input: Start capture from /dev/video0 +03:59:33.380: v4l2-input: Unable to set input 0 +03:59:33.380: v4l2-input: Initialization failed, errno: Device or resource busy +03:59:33.380: v4l2-input: Device /dev/video0 reconnected +03:59:33.380: v4l2-input: Start capture from /dev/video0 +03:59:33.404: v4l2-input: Unable to set input 0 +03:59:33.404: v4l2-input: Initialization failed, errno: Device or resource busy +04:08:36.486: v4l2-input: /dev/video0: failed to enqueue buffer +04:08:36.486: v4l2-input: /dev/video0: Stopped capture after 16292 frames +04:08:36.486: v4l2-helpers: unable to stop stream +04:08:36.488: v4l2-input: Device /dev/video0 disconnected +04:08:36.491: v4l2-input: Device /dev/video0 disconnected +04:08:36.491: v4l2-input: Device /dev/video0 disconnected +04:15:04.898: ==== Shutting down ================================================== +04:15:04.898: Output 'virtualcam_output': stopping +04:15:04.898: Output 'virtualcam_output': Total frames output: 205199 +04:15:04.898: Output 'virtualcam_output': Total drawn frames: 204753 (205200 attempted) +04:15:04.898: Output 'virtualcam_output': Number of lagged frames due to rendering lag/stalls: 447 (0.2%) +04:15:04.898: ==== Virtual Camera Stop =========================================== +04:15:04.899: Virtual camera stopped +04:15:04.923: pulse-input: Stopped recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' +04:15:04.923: pulse-input: Got 273917 packets with 328700400 frames +04:15:04.923: pulse-input: Stopped recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +04:15:04.923: pulse-input: Got 273917 packets with 328700400 frames +04:15:04.946: All scene data cleared +04:15:04.946: ------------------------------------------------ +04:15:05.031: [obs-websocket] [obs_module_unload] Shutting down... +04:15:05.031: [obs-websocket] [obs_module_unload] Finished shutting down. +04:15:05.037: [Scripting] Total detached callbacks: 0 +04:15:05.037: Freeing OBS context data +04:15:05.050: == Profiler Results ============================= +04:15:05.050: run_program_init: 1005.96 ms +04:15:05.050: ┣OBSApp::AppInit: 7.5 ms +04:15:05.050: ┃ ┗OBSApp::InitLocale: 2.768 ms +04:15:05.050: ┗OBSApp::OBSInit: 937.322 ms +04:15:05.050: ┣obs_startup: 1.85 ms +04:15:05.050: ┗OBSBasic::OBSInit: 894.237 ms +04:15:05.050: ┣OBSBasic::InitBasicConfig: 0.094 ms +04:15:05.050: ┣OBSBasic::ResetAudio: 0.21 ms +04:15:05.050: ┣OBSBasic::ResetVideo: 90.661 ms +04:15:05.050: ┣OBSBasic::InitOBSCallbacks: 0.003 ms +04:15:05.050: ┣OBSBasic::InitHotkeys: 0.019 ms +04:15:05.050: ┣obs_load_all_modules2: 500.381 ms +04:15:05.050: ┃ ┣obs_init_module(decklink-captions.so): 0 ms +04:15:05.050: ┃ ┣obs_init_module(decklink-output-ui.so): 0 ms +04:15:05.050: ┃ ┣obs_init_module(decklink.so): 0.203 ms +04:15:05.050: ┃ ┣obs_init_module(frontend-tools.so): 62.718 ms +04:15:05.050: ┃ ┣obs_init_module(image-source.so): 0.006 ms +04:15:05.050: ┃ ┣obs_init_module(linux-alsa.so): 0.004 ms +04:15:05.050: ┃ ┣obs_init_module(linux-capture.so): 0.466 ms +04:15:05.050: ┃ ┣obs_init_module(linux-jack.so): 0.002 ms +04:15:05.050: ┃ ┣obs_init_module(linux-pipewire.so): 0.664 ms +04:15:05.050: ┃ ┣obs_init_module(linux-pulseaudio.so): 0.003 ms +04:15:05.050: ┃ ┣obs_init_module(linux-v4l2.so): 0.168 ms +04:15:05.050: ┃ ┣obs_init_module(obs-browser.so): 0.305 ms +04:15:05.050: ┃ ┣obs_init_module(obs-ffmpeg.so): 96.794 ms +04:15:05.050: ┃ ┃ ┗nvenc_check: 1.365 ms +04:15:05.050: ┃ ┣obs_init_module(obs-filters.so): 0.029 ms +04:15:05.050: ┃ ┣obs_init_module(obs-outputs.so): 0.003 ms +04:15:05.050: ┃ ┣obs_init_module(obs-transitions.so): 0.008 ms +04:15:05.050: ┃ ┣obs_init_module(obs-vst.so): 0.003 ms +04:15:05.050: ┃ ┣obs_init_module(obs-websocket.so): 6.285 ms +04:15:05.050: ┃ ┣obs_init_module(obs-x264.so): 0.003 ms +04:15:05.050: ┃ ┣obs_init_module(rtmp-services.so): 1.35 ms +04:15:05.050: ┃ ┗obs_init_module(text-freetype2.so): 0.018 ms +04:15:05.050: ┣OBSBasic::InitService: 1.182 ms +04:15:05.050: ┣OBSBasic::ResetOutputs: 0.153 ms +04:15:05.050: ┣OBSBasic::CreateHotkeys: 0.016 ms +04:15:05.050: ┣OBSBasic::InitPrimitives: 0.056 ms +04:15:05.050: ┗OBSBasic::Load: 235.239 ms +04:15:05.050: obs_hotkey_thread(25 ms): min=0.053 ms, median=8.234 ms, max=276.01 ms, 99th percentile=10.939 ms, 99.8431% below 25 ms +04:15:05.050: audio_thread(Audio): min=0.008 ms, median=0.053 ms, max=2.639 ms, 99th percentile=0.138 ms +04:15:05.050: obs_graphics_thread(33.3667 ms): min=0.034 ms, median=23.511 ms, max=379.389 ms, 99th percentile=31.596 ms, 99.5742% below 33.367 ms +04:15:05.050: ┣tick_sources: min=0 ms, median=22.606 ms, max=377.9 ms, 99th percentile=30.619 ms +04:15:05.050: ┣output_frame: min=0.03 ms, median=0.858 ms, max=8.169 ms, 99th percentile=1.379 ms +04:15:05.050: ┃ ┣gs_context(video->graphics): min=0.029 ms, median=0.22 ms, max=8.168 ms, 99th percentile=0.344 ms, 1.99975 calls per parent call +04:15:05.050: ┃ ┃ ┣render_video: min=0.003 ms, median=0.113 ms, max=2.843 ms, 99th percentile=0.192 ms +04:15:05.050: ┃ ┃ ┃ ┣render_main_texture: min=0.002 ms, median=0.085 ms, max=2.838 ms, 99th percentile=0.178 ms +04:15:05.050: ┃ ┃ ┃ ┣render_convert_texture: min=0.017 ms, median=0.031 ms, max=1.252 ms, 99th percentile=0.054 ms, 0.499937 calls per parent call +04:15:05.050: ┃ ┃ ┃ ┗stage_output_texture: min=0.008 ms, median=0.015 ms, max=0.626 ms, 99th percentile=0.028 ms, 0.499937 calls per parent call +04:15:05.050: ┃ ┃ ┣gs_flush: min=0.001 ms, median=0.003 ms, max=0.562 ms, 99th percentile=0.011 ms +04:15:05.050: ┃ ┃ ┗download_frame: min=0 ms, median=0.039 ms, max=0.7 ms, 99th percentile=0.069 ms, 0.499937 calls per parent call +04:15:05.050: ┃ ┗output_video_data: min=0.226 ms, median=0.412 ms, max=3.423 ms, 99th percentile=0.821 ms +04:15:05.050: ┗render_displays: min=0.001 ms, median=0.005 ms, max=2.421 ms, 99th percentile=0.013 ms +04:15:05.050: video_thread(video): min=0.067 ms, median=3.221 ms, max=54.079 ms, 99th percentile=4.454 ms +04:15:05.050: ================================================= +04:15:05.050: == Profiler Time Between Calls ================== +04:15:05.050: obs_hotkey_thread(25 ms): min=25.071 ms, median=33.303 ms, max=301.075 ms, 6.92783% within ±2% of 25 ms (0% lower, 93.0722% higher) +04:15:05.050: obs_graphics_thread(33.3667 ms): min=0.741 ms, median=33.367 ms, max=379.397 ms, 99.0132% within ±2% of 33.367 ms (0.639145% lower, 0.347648% higher) +04:15:05.050: ================================================= +04:15:05.123: Number of memory leaks: 0 diff --git a/.config/obs-studio/logs/2023-10-07 04-18-28.txt b/.config/obs-studio/logs/2023-10-07 04-18-28.txt new file mode 100644 index 0000000..228bd56 --- /dev/null +++ b/.config/obs-studio/logs/2023-10-07 04-18-28.txt @@ -0,0 +1,271 @@ +04:18:28.517: Using EGL/X11 +04:18:28.517: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +04:18:28.517: CPU Speed: 4191.371MHz +04:18:28.517: Physical Cores: 8, Logical Cores: 16 +04:18:28.517: Physical Memory: 15917MB Total, 4563MB Free +04:18:28.517: Kernel Version: Linux 6.5.5-zen1-1-zen +04:18:28.517: Distribution: "Arch Linux" Unknown +04:18:28.517: Desktop Environment: +04:18:28.517: Session Type: x11 +04:18:28.517: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +04:18:28.518: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +04:18:28.518: Portable mode: false +04:18:28.545: OBS 29.1.3-1 (linux) +04:18:28.545: --------------------------------- +04:18:28.546: --------------------------------- +04:18:28.546: audio settings reset: +04:18:28.546: samples per sec: 48000 +04:18:28.546: speakers: 2 +04:18:28.546: max buffering: 960 milliseconds +04:18:28.546: buffering type: dynamically increasing +04:18:28.550: --------------------------------- +04:18:28.550: Initializing OpenGL... +04:18:28.605: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +04:18:28.605: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +04:18:28.631: --------------------------------- +04:18:28.631: video settings reset: +04:18:28.631: base resolution: 1920x1080 +04:18:28.631: output resolution: 1920x1080 +04:18:28.631: downscale filter: Bicubic +04:18:28.631: fps: 30000/1001 +04:18:28.631: format: NV12 +04:18:28.631: YUV mode: Rec. 709/Partial +04:18:28.632: NV12 texture support not available +04:18:28.632: P010 texture support not available +04:18:28.633: Audio monitoring device: +04:18:28.633: name: Default +04:18:28.633: id: default +04:18:28.633: --------------------------------- +04:18:28.642: Failed to load 'en-US' text for module: 'decklink-captions.so' +04:18:28.652: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +04:18:28.658: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +04:18:28.658: Failed to initialize module 'decklink.so' +04:18:28.858: [pipewire] No captures available +04:18:28.889: [obs-browser]: Version 2.21.1 +04:18:28.890: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +04:18:29.005: VAAPI: Failed to initialize display in vaapi_device_h264_supported +04:18:29.005: FFmpeg VAAPI H264 encoding not supported +04:18:29.005: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +04:18:29.005: FFmpeg VAAPI HEVC encoding not supported +04:18:29.070: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +04:18:29.070: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +04:18:29.070: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +04:18:29.077: [obs-websocket] [obs_module_load] Module loaded. +04:18:29.117: --------------------------------- +04:18:29.117: Loaded Modules: +04:18:29.117: text-freetype2.so +04:18:29.117: rtmp-services.so +04:18:29.117: obs-x264.so +04:18:29.117: obs-websocket.so +04:18:29.117: obs-vst.so +04:18:29.117: obs-transitions.so +04:18:29.117: obs-outputs.so +04:18:29.117: obs-filters.so +04:18:29.117: obs-ffmpeg.so +04:18:29.117: obs-browser.so +04:18:29.117: linux-v4l2.so +04:18:29.117: linux-pulseaudio.so +04:18:29.117: linux-pipewire.so +04:18:29.117: linux-jack.so +04:18:29.117: linux-capture.so +04:18:29.117: linux-alsa.so +04:18:29.117: image-source.so +04:18:29.117: frontend-tools.so +04:18:29.117: decklink-output-ui.so +04:18:29.117: decklink-captions.so +04:18:29.117: --------------------------------- +04:18:29.118: ==== Startup complete =============================================== +04:18:29.143: All scene data cleared +04:18:29.143: ------------------------------------------------ +04:18:29.148: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +04:18:29.148: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +04:18:29.148: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +04:18:29.148: [Loaded global audio device]: 'Desktop Audio' +04:18:29.148: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +04:18:29.148: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +04:18:29.148: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +04:18:29.148: [Loaded global audio device]: 'Mic/Aux' +04:18:29.149: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +04:18:29.149: pulse-input: An error occurred while getting the source info! +04:18:29.149: [Loaded global audio device]: 'HDMI Capture' +04:18:29.149: v4l2-input: Start capture from /dev/video0 +04:18:29.149: v4l2-input: Unable to open device +04:18:29.149: v4l2-input: Initialization failed, errno: No such file or directory +04:18:29.150: xshm-input: Geometry 3840x2160 @ 0,0 +04:18:29.157: v4l2-input: Start capture from /dev/video0 +04:18:29.157: v4l2-input: Unable to open device +04:18:29.157: v4l2-input: Initialization failed, errno: No such file or directory +04:18:29.338: v4l2-input: Start capture from /dev/video0 +04:18:29.338: v4l2-input: Unable to open device +04:18:29.338: v4l2-input: Initialization failed, errno: No such file or directory +04:18:29.338: xshm-input: Geometry 3840x2160 @ 0,0 +04:18:29.342: v4l2-input: Start capture from /dev/video4 +04:18:29.342: v4l2-input: Unable to open device +04:18:29.342: v4l2-input: Initialization failed, errno: No such file or directory +04:18:29.342: xshm-input: Geometry 2560x1440 @ 3840,0 +04:18:29.345: Source ID 'pipewire-desktop-capture-source' not found +04:18:29.345: Failed to create source 'Screen Capture (PipeWire)'! +04:18:29.346: Switched to scene 'screen' +04:18:29.346: ------------------------------------------------ +04:18:29.346: Loaded scenes: +04:18:29.346: - scene 'Screen with camera': +04:18:29.346: - source: 'Screen Capture' (xshm_input) +04:18:29.346: - source: 'Camera Capture' (v4l2_input) +04:18:29.346: - source: 'border' (image_source) +04:18:29.346: - scene 'game with camera': +04:18:29.346: - source: 'Camera Capture' (v4l2_input) +04:18:29.346: - source: 'border' (image_source) +04:18:29.346: - source: 'capture acrd' (v4l2_input) +04:18:29.346: - scene 'game': +04:18:29.346: - source: 'Video Capture Device (V4L2)' (v4l2_input) +04:18:29.346: - scene 'screen': +04:18:29.346: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +04:18:29.346: - source: 'Screen Capture (XSHM)' (xshm_input) +04:18:29.346: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +04:18:29.346: - scene 'camera': +04:18:29.346: - source: 'Camera Capture' (v4l2_input) +04:18:29.346: - scene 'Camera with scope': +04:18:29.346: - source: 'Camera Capture' (v4l2_input) +04:18:29.347: - source: 'border' (image_source) +04:18:29.347: - source: 'scope caputre' (v4l2_input) +04:18:29.347: - scene 'game with screen': +04:18:29.347: - source: 'Video Capture Device (V4L2)' (v4l2_input) +04:18:29.347: - source: 'Screen Capture (XSHM)' (xshm_input) +04:18:29.347: ------------------------------------------------ +04:18:29.698: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +04:18:29.698: +04:18:30.630: --------------------------------- +04:18:30.630: [x264 encoder: 'simple_video_recording'] preset: veryfast +04:18:30.630: [x264 encoder: 'simple_video_recording'] profile: high +04:18:30.631: [x264 encoder: 'simple_video_recording'] settings: +04:18:30.631: rate_control: CRF +04:18:30.631: bitrate: 0 +04:18:30.631: buffer size: 0 +04:18:30.631: crf: 16 +04:18:30.631: fps_num: 30000 +04:18:30.631: fps_den: 1001 +04:18:30.631: width: 1920 +04:18:30.631: height: 1080 +04:18:30.631: keyint: 250 +04:18:30.631: +04:18:30.669: --------------------------------- +04:18:30.669: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +04:18:30.669: +04:18:30.669: --------------------------------- +04:18:30.669: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +04:18:30.669: +04:18:30.669: --------------------------------- +04:18:30.669: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +04:18:30.669: +04:18:30.669: --------------------------------- +04:18:30.669: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +04:18:30.669: +04:18:30.683: ==== Recording Start =============================================== +04:18:30.683: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-07 04-18-30.mkv'... +04:18:30.692: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +04:18:33.630: NV12 texture support not available +04:18:33.630: P010 texture support not available +04:18:33.633: Virtual camera started +04:18:33.634: ==== Virtual Camera Start ========================================== +04:18:34.321: [ffmpeg muxer: 'simple_file_output'] Output of file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-07 04-18-30.mkv' stopped +04:18:34.321: Output 'simple_file_output': stopping +04:18:34.321: Output 'simple_file_output': Total frames output: 69 +04:18:34.321: Output 'simple_file_output': Total drawn frames: 109 +04:18:34.322: ==== Recording Stop ================================================ +06:17:28.599: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +06:17:28.599: +21:50:34.957: User added source 'asd' (text_ft2_source_v2) to scene 'screen' +23:09:46.169: User Removed source 'asd' (text_ft2_source_v2) from scene 'screen' +23:52:39.464: User added source 'Text (FreeType 2)' (text_ft2_source_v2) to scene 'screen' +23:55:25.524: User Removed source 'Text (FreeType 2)' (text_ft2_source_v2) from scene 'screen' +05:49:43.139: ==== Shutting down ================================================== +05:49:43.140: Output 'virtualcam_output': stopping +05:49:43.140: Output 'virtualcam_output': Total frames output: 2753331 +05:49:43.140: Output 'virtualcam_output': Total drawn frames: 2750349 (2753332 attempted) +05:49:43.140: Output 'virtualcam_output': Number of lagged frames due to rendering lag/stalls: 2983 (0.1%) +05:49:43.144: ==== Virtual Camera Stop =========================================== +05:49:43.148: Virtual camera stopped +05:49:43.177: pulse-input: Stopped recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' +05:49:43.177: pulse-input: Got 3674884 packets with 4409860800 frames +05:49:43.177: pulse-input: Stopped recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +05:49:43.177: pulse-input: Got 3674898 packets with 4409877600 frames +05:49:43.236: All scene data cleared +05:49:43.236: ------------------------------------------------ +05:49:43.429: [obs-websocket] [obs_module_unload] Shutting down... +05:49:43.429: [obs-websocket] [obs_module_unload] Finished shutting down. +05:49:43.460: [Scripting] Total detached callbacks: 0 +05:49:43.461: Freeing OBS context data +05:49:43.513: == Profiler Results ============================= +05:49:43.513: run_program_init: 935.023 ms +05:49:43.513: ┣OBSApp::AppInit: 4.456 ms +05:49:43.513: ┃ ┗OBSApp::InitLocale: 0.701 ms +05:49:43.513: ┗OBSApp::OBSInit: 895.964 ms +05:49:43.513: ┣obs_startup: 1.332 ms +05:49:43.513: ┗OBSBasic::OBSInit: 867.166 ms +05:49:43.513: ┣OBSBasic::InitBasicConfig: 0.103 ms +05:49:43.513: ┣OBSBasic::ResetAudio: 0.228 ms +05:49:43.513: ┣OBSBasic::ResetVideo: 87.407 ms +05:49:43.513: ┣OBSBasic::InitOBSCallbacks: 0.005 ms +05:49:43.513: ┣OBSBasic::InitHotkeys: 0.024 ms +05:49:43.513: ┣obs_load_all_modules2: 483.872 ms +05:49:43.513: ┃ ┣obs_init_module(decklink-captions.so): 0 ms +05:49:43.513: ┃ ┣obs_init_module(decklink-output-ui.so): 0 ms +05:49:43.513: ┃ ┣obs_init_module(decklink.so): 0.093 ms +05:49:43.513: ┃ ┣obs_init_module(frontend-tools.so): 67.188 ms +05:49:43.513: ┃ ┣obs_init_module(image-source.so): 0.01 ms +05:49:43.513: ┃ ┣obs_init_module(linux-alsa.so): 0.003 ms +05:49:43.513: ┃ ┣obs_init_module(linux-capture.so): 0.424 ms +05:49:43.513: ┃ ┣obs_init_module(linux-jack.so): 0.003 ms +05:49:43.513: ┃ ┣obs_init_module(linux-pipewire.so): 0.779 ms +05:49:43.513: ┃ ┣obs_init_module(linux-pulseaudio.so): 0.003 ms +05:49:43.513: ┃ ┣obs_init_module(linux-v4l2.so): 0.139 ms +05:49:43.513: ┃ ┣obs_init_module(obs-browser.so): 0.048 ms +05:49:43.513: ┃ ┣obs_init_module(obs-ffmpeg.so): 94.315 ms +05:49:43.513: ┃ ┃ ┗nvenc_check: 1.444 ms +05:49:43.513: ┃ ┣obs_init_module(obs-filters.so): 0.024 ms +05:49:43.513: ┃ ┣obs_init_module(obs-outputs.so): 0.007 ms +05:49:43.513: ┃ ┣obs_init_module(obs-transitions.so): 0.011 ms +05:49:43.513: ┃ ┣obs_init_module(obs-vst.so): 0.006 ms +05:49:43.513: ┃ ┣obs_init_module(obs-websocket.so): 6.983 ms +05:49:43.513: ┃ ┣obs_init_module(obs-x264.so): 0.003 ms +05:49:43.513: ┃ ┣obs_init_module(rtmp-services.so): 2.039 ms +05:49:43.513: ┃ ┗obs_init_module(text-freetype2.so): 0.014 ms +05:49:43.513: ┣OBSBasic::InitService: 0.773 ms +05:49:43.513: ┣OBSBasic::ResetOutputs: 0.163 ms +05:49:43.513: ┣OBSBasic::CreateHotkeys: 0.018 ms +05:49:43.513: ┣OBSBasic::InitPrimitives: 0.095 ms +05:49:43.513: ┗OBSBasic::Load: 230.312 ms +05:49:43.513: obs_hotkey_thread(25 ms): min=0.051 ms, median=0.153 ms, max=436.863 ms, 99th percentile=9.899 ms, 99.9217% below 25 ms +05:49:43.513: audio_thread(Audio): min=0.01 ms, median=0.043 ms, max=15.911 ms, 99th percentile=0.119 ms +05:49:43.513: ┗receive_audio: min=0.006 ms, median=0.199 ms, max=14.79 ms, 99th percentile=0.551 ms, 0.000158825 calls per parent call +05:49:43.513: ┣buffer_audio: min=0 ms, median=0.001 ms, max=0.038 ms, 99th percentile=0.009 ms +05:49:43.513: ┗do_encode: min=0.048 ms, median=0.191 ms, max=14.788 ms, 99th percentile=0.438 ms, 1.05994 calls per parent call +05:49:43.513: ┣encode(simple_opus_recording1): min=0.151 ms, median=0.21 ms, max=0.592 ms, 99th percentile=0.462 ms, 0.251034 calls per parent call +05:49:43.513: ┣send_packet: min=0 ms, median=0.001 ms, max=14.732 ms, 99th percentile=0.014 ms +05:49:43.513: ┣encode(simple_opus_recording2): min=0.047 ms, median=0.055 ms, max=0.149 ms, 99th percentile=0.138 ms, 0.251034 calls per parent call +05:49:43.513: ┣encode(simple_opus_recording3): min=0.145 ms, median=0.162 ms, max=0.426 ms, 99th percentile=0.424 ms, 0.251034 calls per parent call +05:49:43.513: ┗encode(simple_opus_recording0): min=0.151 ms, median=0.229 ms, max=0.486 ms, 99th percentile=0.442 ms, 0.246897 calls per parent call +05:49:43.513: obs_graphics_thread(33.3667 ms): min=0.108 ms, median=11.853 ms, max=464.429 ms, 99th percentile=29.749 ms, 99.7409% below 33.367 ms +05:49:43.513: ┣tick_sources: min=0 ms, median=11.031 ms, max=463.682 ms, 99th percentile=28.722 ms +05:49:43.513: ┣output_frame: min=0.035 ms, median=0.783 ms, max=14.374 ms, 99th percentile=1.271 ms +05:49:43.513: ┃ ┣gs_context(video->graphics): min=0.035 ms, median=0.212 ms, max=12.573 ms, 99th percentile=0.315 ms, 1.99994 calls per parent call +05:49:43.514: ┃ ┃ ┣render_video: min=0.003 ms, median=0.109 ms, max=12.497 ms, 99th percentile=0.175 ms +05:49:43.514: ┃ ┃ ┃ ┣render_main_texture: min=0.002 ms, median=0.081 ms, max=12.493 ms, 99th percentile=0.163 ms +05:49:43.514: ┃ ┃ ┃ ┣render_convert_texture: min=0.011 ms, median=0.029 ms, max=1.355 ms, 99th percentile=0.047 ms, 0.500006 calls per parent call +05:49:43.514: ┃ ┃ ┃ ┗stage_output_texture: min=0.006 ms, median=0.014 ms, max=0.707 ms, 99th percentile=0.025 ms, 0.500006 calls per parent call +05:49:43.514: ┃ ┃ ┣gs_flush: min=0.001 ms, median=0.003 ms, max=1.721 ms, 99th percentile=0.011 ms +05:49:43.514: ┃ ┃ ┗download_frame: min=0 ms, median=0.036 ms, max=0.939 ms, 99th percentile=0.062 ms, 0.500006 calls per parent call +05:49:43.514: ┃ ┗output_video_data: min=0.223 ms, median=0.354 ms, max=12.586 ms, 99th percentile=0.729 ms +05:49:43.514: ┗render_displays: min=0.002 ms, median=0.006 ms, max=106.845 ms, 99th percentile=0.016 ms +05:49:43.514: video_thread(video): min=0 ms, median=1.393 ms, max=3.204 ms, 99th percentile=2.616 ms +05:49:43.514: ┗receive_video: min=0.927 ms, median=1.392 ms, max=3.202 ms, 99th percentile=2.615 ms +05:49:43.514: ┗do_encode: min=0.926 ms, median=1.392 ms, max=3.201 ms, 99th percentile=2.615 ms +05:49:43.514: ┣encode(simple_video_recording): min=0.922 ms, median=1.379 ms, max=2.602 ms, 99th percentile=2.362 ms +05:49:43.514: ┗send_packet: min=0.002 ms, median=0.006 ms, max=1.435 ms, 99th percentile=1.435 ms, 0.654206 calls per parent call +05:49:43.514: video_thread(video): min=1.828 ms, median=3.156 ms, max=63.308 ms, 99th percentile=4.071 ms +05:49:43.514: ================================================= +05:49:43.514: == Profiler Time Between Calls ================== +05:49:43.514: obs_hotkey_thread(25 ms): min=25.07 ms, median=25.221 ms, max=461.989 ms, 53.4795% within ±2% of 25 ms (0% lower, 46.5205% higher) +05:49:43.514: obs_graphics_thread(33.3667 ms): min=12.527 ms, median=33.367 ms, max=464.434 ms, 99.3836% within ±2% of 33.367 ms (0.384075% lower, 0.232285% higher) +05:49:43.514: ================================================= +05:49:43.634: Number of memory leaks: 0 diff --git a/.config/obs-studio/logs/2023-10-08 19-06-12.txt b/.config/obs-studio/logs/2023-10-08 19-06-12.txt new file mode 100644 index 0000000..bf064b4 --- /dev/null +++ b/.config/obs-studio/logs/2023-10-08 19-06-12.txt @@ -0,0 +1,206 @@ +19:06:12.888: Using EGL/X11 +19:06:12.888: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +19:06:12.888: CPU Speed: 1947.710MHz +19:06:12.889: Physical Cores: 8, Logical Cores: 16 +19:06:12.889: Physical Memory: 15917MB Total, 6363MB Free +19:06:12.889: Kernel Version: Linux 6.5.5-zen1-1-zen +19:06:12.889: Distribution: "Arch Linux" Unknown +19:06:12.889: Desktop Environment: +19:06:12.889: Session Type: x11 +19:06:12.889: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +19:06:12.890: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +19:06:12.890: Portable mode: false +19:06:12.928: OBS 29.1.3-1 (linux) +19:06:12.928: --------------------------------- +19:06:12.929: --------------------------------- +19:06:12.929: audio settings reset: +19:06:12.929: samples per sec: 48000 +19:06:12.929: speakers: 2 +19:06:12.929: max buffering: 960 milliseconds +19:06:12.929: buffering type: dynamically increasing +19:06:12.935: --------------------------------- +19:06:12.935: Initializing OpenGL... +19:06:12.985: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +19:06:12.985: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +19:06:13.014: --------------------------------- +19:06:13.014: video settings reset: +19:06:13.014: base resolution: 1920x1080 +19:06:13.014: output resolution: 1920x1080 +19:06:13.014: downscale filter: Bicubic +19:06:13.014: fps: 30000/1001 +19:06:13.014: format: NV12 +19:06:13.014: YUV mode: Rec. 709/Partial +19:06:13.014: NV12 texture support not available +19:06:13.014: P010 texture support not available +19:06:13.016: Audio monitoring device: +19:06:13.016: name: Default +19:06:13.016: id: default +19:06:13.016: --------------------------------- +19:06:13.024: Failed to load 'en-US' text for module: 'decklink-captions.so' +19:06:13.033: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +19:06:13.041: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +19:06:13.041: Failed to initialize module 'decklink.so' +19:06:13.254: [pipewire] No captures available +19:06:13.286: [obs-browser]: Version 2.21.1 +19:06:13.286: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +19:06:13.402: VAAPI: Failed to initialize display in vaapi_device_h264_supported +19:06:13.402: FFmpeg VAAPI H264 encoding not supported +19:06:13.403: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +19:06:13.403: FFmpeg VAAPI HEVC encoding not supported +19:06:13.458: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +19:06:13.459: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +19:06:13.459: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +19:06:13.463: [obs-websocket] [obs_module_load] Module loaded. +19:06:13.491: --------------------------------- +19:06:13.491: Loaded Modules: +19:06:13.491: text-freetype2.so +19:06:13.491: rtmp-services.so +19:06:13.491: obs-x264.so +19:06:13.491: obs-websocket.so +19:06:13.491: obs-vst.so +19:06:13.491: obs-transitions.so +19:06:13.491: obs-outputs.so +19:06:13.491: obs-filters.so +19:06:13.491: obs-ffmpeg.so +19:06:13.491: obs-browser.so +19:06:13.491: linux-v4l2.so +19:06:13.491: linux-pulseaudio.so +19:06:13.491: linux-pipewire.so +19:06:13.491: linux-jack.so +19:06:13.491: linux-capture.so +19:06:13.491: linux-alsa.so +19:06:13.491: image-source.so +19:06:13.491: frontend-tools.so +19:06:13.491: decklink-output-ui.so +19:06:13.491: decklink-captions.so +19:06:13.491: --------------------------------- +19:06:13.491: ==== Startup complete =============================================== +19:06:13.527: All scene data cleared +19:06:13.527: ------------------------------------------------ +19:06:13.531: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:06:13.531: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +19:06:13.531: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +19:06:13.531: [Loaded global audio device]: 'Desktop Audio' +19:06:13.532: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:06:13.532: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +19:06:13.532: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +19:06:13.532: [Loaded global audio device]: 'Mic/Aux' +19:06:13.532: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:06:13.538: pulse-input: An error occurred while getting the source info! +19:06:13.538: [Loaded global audio device]: 'HDMI Capture' +19:06:13.539: v4l2-input: Start capture from /dev/video0 +19:06:13.539: v4l2-input: Input: 0 +19:06:13.554: v4l2-input: Resolution: 1920x1080 +19:06:13.554: v4l2-input: Pixelformat: YU12 +19:06:13.554: v4l2-input: Linesize: 1920 Bytes +19:06:13.554: v4l2-input: Framerate: 30.00 fps +19:06:13.556: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +19:06:13.557: xshm-input: Geometry 3840x2160 @ 0,0 +19:06:13.564: v4l2-input: Start capture from /dev/video0 +19:06:13.564: v4l2-input: Unable to set input 0 +19:06:13.564: v4l2-input: Initialization failed, errno: Device or resource busy +19:06:13.730: v4l2-input: /dev/video0: select timed out +19:06:13.730: v4l2-input: /dev/video0: failed to log status +19:06:13.735: v4l2-input: Start capture from /dev/video0 +19:06:13.735: v4l2-input: Unable to set input 0 +19:06:13.735: v4l2-input: Initialization failed, errno: Device or resource busy +19:06:13.736: xshm-input: Geometry 3840x2160 @ 0,0 +19:06:13.739: v4l2-input: Start capture from /dev/video4 +19:06:13.739: v4l2-input: Unable to open device +19:06:13.739: v4l2-input: Initialization failed, errno: No such file or directory +19:06:13.739: xshm-input: Geometry 2560x1440 @ 3840,0 +19:06:13.742: Source ID 'pipewire-desktop-capture-source' not found +19:06:13.742: Failed to create source 'Screen Capture (PipeWire)'! +19:06:13.744: Switched to scene 'screen' +19:06:13.744: ------------------------------------------------ +19:06:13.744: Loaded scenes: +19:06:13.744: - scene 'Screen with camera': +19:06:13.744: - source: 'Screen Capture' (xshm_input) +19:06:13.744: - source: 'Camera Capture' (v4l2_input) +19:06:13.744: - source: 'border' (image_source) +19:06:13.744: - scene 'game with camera': +19:06:13.744: - source: 'Camera Capture' (v4l2_input) +19:06:13.744: - source: 'border' (image_source) +19:06:13.744: - source: 'capture acrd' (v4l2_input) +19:06:13.744: - scene 'game': +19:06:13.744: - source: 'Video Capture Device (V4L2)' (v4l2_input) +19:06:13.744: - scene 'screen': +19:06:13.744: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +19:06:13.744: - source: 'Screen Capture (XSHM)' (xshm_input) +19:06:13.744: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +19:06:13.744: - scene 'camera': +19:06:13.744: - source: 'Camera Capture' (v4l2_input) +19:06:13.744: - scene 'Camera with scope': +19:06:13.744: - source: 'Camera Capture' (v4l2_input) +19:06:13.744: - source: 'border' (image_source) +19:06:13.744: - source: 'scope caputre' (v4l2_input) +19:06:13.744: - scene 'game with screen': +19:06:13.744: - source: 'Video Capture Device (V4L2)' (v4l2_input) +19:06:13.744: - source: 'Screen Capture (XSHM)' (xshm_input) +19:06:13.744: ------------------------------------------------ +19:06:14.081: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +19:06:14.081: +19:06:22.480: --------------------------------- +19:06:22.480: [x264 encoder: 'simple_video_recording'] preset: veryfast +19:06:22.480: [x264 encoder: 'simple_video_recording'] profile: high +19:06:22.482: [x264 encoder: 'simple_video_recording'] settings: +19:06:22.482: rate_control: CRF +19:06:22.482: bitrate: 0 +19:06:22.482: buffer size: 0 +19:06:22.482: crf: 16 +19:06:22.482: fps_num: 30000 +19:06:22.482: fps_den: 1001 +19:06:22.482: width: 1920 +19:06:22.482: height: 1080 +19:06:22.482: keyint: 250 +19:06:22.482: +19:06:22.521: --------------------------------- +19:06:22.521: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +19:06:22.521: +19:06:22.521: --------------------------------- +19:06:22.521: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +19:06:22.521: +19:06:22.521: --------------------------------- +19:06:22.521: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +19:06:22.521: +19:06:22.521: --------------------------------- +19:06:22.521: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +19:06:22.521: +19:06:22.547: ==== Recording Start =============================================== +19:06:22.547: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-08 19-06-22.mkv'... +19:06:22.552: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +19:07:10.640: [ffmpeg muxer: 'simple_file_output'] Output of file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-08 19-06-22.mkv' stopped +19:07:10.640: Output 'simple_file_output': stopping +19:07:10.640: Output 'simple_file_output': Total frames output: 1398 +19:07:10.641: Output 'simple_file_output': Total drawn frames: 1434 (1442 attempted) +19:07:10.641: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 8 (0.6%) +19:07:10.641: ==== Recording Stop ================================================ +19:32:59.777: NV12 texture support not available +19:32:59.778: P010 texture support not available +19:32:59.781: Virtual camera started +19:32:59.782: ==== Virtual Camera Start ========================================== +19:32:59.785: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +20:52:51.415: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +20:52:51.415: +21:14:59.074: v4l2-input: /dev/video0: failed to dequeue buffer +21:14:59.074: v4l2-input: /dev/video0: Stopped capture after 231808 frames +21:14:59.074: v4l2-helpers: unable to stop stream +21:14:59.079: v4l2-input: Device /dev/video0 disconnected +21:14:59.081: v4l2-input: Device /dev/video0 disconnected +21:14:59.081: v4l2-input: Device /dev/video0 disconnected +21:14:59.734: v4l2-input: Device /dev/video0 reconnected +21:14:59.734: v4l2-input: Start capture from /dev/video0 +21:14:59.746: v4l2-input: Input: 0 +21:14:59.782: v4l2-input: Resolution: 1920x1080 +21:14:59.782: v4l2-input: Pixelformat: YU12 +21:14:59.782: v4l2-input: Linesize: 1920 Bytes +21:14:59.827: v4l2-input: Framerate: 30.00 fps +21:14:59.829: v4l2-input: Device /dev/video0 reconnected +21:14:59.829: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +21:14:59.829: v4l2-input: Start capture from /dev/video0 +21:14:59.844: v4l2-input: Unable to set input 0 +21:14:59.844: v4l2-input: Initialization failed, errno: Device or resource busy +21:14:59.844: v4l2-input: Device /dev/video0 reconnected +21:14:59.844: v4l2-input: Start capture from /dev/video0 +21:14:59.847: v4l2-input: Unable to set input 0 +21:14:59.847: v4l2-input: Initialization failed, errno: Device or resource busy diff --git a/.config/obs-studio/logs/2023-10-09 20-20-11.txt b/.config/obs-studio/logs/2023-10-09 20-20-11.txt new file mode 100644 index 0000000..3d329ec --- /dev/null +++ b/.config/obs-studio/logs/2023-10-09 20-20-11.txt @@ -0,0 +1,224 @@ +20:20:11.837: Using EGL/X11 +20:20:11.837: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +20:20:11.837: CPU Speed: 3569.410MHz +20:20:11.838: Physical Cores: 8, Logical Cores: 16 +20:20:11.838: Physical Memory: 15917MB Total, 9350MB Free +20:20:11.838: Kernel Version: Linux 6.5.5-zen1-1-zen +20:20:11.838: Distribution: "Arch Linux" Unknown +20:20:11.838: Desktop Environment: +20:20:11.838: Session Type: x11 +20:20:11.838: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +20:20:11.839: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +20:20:11.839: Portable mode: false +20:20:11.878: OBS 29.1.3-1 (linux) +20:20:11.878: --------------------------------- +20:20:11.878: --------------------------------- +20:20:11.878: audio settings reset: +20:20:11.878: samples per sec: 48000 +20:20:11.878: speakers: 2 +20:20:11.878: max buffering: 960 milliseconds +20:20:11.878: buffering type: dynamically increasing +20:20:11.884: --------------------------------- +20:20:11.884: Initializing OpenGL... +20:20:11.933: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +20:20:11.933: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +20:20:11.963: --------------------------------- +20:20:11.963: video settings reset: +20:20:11.963: base resolution: 1920x1080 +20:20:11.963: output resolution: 1920x1080 +20:20:11.963: downscale filter: Bicubic +20:20:11.963: fps: 30000/1001 +20:20:11.963: format: NV12 +20:20:11.963: YUV mode: Rec. 709/Partial +20:20:11.963: NV12 texture support not available +20:20:11.963: P010 texture support not available +20:20:11.966: Audio monitoring device: +20:20:11.966: name: Default +20:20:11.966: id: default +20:20:11.966: --------------------------------- +20:20:11.974: Failed to load 'en-US' text for module: 'decklink-captions.so' +20:20:11.983: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +20:20:11.992: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +20:20:11.992: Failed to initialize module 'decklink.so' +20:20:12.201: [pipewire] No captures available +20:20:12.235: [obs-browser]: Version 2.21.1 +20:20:12.235: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +20:20:12.352: VAAPI: Failed to initialize display in vaapi_device_h264_supported +20:20:12.352: FFmpeg VAAPI H264 encoding not supported +20:20:12.352: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +20:20:12.352: FFmpeg VAAPI HEVC encoding not supported +20:20:12.409: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +20:20:12.409: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +20:20:12.409: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +20:20:12.414: [obs-websocket] [obs_module_load] Module loaded. +20:20:12.441: --------------------------------- +20:20:12.441: Loaded Modules: +20:20:12.441: text-freetype2.so +20:20:12.441: rtmp-services.so +20:20:12.441: obs-x264.so +20:20:12.441: obs-websocket.so +20:20:12.441: obs-vst.so +20:20:12.441: obs-transitions.so +20:20:12.441: obs-outputs.so +20:20:12.441: obs-filters.so +20:20:12.441: obs-ffmpeg.so +20:20:12.441: obs-browser.so +20:20:12.441: linux-v4l2.so +20:20:12.441: linux-pulseaudio.so +20:20:12.441: linux-pipewire.so +20:20:12.441: linux-jack.so +20:20:12.441: linux-capture.so +20:20:12.441: linux-alsa.so +20:20:12.441: image-source.so +20:20:12.441: frontend-tools.so +20:20:12.441: decklink-output-ui.so +20:20:12.441: decklink-captions.so +20:20:12.441: --------------------------------- +20:20:12.441: ==== Startup complete =============================================== +20:20:12.476: All scene data cleared +20:20:12.476: ------------------------------------------------ +20:20:12.479: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:20:12.480: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +20:20:12.480: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +20:20:12.480: [Loaded global audio device]: 'Desktop Audio' +20:20:12.480: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:20:12.480: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +20:20:12.480: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +20:20:12.480: [Loaded global audio device]: 'Mic/Aux' +20:20:12.480: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +20:20:12.481: pulse-input: An error occurred while getting the source info! +20:20:12.481: [Loaded global audio device]: 'HDMI Capture' +20:20:12.481: v4l2-input: Start capture from /dev/video0 +20:20:12.482: v4l2-input: Input: 0 +20:20:12.497: v4l2-input: Resolution: 1920x1080 +20:20:12.497: v4l2-input: Pixelformat: YU12 +20:20:12.497: v4l2-input: Linesize: 1920 Bytes +20:20:12.497: v4l2-input: Framerate: 30.00 fps +20:20:12.498: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +20:20:12.500: xshm-input: Geometry 3840x2160 @ 0,0 +20:20:12.506: v4l2-input: Start capture from /dev/video0 +20:20:12.507: v4l2-input: Unable to set input 0 +20:20:12.507: v4l2-input: Initialization failed, errno: Device or resource busy +20:20:12.875: v4l2-input: Start capture from /dev/video0 +20:20:12.876: v4l2-input: Unable to set input 0 +20:20:12.876: v4l2-input: Initialization failed, errno: Device or resource busy +20:20:12.877: xshm-input: Geometry 3840x2160 @ 0,0 +20:20:12.880: v4l2-input: Start capture from /dev/video4 +20:20:12.880: v4l2-input: Unable to open device +20:20:12.880: v4l2-input: Initialization failed, errno: No such file or directory +20:20:12.880: xshm-input: Geometry 2560x1440 @ 3840,0 +20:20:12.883: Source ID 'pipewire-desktop-capture-source' not found +20:20:12.883: Failed to create source 'Screen Capture (PipeWire)'! +20:20:12.885: Switched to scene 'screen' +20:20:12.885: ------------------------------------------------ +20:20:12.885: Loaded scenes: +20:20:12.885: - scene 'Screen with camera': +20:20:12.885: - source: 'Screen Capture' (xshm_input) +20:20:12.885: - source: 'Camera Capture' (v4l2_input) +20:20:12.885: - source: 'border' (image_source) +20:20:12.885: - scene 'game with camera': +20:20:12.885: - source: 'Camera Capture' (v4l2_input) +20:20:12.885: - source: 'border' (image_source) +20:20:12.885: - source: 'capture acrd' (v4l2_input) +20:20:12.885: - scene 'game': +20:20:12.885: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:20:12.885: - scene 'screen': +20:20:12.885: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +20:20:12.885: - source: 'Screen Capture (XSHM)' (xshm_input) +20:20:12.885: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +20:20:12.885: - scene 'camera': +20:20:12.885: - source: 'Camera Capture' (v4l2_input) +20:20:12.885: - scene 'Camera with scope': +20:20:12.885: - source: 'Camera Capture' (v4l2_input) +20:20:12.885: - source: 'border' (image_source) +20:20:12.885: - source: 'scope caputre' (v4l2_input) +20:20:12.885: - scene 'game with screen': +20:20:12.885: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:20:12.885: - source: 'Screen Capture (XSHM)' (xshm_input) +20:20:12.885: ------------------------------------------------ +20:20:13.031: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +20:20:13.031: +20:20:31.464: NV12 texture support not available +20:20:31.464: P010 texture support not available +20:20:31.469: Virtual camera started +20:20:31.482: ==== Virtual Camera Start ========================================== +20:20:31.485: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +20:34:15.838: ==== Shutting down ================================================== +20:34:15.838: Output 'virtualcam_output': stopping +20:34:15.838: Output 'virtualcam_output': Total frames output: 24705 +20:34:15.838: Output 'virtualcam_output': Total drawn frames: 24680 (24706 attempted) +20:34:15.838: Output 'virtualcam_output': Number of lagged frames due to rendering lag/stalls: 26 (0.1%) +20:34:15.839: ==== Virtual Camera Stop =========================================== +20:34:15.839: Virtual camera stopped +20:34:15.858: pulse-input: Stopped recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' +20:34:15.858: pulse-input: Got 33733 packets with 40479600 frames +20:34:15.858: pulse-input: Stopped recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +20:34:15.858: pulse-input: Got 33733 packets with 40479600 frames +20:34:15.863: v4l2-input: /dev/video0: Stopped capture after 25300 frames +20:34:15.890: All scene data cleared +20:34:15.890: ------------------------------------------------ +20:34:15.954: [obs-websocket] [obs_module_unload] Shutting down... +20:34:15.955: [obs-websocket] [obs_module_unload] Finished shutting down. +20:34:15.959: [Scripting] Total detached callbacks: 0 +20:34:15.959: Freeing OBS context data +20:34:15.969: == Profiler Results ============================= +20:34:15.969: run_program_init: 1185.71 ms +20:34:15.969: ┣OBSApp::AppInit: 6.999 ms +20:34:15.969: ┃ ┗OBSApp::InitLocale: 2.537 ms +20:34:15.969: ┗OBSApp::OBSInit: 1115.34 ms +20:34:15.969: ┣obs_startup: 1.834 ms +20:34:15.969: ┗OBSBasic::OBSInit: 1074.56 ms +20:34:15.969: ┣OBSBasic::InitBasicConfig: 0.098 ms +20:34:15.969: ┣OBSBasic::ResetAudio: 0.211 ms +20:34:15.969: ┣OBSBasic::ResetVideo: 87.573 ms +20:34:15.969: ┣OBSBasic::InitOBSCallbacks: 0.003 ms +20:34:15.969: ┣OBSBasic::InitHotkeys: 0.021 ms +20:34:15.969: ┣obs_load_all_modules2: 474.728 ms +20:34:15.969: ┃ ┣obs_init_module(decklink-captions.so): 0 ms +20:34:15.969: ┃ ┣obs_init_module(decklink-output-ui.so): 0 ms +20:34:15.969: ┃ ┣obs_init_module(decklink.so): 0.097 ms +20:34:15.969: ┃ ┣obs_init_module(frontend-tools.so): 58.645 ms +20:34:15.969: ┃ ┣obs_init_module(image-source.so): 0.006 ms +20:34:15.969: ┃ ┣obs_init_module(linux-alsa.so): 0.003 ms +20:34:15.969: ┃ ┣obs_init_module(linux-capture.so): 0.447 ms +20:34:15.969: ┃ ┣obs_init_module(linux-jack.so): 0.002 ms +20:34:15.969: ┃ ┣obs_init_module(linux-pipewire.so): 0.763 ms +20:34:15.969: ┃ ┣obs_init_module(linux-pulseaudio.so): 0.003 ms +20:34:15.969: ┃ ┣obs_init_module(linux-v4l2.so): 0.142 ms +20:34:15.969: ┃ ┣obs_init_module(obs-browser.so): 0.307 ms +20:34:15.969: ┃ ┣obs_init_module(obs-ffmpeg.so): 98.342 ms +20:34:15.969: ┃ ┃ ┗nvenc_check: 1.314 ms +20:34:15.969: ┃ ┣obs_init_module(obs-filters.so): 0.024 ms +20:34:15.969: ┃ ┣obs_init_module(obs-outputs.so): 0.006 ms +20:34:15.969: ┃ ┣obs_init_module(obs-transitions.so): 0.01 ms +20:34:15.969: ┃ ┣obs_init_module(obs-vst.so): 0.002 ms +20:34:15.969: ┃ ┣obs_init_module(obs-websocket.so): 4.391 ms +20:34:15.969: ┃ ┣obs_init_module(obs-x264.so): 0.002 ms +20:34:15.969: ┃ ┣obs_init_module(rtmp-services.so): 1.335 ms +20:34:15.969: ┃ ┗obs_init_module(text-freetype2.so): 0.014 ms +20:34:15.969: ┣OBSBasic::InitService: 1.898 ms +20:34:15.969: ┣OBSBasic::ResetOutputs: 0.156 ms +20:34:15.969: ┣OBSBasic::CreateHotkeys: 0.016 ms +20:34:15.969: ┣OBSBasic::InitPrimitives: 0.066 ms +20:34:15.969: ┗OBSBasic::Load: 444.022 ms +20:34:15.969: obs_hotkey_thread(25 ms): min=0.053 ms, median=8.021 ms, max=377.655 ms, 99th percentile=9.425 ms, 99.9597% below 25 ms +20:34:15.969: audio_thread(Audio): min=0.004 ms, median=0.051 ms, max=0.42 ms, 99th percentile=0.127 ms +20:34:15.969: obs_graphics_thread(33.3667 ms): min=0.069 ms, median=18.383 ms, max=414.445 ms, 99th percentile=25.912 ms, 99.9168% below 33.367 ms +20:34:15.969: ┣tick_sources: min=0 ms, median=17.57 ms, max=412.67 ms, 99th percentile=24.835 ms +20:34:15.969: ┣output_frame: min=0.059 ms, median=0.783 ms, max=8.163 ms, 99th percentile=1.214 ms +20:34:15.969: ┃ ┣gs_context(video->graphics): min=0.058 ms, median=0.212 ms, max=8.162 ms, 99th percentile=0.305 ms, 1.9775 calls per parent call +20:34:15.969: ┃ ┃ ┣render_video: min=0.005 ms, median=0.111 ms, max=3.286 ms, 99th percentile=0.169 ms +20:34:15.969: ┃ ┃ ┃ ┣render_main_texture: min=0.004 ms, median=0.083 ms, max=3.283 ms, 99th percentile=0.158 ms +20:34:15.969: ┃ ┃ ┃ ┣render_convert_texture: min=0.018 ms, median=0.031 ms, max=1.117 ms, 99th percentile=0.047 ms, 0.494292 calls per parent call +20:34:15.969: ┃ ┃ ┃ ┗stage_output_texture: min=0.008 ms, median=0.014 ms, max=0.248 ms, 99th percentile=0.025 ms, 0.494292 calls per parent call +20:34:15.969: ┃ ┃ ┣gs_flush: min=0.001 ms, median=0.003 ms, max=0.062 ms, 99th percentile=0.009 ms +20:34:15.969: ┃ ┃ ┗download_frame: min=0 ms, median=0.038 ms, max=0.149 ms, 99th percentile=0.06 ms, 0.494292 calls per parent call +20:34:15.969: ┃ ┗output_video_data: min=0.24 ms, median=0.355 ms, max=2.643 ms, 99th percentile=0.687 ms +20:34:15.969: ┗render_displays: min=0.002 ms, median=0.005 ms, max=2.709 ms, 99th percentile=0.329 ms +20:34:15.969: video_thread(video): min=1.85 ms, median=3.177 ms, max=51.49 ms, 99th percentile=4.211 ms +20:34:15.969: ================================================= +20:34:15.969: == Profiler Time Between Calls ================== +20:34:15.969: obs_hotkey_thread(25 ms): min=25.093 ms, median=33.089 ms, max=402.719 ms, 19.2796% within ±2% of 25 ms (0% lower, 80.7204% higher) +20:34:15.969: obs_graphics_thread(33.3667 ms): min=15.452 ms, median=33.367 ms, max=414.459 ms, 99.7861% within ±2% of 33.367 ms (0.130703% lower, 0.0831749% higher) +20:34:15.969: ================================================= +20:34:16.005: Number of memory leaks: 0 diff --git a/.config/obs-studio/logs/2023-10-12 19-10-57.txt b/.config/obs-studio/logs/2023-10-12 19-10-57.txt new file mode 100644 index 0000000..9ff7f9c --- /dev/null +++ b/.config/obs-studio/logs/2023-10-12 19-10-57.txt @@ -0,0 +1,264 @@ +19:10:57.589: Using EGL/X11 +19:10:57.589: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +19:10:57.589: CPU Speed: 4066.469MHz +19:10:57.589: Physical Cores: 8, Logical Cores: 16 +19:10:57.589: Physical Memory: 15917MB Total, 7254MB Free +19:10:57.589: Kernel Version: Linux 6.5.5-zen1-1-zen +19:10:57.589: Distribution: "Arch Linux" Unknown +19:10:57.589: Desktop Environment: +19:10:57.589: Session Type: x11 +19:10:57.589: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +19:10:57.591: Qt Version: 6.5.3 (runtime), 6.5.2 (compiled) +19:10:57.591: Portable mode: false +19:10:57.629: OBS 29.1.3-1 (linux) +19:10:57.629: --------------------------------- +19:10:57.629: --------------------------------- +19:10:57.629: audio settings reset: +19:10:57.629: samples per sec: 48000 +19:10:57.629: speakers: 2 +19:10:57.629: max buffering: 960 milliseconds +19:10:57.629: buffering type: dynamically increasing +19:10:57.635: --------------------------------- +19:10:57.635: Initializing OpenGL... +19:10:57.686: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.5-zen1-1-zen) +19:10:57.686: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +19:10:57.717: --------------------------------- +19:10:57.717: video settings reset: +19:10:57.717: base resolution: 1920x1080 +19:10:57.717: output resolution: 1920x1080 +19:10:57.717: downscale filter: Bicubic +19:10:57.717: fps: 30000/1001 +19:10:57.717: format: NV12 +19:10:57.717: YUV mode: Rec. 709/Partial +19:10:57.717: NV12 texture support not available +19:10:57.717: P010 texture support not available +19:10:57.723: Audio monitoring device: +19:10:57.723: name: Default +19:10:57.723: id: default +19:10:57.723: --------------------------------- +19:10:57.732: Failed to load 'en-US' text for module: 'decklink-captions.so' +19:10:57.742: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +19:10:57.750: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +19:10:57.750: Failed to initialize module 'decklink.so' +19:10:57.968: [pipewire] No captures available +19:10:58.009: [obs-browser]: Version 2.21.1 +19:10:58.009: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +19:10:58.141: VAAPI: Failed to initialize display in vaapi_device_h264_supported +19:10:58.141: FFmpeg VAAPI H264 encoding not supported +19:10:58.141: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +19:10:58.141: FFmpeg VAAPI HEVC encoding not supported +19:10:58.206: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +19:10:58.206: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.3 +19:10:58.206: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +19:10:58.213: [obs-websocket] [obs_module_load] Module loaded. +19:10:58.245: --------------------------------- +19:10:58.245: Loaded Modules: +19:10:58.245: text-freetype2.so +19:10:58.245: rtmp-services.so +19:10:58.245: obs-x264.so +19:10:58.245: obs-websocket.so +19:10:58.245: obs-vst.so +19:10:58.245: obs-transitions.so +19:10:58.245: obs-outputs.so +19:10:58.245: obs-filters.so +19:10:58.245: obs-ffmpeg.so +19:10:58.245: obs-browser.so +19:10:58.245: linux-v4l2.so +19:10:58.245: linux-pulseaudio.so +19:10:58.245: linux-pipewire.so +19:10:58.245: linux-jack.so +19:10:58.245: linux-capture.so +19:10:58.245: linux-alsa.so +19:10:58.245: image-source.so +19:10:58.245: frontend-tools.so +19:10:58.245: decklink-output-ui.so +19:10:58.245: decklink-captions.so +19:10:58.245: --------------------------------- +19:10:58.246: ==== Startup complete =============================================== +19:10:58.291: All scene data cleared +19:10:58.291: ------------------------------------------------ +19:10:58.295: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:10:58.295: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +19:10:58.295: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +19:10:58.295: [Loaded global audio device]: 'Desktop Audio' +19:10:58.296: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:10:58.296: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +19:10:58.296: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +19:10:58.296: [Loaded global audio device]: 'Mic/Aux' +19:10:58.296: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0' +19:10:58.297: pulse-input: An error occurred while getting the source info! +19:10:58.297: [Loaded global audio device]: 'HDMI Capture' +19:10:58.297: v4l2-input: Start capture from /dev/video0 +19:10:58.298: v4l2-input: Input: 0 +19:10:58.312: v4l2-input: Resolution: 1920x1080 +19:10:58.312: v4l2-input: Pixelformat: YU12 +19:10:58.312: v4l2-input: Linesize: 1920 Bytes +19:10:58.312: v4l2-input: Framerate: 30.00 fps +19:10:58.314: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +19:10:58.316: xshm-input: Geometry 3840x2160 @ 1024,0 +19:10:58.323: v4l2-input: Start capture from /dev/video0 +19:10:58.323: v4l2-input: Unable to set input 0 +19:10:58.323: v4l2-input: Initialization failed, errno: Device or resource busy +19:10:58.509: v4l2-input: Start capture from /dev/video0 +19:10:58.509: v4l2-input: Unable to set input 0 +19:10:58.509: v4l2-input: Initialization failed, errno: Device or resource busy +19:10:58.510: xshm-input: Geometry 3840x2160 @ 1024,0 +19:10:58.513: v4l2-input: Start capture from /dev/video4 +19:10:58.513: v4l2-input: Unable to open device +19:10:58.513: v4l2-input: Initialization failed, errno: No such file or directory +19:10:58.513: xshm-input: Geometry 1024x768 @ 0,0 +19:10:58.514: Source ID 'pipewire-desktop-capture-source' not found +19:10:58.514: Failed to create source 'Screen Capture (PipeWire)'! +19:10:58.517: Switched to scene 'screen' +19:10:58.517: ------------------------------------------------ +19:10:58.517: Loaded scenes: +19:10:58.517: - scene 'Screen with camera': +19:10:58.517: - source: 'Screen Capture' (xshm_input) +19:10:58.517: - source: 'Camera Capture' (v4l2_input) +19:10:58.517: - source: 'border' (image_source) +19:10:58.517: - scene 'game with camera': +19:10:58.517: - source: 'Camera Capture' (v4l2_input) +19:10:58.517: - source: 'border' (image_source) +19:10:58.517: - source: 'capture acrd' (v4l2_input) +19:10:58.517: - scene 'game': +19:10:58.517: - source: 'Video Capture Device (V4L2)' (v4l2_input) +19:10:58.517: - scene 'screen': +19:10:58.517: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +19:10:58.517: - source: 'Screen Capture (XSHM)' (xshm_input) +19:10:58.517: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +19:10:58.517: - scene 'camera': +19:10:58.517: - source: 'Camera Capture' (v4l2_input) +19:10:58.517: - scene 'Camera with scope': +19:10:58.517: - source: 'Camera Capture' (v4l2_input) +19:10:58.517: - source: 'border' (image_source) +19:10:58.517: - source: 'scope caputre' (v4l2_input) +19:10:58.517: - scene 'game with screen': +19:10:58.517: - source: 'Video Capture Device (V4L2)' (v4l2_input) +19:10:58.517: - source: 'Screen Capture (XSHM)' (xshm_input) +19:10:58.517: ------------------------------------------------ +19:10:58.846: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +19:10:58.846: +19:11:00.603: NV12 texture support not available +19:11:00.603: P010 texture support not available +19:11:00.609: Virtual camera started +19:11:00.624: ==== Virtual Camera Start ========================================== +19:11:00.633: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +19:42:33.568: User added source 'Text (FreeType 2)' (text_ft2_source_v2) to scene 'screen' +21:00:40.136: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +21:00:40.136: +22:52:18.100: --------------------------------- +22:52:18.100: [x264 encoder: 'simple_video_recording'] preset: veryfast +22:52:18.100: [x264 encoder: 'simple_video_recording'] profile: high +22:52:18.100: [x264 encoder: 'simple_video_recording'] settings: +22:52:18.100: rate_control: CRF +22:52:18.100: bitrate: 0 +22:52:18.100: buffer size: 0 +22:52:18.100: crf: 16 +22:52:18.100: fps_num: 30000 +22:52:18.100: fps_den: 1001 +22:52:18.100: width: 1920 +22:52:18.100: height: 1080 +22:52:18.100: keyint: 250 +22:52:18.100: +22:52:18.131: --------------------------------- +22:52:18.131: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +22:52:18.131: +22:52:18.131: --------------------------------- +22:52:18.131: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +22:52:18.131: +22:52:18.131: --------------------------------- +22:52:18.131: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +22:52:18.131: +22:52:18.131: --------------------------------- +22:52:18.131: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +22:52:18.131: +22:52:18.133: ==== Recording Start =============================================== +22:52:18.133: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-13 22-52-18.mkv'... +22:53:02.947: [ffmpeg muxer: 'simple_file_output'] Output of file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-13 22-52-18.mkv' stopped +22:53:02.947: Output 'simple_file_output': stopping +22:53:02.947: Output 'simple_file_output': Total frames output: 1302 +22:53:02.947: Output 'simple_file_output': Total drawn frames: 1276 (1343 attempted) +22:53:02.947: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 67 (5.0%) +22:53:02.960: ==== Recording Stop ================================================ +02:51:40.300: --------------------------------- +02:51:40.301: [x264 encoder: 'simple_video_recording'] preset: veryfast +02:51:40.301: [x264 encoder: 'simple_video_recording'] profile: high +02:51:40.302: [x264 encoder: 'simple_video_recording'] settings: +02:51:40.302: rate_control: CRF +02:51:40.302: bitrate: 0 +02:51:40.302: buffer size: 0 +02:51:40.302: crf: 16 +02:51:40.302: fps_num: 30000 +02:51:40.302: fps_den: 1001 +02:51:40.302: width: 1920 +02:51:40.302: height: 1080 +02:51:40.302: keyint: 250 +02:51:40.302: +02:51:40.336: --------------------------------- +02:51:40.336: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +02:51:40.336: +02:51:40.337: --------------------------------- +02:51:40.337: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +02:51:40.337: +02:51:40.337: --------------------------------- +02:51:40.337: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +02:51:40.337: +02:51:40.337: --------------------------------- +02:51:40.337: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +02:51:40.337: +02:51:40.344: ==== Recording Start =============================================== +02:51:40.344: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-14 02-51-40.mkv'... +02:54:45.885: [ffmpeg muxer: 'simple_file_output'] Output of file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-14 02-51-40.mkv' stopped +02:54:45.886: Output 'simple_file_output': stopping +02:54:45.886: Output 'simple_file_output': Total frames output: 5519 +02:54:45.886: Output 'simple_file_output': Total drawn frames: 4940 (5560 attempted) +02:54:45.886: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 620 (11.2%) +02:54:45.886: ==== Recording Stop ================================================ +04:13:15.083: adding 362 milliseconds of audio buffering, total audio buffering is now 405 milliseconds (source: Desktop Audio) +04:13:15.083: +19:40:59.489: --------------------------------- +19:40:59.490: [x264 encoder: 'simple_video_recording'] preset: veryfast +19:40:59.490: [x264 encoder: 'simple_video_recording'] profile: high +19:40:59.491: [x264 encoder: 'simple_video_recording'] settings: +19:40:59.491: rate_control: CRF +19:40:59.491: bitrate: 0 +19:40:59.491: buffer size: 0 +19:40:59.491: crf: 16 +19:40:59.491: fps_num: 30000 +19:40:59.491: fps_den: 1001 +19:40:59.491: width: 1920 +19:40:59.491: height: 1080 +19:40:59.491: keyint: 250 +19:40:59.491: +19:40:59.538: --------------------------------- +19:40:59.539: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +19:40:59.539: +19:40:59.540: --------------------------------- +19:40:59.540: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +19:40:59.540: +19:40:59.540: --------------------------------- +19:40:59.540: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +19:40:59.540: +19:40:59.540: --------------------------------- +19:40:59.540: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +19:40:59.540: +19:40:59.547: ==== Recording Start =============================================== +19:40:59.548: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-16 19-40-59.mkv'... +19:41:23.244: [ffmpeg muxer: 'simple_file_output'] Output of file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-16 19-40-59.mkv' stopped +19:41:23.245: Output 'simple_file_output': stopping +19:41:23.245: Output 'simple_file_output': Total frames output: 667 +19:41:23.245: Output 'simple_file_output': Total drawn frames: 662 (711 attempted) +19:41:23.245: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 49 (6.9%) +19:41:23.245: ==== Recording Stop ================================================ +19:46:48.524: Output 'virtualcam_output': stopping +19:46:48.524: Output 'virtualcam_output': Total frames output: 10422013 +19:46:48.524: Output 'virtualcam_output': Total drawn frames: 10376913 (10422015 attempted) +19:46:48.524: Output 'virtualcam_output': Number of lagged frames due to rendering lag/stalls: 45102 (0.4%) +19:46:48.524: ==== Virtual Camera Stop =========================================== +19:46:48.525: Video stopped, number of skipped frames due to encoding lag: 3/10422014 (0.0%) +19:46:48.525: Virtual camera stopped +19:46:49.071: NV12 texture support not available +19:46:49.071: P010 texture support not available +19:46:49.075: Virtual camera started +19:46:49.078: ==== Virtual Camera Start ========================================== +19:46:49.103: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop diff --git a/.config/obs-studio/logs/2023-10-16 20-18-48.txt b/.config/obs-studio/logs/2023-10-16 20-18-48.txt new file mode 100644 index 0000000..525ab9a --- /dev/null +++ b/.config/obs-studio/logs/2023-10-16 20-18-48.txt @@ -0,0 +1,209 @@ +20:18:48.617: Using EGL/X11 +20:18:48.617: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +20:18:48.618: CPU Speed: 4179.813MHz +20:18:48.618: Physical Cores: 8, Logical Cores: 16 +20:18:48.618: Physical Memory: 15917MB Total, 10092MB Free +20:18:48.618: Kernel Version: Linux 6.5.7-zen2-1-zen +20:18:48.618: Distribution: "Arch Linux" Unknown +20:18:48.618: Desktop Environment: +20:18:48.618: Session Type: x11 +20:18:48.618: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +20:18:48.619: Qt Version: 6.6.0 (runtime), 6.5.2 (compiled) +20:18:48.619: Portable mode: false +20:18:48.657: OBS 29.1.3-1 (linux) +20:18:48.658: --------------------------------- +20:18:48.658: --------------------------------- +20:18:48.658: audio settings reset: +20:18:48.658: samples per sec: 48000 +20:18:48.658: speakers: 2 +20:18:48.658: max buffering: 960 milliseconds +20:18:48.658: buffering type: dynamically increasing +20:18:48.663: --------------------------------- +20:18:48.663: Initializing OpenGL... +20:18:48.712: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.7-zen2-1-zen) +20:18:48.712: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +20:18:48.742: --------------------------------- +20:18:48.742: video settings reset: +20:18:48.742: base resolution: 1920x1080 +20:18:48.742: output resolution: 1920x1080 +20:18:48.742: downscale filter: Bicubic +20:18:48.742: fps: 30000/1001 +20:18:48.742: format: NV12 +20:18:48.742: YUV mode: Rec. 709/Partial +20:18:48.742: NV12 texture support not available +20:18:48.742: P010 texture support not available +20:18:48.745: Audio monitoring device: +20:18:48.745: name: Default +20:18:48.745: id: default +20:18:48.745: --------------------------------- +20:18:48.753: Failed to load 'en-US' text for module: 'decklink-captions.so' +20:18:48.761: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +20:18:48.770: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +20:18:48.770: Failed to initialize module 'decklink.so' +20:18:48.984: [pipewire] No captures available +20:18:49.016: [obs-browser]: Version 2.21.1 +20:18:49.016: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +20:18:49.137: VAAPI: Failed to initialize display in vaapi_device_h264_supported +20:18:49.137: FFmpeg VAAPI H264 encoding not supported +20:18:49.137: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +20:18:49.137: FFmpeg VAAPI HEVC encoding not supported +20:18:49.192: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +20:18:49.192: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.6.0 +20:18:49.192: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +20:18:49.197: [obs-websocket] [obs_module_load] Module loaded. +20:18:49.226: --------------------------------- +20:18:49.226: Loaded Modules: +20:18:49.226: text-freetype2.so +20:18:49.226: rtmp-services.so +20:18:49.226: obs-x264.so +20:18:49.226: obs-websocket.so +20:18:49.226: obs-vst.so +20:18:49.226: obs-transitions.so +20:18:49.226: obs-outputs.so +20:18:49.226: obs-filters.so +20:18:49.226: obs-ffmpeg.so +20:18:49.226: obs-browser.so +20:18:49.226: linux-v4l2.so +20:18:49.226: linux-pulseaudio.so +20:18:49.226: linux-pipewire.so +20:18:49.226: linux-jack.so +20:18:49.226: linux-capture.so +20:18:49.226: linux-alsa.so +20:18:49.226: image-source.so +20:18:49.226: frontend-tools.so +20:18:49.226: decklink-output-ui.so +20:18:49.226: decklink-captions.so +20:18:49.226: --------------------------------- +20:18:49.226: ==== Startup complete =============================================== +20:18:49.255: All scene data cleared +20:18:49.255: ------------------------------------------------ +20:18:49.259: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +20:18:49.259: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +20:18:49.259: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +20:18:49.259: [Loaded global audio device]: 'Desktop Audio' +20:18:49.259: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +20:18:49.260: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +20:18:49.260: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +20:18:49.260: [Loaded global audio device]: 'Mic/Aux' +20:18:49.260: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +20:18:49.260: pulse-input: An error occurred while getting the source info! +20:18:49.260: [Loaded global audio device]: 'HDMI Capture' +20:18:49.260: v4l2-input: Start capture from /dev/video0 +20:18:49.261: v4l2-input: Input: 0 +20:18:49.275: v4l2-input: Resolution: 1920x1080 +20:18:49.275: v4l2-input: Pixelformat: YU12 +20:18:49.275: v4l2-input: Linesize: 1920 Bytes +20:18:49.275: v4l2-input: Framerate: 30.00 fps +20:18:49.277: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods) +20:18:49.279: xshm-input: Geometry 3840x2160 @ 1024,0 +20:18:49.285: v4l2-input: Start capture from /dev/video0 +20:18:49.286: v4l2-input: Unable to set input 0 +20:18:49.286: v4l2-input: Initialization failed, errno: Device or resource busy +20:18:49.443: v4l2-input: Start capture from /dev/video0 +20:18:49.443: v4l2-input: Unable to set input 0 +20:18:49.443: v4l2-input: Initialization failed, errno: Device or resource busy +20:18:49.444: xshm-input: Geometry 3840x2160 @ 1024,0 +20:18:49.447: v4l2-input: Start capture from /dev/video4 +20:18:49.447: v4l2-input: Unable to open device +20:18:49.447: v4l2-input: Initialization failed, errno: No such file or directory +20:18:49.447: xshm-input: Geometry 1024x768 @ 0,0 +20:18:49.448: Source ID 'pipewire-desktop-capture-source' not found +20:18:49.448: Failed to create source 'Screen Capture (PipeWire)'! +20:18:49.450: Switched to scene 'screen' +20:18:49.450: ------------------------------------------------ +20:18:49.450: Loaded scenes: +20:18:49.450: - scene 'Screen with camera': +20:18:49.450: - source: 'Screen Capture' (xshm_input) +20:18:49.450: - source: 'Camera Capture' (v4l2_input) +20:18:49.450: - source: 'border' (image_source) +20:18:49.450: - scene 'game with camera': +20:18:49.450: - source: 'Camera Capture' (v4l2_input) +20:18:49.450: - source: 'border' (image_source) +20:18:49.450: - source: 'capture acrd' (v4l2_input) +20:18:49.450: - scene 'game': +20:18:49.450: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:18:49.450: - scene 'screen': +20:18:49.450: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +20:18:49.450: - source: 'Screen Capture (XSHM)' (xshm_input) +20:18:49.450: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +20:18:49.450: - source: 'Text (FreeType 2)' (text_ft2_source_v2) +20:18:49.450: - scene 'camera': +20:18:49.450: - source: 'Camera Capture' (v4l2_input) +20:18:49.450: - scene 'Camera with scope': +20:18:49.450: - source: 'Camera Capture' (v4l2_input) +20:18:49.450: - source: 'border' (image_source) +20:18:49.450: - source: 'scope caputre' (v4l2_input) +20:18:49.450: - scene 'game with screen': +20:18:49.450: - source: 'Video Capture Device (V4L2)' (v4l2_input) +20:18:49.450: - source: 'Screen Capture (XSHM)' (xshm_input) +20:18:49.450: ------------------------------------------------ +20:18:49.810: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +20:18:49.810: +20:18:57.099: ==== Shutting down ================================================== +20:18:57.123: pulse-input: Stopped recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' +20:18:57.123: pulse-input: Got 313 packets with 375600 frames +20:18:57.123: pulse-input: Stopped recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +20:18:57.123: pulse-input: Got 314 packets with 376800 frames +20:18:57.152: v4l2-input: /dev/video0: Stopped capture after 232 frames +20:18:57.171: All scene data cleared +20:18:57.171: ------------------------------------------------ +20:18:57.235: [obs-websocket] [obs_module_unload] Shutting down... +20:18:57.236: [obs-websocket] [obs_module_unload] Finished shutting down. +20:18:57.244: [Scripting] Total detached callbacks: 0 +20:18:57.244: Freeing OBS context data +20:18:57.257: == Profiler Results ============================= +20:18:57.257: run_program_init: 976.435 ms +20:18:57.257: ┣OBSApp::AppInit: 7.029 ms +20:18:57.257: ┃ ┗OBSApp::InitLocale: 2.475 ms +20:18:57.257: ┗OBSApp::OBSInit: 905.965 ms +20:18:57.257: ┣obs_startup: 1.921 ms +20:18:57.257: ┗OBSBasic::OBSInit: 865.688 ms +20:18:57.257: ┣OBSBasic::InitBasicConfig: 0.099 ms +20:18:57.257: ┣OBSBasic::ResetAudio: 0.208 ms +20:18:57.257: ┣OBSBasic::ResetVideo: 86.791 ms +20:18:57.257: ┣OBSBasic::InitOBSCallbacks: 0.003 ms +20:18:57.257: ┣OBSBasic::InitHotkeys: 0.019 ms +20:18:57.257: ┣obs_load_all_modules2: 481.079 ms +20:18:57.257: ┃ ┣obs_init_module(decklink-captions.so): 0 ms +20:18:57.257: ┃ ┣obs_init_module(decklink-output-ui.so): 0 ms +20:18:57.257: ┃ ┣obs_init_module(decklink.so): 0.096 ms +20:18:57.257: ┃ ┣obs_init_module(frontend-tools.so): 59.165 ms +20:18:57.257: ┃ ┣obs_init_module(image-source.so): 0.008 ms +20:18:57.257: ┃ ┣obs_init_module(linux-alsa.so): 0.003 ms +20:18:57.257: ┃ ┣obs_init_module(linux-capture.so): 0.492 ms +20:18:57.257: ┃ ┣obs_init_module(linux-jack.so): 0.002 ms +20:18:57.257: ┃ ┣obs_init_module(linux-pipewire.so): 0.754 ms +20:18:57.257: ┃ ┣obs_init_module(linux-pulseaudio.so): 0.003 ms +20:18:57.257: ┃ ┣obs_init_module(linux-v4l2.so): 0.138 ms +20:18:57.257: ┃ ┣obs_init_module(obs-browser.so): 0.301 ms +20:18:57.257: ┃ ┣obs_init_module(obs-ffmpeg.so): 103.068 ms +20:18:57.257: ┃ ┃ ┗nvenc_check: 1.388 ms +20:18:57.257: ┃ ┣obs_init_module(obs-filters.so): 0.025 ms +20:18:57.257: ┃ ┣obs_init_module(obs-outputs.so): 0.006 ms +20:18:57.257: ┃ ┣obs_init_module(obs-transitions.so): 0.006 ms +20:18:57.257: ┃ ┣obs_init_module(obs-vst.so): 0.003 ms +20:18:57.257: ┃ ┣obs_init_module(obs-websocket.so): 4.642 ms +20:18:57.257: ┃ ┣obs_init_module(obs-x264.so): 0.002 ms +20:18:57.257: ┃ ┣obs_init_module(rtmp-services.so): 1.332 ms +20:18:57.257: ┃ ┗obs_init_module(text-freetype2.so): 0.016 ms +20:18:57.257: ┣OBSBasic::InitService: 1.174 ms +20:18:57.257: ┣OBSBasic::ResetOutputs: 0.15 ms +20:18:57.257: ┣OBSBasic::CreateHotkeys: 0.017 ms +20:18:57.257: ┣OBSBasic::InitPrimitives: 0.092 ms +20:18:57.257: ┗OBSBasic::Load: 226.268 ms +20:18:57.257: obs_hotkey_thread(25 ms): min=0.06 ms, median=7.857 ms, max=17.908 ms, 99th percentile=10.845 ms, 100% below 25 ms +20:18:57.257: audio_thread(Audio): min=0.008 ms, median=0.034 ms, max=11.387 ms, 99th percentile=0.204 ms +20:18:57.257: obs_graphics_thread(33.3667 ms): min=0.102 ms, median=32.84 ms, max=206.878 ms, 99th percentile=55.6 ms, 66.3934% below 33.367 ms +20:18:57.257: ┣tick_sources: min=0 ms, median=32.054 ms, max=186.219 ms, 99th percentile=53.949 ms +20:18:57.257: ┣output_frame: min=0.077 ms, median=0.248 ms, max=20.631 ms, 99th percentile=0.636 ms +20:18:57.257: ┃ ┗gs_context(video->graphics): min=0.076 ms, median=0.247 ms, max=20.631 ms, 99th percentile=0.635 ms +20:18:57.257: ┃ ┣render_video: min=0.014 ms, median=0.134 ms, max=15.858 ms, 99th percentile=0.231 ms +20:18:57.257: ┃ ┃ ┗render_main_texture: min=0.009 ms, median=0.13 ms, max=15.853 ms, 99th percentile=0.225 ms +20:18:57.257: ┃ ┗gs_flush: min=0.002 ms, median=0.003 ms, max=0.034 ms, 99th percentile=0.016 ms +20:18:57.257: ┗render_displays: min=0.002 ms, median=0.409 ms, max=3.233 ms, 99th percentile=1.964 ms +20:18:57.257: ================================================= +20:18:57.257: == Profiler Time Between Calls ================== +20:18:57.258: obs_hotkey_thread(25 ms): min=25.112 ms, median=32.938 ms, max=42.981 ms, 33.5714% within ±2% of 25 ms (0% lower, 66.4286% higher) +20:18:57.258: obs_graphics_thread(33.3667 ms): min=30.496 ms, median=33.367 ms, max=206.882 ms, 75.7202% within ±2% of 33.367 ms (2.05761% lower, 22.2222% higher) +20:18:57.258: ================================================= +20:18:57.261: Number of memory leaks: 0 diff --git a/.config/obs-studio/logs/2023-10-16 21-15-29.txt b/.config/obs-studio/logs/2023-10-16 21-15-29.txt new file mode 100644 index 0000000..e541df6 --- /dev/null +++ b/.config/obs-studio/logs/2023-10-16 21-15-29.txt @@ -0,0 +1,172 @@ +21:15:29.274: Using EGL/X11 +21:15:29.274: CPU Name: AMD Ryzen 7 3700X 8-Core Processor +21:15:29.274: CPU Speed: 4115.352MHz +21:15:29.274: Physical Cores: 8, Logical Cores: 16 +21:15:29.274: Physical Memory: 15917MB Total, 9157MB Free +21:15:29.274: Kernel Version: Linux 6.5.7-zen2-1-zen +21:15:29.274: Distribution: "Arch Linux" Unknown +21:15:29.274: Desktop Environment: +21:15:29.274: Session Type: x11 +21:15:29.274: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1 +21:15:29.275: Qt Version: 6.6.0 (runtime), 6.5.2 (compiled) +21:15:29.275: Portable mode: false +21:15:29.302: OBS 29.1.3-1 (linux) +21:15:29.302: --------------------------------- +21:15:29.302: --------------------------------- +21:15:29.302: audio settings reset: +21:15:29.302: samples per sec: 48000 +21:15:29.302: speakers: 2 +21:15:29.302: max buffering: 960 milliseconds +21:15:29.302: buffering type: dynamically increasing +21:15:29.307: --------------------------------- +21:15:29.307: Initializing OpenGL... +21:15:29.356: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XT (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.7-zen2-1-zen) +21:15:29.357: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.2.1-arch1.2, shading language 4.60 +21:15:29.383: --------------------------------- +21:15:29.383: video settings reset: +21:15:29.383: base resolution: 1920x1080 +21:15:29.383: output resolution: 1920x1080 +21:15:29.383: downscale filter: Bicubic +21:15:29.383: fps: 30000/1001 +21:15:29.383: format: NV12 +21:15:29.383: YUV mode: Rec. 709/Partial +21:15:29.383: NV12 texture support not available +21:15:29.383: P010 texture support not available +21:15:29.385: Audio monitoring device: +21:15:29.385: name: Default +21:15:29.385: id: default +21:15:29.385: --------------------------------- +21:15:29.395: Failed to load 'en-US' text for module: 'decklink-captions.so' +21:15:29.404: Failed to load 'en-US' text for module: 'decklink-output-ui.so' +21:15:29.412: A DeckLink iterator could not be created. The DeckLink drivers may not be installed +21:15:29.412: Failed to initialize module 'decklink.so' +21:15:29.604: [pipewire] No captures available +21:15:29.635: [obs-browser]: Version 2.21.1 +21:15:29.635: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled) +21:15:29.745: VAAPI: Failed to initialize display in vaapi_device_h264_supported +21:15:29.745: FFmpeg VAAPI H264 encoding not supported +21:15:29.745: VAAPI: Failed to initialize display in vaapi_device_hevc_supported +21:15:29.745: FFmpeg VAAPI HEVC encoding not supported +21:15:29.800: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1) +21:15:29.800: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.6.0 +21:15:29.800: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800 +21:15:29.803: [obs-websocket] [obs_module_load] Module loaded. +21:15:29.836: --------------------------------- +21:15:29.836: Loaded Modules: +21:15:29.836: text-freetype2.so +21:15:29.836: rtmp-services.so +21:15:29.836: obs-x264.so +21:15:29.836: obs-websocket.so +21:15:29.836: obs-vst.so +21:15:29.836: obs-transitions.so +21:15:29.836: obs-outputs.so +21:15:29.836: obs-filters.so +21:15:29.836: obs-ffmpeg.so +21:15:29.836: obs-browser.so +21:15:29.836: linux-v4l2.so +21:15:29.836: linux-pulseaudio.so +21:15:29.836: linux-pipewire.so +21:15:29.836: linux-jack.so +21:15:29.836: linux-capture.so +21:15:29.836: linux-alsa.so +21:15:29.836: image-source.so +21:15:29.836: frontend-tools.so +21:15:29.836: decklink-output-ui.so +21:15:29.836: decklink-captions.so +21:15:29.836: --------------------------------- +21:15:29.836: ==== Startup complete =============================================== +21:15:29.857: All scene data cleared +21:15:29.857: ------------------------------------------------ +21:15:29.861: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +21:15:29.861: pulse-input: Audio format: s32le, 48000 Hz, 2 channels +21:15:29.861: pulse-input: Started recording from 'alsa_output.pci-0000_0b_00.4.analog-stereo.monitor' (default) +21:15:29.861: [Loaded global audio device]: 'Desktop Audio' +21:15:29.861: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +21:15:29.861: pulse-input: Audio format: s16le, 48000 Hz, 1 channels +21:15:29.862: pulse-input: Started recording from 'alsa_input.usb-0c76_USB_PnP_Audio_Device-00.mono-fallback' +21:15:29.862: [Loaded global audio device]: 'Mic/Aux' +21:15:29.862: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.82) 15.0.0' +21:15:29.862: pulse-input: An error occurred while getting the source info! +21:15:29.862: [Loaded global audio device]: 'HDMI Capture' +21:15:29.862: v4l2-input: Start capture from /dev/video0 +21:15:29.863: v4l2-input: Unable to set input 0 +21:15:29.863: v4l2-input: Initialization failed, errno: Device or resource busy +21:15:29.863: xshm-input: Geometry 3840x2160 @ 1024,0 +21:15:29.869: v4l2-input: Start capture from /dev/video0 +21:15:29.870: v4l2-input: Unable to set input 0 +21:15:29.870: v4l2-input: Initialization failed, errno: Device or resource busy +21:15:29.975: v4l2-input: Start capture from /dev/video0 +21:15:29.976: v4l2-input: Unable to set input 0 +21:15:29.976: v4l2-input: Initialization failed, errno: Device or resource busy +21:15:29.976: xshm-input: Geometry 3840x2160 @ 1024,0 +21:15:29.979: v4l2-input: Start capture from /dev/video4 +21:15:29.979: v4l2-input: Unable to open device +21:15:29.979: v4l2-input: Initialization failed, errno: No such file or directory +21:15:29.980: xshm-input: Geometry 1024x768 @ 0,0 +21:15:29.980: Source ID 'pipewire-desktop-capture-source' not found +21:15:29.980: Failed to create source 'Screen Capture (PipeWire)'! +21:15:29.982: Switched to scene 'screen' +21:15:29.982: ------------------------------------------------ +21:15:29.982: Loaded scenes: +21:15:29.982: - scene 'Screen with camera': +21:15:29.982: - source: 'Screen Capture' (xshm_input) +21:15:29.982: - source: 'Camera Capture' (v4l2_input) +21:15:29.982: - source: 'border' (image_source) +21:15:29.982: - scene 'game with camera': +21:15:29.982: - source: 'Camera Capture' (v4l2_input) +21:15:29.982: - source: 'border' (image_source) +21:15:29.982: - source: 'capture acrd' (v4l2_input) +21:15:29.982: - scene 'game': +21:15:29.982: - source: 'Video Capture Device (V4L2)' (v4l2_input) +21:15:29.982: - scene 'screen': +21:15:29.982: - source: 'Screen Capture (XSHM) second monitor' (xshm_input) +21:15:29.982: - source: 'Screen Capture (XSHM)' (xshm_input) +21:15:29.982: - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) +21:15:29.982: - source: 'Text (FreeType 2)' (text_ft2_source_v2) +21:15:29.982: - scene 'camera': +21:15:29.982: - source: 'Camera Capture' (v4l2_input) +21:15:29.982: - scene 'Camera with scope': +21:15:29.982: - source: 'Camera Capture' (v4l2_input) +21:15:29.982: - source: 'border' (image_source) +21:15:29.982: - source: 'scope caputre' (v4l2_input) +21:15:29.982: - scene 'game with screen': +21:15:29.982: - source: 'Video Capture Device (V4L2)' (v4l2_input) +21:15:29.982: - source: 'Screen Capture (XSHM)' (xshm_input) +21:15:29.982: ------------------------------------------------ +21:15:30.412: adding 21 milliseconds of audio buffering, total audio buffering is now 21 milliseconds (source: Desktop Audio) +21:15:30.412: +21:15:31.372: NV12 texture support not available +21:15:31.372: P010 texture support not available +21:15:31.378: Virtual camera started +21:15:31.426: ==== Virtual Camera Start ========================================== +21:15:31.444: Failed to inhibit: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Inhibit” on object at path /org/freedesktop/portal/desktop +04:35:00.865: adding 21 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux) +04:35:00.865: +17:58:48.990: --------------------------------- +17:58:48.990: [x264 encoder: 'simple_video_recording'] preset: veryfast +17:58:48.990: [x264 encoder: 'simple_video_recording'] profile: high +17:58:48.990: [x264 encoder: 'simple_video_recording'] settings: +17:58:48.990: rate_control: CRF +17:58:48.990: bitrate: 0 +17:58:48.990: buffer size: 0 +17:58:48.990: crf: 16 +17:58:48.990: fps_num: 30000 +17:58:48.990: fps_den: 1001 +17:58:48.990: width: 1920 +17:58:48.990: height: 1080 +17:58:48.990: keyint: 250 +17:58:48.990: +17:58:49.043: --------------------------------- +17:58:49.043: [FFmpeg libopus encoder: 'simple_opus_recording0'] bitrate: 192, channels: 2, channel_layout: stereo +17:58:49.043: +17:58:49.043: --------------------------------- +17:58:49.043: [FFmpeg libopus encoder: 'simple_opus_recording1'] bitrate: 192, channels: 2, channel_layout: stereo +17:58:49.043: +17:58:49.043: --------------------------------- +17:58:49.043: [FFmpeg libopus encoder: 'simple_opus_recording2'] bitrate: 192, channels: 2, channel_layout: stereo +17:58:49.043: +17:58:49.043: --------------------------------- +17:58:49.043: [FFmpeg libopus encoder: 'simple_opus_recording3'] bitrate: 192, channels: 2, channel_layout: stereo +17:58:49.043: +17:58:49.066: ==== Recording Start =============================================== +17:58:49.066: [ffmpeg muxer: 'simple_file_output'] Writing file '/run/media/zombie/zombienas/organized_data/absolutely-unique/video/video_recordings/2023-10-18 17-58-48.mkv'... diff --git a/.config/obs-studio/plugin_config/rtmp-services/meta.json b/.config/obs-studio/plugin_config/rtmp-services/meta.json new file mode 100644 index 0000000..210f9b2 --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/meta.json @@ -0,0 +1 @@ +{"etag":"W/\"62bcc144-a1\""} \ No newline at end of file diff --git a/.config/obs-studio/plugin_config/rtmp-services/package.json b/.config/obs-studio/plugin_config/rtmp-services/package.json new file mode 100644 index 0000000..51737d7 --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/package.json @@ -0,0 +1 @@ +{"$schema":"schema/package-schema.json","url":"https://obsproject.com/obs2_update/rtmp-services/v5","version":231,"files":[{"name":"services.json","version":231}]} diff --git a/.config/obs-studio/plugin_config/rtmp-services/services.json b/.config/obs-studio/plugin_config/rtmp-services/services.json new file mode 100644 index 0000000..142e2ca --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/services.json @@ -0,0 +1 @@ +{"$schema":"schema/service-schema-v5.json","format_version":5,"services":[{"name":"Twitch","common":true,"stream_key_link":"https://dashboard.twitch.tv/settings/stream","servers":[{"name":"Asia: Hong Kong","url":"rtmp://live-hkg.twitch.tv/app"},{"name":"Asia: Seoul, South Korea","url":"rtmp://live-sel.twitch.tv/app"},{"name":"Asia: Singapore","url":"rtmp://live-sin.twitch.tv/app"},{"name":"Asia: Taipei, Taiwan","url":"rtmp://live-tpe.twitch.tv/app"},{"name":"Asia: Tokyo, Japan","url":"rtmp://live-tyo.twitch.tv/app"},{"name":"Australia: Sydney","url":"rtmp://live-syd.twitch.tv/app"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.twitch.tv/app"},{"name":"EU: Berlin, DE","url":"rtmp://live-ber.twitch.tv/app"},{"name":"Europe: Copenhagen, DK","url":"rtmp://live-cph.twitch.tv/app"},{"name":"EU: Frankfurt, DE","url":"rtmp://live-fra.twitch.tv/app"},{"name":"EU: Helsinki, FI","url":"rtmp://live-hel.twitch.tv/app"},{"name":"EU: Lisbon, Portugal","url":"rtmp://live-lis.twitch.tv/app"},{"name":"EU: London, UK","url":"rtmp://live-lhr.twitch.tv/app"},{"name":"EU: Madrid, Spain","url":"rtmp://live-mad.twitch.tv/app"},{"name":"EU: Marseille, FR","url":"rtmp://live-mrs.twitch.tv/app"},{"name":"EU: Milan, Italy","url":"rtmp://live-mil.twitch.tv/app"},{"name":"EU: Norway, Oslo","url":"rtmp://live-osl.twitch.tv/app"},{"name":"EU: Paris, FR","url":"rtmp://live-cdg.twitch.tv/app"},{"name":"EU: Prague, CZ","url":"rtmp://live-prg.twitch.tv/app"},{"name":"EU: Stockholm, SE","url":"rtmp://live-arn.twitch.tv/app"},{"name":"EU: Vienna, Austria","url":"rtmp://live-vie.twitch.tv/app"},{"name":"EU: Warsaw, Poland","url":"rtmp://live-waw.twitch.tv/app"},{"name":"NA: Mexico City","url":"rtmp://live-qro.twitch.tv/app"},{"name":"NA: Quebec, Canada","url":"rtmp://live-ymq.twitch.tv/app"},{"name":"NA: Toronto, Canada","url":"rtmp://live-yto.twitch.tv/app"},{"name":"South America: Argentina","url":"rtmp://live-eze.twitch.tv/app"},{"name":"South America: Chile","url":"rtmp://live-scl.twitch.tv/app"},{"name":"South America: Lima, Peru","url":"rtmp://live-lim.twitch.tv/app"},{"name":"South America: Medellin, Colombia","url":"rtmp://live-mde.twitch.tv/app"},{"name":"South America: Rio de Janeiro, Brazil","url":"rtmp://live-rio.twitch.tv/app"},{"name":"South America: Sao Paulo, Brazil","url":"rtmp://live-sao.twitch.tv/app"},{"name":"US Central: Dallas, TX","url":"rtmp://live-dfw.twitch.tv/app"},{"name":"US Central: Denver, CO","url":"rtmp://live-den.twitch.tv/app"},{"name":"US Central: Houston, TX","url":"rtmp://live-hou.twitch.tv/app"},{"name":"US Central: Salt Lake City, UT","url":"rtmp://live-slc.twitch.tv/app"},{"name":"US East: Ashburn, VA","url":"rtmp://live-iad.twitch.tv/app"},{"name":"US East: Atlanta, GA","url":"rtmp://live-atl.twitch.tv/app"},{"name":"US East: Chicago","url":"rtmp://live-ord.twitch.tv/app"},{"name":"US East: Miami, FL","url":"rtmp://live-mia.twitch.tv/app"},{"name":"US East: New York, NY","url":"rtmp://live-jfk.twitch.tv/app"},{"name":"US West: Los Angeles, CA","url":"rtmp://live-lax.twitch.tv/app"},{"name":"US West: Phoenix, AZ","url":"rtmp://live-phx.twitch.tv/app"},{"name":"US West: Portland, Oregon","url":"rtmp://live-pdx.twitch.tv/app"},{"name":"US West: San Francisco, CA","url":"rtmp://live-sfo.twitch.tv/app"},{"name":"US West: San Jose, CA","url":"rtmp://live-sjc.twitch.tv/app"},{"name":"US West: Seattle, WA","url":"rtmp://live-sea.twitch.tv/app"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"YouTube - HLS","common":false,"more_info_link":"https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison","stream_key_link":"https://www.youtube.com/live_dashboard","protocol":"HLS","supported video codecs":["h264","hevc"],"servers":[{"name":"Primary YouTube ingest server","url":"https://a.upload.youtube.com/http_upload_hls?cid={stream_key}©=0&file=out.m3u8"},{"name":"Backup YouTube ingest server","url":"https://b.upload.youtube.com/http_upload_hls?cid={stream_key}©=1&file=out.m3u8"}],"recommended":{"keyint":2,"output":"ffmpeg_hls_muxer","max video bitrate":51000,"max audio bitrate":160}},{"name":"YouTube - RTMPS","common":true,"stream_key_link":"https://www.youtube.com/live_dashboard","alt_names":["YouTube / YouTube Gaming","YouTube - RTMP","YouTube - RTMPS (Beta)"],"supported video codecs":["h264","hevc","av1"],"servers":[{"name":"Primary YouTube ingest server","url":"rtmps://a.rtmps.youtube.com:443/live2"},{"name":"Backup YouTube ingest server","url":"rtmps://b.rtmps.youtube.com:443/live2?backup=1"},{"name":"Primary YouTube ingest server (legacy RTMP)","url":"rtmp://a.rtmp.youtube.com/live2"},{"name":"Backup YouTube ingest server (legacy RTMP)","url":"rtmp://b.rtmp.youtube.com/live2?backup=1"}],"recommended":{"keyint":2,"max video bitrate":51000,"max audio bitrate":160}},{"name":"Loola.tv","common":false,"servers":[{"name":"US East: Virginia","url":"rtmp://rtmp.loola.tv/push"},{"name":"EU Central: Germany","url":"rtmp://rtmp-eu.loola.tv/push"},{"name":"South America: Brazil","url":"rtmp://rtmp-sa.loola.tv/push"},{"name":"Asia/Pacific: Singapore","url":"rtmp://rtmp-sg.loola.tv/push"},{"name":"Middle East: Bahrain","url":"rtmp://rtmp-me.loola.tv/push"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":2500,"max audio bitrate":160,"bframes":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Lovecast","servers":[{"name":"Default","url":"rtmp://live-a.lovecastapp.com:5222/app"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":8000,"max audio bitrate":192,"supported resolutions":["1920x1080","1280x720"],"max fps":30},"supported video codecs":["h264"]},{"name":"Luzento.com - RTMP","stream_key_link":"https://cms.luzento.com/dashboard/stream-key?from=OBS","servers":[{"name":"Primary","url":"rtmp://ingest.luzento.com/live"},{"name":"Primary (Test)","url":"rtmp://ingest.luzento.com/test"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":256,"bframes":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"VIMM","servers":[{"name":"Europe: Frankfurt","url":"rtmp://eu.vimm.tv/live"},{"name":"North America: Montreal","url":"rtmp://us.vimm.tv/live"}],"recommended":{"keyint":2,"max video bitrate":8000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Web.TV","servers":[{"name":"Primary","url":"rtmp://live3.origins.web.tv/liveext"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":3500,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"GoodGame.ru","servers":[{"name":"Моscow","url":"rtmp://msk.goodgame.ru:1940/live"}],"supported video codecs":["h264"]},{"name":"YouStreamer","stream_key_link":"https://www.app.youstreamer.com/stream/","servers":[{"name":"Moscow","url":"rtmp://push.youstreamer.com/in/"}],"supported video codecs":["h264"]},{"name":"Vaughn Live / iNSTAGIB","servers":[{"name":"US: Chicago, IL","url":"rtmp://live-ord.vaughnsoft.net/live"},{"name":"US: Vint Hill, VA","url":"rtmp://live-iad.vaughnsoft.net/live"},{"name":"US: Denver, CO","url":"rtmp://live-den.vaughnsoft.net/live"},{"name":"US: New York, NY","url":"rtmp://live-nyc.vaughnsoft.net/live"},{"name":"US: Miami, FL","url":"rtmp://live-mia.vaughnsoft.net/live"},{"name":"US: Seattle, WA","url":"rtmp://live-sea.vaughnsoft.net/live"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.vaughnsoft.net/live"},{"name":"EU: London, UK","url":"rtmp://live-lhr.vaughnsoft.net/live"}],"recommended":{"keyint":2,"max video bitrate":15000,"max audio bitrate":320},"supported video codecs":["h264"]},{"name":"Breakers.TV","servers":[{"name":"US: Chicago, IL","url":"rtmp://live-ord.vaughnsoft.net/live"},{"name":"US: Vint Hill, VA","url":"rtmp://live-iad.vaughnsoft.net/live"},{"name":"US: Denver, CO","url":"rtmp://live-den.vaughnsoft.net/live"},{"name":"US: New York, NY","url":"rtmp://live-nyc.vaughnsoft.net/live"},{"name":"US: Miami, FL","url":"rtmp://live-mia.vaughnsoft.net/live"},{"name":"US: Seattle, WA","url":"rtmp://live-sea.vaughnsoft.net/live"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-ams.vaughnsoft.net/live"},{"name":"EU: London, UK","url":"rtmp://live-lhr.vaughnsoft.net/live"}],"recommended":{"keyint":2,"max video bitrate":15000,"max audio bitrate":320},"supported video codecs":["h264"]},{"name":"Facebook Live","common":true,"stream_key_link":"https://www.facebook.com/live/producer?ref=OBS","servers":[{"name":"Default","url":"rtmps://rtmp-api.facebook.com:443/rtmp/"}],"recommended":{"keyint":2,"profile":"main","supported resolutions":["1920x1080","1280x720","852x480","640x360"],"bitrate matrix":[{"res":"640x360","fps":30,"max bitrate":1000},{"res":"640x360","fps":60,"max bitrate":1500},{"res":"852x480","fps":30,"max bitrate":2000},{"res":"852x480","fps":60,"max bitrate":3000},{"res":"1280x720","fps":30,"max bitrate":4000},{"res":"1280x720","fps":60,"max bitrate":6000},{"res":"1920x1080","fps":30,"max bitrate":6000},{"res":"1920x1080","fps":60,"max bitrate":9000}],"max fps":60,"max video bitrate":9000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Restream.io","alt_names":["Restream.io - RTMP","Restream.io - FTL"],"common":true,"stream_key_link":"https://restream.io/settings/streaming-setup?from=OBS","servers":[{"name":"Autodetect","url":"rtmp://live.restream.io/live"},{"name":"EU-West (London, GB)","url":"rtmp://london.restream.io/live"},{"name":"EU-West (Amsterdam, NL)","url":"rtmp://amsterdam.restream.io/live"},{"name":"EU-West (Paris, FR)","url":"rtmp://paris.restream.io/live"},{"name":"EU-Central (Frankfurt, DE)","url":"rtmp://frankfurt.restream.io/live"},{"name":"EU-South (Madrid, Spain)","url":"rtmp://madrid.restream.io/live"},{"name":"Turkey (Istanbul)","url":"rtmp://istanbul.restream.io/live"},{"name":"US-West (Seattle, WA)","url":"rtmp://seattle.restream.io/live"},{"name":"US-West (San Jose, CA)","url":"rtmp://sanjose.restream.io/live"},{"name":"US-Central (Dallas, TX)","url":"rtmp://dallas.restream.io/live"},{"name":"US-East (Chicago, IL)","url":"rtmp://chicago.restream.io/live"},{"name":"US-East (New York, NY)","url":"rtmp://newyork.restream.io/live"},{"name":"US-East (Washington, DC)","url":"rtmp://washington.restream.io/live"},{"name":"NA-East (Toronto, Canada)","url":"rtmp://toronto.restream.io/live"},{"name":"SA (Saint Paul, Brazil)","url":"rtmp://saopaulo.restream.io/live"},{"name":"India (Bangalore)","url":"rtmp://bangalore.restream.io/live"},{"name":"Asia (Hong Kong)","url":"rtmp://hongkong.restream.io/live"},{"name":"Asia (Singapore)","url":"rtmp://singapore.restream.io/live"},{"name":"Asia (Seoul, South Korea)","url":"rtmp://seoul.restream.io/live"},{"name":"Asia (Tokyo, Japan)","url":"rtmp://tokyo.restream.io/live"},{"name":"Australia (Sydney)","url":"rtmp://sydney.restream.io/live"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Castr.io","servers":[{"name":"US-East (Chicago, IL)","url":"rtmp://cg.castr.io/static"},{"name":"US-East (New York, NY)","url":"rtmp://ny.castr.io/static"},{"name":"US-East (Miami, FL)","url":"rtmp://mi.castr.io/static"},{"name":"US-West (Seattle, WA)","url":"rtmp://se.castr.io/static"},{"name":"US-West (Los Angeles, CA)","url":"rtmp://la.castr.io/static"},{"name":"US-Central (Dallas, TX)","url":"rtmp://da.castr.io/static"},{"name":"NA-East (Toronto, CA)","url":"rtmp://qc.castr.io/static"},{"name":"SA (Sao Paulo, BR)","url":"rtmp://br.castr.io/static"},{"name":"EU-West (London, UK)","url":"rtmp://uk.castr.io/static"},{"name":"EU-Central (Frankfurt, DE)","url":"rtmp://fr.castr.io/static"},{"name":"Russia (Moscow)","url":"rtmp://ru.castr.io/static"},{"name":"Asia (Singapore)","url":"rtmp://sg.castr.io/static"},{"name":"Asia (India)","url":"rtmp://in.castr.io/static"},{"name":"Australia (Sydney)","url":"rtmp://au.castr.io/static"},{"name":"US Central","url":"rtmp://us-central.castr.io/static"},{"name":"US West","url":"rtmp://us-west.castr.io/static"},{"name":"US East","url":"rtmp://us-east.castr.io/static"},{"name":"US South","url":"rtmp://us-south.castr.io/static"},{"name":"South America","url":"rtmp://south-am.castr.io/static"},{"name":"EU Central","url":"rtmp://eu-central.castr.io/static"},{"name":"Singapore","url":"rtmp://sg-central.castr.io/static"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Boomstream","servers":[{"name":"Default","url":"rtmp://live.boomstream.com/live"}],"supported video codecs":["h264"]},{"name":"Meridix Live Sports Platform","servers":[{"name":"Primary","url":"rtmp://publish.meridix.com/live"}],"recommended":{"max video bitrate":3500},"supported video codecs":["h264"]},{"name":"AfreecaTV","alt_names":["아프리카TV","Afreeca.TV"],"servers":[{"name":"Asia : Korea","url":"rtmp://rtmpmanager-freecat.afreeca.tv/app"},{"name":"North America : US East","url":"rtmp://rtmp-esu.afreecatv.com/app"},{"name":"North America : US West","url":"rtmp://rtmp-wsu.afreecatv.com/app"},{"name":"South America : Brazil","url":"rtmp://rtmp-brz.afreecatv.com/app"},{"name":"Europe : UK","url":"rtmp://rtmp-uk.afreecatv.com/app"},{"name":"Asia : Singapore","url":"rtmp://rtmp-sgp.afreecatv.com/app"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"CAM4","servers":[{"name":"CAM4","url":"rtmp://origin.cam4.com/cam4-origin-live"}],"recommended":{"keyint":1,"profile":"baseline","max video bitrate":3000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"ePlay","servers":[{"name":"ePlay Primary","url":"rtmp://live.eplay.link/origin"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":7500,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Picarto","servers":[{"name":"Autoselect closest server","url":"rtmp://live.us.picarto.tv/golive"},{"name":"Los Angeles, USA","url":"rtmp://live.us-losangeles.picarto.tv/golive"},{"name":"Dallas, USA","url":"rtmp://live.us-dallas.picarto.tv/golive"},{"name":"Miami, USA","url":"rtmp://live.us-miami.picarto.tv/golive"},{"name":"New York, USA","url":"rtmp://live.us-newyork.picarto.tv/golive"},{"name":"Europe","url":"rtmp://live.eu-west1.picarto.tv/golive"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":3500},"supported video codecs":["h264"]},{"name":"Livestream","servers":[{"name":"Primary","url":"rtmp://rtmpin.livestreamingest.com/rtmpin"}],"supported video codecs":["h264"]},{"name":"Uscreen","servers":[{"name":"Default","url":"rtmp://global-live.uscreen.app:5222/app"}],"recommended":{"keyint":2,"max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Stripchat","servers":[{"name":"Auto","url":"rtmp://live.doppiocdn.com/ext"}],"recommended":{"keyint":2,"profile":"main","bframes":0,"max video bitrate":6000,"max audio bitrate":128,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"CamSoda","servers":[{"name":"North America","url":"rtmp://obs-ingest-na.livemediahost.com/cam_obs"},{"name":"South America","url":"rtmp://obs-ingest-sa.livemediahost.com/cam_obs"},{"name":"Asia","url":"rtmp://obs-ingest-as.livemediahost.com/cam_obs"},{"name":"Europe","url":"rtmp://obs-ingest-eu.livemediahost.com/cam_obs"},{"name":"Oceania","url":"rtmp://obs-ingest-oc.livemediahost.com/cam_obs"}],"recommended":{"supported resolutions":["1920x1080","1280x720","852x480","480x360"],"max fps":30,"max video bitrate":6000,"max audio bitrate":160,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Chaturbate","servers":[{"name":"Global Main Fastest - Recommended","url":"rtmp://live.stream.highwebmedia.com/live-origin"},{"name":"Global Backup","url":"rtmp://live-backup.stream.highwebmedia.com/live-origin"},{"name":"US West: Seattle, WA","url":"rtmp://live-sea.stream.highwebmedia.com/live-origin"},{"name":"US West: Phoenix, AZ","url":"rtmp://live-phx.stream.highwebmedia.com/live-origin"},{"name":"US Central: Salt Lake City, UT","url":"rtmp://live-slc.stream.highwebmedia.com/live-origin"},{"name":"US Central: Chicago, IL","url":"rtmp://live-chi.stream.highwebmedia.com/live-origin"},{"name":"US East: Atlanta, GA","url":"rtmp://live-atl.stream.highwebmedia.com/live-origin"},{"name":"US East: Ashburn, VA","url":"rtmp://live-ash.stream.highwebmedia.com/live-origin"},{"name":"South America: Sao Paulo, Brazil","url":"rtmp://live-gru.stream.highwebmedia.com/live-origin"},{"name":"EU: Amsterdam, NL","url":"rtmp://live-nld.stream.highwebmedia.com/live-origin"},{"name":"EU: Alblasserdam, NL","url":"rtmp://live-alb.stream.highwebmedia.com/live-origin"},{"name":"EU: Frankfurt, DE","url":"rtmp://live-fra.stream.highwebmedia.com/live-origin"},{"name":"EU: Belgrade, Serbia","url":"rtmp://live-srb.stream.highwebmedia.com/live-origin"},{"name":"Asia: Singapore","url":"rtmp://live-sin.stream.highwebmedia.com/live-origin"},{"name":"Asia: Tokyo, Japan","url":"rtmp://live-nrt.stream.highwebmedia.com/live-origin"},{"name":"Australia: Sydney","url":"rtmp://live-syd.stream.highwebmedia.com/live-origin"}],"recommended":{"keyint":2,"max video bitrate":50000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"WpStream","more_info_link":"https://wpstream.net/obs-more-info","stream_key_link":"https://wpstream.net/obs-get-stream-key","servers":[{"name":"Closest server - Automatic","url":"rtmp://ingest.wpstream.net/golive"},{"name":"North America","url":"rtmp://ingest-na.wpstream.net/golive"},{"name":"Europe","url":"rtmp://ingest-eu.wpstream.net/golive"},{"name":"Asia","url":"rtmp://ingest-as.wpstream.net/golive"},{"name":"South America","url":"rtmp://ingest-sa.wpstream.net/golive"},{"name":"Australia & Oceania","url":"rtmp://ingest-au.wpstream.net/golive"}],"recommended":{"keyint":2,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Twitter","common":true,"stream_key_link":"https://studio.twitter.com/producer/sources","alt_names":["Twitter / Periscope"],"servers":[{"name":"US West: California","url":"rtmp://ca.pscp.tv:80/x"},{"name":"US West: Oregon","url":"rtmp://or.pscp.tv:80/x"},{"name":"US East: Virginia","url":"rtmp://va.pscp.tv:80/x"},{"name":"South America: Brazil","url":"rtmp://br.pscp.tv:80/x"},{"name":"EU West: France","url":"rtmp://fr.pscp.tv:80/x"},{"name":"EU West: Ireland","url":"rtmp://ie.pscp.tv:80/x"},{"name":"EU Central: Germany","url":"rtmp://de.pscp.tv:80/x"},{"name":"Asia/Pacific: Australia","url":"rtmp://au.pscp.tv:80/x"},{"name":"Asia/Pacific: India","url":"rtmp://in.pscp.tv:80/x"},{"name":"Asia/Pacific: Japan","url":"rtmp://jp.pscp.tv:80/x"},{"name":"Asia/Pacific: Korea","url":"rtmp://kr.pscp.tv:80/x"},{"name":"Asia/Pacific: Singapore","url":"rtmp://sg.pscp.tv:80/x"}],"recommended":{"keyint":3,"max video bitrate":12000,"max audio bitrate":128,"max fps":60},"supported video codecs":["h264"]},{"name":"Switchboard Live","alt_names":["Switchboard Live (Joicaster)"],"servers":[{"name":"Global - Recommended","url":"rtmps://live.sb.zone:443/live"},{"name":"Global - Legacy","url":"rtmp://ingest-global.switchboard.zone/live"}],"recommended":{"keyint":2,"profile":"high"},"supported video codecs":["h264"]},{"name":"Looch","common":false,"servers":[{"name":"Primary Looch ingest server","url":"rtmp://ingest.looch.tv/live"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Eventials","servers":[{"name":"Default","url":"rtmp://transmission.eventials.com/eventialsLiveOrigin"}],"recommended":{"keyint":1,"profile":"baseline","max video bitrate":900,"max audio bitrate":96},"supported video codecs":["h264"]},{"name":"EventLive.pro","servers":[{"name":"Default","url":"rtmp://go.eventlive.pro/live"}],"recommended":{"keyint":2,"max video bitrate":3000,"max audio bitrate":192,"supported resolutions":["1920x1080","1280x720"],"max fps":30},"supported video codecs":["h264"]},{"name":"Lahzenegar - StreamG | لحظه‌نگار - استریمجی","servers":[{"name":"Primary","url":"rtmp://rtmp.lahzecdn.com/pro"},{"name":"Iran","url":"rtmp://rtmp-iran.lahzecdn.com/pro"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":4000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"MyLive","servers":[{"name":"Default","url":"rtmp://stream.mylive.in.th/live"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":7000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Trovo","alt_names":["Madcat"],"stream_key_link":"https://studio.trovo.live/mychannel/stream","servers":[{"name":"Default","url":"rtmp://livepush.trovo.live/live/"}],"recommended":{"keyint":2,"max video bitrate":9000,"max audio bitrate":160,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"Mixcloud","servers":[{"name":"Default","url":"rtmp://rtmp.mixcloud.com/broadcast"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"supported resolutions":["1280x720","852x480","480x360"],"max fps":30,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"SermonAudio Cloud","alt_names":["SermonAudio.com"],"servers":[{"name":"Primary","url":"rtmp://webcast.sermonaudio.com/sa"}],"recommended":{"max video bitrate":2000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Vimeo","servers":[{"name":"Default","url":"rtmp://rtmp.cloud.vimeo.com/live"}],"supported video codecs":["h264"]},{"name":"Aparat","servers":[{"name":"Default","url":"rtmp://rtmp.cdn.asset.aparat.com:443/event"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":320,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"KakaoTV","servers":[{"name":"Default","url":"rtmp://rtmp.play.kakao.com/kakaotv"}],"recommended":{"max video bitrate":8000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Piczel.tv","servers":[{"name":"Default","url":"rtmp://piczel.tv:1935/live"}],"recommended":{"keyint":4,"max video bitrate":2500,"max audio bitrate":256,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"STAGE TEN","servers":[{"name":"STAGE TEN","url":"rtmps://app-rtmp.stageten.tv:443/stageten"}],"recommended":{"keyint":2,"profile":"baseline","max video bitrate":4000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"DLive","servers":[{"name":"Default","url":"rtmp://stream.dlive.tv/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Lightcast.com","servers":[{"name":"North America / East","url":"rtmp://us-east.live.lightcast.com/202E1F/default"},{"name":"North America / West","url":"rtmp://us-west.live.lightcast.com/202E1F/default"},{"name":"Europe / Amsterdam","url":"rtmp://europe.live.lightcast.com/202E1F/default"},{"name":"Europe / Frankfurt","url":"rtmp://europe-fra.live.lightcast.com/202E1F/default"},{"name":"Europe / Stockholm","url":"rtmp://europe-sto.live.lightcast.com/202E1F/default"},{"name":"Asia / Hong Kong","url":"rtmp://asia.live.lightcast.com/202E1F/default"},{"name":"Australia / Sydney","url":"rtmp://australia.live.lightcast.com/202E1F/default"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Bongacams","servers":[{"name":"Automatic / Default","url":"rtmp://auto.origin.gnsbc.com:1934/live"},{"name":"Automatic / Backup","url":"rtmp://origin.bcvidorigin.com:1934/live"},{"name":"Europe","url":"rtmp://z-eu.origin.gnsbc.com:1934/live"},{"name":"North America","url":"rtmp://z-us.origin.gnsbc.com:1934/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":192,"bframes":0,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Chathostess","servers":[{"name":"Chathostess - Backup","url":"rtmp://wowza05.foobarweb.com/cmschatsys_video"}],"recommended":{"keyint":2,"max video bitrate":3600,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"OnlyFans.com","servers":[{"name":"USA","url":"rtmp://route0.onlyfans.com/live"},{"name":"Europe","url":"rtmp://route0-dc2.onlyfans.com/live"}],"recommended":{"keyint":2,"profile":"main","max video bitrate":2500,"max audio bitrate":192,"bframes":0,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"YouNow","common":false,"protocol":"FTL","servers":[{"name":"younow.com","url":"https://api.younow.com/php/api/broadcast/ingest?id="}],"recommended":{"keyint":2,"output":"ftl_output","max audio bitrate":160,"max video bitrate":7000,"profile":"main","bframes":0}},{"name":"Steam","common":false,"servers":[{"name":"Default","url":"rtmp://ingest-rtmp.broadcast.steamcontent.com/app"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":7000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Konduit.live","servers":[{"name":"Default","url":"rtmp://rtmp.konduit.live/live"}],"recommended":{"keyint":2,"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"LOCO","servers":[{"name":"Default","url":"rtmp://ivory-ingest.getloconow.com:1935/stream"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"niconico, premium member (ニコニコ生放送 プレミアム会員)","servers":[{"name":"Default","url":"rtmp://aliveorigin.dmc.nico/named_input"}],"recommended":{"keyint":2,"profile":"high","max audio bitrate":192,"max video bitrate":5808,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"niconico, free member (ニコニコ生放送 一般会員)","servers":[{"name":"Default","url":"rtmp://aliveorigin.dmc.nico/named_input"}],"recommended":{"keyint":2,"profile":"high","max audio bitrate":96,"max video bitrate":904,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"WASD.TV","servers":[{"name":"Automatic","url":"rtmp://push.rtmp.wasd.tv/live"},{"name":"Russia, Moscow","url":"rtmp://ru-moscow.rtmp.wasd.tv/live"},{"name":"Germany, Frankfurt","url":"rtmp://de-frankfurt.rtmp.wasd.tv/live"},{"name":"Finland, Helsinki","url":"rtmp://fi-helsinki.rtmp.wasd.tv/live"}],"recommended":{"keyint":2,"max video bitrate":10000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Nimo TV","servers":[{"name":"Global:1","url":"rtmp://wspush.rtmp.nimo.tv/live/"},{"name":"Global:2","url":"rtmp://txpush.rtmp.nimo.tv/live/"},{"name":"Global:3","url":"rtmp://alpush.rtmp.nimo.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"XLoveCam.com","servers":[{"name":"Europe(main)","url":"rtmp://nl.eu.stream.xlove.com/performer-origin"},{"name":"Europe(Romania)","url":"rtmp://ro.eu.stream.xlove.com/performer-origin"},{"name":"Europe(Russia)","url":"rtmp://ru.eu.stream.xlove.com/performer-origin"},{"name":"North America(US East)","url":"rtmp://usec.na.stream.xlove.com/performer-origin"},{"name":"North America(US West)","url":"rtmp://uswc.na.stream.xlove.com/performer-origin"},{"name":"North America(Canada)","url":"rtmp://ca.na.stream.xlove.com/performer-origin"},{"name":"South America","url":"rtmp://co.sa.stream.xlove.com/performer-origin"},{"name":"Asia","url":"rtmp://sg.as.stream.xlove.com/performer-origin"}],"recommended":{"x264opts":"scenecut=0"},"supported video codecs":["h264"]},{"name":"AngelThump","servers":[{"name":"Auto","url":"rtmp://ingest.angelthump.com/live"},{"name":"New York 3","url":"rtmp://nyc-ingest.angelthump.com:1935/live"},{"name":"San Francisco 2","url":"rtmp://sfo-ingest.angelthump.com:1935/live"},{"name":"Singapore 1","url":"rtmp://sgp-ingest.angelthump.com:1935/live"},{"name":"London 1","url":"rtmp://lon-ingest.angelthump.com:1935/live"},{"name":"Frankfurt 1","url":"rtmp://fra-ingest.angelthump.com:1935/live"},{"name":"Toronto 1","url":"rtmp://tor-ingest.angelthump.com:1935/live"},{"name":"Amsterdam 3","url":"rtmp://ams-ingest.angelthump.com:1935/live"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":3500,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"api.video","servers":[{"name":"Default","url":"rtmp://broadcast.api.video/s"}],"recommended":{"keyint":2,"max video bitrate":20000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"SHOWROOM","protocol":"RTMP","servers":[{"name":"Default","url":"https://www.showroom-live.com/api/obs/streaming_info?obs_key="}],"recommended":{"keyint":2,"profile":"main","max video bitrate":1500,"max audio bitrate":160,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Mux","servers":[{"name":"Global (RTMPS)","url":"rtmps://global-live.mux.com:443/app"},{"name":"Global (RTMP)","url":"rtmp://global-live.mux.com:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Viloud","servers":[{"name":"Default","url":"rtmp://live.viloud.tv:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"MyFreeCams","servers":[{"name":"Automatic","url":"rtmp://publish.myfreecams.com/NxServer"},{"name":"Australia","url":"rtmp://publish-syd.myfreecams.com/NxServer"},{"name":"East Asia","url":"rtmp://publish-tyo.myfreecams.com/NxServer"},{"name":"Europe (East)","url":"rtmp://publish-buh.myfreecams.com/NxServer"},{"name":"Europe (West)","url":"rtmp://publish-ams.myfreecams.com/NxServer"},{"name":"North America (East Coast)","url":"rtmp://publish-ord.myfreecams.com/NxServer"},{"name":"North America (West Coast)","url":"rtmp://publish-tuk.myfreecams.com/NxServer"},{"name":"South America","url":"rtmp://publish-sao.myfreecams.com/NxServer"}],"recommended":{"keyint":1,"profile":"high","max fps":60,"max video bitrate":10000,"max audio bitrate":192,"x264opts":"tune=zerolatency scenecut=0"},"supported video codecs":["h264"]},{"name":"PolyStreamer.com","servers":[{"name":"Auto-select closest server","url":"rtmp://live.polystreamer.com/live"},{"name":"United States - West","url":"rtmp://us-west.live.polystreamer.com/live"},{"name":"United States - East","url":"rtmp://us-east.live.polystreamer.com/live"},{"name":"Australia","url":"rtmp://aus.live.polystreamer.com/live"},{"name":"India","url":"rtmp://ind.live.polystreamer.com/live"},{"name":"Germany","url":"rtmp://deu.live.polystreamer.com/live"},{"name":"Japan","url":"rtmp://jpn.live.polystreamer.com/live"},{"name":"Singapore","url":"rtmp://sgp.live.polystreamer.com/live"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"OPENREC.tv - Premium member (プレミアム会員)","stream_key_link":"https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs","servers":[{"name":"Default","url":"rtmp://a.station.openrec.tv:1935/live1"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"nanoStream Cloud / bintu","more_info_link":"https://www.nanocosmos.de/obs","stream_key_link":"https://bintu-cloud-frontend.nanocosmos.de/organisation","servers":[{"name":"bintu-stream global ingest (rtmp)","url":"rtmp://bintu-stream.nanocosmos.de/live"},{"name":"bintu-stream global ingest (rtmps)","url":"rtmps://bintu-stream.nanocosmos.de:1937/live"},{"name":"bintu-vtrans global ingest with transcoding/ABR (rtmp)","url":"rtmp://bintu-vtrans.nanocosmos.de/live"},{"name":"bintu-vtrans global ingest with transcoding/ABR (rtmps)","url":"rtmps://bintu-vtrans.nanocosmos.de:1937/live"},{"name":"bintu-stream Europe (EU)","url":"rtmp://bintu-stream-eu.nanocosmos.de/live"},{"name":"bintu-stream USA West (USW)","url":"rtmp://bintu-stream-usw.nanocosmos.de/live"},{"name":"bintu-stream US East (USE)","url":"rtmp://bintu-stream-use.nanocosmos.de/live"},{"name":"bintu-stream Asia South (ASS)","url":"rtmp://bintu-stream-ass.nanocosmos.de/live"},{"name":"bintu-stream Australia (AU)","url":"rtmp://bintu-stream-au.nanocosmos.de/live"},{"name":"bintu-vtrans Europe (EU)","url":"rtmp://bintu-vtrans-eu.nanocosmos.de/live"},{"name":"bintu-vtrans USA West (USW)","url":"rtmp://bintu-vtrans-usw.nanocosmos.de/live"},{"name":"bintu-vtrans US East (USE)","url":"rtmp://bintu-vtrans-use.nanocosmos.de/live"},{"name":"bintu-vtrans Asia South (ASS)","url":"rtmp://bintu-vtrans-ass.nanocosmos.de/live"},{"name":"bintu-vtrans Australia (AU)","url":"rtmp://bintu-vtrans-au.nanocosmos.de/live"}],"recommended":{"keyint":2,"profile":"baseline","bframes":0,"max video bitrate":5000,"max audio bitrate":192,"x264opts":"tune=zerolatency b-pyramid=0 scenecut=0"},"supported video codecs":["h264"]},{"name":"Dacast","protocol":"RTMP","servers":[{"name":"Default","url":"https://developer.dacast.com/v3/encoder-setup/"}],"recommended":{"keyint":1,"profile":"high","max video bitrate":7000,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"Bilibili Live - RTMP | 哔哩哔哩直播 - RTMP","more_info_link":"https://link.bilibili.com/p/help/index?id=4#/tools-tutorial","stream_key_link":"https://link.bilibili.com/p/center/index#/my-room/start-live","alt_names":["Bilibili Live"],"servers":[{"name":"Global - Primary | 全球 - 主要","url":"rtmp://live-push.bilivideo.com/live-bvc/"},{"name":"Non Chinese Mainland - Primary | 非中国大陆地区 - 主要","url":"rtmp://bdy.live-push.bilivideo.com/live-bvc/"},{"name":"Chinese Mainland - Backup | 中国大陆地区 - 备用","url":"rtmp://txy2.live-push.bilivideo.com/live-bvc/"},{"name":"Non Chinese Mainland - Backup | 非中国大陆地区 - 备用","url":"rtmp://txy.live-push.bilivideo.com/live-bvc/"}],"supported video codecs":["h264"]},{"name":"Volume.com","stream_key_link":"https://volume.com/b?show_key=1&webrtc=0","servers":[{"name":"Default - Recommended","url":"rtmp://live.volume.com/live-origin"},{"name":"US - West","url":"rtmp://live-pdx.volume.com/live-origin"},{"name":"US - East","url":"rtmp://live-ash.volume.com/live-origin"}],"recommended":{"keyint":2,"max video bitrate":20000,"max fps":60},"supported video codecs":["h264"]},{"name":"BoxCast","stream_key_link":"https://dashboard.boxcast.com/#/sources","servers":[{"name":"BoxCast","url":"rtmp://rtmp.boxcast.com/live"}],"supported video codecs":["h264"]},{"name":"Disciple Media","servers":[{"name":"Default","url":"rtmp://rtmp.disciplemedia.com/b-fme"}],"supported video codecs":["h264"]},{"name":"Jio Games","servers":[{"name":"Primary","url":"rtmp://livepub1.api.engageapps.jio/live"},{"name":"Secondary","url":"rtmp://livepub2.api.engageapps.jio/live"}],"recommended":{"keyint":2,"max video bitrate":32000,"max audio bitrate":256},"supported video codecs":["h264"]},{"name":"Kuaishou Live","stream_key_link":"https://studio.kuaishou.com/live/list","servers":[{"name":"Default","url":"rtmp://open-push.voip.yximgs.com/gifshow/"},{"name":"North America","url":"rtmp://tx.push.yximgs.com/live/"}],"supported video codecs":["h264"]},{"name":"Utreon","servers":[{"name":"Default","url":"rtmp://live.utreon.com:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Autistici.org Live","servers":[{"name":"Default","url":"rtmp://live.autistici.org/ingest"}],"recommended":{"keyint":2,"max video bitrate":2500,"max audio bitrate":128},"supported video codecs":["h264"]},{"name":"PhoneLiveStreaming","stream_key_link":"https://app.phonelivestreaming.com/media/rtmp","servers":[{"name":"PhoneLiveStreaming","url":"rtmp://live.phonelivestreaming.com/live/"}],"recommended":{"keyint":2,"max video bitrate":128,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Fantasy.Club","stream_key_link":"https://fantasy.club/app/create-content/stream-now","more_info_link":"https://help.fantasy.club/","servers":[{"name":"US: East","url":"rtmp://live-east.fantasy.club/live"},{"name":"US: West","url":"rtmp://live-west.fantasy.club/live"},{"name":"Europe","url":"rtmp://live-eu.fantasy.club/live"},{"name":"South America","url":"rtmp://live-sa.fantasy.club/live"}],"recommended":{"keyint":2,"profile":"high","bframes":0,"x264opts":"scenecut=0","supported resolutions":["1920x1080","1280x720","852x480"],"bitrate matrix":[{"res":"852x480","fps":30,"max bitrate":1200},{"res":"1280x720","fps":30,"max bitrate":3600},{"res":"1280x720","fps":60,"max bitrate":4200},{"res":"1920x1080","fps":30,"max bitrate":5000},{"res":"1920x1080","fps":60,"max bitrate":7200}],"max fps":60,"max video bitrate":7200,"max audio bitrate":196},"supported video codecs":["h264"]},{"name":"Sympla","servers":[{"name":"Sympla RTMP","url":"rtmp://rtmp.sympla.com.br:5222/app"}],"recommended":{"keyint":2,"max video bitrate":5000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Mildom","more_info_link":"https://support.mildom.com/hc/ja/articles/360056569954","stream_key_link":"https://www.mildom.com/creator/live","servers":[{"name":"Global","url":"rtmp://txlvb-push.mildom.tv/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"Nonolive","more_info_link":"https://wia.nonolive.com/views/obs_assistant_tutorial.html","stream_key_link":"https://www.nonolive.com/room_setting","servers":[{"name":"Asia: Hong Kong, China","url":"rtmp://live-hk-zl.nonolive.tv/live"},{"name":"Asia: Jakarta, Indonesia","url":"rtmp://live-jkt-zl.nonolive.tv/live"},{"name":"EU: Frankfurt, DE","url":"rtmp://live-fra-zl.nonolive.tv/live"}],"recommended":{"keyint":2,"max video bitrate":6000,"max audio bitrate":160},"supported video codecs":["h264"]},{"name":"StreamVi","stream_key_link":"https://streamvi.ru/settings","servers":[{"name":"Default","url":"rtmp://live-default.streamvi.ru/live"},{"name":"Russia: Moscow","url":"rtmp://live-msk.streamvi.ru/live"},{"name":"EU Central: Germany","url":"rtmp://live-germany.streamvi.ru/live"},{"name":"Russia: Novosibirsk","url":"rtmp://live-novosib.streamvi.ru/live"}],"supported video codecs":["h264"]},{"name":"Livepush","more_info_link":"https://docs.livepush.io/en/articles/5065323-how-to-stream-live-from-obs-to-livepush","servers":[{"name":"Livepush Global (Default)","url":"rtmp://dc-global.livepush.io/live"},{"name":"Chicago, US","url":"rtmp://us-central-ch.livepush.io/live"},{"name":"New York, US","url":"rtmp://us-east-ny.livepush.io/live"},{"name":"Los Angeles, US","url":"rtmp://us-west-la.livepush.io/live"},{"name":"Miami, US","url":"rtmp://us-south-mia.livepush.io/live"},{"name":"Dallas, US","url":"rtmp://us-central-dal.livepush.io/live"},{"name":"Montreal, CA","url":"rtmp://ca-central-mon.livepush.io/live"},{"name":"Toronto, CA","url":"rtmp://ca-south-tor.livepush.io/live"},{"name":"Sydney, AU","url":"rtmp://au-east-syd.livepush.io/live"},{"name":"London, UK","url":"rtmp://uk-central-ldn.livepush.io/live"},{"name":"Milan, Italy","url":"rtmp://it-north-mln.livepush.io/live"},{"name":"Paris, FR","url":"rtmp://fr-central-par.livepush.io/live"},{"name":"Singapore","url":"rtmp://as-southeast-sg.livepush.io/live"},{"name":"Bangalore, IN","url":"rtmp://in-south-blr.livepush.io/live"},{"name":"Turkiye","url":"rtmp://tr-north-ist.livepush.io/live"}],"recommended":{"keyint":2,"max video bitrate":16000},"supported video codecs":["h264"]},{"name":"Vindral","more_info_link":"https://docs.vindral.com/docs/vindral-cdn/","stream_key_link":"https://portal.cdn.vindral.com/channels","servers":[{"name":"Global","url":"rtmps://rtmp.global.cdn.vindral.com/publish"}],"recommended":{"keyint":1,"profile":"high","bframes":0,"max video bitrate":20000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Whowatch (ふわっち)","more_info_link":"https://whowatch.tv/help/encoder","stream_key_link":"https://whowatch.tv/publish","servers":[{"name":"default","url":"rtmp://live.whowatch.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":1800,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"IRLToolkit","stream_key_link":"https://irl.run/settings/ingest/","servers":[{"name":"Global (Recommended)","url":"rtmp://stream.global.irl.run/ingest"},{"name":"Los Angeles, US","url":"rtmp://stream.lax.irl.run/ingest"},{"name":"New York, US","url":"rtmp://stream.ewr.irl.run/ingest"},{"name":"Rotterdam, NL","url":"rtmp://stream.rtm.irl.run/ingest"},{"name":"Singapore","url":"rtmp://stream.sin.irl.run/ingest"},{"name":"Tokyo, JP","url":"rtmp://stream.tyo.irl.run/ingest"},{"name":"Sydney, AU","url":"rtmp://stream.syd.irl.run/ingest"}],"recommended":{"keyint":2,"bframes":2,"max video bitrate":20000},"supported video codecs":["h264"]},{"name":"Bitmovin","more_info_link":"https://developer.bitmovin.com/docs/overview","stream_key_link":"https://bitmovin.com/dashboard/streams?streamsTab=LIVE","servers":[{"name":"Streams Live","url":"rtmp://live-input.bitmovin.com/streams"}],"recommended":{"keyint":2},"supported video codecs":["h264"]},{"name":"Live Streamer Cafe","more_info_link":"https://livestreamercafe.com/help.php","stream_key_link":"https://livestreamercafe.com/profile.php","servers":[{"name":"Live Streamer Cafe Server","url":"rtmp://tophicles.com/live"}],"recommended":{"keyint":2,"max video bitrate":6000},"supported video codecs":["h264"]},{"name":"Enchant.events","more_info_link":"https://docs.enchant.events/knowledge-base-y4pOb","servers":[{"name":"Primary RTMPS","url":"rtmps://stream.enchant.cloud:443/live"}],"recommended":{"keyint":2,"profile":"high","max video bitrate":9000,"max audio bitrate":192},"supported video codecs":["h264"]},{"name":"Joystick.TV","more_info_link":"https://support.joystick.tv/support/creator-support/setting-up-your-stream/","stream_key_link":"https://joystick.tv/stream-settings","servers":[{"name":"RTMP","url":"rtmp://live.joystick.tv/live/"}],"recommended":{"keyint":2,"max video bitrate":7500,"max audio bitrate":192,"profile":"main","bframes":0,"x264opts":"tune=zerolatency"},"supported video codecs":["h264"]},{"name":"Livepeer Studio","more_info_link":"https://docs.livepeer.org/guides/developing/stream-via-obs","stream_key_link":"https://livepeer.studio/dashboard/streams","servers":[{"name":"Global (RTMP)","url":"rtmp://rtmp.livepeer.com/live"},{"name":"Global (RTMP Primary)","url":"rtmp://rtmp-a.livepeer.com/live"},{"name":"Global (RTMP Backup)","url":"rtmp://rtmp-b.livepeer.com/live"}],"recommended":{"keyint":1,"profile":"high","bframes":0,"max video bitrate":20000,"max audio bitrate":512},"supported video codecs":["h264"]},{"name":"VStream","common":false,"stream_key_link":"https://vstream.com/dashboard/livestreams","more_info_link":"https://vstream.com/help/streaming-with-obs","servers":[{"name":"Global (RTMP)","url":"rtmp://live.vstream.com"}],"recommended":{"keyint":2,"profile":"high","x264opts":"scenecut=0","supported resolutions":["1920x1080","1280x720","852x480"],"bitrate matrix":[{"res":"1920x1080","fps":60,"max bitrate":8000},{"res":"1920x1080","fps":30,"max bitrate":6000},{"res":"1280x720","fps":60,"max bitrate":6000},{"res":"1280x720","fps":30,"max bitrate":4000},{"res":"852x480","fps":60,"max bitrate":3000},{"res":"852x480","fps":30,"max bitrate":2000}],"max fps":60,"max video bitrate":8000,"max audio bitrate":320},"supported video codecs":["h264"]}]} diff --git a/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json b/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json new file mode 100644 index 0000000..aec8333 --- /dev/null +++ b/.config/obs-studio/plugin_config/rtmp-services/twitch_ingests.json @@ -0,0 +1,733 @@ +{ + "ingests": [ + { + "_id": 0, + "availability": 1.0, + "default": false, + "name": "US East: Chicago, IL (56)", + "url_template": "rtmp://ord56.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ord56.contribute.live-video.net/app/{stream_key}", + "priority": 0 + }, + { + "_id": 1, + "availability": 1.0, + "default": false, + "name": "US East: Chicago, IL (3)", + "url_template": "rtmp://ord03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ord03.contribute.live-video.net/app/{stream_key}", + "priority": 1 + }, + { + "_id": 2, + "availability": 1.0, + "default": false, + "name": "NA: Canada, Toronto", + "url_template": "rtmp://yto.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://yto.contribute.live-video.net/app/{stream_key}", + "priority": 2 + }, + { + "_id": 3, + "availability": 1.0, + "default": false, + "name": "US East: Ashburn, VA (5)", + "url_template": "rtmp://iad05.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://iad05.contribute.live-video.net/app/{stream_key}", + "priority": 3 + }, + { + "_id": 4, + "availability": 1.0, + "default": false, + "name": "US East: Ashburn, VA (3)", + "url_template": "rtmp://iad03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://iad03.contribute.live-video.net/app/{stream_key}", + "priority": 4 + }, + { + "_id": 5, + "availability": 1.0, + "default": false, + "name": "US East: Atlanta, GA", + "url_template": "rtmp://atl.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://atl.contribute.live-video.net/app/{stream_key}", + "priority": 5 + }, + { + "_id": 6, + "availability": 1.0, + "default": false, + "name": "US East: New York, NY (50)", + "url_template": "rtmp://jfk50.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://jfk50.contribute.live-video.net/app/{stream_key}", + "priority": 6 + }, + { + "_id": 7, + "availability": 1.0, + "default": false, + "name": "US East: New York, NY", + "url_template": "rtmp://jfk.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://jfk.contribute.live-video.net/app/{stream_key}", + "priority": 7 + }, + { + "_id": 8, + "availability": 1.0, + "default": false, + "name": "US Central: Garland, TX (56)", + "url_template": "rtmp://dfw56.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://dfw56.contribute.live-video.net/app/{stream_key}", + "priority": 8 + }, + { + "_id": 9, + "availability": 1.0, + "default": false, + "name": "US Central: Dallas, TX (2)", + "url_template": "rtmp://dfw02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://dfw02.contribute.live-video.net/app/{stream_key}", + "priority": 9 + }, + { + "_id": 10, + "availability": 1.0, + "default": false, + "name": "US Central: Dallas, TX", + "url_template": "rtmp://dfw.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://dfw.contribute.live-video.net/app/{stream_key}", + "priority": 10 + }, + { + "_id": 11, + "availability": 1.0, + "default": false, + "name": "US Central: Denver, CO (52)", + "url_template": "rtmp://den52.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://den52.contribute.live-video.net/app/{stream_key}", + "priority": 11 + }, + { + "_id": 12, + "availability": 1.0, + "default": false, + "name": "US Central: Houston, TX (50)", + "url_template": "rtmp://iah50.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://iah50.contribute.live-video.net/app/{stream_key}", + "priority": 12 + }, + { + "_id": 13, + "availability": 1.0, + "default": false, + "name": "US East: Miami, FL (5)", + "url_template": "rtmp://mia05.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mia05.contribute.live-video.net/app/{stream_key}", + "priority": 13 + }, + { + "_id": 14, + "availability": 1.0, + "default": false, + "name": "US East: McAllen, TX (1)", + "url_template": "rtmp://mfe01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mfe01.contribute.live-video.net/app/{stream_key}", + "priority": 14 + }, + { + "_id": 15, + "availability": 1.0, + "default": false, + "name": "US West: Salt Lake City, UT", + "url_template": "rtmp://slc.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://slc.contribute.live-video.net/app/{stream_key}", + "priority": 15 + }, + { + "_id": 16, + "availability": 1.0, + "default": false, + "name": "NA: Mexico, Queretaro (3)", + "url_template": "rtmp://qro03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://qro03.contribute.live-video.net/app/{stream_key}", + "priority": 16 + }, + { + "_id": 17, + "availability": 1.0, + "default": false, + "name": "NA: Mexico, Queretaro (4)", + "url_template": "rtmp://qro04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://qro04.contribute.live-video.net/app/{stream_key}", + "priority": 17 + }, + { + "_id": 18, + "availability": 1.0, + "default": false, + "name": "US West: Seattle, WA", + "url_template": "rtmp://sea.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sea.contribute.live-video.net/app/{stream_key}", + "priority": 18 + }, + { + "_id": 19, + "availability": 1.0, + "default": false, + "name": "US West: Seattle, WA (2)", + "url_template": "rtmp://sea02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sea02.contribute.live-video.net/app/{stream_key}", + "priority": 19 + }, + { + "_id": 20, + "availability": 1.0, + "default": false, + "name": "US West: Los Angeles, CA", + "url_template": "rtmp://lax.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://lax.contribute.live-video.net/app/{stream_key}", + "priority": 20 + }, + { + "_id": 21, + "availability": 1.0, + "default": false, + "name": "US West: Portland, OR", + "url_template": "rtmp://pdx.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://pdx.contribute.live-video.net/app/{stream_key}", + "priority": 21 + }, + { + "_id": 22, + "availability": 1.0, + "default": false, + "name": "US West: San Jose, California (6)", + "url_template": "rtmp://sjc06.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sjc06.contribute.live-video.net/app/{stream_key}", + "priority": 22 + }, + { + "_id": 23, + "availability": 1.0, + "default": true, + "name": "US West: San Francisco, CA", + "url_template": "rtmp://sfo.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sfo.contribute.live-video.net/app/{stream_key}", + "priority": 23 + }, + { + "_id": 24, + "availability": 1.0, + "default": false, + "name": "South America: Colombia, Bogota (1)", + "url_template": "rtmp://bog01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://bog01.contribute.live-video.net/app/{stream_key}", + "priority": 24 + }, + { + "_id": 25, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Frankfurt (2)", + "url_template": "rtmp://fra02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://fra02.contribute.live-video.net/app/{stream_key}", + "priority": 25 + }, + { + "_id": 26, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Frankfurt (5)", + "url_template": "rtmp://fra05.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://fra05.contribute.live-video.net/app/{stream_key}", + "priority": 26 + }, + { + "_id": 27, + "availability": 1.0, + "default": false, + "name": "Asia: India, New Delhi", + "url_template": "rtmp://del01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://del01.contribute.live-video.net/app/{stream_key}", + "priority": 27 + }, + { + "_id": 28, + "availability": 1.0, + "default": false, + "name": "Europe: UK, London (8)", + "url_template": "rtmp://lhr08.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://lhr08.contribute.live-video.net/app/{stream_key}", + "priority": 28 + }, + { + "_id": 29, + "availability": 1.0, + "default": false, + "name": "Europe: UK, London (3)", + "url_template": "rtmp://lhr03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://lhr03.contribute.live-video.net/app/{stream_key}", + "priority": 29 + }, + { + "_id": 30, + "availability": 1.0, + "default": false, + "name": "Europe: UK, London (4)", + "url_template": "rtmp://lhr04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://lhr04.contribute.live-video.net/app/{stream_key}", + "priority": 30 + }, + { + "_id": 31, + "availability": 1.0, + "default": false, + "name": "Europe: Norway, Oslo", + "url_template": "rtmp://osl.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://osl.contribute.live-video.net/app/{stream_key}", + "priority": 31 + }, + { + "_id": 32, + "availability": 1.0, + "default": false, + "name": "Europe: Netherlands, Amsterdam (3)", + "url_template": "rtmp://ams03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ams03.contribute.live-video.net/app/{stream_key}", + "priority": 32 + }, + { + "_id": 33, + "availability": 1.0, + "default": false, + "name": "Europe: Netherlands, Amsterdam (2)", + "url_template": "rtmp://ams02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ams02.contribute.live-video.net/app/{stream_key}", + "priority": 33 + }, + { + "_id": 34, + "availability": 1.0, + "default": false, + "name": "Europe: France, Paris (2)", + "url_template": "rtmp://cdg02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://cdg02.contribute.live-video.net/app/{stream_key}", + "priority": 34 + }, + { + "_id": 35, + "availability": 1.0, + "default": false, + "name": "Europe: France, Paris (10)", + "url_template": "rtmp://cdg10.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://cdg10.contribute.live-video.net/app/{stream_key}", + "priority": 35 + }, + { + "_id": 36, + "availability": 1.0, + "default": false, + "name": "Europe: Spain, Madrid (2)", + "url_template": "rtmp://mad02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mad02.contribute.live-video.net/app/{stream_key}", + "priority": 36 + }, + { + "_id": 37, + "availability": 1.0, + "default": false, + "name": "Europe: Spain, Madrid (1)", + "url_template": "rtmp://mad01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mad01.contribute.live-video.net/app/{stream_key}", + "priority": 37 + }, + { + "_id": 38, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Dusseldorf (1)", + "url_template": "rtmp://dus01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://dus01.contribute.live-video.net/app/{stream_key}", + "priority": 38 + }, + { + "_id": 39, + "availability": 1.0, + "default": false, + "name": "Europe: Denmark, Copenhagen", + "url_template": "rtmp://cph.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://cph.contribute.live-video.net/app/{stream_key}", + "priority": 39 + }, + { + "_id": 40, + "availability": 1.0, + "default": false, + "name": "Europe: Sweden, Stockholm (3)", + "url_template": "rtmp://arn03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://arn03.contribute.live-video.net/app/{stream_key}", + "priority": 40 + }, + { + "_id": 41, + "availability": 1.0, + "default": false, + "name": "Europe: Sweden, Stockholm (4)", + "url_template": "rtmp://arn04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://arn04.contribute.live-video.net/app/{stream_key}", + "priority": 41 + }, + { + "_id": 42, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Frankfurt (6)", + "url_template": "rtmp://fra06.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://fra06.contribute.live-video.net/app/{stream_key}", + "priority": 42 + }, + { + "_id": 43, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Berlin", + "url_template": "rtmp://ber.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ber.contribute.live-video.net/app/{stream_key}", + "priority": 43 + }, + { + "_id": 44, + "availability": 1.0, + "default": false, + "name": "South America: Brazil, Fortaleza (1)", + "url_template": "rtmp://for01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://for01.contribute.live-video.net/app/{stream_key}", + "priority": 44 + }, + { + "_id": 45, + "availability": 1.0, + "default": false, + "name": "Europe: Finland, Helsinki (3)", + "url_template": "rtmp://hel03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://hel03.contribute.live-video.net/app/{stream_key}", + "priority": 45 + }, + { + "_id": 46, + "availability": 1.0, + "default": false, + "name": "Europe: France, Marseille (2)", + "url_template": "rtmp://mrs02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mrs02.contribute.live-video.net/app/{stream_key}", + "priority": 46 + }, + { + "_id": 47, + "availability": 1.0, + "default": false, + "name": "Europe: France, Marseille", + "url_template": "rtmp://mrs.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mrs.contribute.live-video.net/app/{stream_key}", + "priority": 47 + }, + { + "_id": 48, + "availability": 1.0, + "default": false, + "name": "Europe: Germany, Munich (1)", + "url_template": "rtmp://muc01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://muc01.contribute.live-video.net/app/{stream_key}", + "priority": 48 + }, + { + "_id": 49, + "availability": 1.0, + "default": false, + "name": "Europe: Italy, Milan (2)", + "url_template": "rtmp://mil02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mil02.contribute.live-video.net/app/{stream_key}", + "priority": 49 + }, + { + "_id": 50, + "availability": 1.0, + "default": false, + "name": "Europe: Poland, Warsaw (2)", + "url_template": "rtmp://waw02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://waw02.contribute.live-video.net/app/{stream_key}", + "priority": 50 + }, + { + "_id": 51, + "availability": 1.0, + "default": false, + "name": "Europe: Austria, Vienna (2)", + "url_template": "rtmp://vie02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://vie02.contribute.live-video.net/app/{stream_key}", + "priority": 51 + }, + { + "_id": 52, + "availability": 1.0, + "default": false, + "name": "South America: Brazil, Sao Paulo (5)", + "url_template": "rtmp://sao05.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sao05.contribute.live-video.net/app/{stream_key}", + "priority": 52 + }, + { + "_id": 53, + "availability": 1.0, + "default": false, + "name": "South America: Brazil, Sao Paulo", + "url_template": "rtmp://sao03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sao03.contribute.live-video.net/app/{stream_key}", + "priority": 53 + }, + { + "_id": 54, + "availability": 1.0, + "default": false, + "name": "South America: Brazil, Rio de Janeiro (4)", + "url_template": "rtmp://rio04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://rio04.contribute.live-video.net/app/{stream_key}", + "priority": 54 + }, + { + "_id": 55, + "availability": 1.0, + "default": false, + "name": "South America: Brazil, Rio de Janeiro (3)", + "url_template": "rtmp://rio03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://rio03.contribute.live-video.net/app/{stream_key}", + "priority": 55 + }, + { + "_id": 56, + "availability": 1.0, + "default": false, + "name": "South America : chile, Santiago (1)", + "url_template": "rtmp://scl01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://scl01.contribute.live-video.net/app/{stream_key}", + "priority": 56 + }, + { + "_id": 57, + "availability": 1.0, + "default": false, + "name": "South America: Buenos Aires, Argentina (1)", + "url_template": "rtmp://bue01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://bue01.contribute.live-video.net/app/{stream_key}", + "priority": 57 + }, + { + "_id": 58, + "availability": 1.0, + "default": false, + "name": "NA: Canada, Quebec", + "url_template": "rtmp://ymq03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://ymq03.contribute.live-video.net/app/{stream_key}", + "priority": 58 + }, + { + "_id": 59, + "availability": 1.0, + "default": false, + "name": "Asia: Japan, Tokyo (3)", + "url_template": "rtmp://tyo03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://tyo03.contribute.live-video.net/app/{stream_key}", + "priority": 59 + }, + { + "_id": 60, + "availability": 1.0, + "default": false, + "name": "Asia: Japan, Tokyo (5)", + "url_template": "rtmp://tyo05.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://tyo05.contribute.live-video.net/app/{stream_key}", + "priority": 60 + }, + { + "_id": 61, + "availability": 1.0, + "default": false, + "name": "Asia: Japan, Osaka (1)", + "url_template": "rtmp://osa01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://osa01.contribute.live-video.net/app/{stream_key}", + "priority": 61 + }, + { + "_id": 62, + "availability": 1.0, + "default": false, + "name": "Asia: South Korea, Seoul (3)", + "url_template": "rtmp://sel03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sel03.contribute.live-video.net/app/{stream_key}", + "priority": 62 + }, + { + "_id": 63, + "availability": 1.0, + "default": false, + "name": "Asia: South Korea, Seoul (4)", + "url_template": "rtmp://sel04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sel04.contribute.live-video.net/app/{stream_key}", + "priority": 63 + }, + { + "_id": 64, + "availability": 1.0, + "default": false, + "name": "Asia: South Korea, Seoul (1)", + "url_template": "rtmp://sel01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sel01.contribute.live-video.net/app/{stream_key}", + "priority": 64 + }, + { + "_id": 65, + "availability": 1.0, + "default": false, + "name": "Asia: Taiwan, Taipei (3)", + "url_template": "rtmp://tpe03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://tpe03.contribute.live-video.net/app/{stream_key}", + "priority": 65 + }, + { + "_id": 66, + "availability": 1.0, + "default": false, + "name": "Asia: Taiwan, Taipei (1)", + "url_template": "rtmp://tpe01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://tpe01.contribute.live-video.net/app/{stream_key}", + "priority": 66 + }, + { + "_id": 67, + "availability": 1.0, + "default": false, + "name": "Asia: India, Hyderabad (1)", + "url_template": "rtmp://hyd01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://hyd01.contribute.live-video.net/app/{stream_key}", + "priority": 67 + }, + { + "_id": 68, + "availability": 1.0, + "default": false, + "name": "Europe: Czech Republic, Prague", + "url_template": "rtmp://prg03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://prg03.contribute.live-video.net/app/{stream_key}", + "priority": 68 + }, + { + "_id": 69, + "availability": 1.0, + "default": false, + "name": "Asia: China, Hong Kong (6)", + "url_template": "rtmp://hkg06.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://hkg06.contribute.live-video.net/app/{stream_key}", + "priority": 69 + }, + { + "_id": 70, + "availability": 1.0, + "default": false, + "name": "Asia: India, Mumbai", + "url_template": "rtmp://bom01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://bom01.contribute.live-video.net/app/{stream_key}", + "priority": 70 + }, + { + "_id": 71, + "availability": 1.0, + "default": false, + "name": "Asia: Manila, Philippines (1)", + "url_template": "rtmp://mnl01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://mnl01.contribute.live-video.net/app/{stream_key}", + "priority": 71 + }, + { + "_id": 72, + "availability": 1.0, + "default": false, + "name": "Asia: India, Bangalore (1)", + "url_template": "rtmp://blr01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://blr01.contribute.live-video.net/app/{stream_key}", + "priority": 72 + }, + { + "_id": 73, + "availability": 1.0, + "default": false, + "name": "Asia: Thailand, Bangkok (2)", + "url_template": "rtmp://bkk02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://bkk02.contribute.live-video.net/app/{stream_key}", + "priority": 73 + }, + { + "_id": 74, + "availability": 1.0, + "default": false, + "name": "Asia: India, Chennai", + "url_template": "rtmp://maa01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://maa01.contribute.live-video.net/app/{stream_key}", + "priority": 74 + }, + { + "_id": 75, + "availability": 1.0, + "default": false, + "name": "Oceania: Australia, Sydney (2)", + "url_template": "rtmp://syd02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://syd02.contribute.live-video.net/app/{stream_key}", + "priority": 75 + }, + { + "_id": 76, + "availability": 1.0, + "default": false, + "name": "Oceania: Australia, Sydney (3)", + "url_template": "rtmp://syd03.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://syd03.contribute.live-video.net/app/{stream_key}", + "priority": 76 + }, + { + "_id": 77, + "availability": 1.0, + "default": false, + "name": "Asia: Singapore (4)", + "url_template": "rtmp://sin04.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sin04.contribute.live-video.net/app/{stream_key}", + "priority": 77 + }, + { + "_id": 78, + "availability": 1.0, + "default": false, + "name": "Asia: Singapore (1)", + "url_template": "rtmp://sin01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://sin01.contribute.live-video.net/app/{stream_key}", + "priority": 78 + }, + { + "_id": 79, + "availability": 1.0, + "default": false, + "name": "Asia: Indonesia, Cikarang Barat (1)", + "url_template": "rtmp://jkt01.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://jkt01.contribute.live-video.net/app/{stream_key}", + "priority": 79 + }, + { + "_id": 80, + "availability": 1.0, + "default": false, + "name": "Asia: Indonesia, Jakarta (2)", + "url_template": "rtmp://jkt02.contribute.live-video.net/app/{stream_key}", + "url_template_secure": "rtmps://jkt02.contribute.live-video.net/app/{stream_key}", + "priority": 80 + } + ] +} diff --git a/.config/obs-studio/profiler_data/2023-09-28 19-03-40.csv.gz b/.config/obs-studio/profiler_data/2023-09-28 19-03-40.csv.gz new file mode 100644 index 0000000..6c0f3f9 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-09-28 19-03-40.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-01 17-42-25.csv.gz b/.config/obs-studio/profiler_data/2023-10-01 17-42-25.csv.gz new file mode 100644 index 0000000..5fc0d5b Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-01 17-42-25.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-04 19-52-49.csv.gz b/.config/obs-studio/profiler_data/2023-10-04 19-52-49.csv.gz new file mode 100644 index 0000000..0117ad3 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-04 19-52-49.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-06 06-36-35.csv.gz b/.config/obs-studio/profiler_data/2023-10-06 06-36-35.csv.gz new file mode 100644 index 0000000..39c0739 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-06 06-36-35.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-06 18-18-50.csv.gz b/.config/obs-studio/profiler_data/2023-10-06 18-18-50.csv.gz new file mode 100644 index 0000000..90a838f Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-06 18-18-50.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-06 19-00-48.csv.gz b/.config/obs-studio/profiler_data/2023-10-06 19-00-48.csv.gz new file mode 100644 index 0000000..032c28f Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-06 19-00-48.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-07 02-20-56.csv.gz b/.config/obs-studio/profiler_data/2023-10-07 02-20-56.csv.gz new file mode 100644 index 0000000..b3bc917 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-07 02-20-56.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-07 04-18-28.csv.gz b/.config/obs-studio/profiler_data/2023-10-07 04-18-28.csv.gz new file mode 100644 index 0000000..2ef785e Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-07 04-18-28.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-09 20-20-11.csv.gz b/.config/obs-studio/profiler_data/2023-10-09 20-20-11.csv.gz new file mode 100644 index 0000000..5a054c4 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-09 20-20-11.csv.gz differ diff --git a/.config/obs-studio/profiler_data/2023-10-16 20-18-48.csv.gz b/.config/obs-studio/profiler_data/2023-10-16 20-18-48.csv.gz new file mode 100644 index 0000000..286c212 Binary files /dev/null and b/.config/obs-studio/profiler_data/2023-10-16 20-18-48.csv.gz differ diff --git a/.config/obs-studio/updates/whatsnew.json b/.config/obs-studio/updates/whatsnew.json new file mode 100644 index 0000000..e352fe7 --- /dev/null +++ b/.config/obs-studio/updates/whatsnew.json @@ -0,0 +1,7 @@ +[ + { + "version": "29.0.0", + "url": "https://obsproject.com/startup/obs-studio-29-release", + "increment": 1 + } +] diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc index 9eeb5bf..529e5c1 100644 --- a/.config/sxhkd/sxhkdrc +++ b/.config/sxhkd/sxhkdrc @@ -12,9 +12,9 @@ super + r #take a screenshot super + o - flameshot full -p /home/zombie/Pictures & flameshot gui + flameshot full -p /run/media/zombie/zombienas/organized_data/absolutely-unique/pictures/screenshots/$(hostname) & flameshot gui Print - flameshot full -p /home/zombie/Pictures & flameshot gui + flameshot full -p /run/media/zombie/zombienas/organized_data/absolutely-unique/pictures/screenshots/$(hostname) & flameshot gui diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..f4636ce --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,167 @@ +{ + // "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": ["hyprland/workspaces"], + "modules-center": ["hyprland/window"], + "modules-right": ["mpd", "idle_inhibitor", "pulseaudio", "network", "cpu", "memory", "temperature", "backlight", "keyboard-state", "sway/language", "battery", "battery#bat2", "clock", "tray"], + // Modules configuration + // "sway/workspaces": { + // "disable-scroll": true, + // "all-outputs": true, + // "warp-on-scroll": false, + // "format": "{name}: {icon}", + // "format-icons": { + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + // "urgent": "", + // "focused": "", + // "default": "" + // } + // }, + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "sway/mode": { + "format": "{}" + }, + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 2, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + } +} + diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..cf5c5fb --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,280 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 13px; +} + +window#waybar { + background-color: rgba(43, 48, 59, 0.5); + border-bottom: 3px solid rgba(100, 114, 125, 0.5); + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} +*/ + +window#waybar.termite { + background-color: #3F3F3F; +} + +window#waybar.chromium { + background-color: #000000; + border: none; +} + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; + box-shadow: inset 0 -3px #ffffff; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: #ffffff; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused { + background-color: #64727D; + box-shadow: inset 0 -3px #ffffff; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + background-color: #64727D; + border-bottom: 3px solid #ffffff; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#mpd { + padding: 0 10px; + color: #ffffff; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + background-color: #64727D; +} + +#battery { + background-color: #ffffff; + color: #000000; +} + +#battery.charging, #battery.plugged { + color: #ffffff; + background-color: #26A65B; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #000000; +} + +#cpu { + background-color: #2ecc71; + color: #000000; +} + +#memory { + background-color: #9b59b6; +} + +#disk { + background-color: #964B00; +} + +#backlight { + background-color: #90b1b1; +} + +#network { + background-color: #2980b9; +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { + background-color: #f1c40f; + color: #000000; +} + +#pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; +} + +#wireplumber { + background-color: #fff0f5; + color: #000000; +} + +#wireplumber.muted { + background-color: #f53c3c; +} + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + background-color: #f0932b; +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { + background-color: #2980b9; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; +} + +#idle_inhibitor { + background-color: #2d3436; +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + background-color: #66cc99; + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state > label { + padding: 0 5px; +} + +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +}