diff --git a/.gitignore b/.gitignore index a535ba1..a15466d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,9 +40,7 @@ pip-wheel-metadata/ !.env.example !.env.sample -# Runtime settings, credentials, UI layouts and backups. -# These are machine/account specific and are created automatically. -settings/ +backups/ # Stat2TV / API diagnostic snapshots hockey_data/snapshots/ diff --git a/settings/editor_security.json b/settings/editor_security.json new file mode 100644 index 0000000..22846fa --- /dev/null +++ b/settings/editor_security.json @@ -0,0 +1,9 @@ +{ + "daily_mask": "4827", + "master_pin": "638194", + "timezone": "Europe/Moscow", + "session_minutes": 30, + "max_attempts": 5, + "lock_seconds": 30, + "cookie_secure": false +} \ No newline at end of file diff --git a/settings/hockey_api.json b/settings/hockey_api.json new file mode 100644 index 0000000..3f76ea1 --- /dev/null +++ b/settings/hockey_api.json @@ -0,0 +1,158 @@ +{ + "base_url": "https://stat2tv.khl.ru/", + "auth_mode": "auto", + "ui_language": "ru", + "fallback_language": "ru", + "store_ru": true, + "store_en": true, + "sync_interval_seconds": 300, + "request_timeout_seconds": 20, + "verify_ssl": true, + "timezone": "Europe/Moscow", + "auto_sync_on_startup": false, + "games_endpoint_template": "{tournament_id}/schedule-{tournament_id}-live.xml", + "games_auto_discovery": true, + "games_cache_seconds": 300, + "players_endpoint_template": "{tournament_id}/players-{tournament_id}.xml", + "player_countries_endpoint_template": "players-countries.xml", + "referees_endpoint_template": "{tournament_id}/referees-{tournament_id}.xml", + "match_json_endpoint_template": "{tournament_id}/json/{game_id}.json", + "match_json_en_endpoint_template": "{tournament_id}/json_en/{game_id}.json", + "shots_endpoint_template": "shots/shots-{game_id}.json", + "match_directories_cache_seconds": 300, + "standings_endpoint_template": "{tournament_id}/standings-{tournament_id}.xml", + "standings_cache_seconds": 300, + "powerplay_endpoint_template": "{tournament_id}/powerplay-{tournament_id}.xml", + "rank_endpoint_template": "{tournament_id}/rank-{tournament_id}.xml", + "navigation_endpoint_template": "{tournament_id}/navigation-{tournament_id}.xml", + "tournament_statistics_cache_seconds": 300, + "optional_resource_negative_cache_seconds": 86400, + "timer_period_minutes": 20, + "timer_regular_overtime_minutes": 5, + "timer_playoff_overtime_minutes": 20, + "timer_reset_on_period_change": true, + "strength_regulation_skaters": 5, + "strength_regular_overtime_skaters": 3, + "strength_playoff_overtime_skaters": 5, + "strength_min_skaters": 3, + "strength_regulation_display": "pp", + "strength_regular_overtime_display": "numbers", + "strength_playoff_overtime_display": "pp", + "strength_powerplay_label": "PP", + "strength_shorthanded_label": "PK", + "strength_show_shorthanded": false, + "strength_state_labels": { + "regulation": { + "5x5": { + "ru": "", + "en": "" + }, + "5x4": { + "ru": "БОЛ", + "en": "PP" + }, + "4x4": { + "ru": "4 на 4", + "en": "4 on 4" + }, + "5x3": { + "ru": "5 на 3", + "en": "5 on 3" + }, + "4x3": { + "ru": "4 на 3", + "en": "4 on 3" + }, + "3x3": { + "ru": "3 на 3", + "en": "3 on 3" + } + }, + "regular_overtime": { + "3x3": { + "ru": "3 на 3", + "en": "3 on 3" + }, + "4x3": { + "ru": "4 на 3", + "en": "4 on 3" + }, + "4x4": { + "ru": "4 на 4", + "en": "4 on 4" + }, + "5x3": { + "ru": "5 на 3", + "en": "5 on 3" + }, + "5x4": { + "ru": "5 на 4", + "en": "5 on 4" + }, + "5x5": { + "ru": "5 на 5", + "en": "5 on 5" + } + }, + "playoff_overtime": { + "5x5": { + "ru": "", + "en": "" + }, + "5x4": { + "ru": "PP", + "en": "PP" + }, + "4x4": { + "ru": "4 на 4", + "en": "4 on 4" + }, + "5x3": { + "ru": "5 на 3", + "en": "5 on 3" + }, + "4x3": { + "ru": "4 на 3", + "en": "4 on 3" + }, + "3x3": { + "ru": "3 на 3", + "en": "3 on 3" + } + } + }, + "scoreboard_team_states": { + "home_delayed_penalty": { + "ru": "Отложенный штраф", + "en": "Delayed penalty", + "input": "4419919f-86d1-4bd5-b0b0-c369cd5f647a", + "input_title": "DELAYED PENALTY HOME", + "overlay": "2", + "enabled": true + }, + "home_empty_net": { + "ru": "Пустые ворота", + "en": "Empty net", + "input": "9acba229-3c9a-49e0-9e84-0a97b4c19062", + "input_title": "EMPTY NET HOME", + "overlay": "3", + "enabled": true + }, + "away_delayed_penalty": { + "ru": "Отложенный штраф", + "en": "Delayed penalty", + "input": "165dc512-4a45-477f-acb4-9c3838e407a3", + "input_title": "DELAYED PENALTY AWAY", + "overlay": "2", + "enabled": true + }, + "away_empty_net": { + "ru": "Пустые ворота", + "en": "Empty net", + "input": "34e288f3-3be4-41a7-ae2a-a3489cc2fd7d", + "input_title": "EMPTY NET AWAY", + "overlay": "3", + "enabled": true + } + } +} \ No newline at end of file diff --git a/settings/ui_builder.json b/settings/ui_builder.json new file mode 100644 index 0000000..c78d962 --- /dev/null +++ b/settings/ui_builder.json @@ -0,0 +1,296 @@ +{ + "version": 24, + "project_name": "Хоккей — назначения удалений", + "data_source": "hockey_stat2tv", + "canvas": { + "width": 1440, + "height": 760, + "grid_size": 10, + "snap_enabled": true, + "snap_threshold": 8, + "show_grid": true, + "auto_bind_containers": true, + "background": "#060d17" + }, + "tabs": [ + { + "id": "main", + "label": "Игра" + }, + { + "id": "shootout", + "label": "Буллиты" + }, + { + "id": "referees", + "label": "Судьи" + }, + { + "id": "statistics", + "label": "Статистика" + }, + { + "id": "schedule", + "label": "Расписание" + }, + { + "id": "standings", + "label": "Турнирная таблица" + } + ], + "components": [ + { + "id": "hockey-dashboard-game-timer", + "type": "timer", + "title": "Время периода", + "x": 520, + "y": 28, + "w": 400, + "h": 82, + "z": 1, + "tabs": [ + "main" + ], + "props": { + "label": "Время периода", + "mode": "count_down", + "startTime": "20:00", + "endTime": "00:00", + "targetDateTime": "", + "externalPath": "", + "format": "mm_ss", + "customFormat": "{totalMinutes}:{seconds}", + "footballBaseMinute": 45, + "afterEnd": "stop", + "autoStart": false, + "showStatus": true, + "persist": false, + "continueBackground": false, + "runtimeHidden": true, + "updateInterval": 100, + "milestones": "10:00|05:00|01:00|00:10|00:00" + }, + "style": { + "background": "#101d31", + "color": "#fff", + "accent": "#48dfbd", + "borderColor": "#2e4663", + "borderWidth": 1, + "borderRadius": 16, + "padding": 12, + "fontSize": 17, + "fontWeight": 900, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_game_timer", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [ + { + "id": "hockey-dashboard-space", + "enabled": true, + "combo": "Space", + "event": "timer_toggle", + "item_id": "", + "value": "", + "prevent_default": true, + "allow_in_inputs": false, + "global": false, + "scope": "runtime" + }, + { + "id": "hockey-dashboard-reset", + "enabled": true, + "combo": "Ctrl+R", + "event": "timer_reset", + "item_id": "", + "value": "", + "prevent_default": true, + "allow_in_inputs": false, + "global": false, + "scope": "runtime" + } + ] + }, + { + "id": "hockey-penalty-dashboard", + "type": "hockey_penalty_dashboard", + "title": "Дашборд удалений", + "x": 10, + "y": 10, + "w": 1420, + "h": 740, + "z": 2, + "tabs": [ + "main" + ], + "props": { + "homePlayersPath": "hockey.home.players", + "awayPlayersPath": "hockey.away.players", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name", + "idField": "id", + "numberField": "number", + "nameField": "name", + "positionField": "position", + "presets": "2=02:00|2+2=04:00|4=04:00|5=05:00|5+20=05:00|10=10:00", + "defaultPreset": "2", + "maxActivePerTeam": 8, + "rosterLimit": 40, + "historyLimit": 16, + "autoStartOnAssign": false, + "showSearch": true, + "persist": false, + "homeColor": "#4d9cff", + "awayColor": "#ff5f79", + "warningAt": "00:15", + "emptyText": "Перетащите игрока сюда", + "infractions": "TRIP=Подножка=2|HOOK=Задержка клюшкой=2|HOLD=Задержка соперника=2|INTERF=Атака игрока, не владеющего шайбой=2|ROUGH=Грубость=2|SLASH=Удар клюшкой=2|HIGH=Игра высоко поднятой клюшкой=2+2|BOARD=Толчок на борт=2|CHARGE=Неправильная атака=2|ELBOW=Удар локтем=2|TOO_MANY=Нарушение численного состава=2|DELAY=Задержка игры=2|UNSPORT=Неспортивное поведение=10|FIGHT=Драка=5+20", + "gameTimerActionId": "hockey_game_timer" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_penalty_dashboard", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-shootout-control", + "type": "hockey_shootout_control", + "title": "Буллиты", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "tabs": [ + "shootout" + ], + "parent_id": null, + "hidden": false, + "locked": false, + "z_index": 0, + "action_id": "hockey_shootout_control", + "interaction_mode": "event_only", + "shortcuts": [], + "props": { + "gamePath": "hockey.selected_game", + "tournamentPath": "hockey.selected_tournament", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "shadow": true + } + }, + { + "id": "hockey-referees", + "type": "hockey_referees", + "title": "Судьи", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "referees" + ], + "props": { + "refereesPath": "hockey.referees", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_referees", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-schedule", + "type": "hockey_schedule", + "title": "Расписание", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "schedule" + ], + "props": { + "schedulePath": "hockey.schedule", + "tournamentPath": "hockey.selected_tournament", + "selectedGamePath": "hockey.selected_game.external_id", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [] + } + ], + "triggers": [] +} diff --git a/settings/ui_builder_draft.json b/settings/ui_builder_draft.json new file mode 100644 index 0000000..376ef28 --- /dev/null +++ b/settings/ui_builder_draft.json @@ -0,0 +1,1472 @@ +{ + "version": 21, + "project_name": "Хоккей", + "data_source": "hockey_stat2tv", + "canvas": { + "width": 1440, + "height": 760, + "grid_size": 10, + "snap_enabled": true, + "snap_threshold": 8, + "show_grid": true, + "auto_bind_containers": true, + "background": "#060d17" + }, + "tabs": [ + { + "id": "main", + "label": "Игра" + }, + { + "id": "shootout", + "label": "Буллиты" + }, + { + "id": "referees", + "label": "Судьи" + }, + { + "id": "statistics", + "label": "Статистика" + }, + { + "id": "schedule", + "label": "Расписание" + }, + { + "id": "standings", + "label": "Турнирная таблица" + } + ], + "components": [ + { + "id": "hockey-dashboard-game-timer", + "type": "timer", + "title": "Время периода", + "x": 520, + "y": 28, + "w": 400, + "h": 82, + "z": 1, + "tabs": [ + "main" + ], + "props": { + "label": "Время периода", + "mode": "count_down", + "startTime": "20:00", + "endTime": "00:00", + "targetDateTime": "", + "externalPath": "", + "format": "mm_ss", + "customFormat": "{totalMinutes}:{seconds}", + "footballBaseMinute": 45, + "afterEnd": "stop", + "autoStart": false, + "showStatus": true, + "persist": false, + "continueBackground": false, + "updateInterval": 100, + "milestones": "10:00|05:00|01:00|00:10|00:00", + "runtimeHidden": true + }, + "style": { + "background": "#101d31", + "color": "#fff", + "accent": "#48dfbd", + "borderColor": "#2e4663", + "borderWidth": 1, + "borderRadius": 16, + "padding": 12, + "fontSize": 17, + "fontWeight": 900, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_game_timer", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-penalty-dashboard", + "type": "hockey_penalty_dashboard", + "title": "Дашборд удалений", + "x": 10, + "y": 10, + "w": 1420, + "h": 740, + "z": 2, + "tabs": [ + "main" + ], + "props": { + "homePlayersPath": "hockey.home.players", + "awayPlayersPath": "hockey.away.players", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name", + "idField": "id", + "numberField": "number", + "nameField": "name", + "positionField": "position", + "presets": "2=02:00|2+2=04:00|4=04:00|5=05:00|5+20=05:00|10=10:00", + "infractions": "TRIP=Подножка=2|HOOK=Задержка клюшкой=2|HOLD=Задержка соперника=2|INTERF=Атака игрока, не владеющего шайбой=2|ROUGH=Грубость=2|SLASH=Удар клюшкой=2|HIGH=Игра высоко поднятой клюшкой=2+2|BOARD=Толчок на борт=2|CHARGE=Неправильная атака=2|ELBOW=Удар локтем=2|TOO_MANY=Нарушение численного состава=2|DELAY=Задержка игры=2|UNSPORT=Неспортивное поведение=10|FIGHT=Драка=5+20", + "defaultPreset": "2", + "gameTimerActionId": "hockey_game_timer", + "maxActivePerTeam": 8, + "rosterLimit": 40, + "historyLimit": 16, + "autoStartOnAssign": false, + "showSearch": true, + "persist": false, + "homeColor": "#4d9cff", + "awayColor": "#ff5f79", + "warningAt": "00:15", + "emptyText": "Перетащите игрока сюда" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_penalty_dashboard", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-shootout-control", + "type": "hockey_shootout_control", + "title": "Буллиты", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "tabs": [ + "shootout" + ], + "parent_id": null, + "hidden": false, + "locked": false, + "z_index": 0, + "action_id": "hockey_shootout_control", + "interaction_mode": "event_only", + "shortcuts": [], + "props": { + "gamePath": "hockey.selected_game", + "tournamentPath": "hockey.selected_tournament", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "left", + "opacity": 100, + "shadow": true + }, + "z": 3, + "initial_state": false + }, + { + "id": "hockey-referees", + "type": "hockey_referees", + "title": "Судьи", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "referees" + ], + "props": { + "refereesPath": "hockey.referees", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_referees", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-team-statistics", + "type": "hockey_team_statistics", + "title": "Командная статистика", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "statistics" + ], + "props": { + "statsPath": "hockey.selected_game.team_statistics", + "playerStatsPath": "hockey.selected_game.player_statistics", + "seasonStatsPath": "hockey.selected_game.season_player_statistics", + "eventsPath": "hockey.selected_game.events", + "shotsMapPath": "hockey.selected_game.shots_map", + "powerplayStatsPath": "hockey.tournament_statistics.powerplay", + "rankStatsPath": "hockey.tournament_statistics.rank", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name", + "homeScorePath": "hockey.home.score", + "awayScorePath": "hockey.away.score", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_team_statistics", + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [] + }, + { + "id": "hockey-schedule", + "type": "hockey_schedule", + "title": "Расписание", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "schedule" + ], + "props": { + "schedulePath": "hockey.schedule", + "allSchedulePath": "hockey.team_schedule", + "tournamentPath": "hockey.selected_tournament", + "selectedGamePath": "hockey.selected_game.external_id", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [], + "action_id": "hockey_schedule_6" + }, + { + "id": "hockey-tournament-standings", + "type": "hockey_tournament_standings", + "title": "Турнирная таблица", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "standings" + ], + "props": { + "standingsPath": "hockey.standings", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_tournament_standings", + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [] + } + ], + "triggers": [ + { + "id": "1fda161e-9921-4cb1-a475-d1bbb3b23f0b", + "name": "Рефери", + "enabled": true, + "source_action_id": "hockey_referees", + "event": "tab_enter", + "item_id": "", + "condition": { + "field": "", + "operator": "equals", + "value": "" + }, + "action": { + "type": "run_sequence", + "target_action_id": "", + "state_key": "active", + "value": "true", + "function_name": "", + "event_name": "ui-builder:custom", + "message": "Триггер выполнен", + "tab_id": "", + "url": "http://127.0.0.1:8088/api/?Function=PreviewInput&Input=GAME%20OFFICIALS", + "method": "GET", + "body": "", + "timer_command": "toggle", + "timer_value": "", + "sequence_id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e" + } + }, + { + "id": "5ea69435-f838-4541-a161-a1b8a56ba960", + "name": "Статистика матча", + "enabled": true, + "source_action_id": "ui_navigation", + "event": "tab_change", + "item_id": "hockey_team_statistics::team_segment::total", + "condition": { + "field": "", + "operator": "equals", + "value": "" + }, + "action": { + "type": "run_sequence", + "target_action_id": "", + "state_key": "active", + "value": "true", + "function_name": "", + "event_name": "ui-builder:custom", + "message": "Триггер выполнен", + "tab_id": "", + "url": "", + "method": "POST", + "body": "", + "timer_command": "toggle", + "timer_value": "", + "sequence_id": "16500b85-2b72-405f-b3be-cf86c4435a66" + } + } + ], + "shortcut_sequences": [ + { + "id": "4d9a93a4-1a43-4aa2-8943-78af771f3868", + "name": "Старт игрового времени", + "description": "Запускает основной таймер матча, синхронизирует vMix и запускает текущие удаления.", + "enabled": true, + "combo": "Space", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "ba2f868b-1b9a-4a2b-a49d-f846c9c1fcac", + "enabled": true, + "type": "hockey_vmix_timers_start", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "", + "input": "", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "4b17ee37-38d4-400b-ad2b-068b61a798f9", + "game_vmix_selected_name": "Таймер.Text", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [ + { + "id": "f33ee4be-5479-4adb-b990-9ba3aa4a82b4", + "input": "62b0bf8c-c5c1-48a4-9cfa-b646e4d4c632", + "selected_name": "Таймер.Text", + "overlay": "2", + "auto_hide_on_finish": true + } + ], + "away_penalty_targets": [ + { + "id": "bd3f1006-bbf6-400a-8877-0bce87bd0ee4", + "input": "4b9b0c16-475c-4975-a005-70d0c10550ef", + "selected_name": "Таймер.Text", + "overlay": "2", + "auto_hide_on_finish": true + } + ], + "timer_finish_actions": [ + { + "id": "bb63bfd8-6e47-45e8-83a4-944adbe71774", + "enabled": true, + "source": "home_penalty", + "input": "a35a75c7-cd2b-40fa-a780-359acbe0f2eb", + "overlay": "2", + "duration_ms": 5000, + "only_when_side_clear": true + }, + { + "id": "e6148810-33eb-4e63-a33f-46c6f8588bd8", + "enabled": true, + "source": "away_penalty", + "input": "a2e72af8-0d0b-497f-aa57-497922e568d7", + "overlay": "2", + "duration_ms": 5000, + "only_when_side_clear": true + } + ], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "66084664-94bb-4366-b5f3-59a1de51e9b6", + "name": "Счёт", + "description": "Показывает счёт; если есть активное удаление, добавляет второй слой.", + "enabled": true, + "combo": "F1", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": true, + "sync_hockey_team_states": true, + "is_scoreboard_sequence": true, + "scope": "runtime", + "steps": [ + { + "id": "28164b68-09bb-45f4-ae6a-72d849603ee7", + "enabled": true, + "type": "vmix_command", + "label": "Показать счёт", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput1In", + "input": "4b17ee37-38d4-400b-ad2b-068b61a798f9", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + }, + { + "id": "77ff80ef-6931-42d9-aac0-e081e113bd9b", + "enabled": true, + "type": "vmix_command", + "label": "Если есть удаление — показать слой удаления", + "condition": "has_home_penalties", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput2In", + "input": "62b0bf8c-c5c1-48a4-9cfa-b646e4d4c632", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + }, + { + "id": "8e4634c4-6d29-4f68-b73a-14bcb1931039", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "has_away_penalties", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput2In", + "input": "4b9b0c16-475c-4975-a005-70d0c10550ef", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "510f1fa9-9d45-4c49-990e-e23cb02b3fb8", + "name": "Выдать графику в эфир", + "description": "", + "enabled": true, + "combo": "Ctrl+Shift", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "5d65f128-5ad5-4d1a-930e-f43958b3af91", + "enabled": true, + "type": "vmix_command", + "label": "Выдать титр из превью в эфир", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput4In", + "input": "0", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "e661b043-c2d6-46bf-9a0f-bb5c2ec3b899", + "name": "Снять графику", + "description": "", + "enabled": true, + "combo": "Ctrl+Space", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "febf1383-20ba-4810-89dc-0feb2f7f84f6", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput4Out", + "input": "", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e", + "name": "Рефери", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "92c74dd5-bdb0-4aac-8494-2bec8e0d8a9d", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "50a178a0-c60e-4640-8a75-211406641adb", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "f0d60888-7e25-4d17-9f58-2b9cd3d3a247", + "name": "ID матча", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "694a75e3-d131-4d90-aa59-a08f7491982b", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "a591722d-1e9e-4c26-8701-4140a8c9ae34", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "9df922ee-8874-4d2a-8bc8-0c79e1e7a86e", + "name": "Гео", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "011f836e-f963-422f-9d35-762066598d36", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "1164b173-4db7-45fc-8616-96f3e5f15886", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "6d7fc71a-d05e-4b5f-badc-f9dd8bd16d49", + "name": "Раздевалка хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "3b28cf86-f29f-4cc6-aaae-a824d1af280e", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "8023e6cb-7642-437a-8608-3ad199aba5e2", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "d53d7359-63a3-4d44-9c30-2759cfa08872", + "name": "Раздевалка гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "506a7a77-4349-4a2b-94a8-f71f9a15ce3e", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "7345ab16-88e9-4ff9-9665-5d1b210d4c86", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "b939da49-e435-467c-9763-9d0b90808dd9", + "name": "Состав хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "238d4a73-76f9-4d2d-aca8-b540128f5696", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "0110c1fb-7bdf-47e7-a0a4-fef8550cd615", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "8878ab71-209f-4b9a-8a25-58d9a60b1b20", + "name": "Состав гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "c264a0be-c000-4902-bd3b-0b4859b64840", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "ace0f29b-c2fa-47f7-b290-c70a148ddb2f", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "086504bc-4b81-4de4-97ad-3761193bfa75", + "name": "Тренер хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "17e04123-c685-4324-9a2e-eb52edd27f9d", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "3bd26b47-9e0b-48a5-895a-a2aab36ff181", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "102d7fae-1228-4b0c-ac8b-3151ac251333", + "name": "Тренер гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "f6db4ccc-569b-42fe-9458-4b02201d7d31", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "89d77746-2d66-432f-b1c7-033c4f3c640c", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "16500b85-2b72-405f-b3be-cf86c4435a66", + "name": "Статистика матча", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "61566d8e-c68d-4aa1-bf09-b46ddf405318", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "165cca41-1045-43df-a254-4d6678aa1c47", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + } + ], + "prematch_groups": [ + { + "id": "group_1", + "label": "Начало", + "sort_order": 0, + "enabled": true + }, + { + "id": "group_2", + "label": "Хозяева", + "sort_order": 10, + "enabled": true + }, + { + "id": "group_3", + "label": "Гости", + "sort_order": 20, + "enabled": true + }, + { + "id": "group_4", + "label": "Статистика", + "sort_order": 30, + "enabled": true + }, + { + "id": "group_5", + "label": "Игра", + "sort_order": 40, + "enabled": true + } + ], + "prematch_buttons": [ + { + "id": "prematch_1", + "label": "Гео", + "description": "", + "mode": "action", + "sequence_id": "9df922ee-8874-4d2a-8bc8-0c79e1e7a86e", + "group_id": "group_1", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_2", + "label": "ID матча", + "description": "", + "mode": "action", + "sequence_id": "f0d60888-7e25-4d17-9f58-2b9cd3d3a247", + "group_id": "group_1", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_5", + "label": "Судьи", + "description": "", + "mode": "action", + "sequence_id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e", + "group_id": "group_1", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_3", + "label": "Раздевалка хозяев", + "description": "", + "mode": "action", + "sequence_id": "6d7fc71a-d05e-4b5f-badc-f9dd8bd16d49", + "group_id": "group_2", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_6", + "label": "Состав хозяев", + "description": "", + "mode": "action", + "sequence_id": "b939da49-e435-467c-9763-9d0b90808dd9", + "group_id": "group_2", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_7", + "label": "Тренер хозяев", + "description": "", + "mode": "action", + "sequence_id": "086504bc-4b81-4de4-97ad-3761193bfa75", + "group_id": "group_2", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_4", + "label": "Раздевалка гостей", + "description": "", + "mode": "action", + "sequence_id": "d53d7359-63a3-4d44-9c30-2759cfa08872", + "group_id": "group_3", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_8", + "label": "Состав гостей", + "description": "", + "mode": "action", + "sequence_id": "8878ab71-209f-4b9a-8a25-58d9a60b1b20", + "group_id": "group_3", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_9", + "label": "Тренер гостей", + "description": "", + "mode": "action", + "sequence_id": "102d7fae-1228-4b0c-ac8b-3151ac251333", + "group_id": "group_3", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_10", + "label": "Статистика матча", + "description": "", + "mode": "action", + "sequence_id": "16500b85-2b72-405f-b3be-cf86c4435a66", + "group_id": "group_4", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_11", + "label": "Верхний счёт", + "description": "", + "mode": "action", + "sequence_id": "66084664-94bb-4366-b5f3-59a1de51e9b6", + "group_id": "group_5", + "sort_order": 0, + "enabled": true + } + ], + "quick_panel_selectors": [] +} \ No newline at end of file diff --git a/settings/ui_builder_published.json b/settings/ui_builder_published.json new file mode 100644 index 0000000..376ef28 --- /dev/null +++ b/settings/ui_builder_published.json @@ -0,0 +1,1472 @@ +{ + "version": 21, + "project_name": "Хоккей", + "data_source": "hockey_stat2tv", + "canvas": { + "width": 1440, + "height": 760, + "grid_size": 10, + "snap_enabled": true, + "snap_threshold": 8, + "show_grid": true, + "auto_bind_containers": true, + "background": "#060d17" + }, + "tabs": [ + { + "id": "main", + "label": "Игра" + }, + { + "id": "shootout", + "label": "Буллиты" + }, + { + "id": "referees", + "label": "Судьи" + }, + { + "id": "statistics", + "label": "Статистика" + }, + { + "id": "schedule", + "label": "Расписание" + }, + { + "id": "standings", + "label": "Турнирная таблица" + } + ], + "components": [ + { + "id": "hockey-dashboard-game-timer", + "type": "timer", + "title": "Время периода", + "x": 520, + "y": 28, + "w": 400, + "h": 82, + "z": 1, + "tabs": [ + "main" + ], + "props": { + "label": "Время периода", + "mode": "count_down", + "startTime": "20:00", + "endTime": "00:00", + "targetDateTime": "", + "externalPath": "", + "format": "mm_ss", + "customFormat": "{totalMinutes}:{seconds}", + "footballBaseMinute": 45, + "afterEnd": "stop", + "autoStart": false, + "showStatus": true, + "persist": false, + "continueBackground": false, + "updateInterval": 100, + "milestones": "10:00|05:00|01:00|00:10|00:00", + "runtimeHidden": true + }, + "style": { + "background": "#101d31", + "color": "#fff", + "accent": "#48dfbd", + "borderColor": "#2e4663", + "borderWidth": 1, + "borderRadius": 16, + "padding": 12, + "fontSize": 17, + "fontWeight": 900, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_game_timer", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-penalty-dashboard", + "type": "hockey_penalty_dashboard", + "title": "Дашборд удалений", + "x": 10, + "y": 10, + "w": 1420, + "h": 740, + "z": 2, + "tabs": [ + "main" + ], + "props": { + "homePlayersPath": "hockey.home.players", + "awayPlayersPath": "hockey.away.players", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name", + "idField": "id", + "numberField": "number", + "nameField": "name", + "positionField": "position", + "presets": "2=02:00|2+2=04:00|4=04:00|5=05:00|5+20=05:00|10=10:00", + "infractions": "TRIP=Подножка=2|HOOK=Задержка клюшкой=2|HOLD=Задержка соперника=2|INTERF=Атака игрока, не владеющего шайбой=2|ROUGH=Грубость=2|SLASH=Удар клюшкой=2|HIGH=Игра высоко поднятой клюшкой=2+2|BOARD=Толчок на борт=2|CHARGE=Неправильная атака=2|ELBOW=Удар локтем=2|TOO_MANY=Нарушение численного состава=2|DELAY=Задержка игры=2|UNSPORT=Неспортивное поведение=10|FIGHT=Драка=5+20", + "defaultPreset": "2", + "gameTimerActionId": "hockey_game_timer", + "maxActivePerTeam": 8, + "rosterLimit": 40, + "historyLimit": 16, + "autoStartOnAssign": false, + "showSearch": true, + "persist": false, + "homeColor": "#4d9cff", + "awayColor": "#ff5f79", + "warningAt": "00:15", + "emptyText": "Перетащите игрока сюда" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_penalty_dashboard", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-shootout-control", + "type": "hockey_shootout_control", + "title": "Буллиты", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "tabs": [ + "shootout" + ], + "parent_id": null, + "hidden": false, + "locked": false, + "z_index": 0, + "action_id": "hockey_shootout_control", + "interaction_mode": "event_only", + "shortcuts": [], + "props": { + "gamePath": "hockey.selected_game", + "tournamentPath": "hockey.selected_tournament", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "left", + "opacity": 100, + "shadow": true + }, + "z": 3, + "initial_state": false + }, + { + "id": "hockey-referees", + "type": "hockey_referees", + "title": "Судьи", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "referees" + ], + "props": { + "refereesPath": "hockey.referees", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_referees", + "interaction_mode": "event_only", + "initial_state": false, + "shortcuts": [] + }, + { + "id": "hockey-team-statistics", + "type": "hockey_team_statistics", + "title": "Командная статистика", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "statistics" + ], + "props": { + "statsPath": "hockey.selected_game.team_statistics", + "playerStatsPath": "hockey.selected_game.player_statistics", + "seasonStatsPath": "hockey.selected_game.season_player_statistics", + "eventsPath": "hockey.selected_game.events", + "shotsMapPath": "hockey.selected_game.shots_map", + "powerplayStatsPath": "hockey.tournament_statistics.powerplay", + "rankStatsPath": "hockey.tournament_statistics.rank", + "homeTeamPath": "hockey.home.name", + "awayTeamPath": "hockey.away.name", + "homeScorePath": "hockey.home.score", + "awayScorePath": "hockey.away.score", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_team_statistics", + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [] + }, + { + "id": "hockey-schedule", + "type": "hockey_schedule", + "title": "Расписание", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "schedule" + ], + "props": { + "schedulePath": "hockey.schedule", + "allSchedulePath": "hockey.team_schedule", + "tournamentPath": "hockey.selected_tournament", + "selectedGamePath": "hockey.selected_game.external_id", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [], + "action_id": "hockey_schedule_6" + }, + { + "id": "hockey-tournament-standings", + "type": "hockey_tournament_standings", + "title": "Турнирная таблица", + "x": 0, + "y": 0, + "w": 1440, + "h": 760, + "z": 2, + "tabs": [ + "standings" + ], + "props": { + "standingsPath": "hockey.standings", + "homeColor": "#4d9cff", + "awayColor": "#ff5f79" + }, + "style": { + "background": "#091321", + "color": "#eef4ff", + "accent": "#48dfbd", + "borderColor": "#263b55", + "borderWidth": 1, + "borderRadius": 20, + "padding": 0, + "fontSize": 14, + "fontWeight": 700, + "align": "center", + "opacity": 100, + "shadow": true + }, + "locked": false, + "hidden": false, + "parent_id": null, + "action_id": "hockey_tournament_standings", + "interaction_mode": "event_only", + "initial_state": true, + "shortcuts": [] + } + ], + "triggers": [ + { + "id": "1fda161e-9921-4cb1-a475-d1bbb3b23f0b", + "name": "Рефери", + "enabled": true, + "source_action_id": "hockey_referees", + "event": "tab_enter", + "item_id": "", + "condition": { + "field": "", + "operator": "equals", + "value": "" + }, + "action": { + "type": "run_sequence", + "target_action_id": "", + "state_key": "active", + "value": "true", + "function_name": "", + "event_name": "ui-builder:custom", + "message": "Триггер выполнен", + "tab_id": "", + "url": "http://127.0.0.1:8088/api/?Function=PreviewInput&Input=GAME%20OFFICIALS", + "method": "GET", + "body": "", + "timer_command": "toggle", + "timer_value": "", + "sequence_id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e" + } + }, + { + "id": "5ea69435-f838-4541-a161-a1b8a56ba960", + "name": "Статистика матча", + "enabled": true, + "source_action_id": "ui_navigation", + "event": "tab_change", + "item_id": "hockey_team_statistics::team_segment::total", + "condition": { + "field": "", + "operator": "equals", + "value": "" + }, + "action": { + "type": "run_sequence", + "target_action_id": "", + "state_key": "active", + "value": "true", + "function_name": "", + "event_name": "ui-builder:custom", + "message": "Триггер выполнен", + "tab_id": "", + "url": "", + "method": "POST", + "body": "", + "timer_command": "toggle", + "timer_value": "", + "sequence_id": "16500b85-2b72-405f-b3be-cf86c4435a66" + } + } + ], + "shortcut_sequences": [ + { + "id": "4d9a93a4-1a43-4aa2-8943-78af771f3868", + "name": "Старт игрового времени", + "description": "Запускает основной таймер матча, синхронизирует vMix и запускает текущие удаления.", + "enabled": true, + "combo": "Space", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "ba2f868b-1b9a-4a2b-a49d-f846c9c1fcac", + "enabled": true, + "type": "hockey_vmix_timers_start", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "", + "input": "", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "4b17ee37-38d4-400b-ad2b-068b61a798f9", + "game_vmix_selected_name": "Таймер.Text", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [ + { + "id": "f33ee4be-5479-4adb-b990-9ba3aa4a82b4", + "input": "62b0bf8c-c5c1-48a4-9cfa-b646e4d4c632", + "selected_name": "Таймер.Text", + "overlay": "2", + "auto_hide_on_finish": true + } + ], + "away_penalty_targets": [ + { + "id": "bd3f1006-bbf6-400a-8877-0bce87bd0ee4", + "input": "4b9b0c16-475c-4975-a005-70d0c10550ef", + "selected_name": "Таймер.Text", + "overlay": "2", + "auto_hide_on_finish": true + } + ], + "timer_finish_actions": [ + { + "id": "bb63bfd8-6e47-45e8-83a4-944adbe71774", + "enabled": true, + "source": "home_penalty", + "input": "a35a75c7-cd2b-40fa-a780-359acbe0f2eb", + "overlay": "2", + "duration_ms": 5000, + "only_when_side_clear": true + }, + { + "id": "e6148810-33eb-4e63-a33f-46c6f8588bd8", + "enabled": true, + "source": "away_penalty", + "input": "a2e72af8-0d0b-497f-aa57-497922e568d7", + "overlay": "2", + "duration_ms": 5000, + "only_when_side_clear": true + } + ], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "66084664-94bb-4366-b5f3-59a1de51e9b6", + "name": "Счёт", + "description": "Показывает счёт; если есть активное удаление, добавляет второй слой.", + "enabled": true, + "combo": "F1", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": true, + "sync_hockey_team_states": true, + "is_scoreboard_sequence": true, + "scope": "runtime", + "steps": [ + { + "id": "28164b68-09bb-45f4-ae6a-72d849603ee7", + "enabled": true, + "type": "vmix_command", + "label": "Показать счёт", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput1In", + "input": "4b17ee37-38d4-400b-ad2b-068b61a798f9", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + }, + { + "id": "77ff80ef-6931-42d9-aac0-e081e113bd9b", + "enabled": true, + "type": "vmix_command", + "label": "Если есть удаление — показать слой удаления", + "condition": "has_home_penalties", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput2In", + "input": "62b0bf8c-c5c1-48a4-9cfa-b646e4d4c632", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + }, + { + "id": "8e4634c4-6d29-4f68-b73a-14bcb1931039", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "has_away_penalties", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput2In", + "input": "4b9b0c16-475c-4975-a005-70d0c10550ef", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "countdown", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "510f1fa9-9d45-4c49-990e-e23cb02b3fb8", + "name": "Выдать графику в эфир", + "description": "", + "enabled": true, + "combo": "Ctrl+Shift", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "5d65f128-5ad5-4d1a-930e-f43958b3af91", + "enabled": true, + "type": "vmix_command", + "label": "Выдать титр из превью в эфир", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput4In", + "input": "0", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "e661b043-c2d6-46bf-9a0f-bb5c2ec3b899", + "name": "Снять графику", + "description": "", + "enabled": true, + "combo": "Ctrl+Space", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "febf1383-20ba-4810-89dc-0feb2f7f84f6", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "OverlayInput4Out", + "input": "", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e", + "name": "Рефери", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "92c74dd5-bdb0-4aac-8494-2bec8e0d8a9d", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "50a178a0-c60e-4640-8a75-211406641adb", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "f0d60888-7e25-4d17-9f58-2b9cd3d3a247", + "name": "ID матча", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "694a75e3-d131-4d90-aa59-a08f7491982b", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "a591722d-1e9e-4c26-8701-4140a8c9ae34", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "9df922ee-8874-4d2a-8bc8-0c79e1e7a86e", + "name": "Гео", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "011f836e-f963-422f-9d35-762066598d36", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "1164b173-4db7-45fc-8616-96f3e5f15886", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "6d7fc71a-d05e-4b5f-badc-f9dd8bd16d49", + "name": "Раздевалка хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "3b28cf86-f29f-4cc6-aaae-a824d1af280e", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "8023e6cb-7642-437a-8608-3ad199aba5e2", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "d53d7359-63a3-4d44-9c30-2759cfa08872", + "name": "Раздевалка гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "506a7a77-4349-4a2b-94a8-f71f9a15ce3e", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "7345ab16-88e9-4ff9-9665-5d1b210d4c86", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "b939da49-e435-467c-9763-9d0b90808dd9", + "name": "Состав хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "238d4a73-76f9-4d2d-aca8-b540128f5696", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "0110c1fb-7bdf-47e7-a0a4-fef8550cd615", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "8878ab71-209f-4b9a-8a25-58d9a60b1b20", + "name": "Состав гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "c264a0be-c000-4902-bd3b-0b4859b64840", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "ace0f29b-c2fa-47f7-b290-c70a148ddb2f", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "086504bc-4b81-4de4-97ad-3761193bfa75", + "name": "Тренер хозяев", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "17e04123-c685-4324-9a2e-eb52edd27f9d", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "3bd26b47-9e0b-48a5-895a-a2aab36ff181", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "102d7fae-1228-4b0c-ac8b-3151ac251333", + "name": "Тренер гостей", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "f6db4ccc-569b-42fe-9458-4b02201d7d31", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "89d77746-2d66-432f-b1c7-033c4f3c640c", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + }, + { + "id": "16500b85-2b72-405f-b3be-cf86c4435a66", + "name": "Статистика матча", + "description": "", + "enabled": true, + "combo": "", + "prevent_default": true, + "allow_in_inputs": false, + "toggle_all_overlays_on_repeat": false, + "sync_hockey_team_states": false, + "is_scoreboard_sequence": false, + "scope": "runtime", + "steps": [ + { + "id": "61566d8e-c68d-4aa1-bf09-b46ddf405318", + "enabled": true, + "type": "vmix_command", + "label": "", + "condition": "always", + "condition_value": "", + "target_action_id": "", + "timer_command": "start", + "timer_value": "", + "penalty_command": "start", + "function": "PreviewInput", + "input": "165cca41-1045-43df-a254-4d6678aa1c47", + "value": "", + "selected_name": "", + "duration": "", + "mix": "", + "use_scoreboard_alternate": false, + "scoreboard_alternate_input": "", + "scoreboard_alternate_selected_name": "", + "game_timer_action_id": "hockey_game_timer", + "hockey_timer_command": "toggle", + "game_vmix_mode": "text", + "penalty_vmix_mode": "text", + "penalty_display_mode": "soonest", + "game_vmix_input": "", + "game_vmix_selected_name": "", + "home_penalty_inputs": "", + "away_penalty_inputs": "", + "home_penalty_selected_names": "", + "away_penalty_selected_names": "", + "home_penalty_targets": [], + "away_penalty_targets": [], + "timer_finish_actions": [], + "start_web_game": true, + "start_web_penalties": true, + "sync_vmix_game": true, + "sync_vmix_penalties": true, + "milliseconds": 0, + "event_name": "ui-builder:shortcut-sequence" + } + ] + } + ], + "prematch_groups": [ + { + "id": "group_1", + "label": "Начало", + "sort_order": 0, + "enabled": true + }, + { + "id": "group_2", + "label": "Хозяева", + "sort_order": 10, + "enabled": true + }, + { + "id": "group_3", + "label": "Гости", + "sort_order": 20, + "enabled": true + }, + { + "id": "group_4", + "label": "Статистика", + "sort_order": 30, + "enabled": true + }, + { + "id": "group_5", + "label": "Игра", + "sort_order": 40, + "enabled": true + } + ], + "prematch_buttons": [ + { + "id": "prematch_1", + "label": "Гео", + "description": "", + "mode": "action", + "sequence_id": "9df922ee-8874-4d2a-8bc8-0c79e1e7a86e", + "group_id": "group_1", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_2", + "label": "ID матча", + "description": "", + "mode": "action", + "sequence_id": "f0d60888-7e25-4d17-9f58-2b9cd3d3a247", + "group_id": "group_1", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_5", + "label": "Судьи", + "description": "", + "mode": "action", + "sequence_id": "0a7844a3-c41a-4cf4-a11e-67f06083ff7e", + "group_id": "group_1", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_3", + "label": "Раздевалка хозяев", + "description": "", + "mode": "action", + "sequence_id": "6d7fc71a-d05e-4b5f-badc-f9dd8bd16d49", + "group_id": "group_2", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_6", + "label": "Состав хозяев", + "description": "", + "mode": "action", + "sequence_id": "b939da49-e435-467c-9763-9d0b90808dd9", + "group_id": "group_2", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_7", + "label": "Тренер хозяев", + "description": "", + "mode": "action", + "sequence_id": "086504bc-4b81-4de4-97ad-3761193bfa75", + "group_id": "group_2", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_4", + "label": "Раздевалка гостей", + "description": "", + "mode": "action", + "sequence_id": "d53d7359-63a3-4d44-9c30-2759cfa08872", + "group_id": "group_3", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_8", + "label": "Состав гостей", + "description": "", + "mode": "action", + "sequence_id": "8878ab71-209f-4b9a-8a25-58d9a60b1b20", + "group_id": "group_3", + "sort_order": 10, + "enabled": true + }, + { + "id": "prematch_9", + "label": "Тренер гостей", + "description": "", + "mode": "action", + "sequence_id": "102d7fae-1228-4b0c-ac8b-3151ac251333", + "group_id": "group_3", + "sort_order": 20, + "enabled": true + }, + { + "id": "prematch_10", + "label": "Статистика матча", + "description": "", + "mode": "action", + "sequence_id": "16500b85-2b72-405f-b3be-cf86c4435a66", + "group_id": "group_4", + "sort_order": 0, + "enabled": true + }, + { + "id": "prematch_11", + "label": "Верхний счёт", + "description": "", + "mode": "action", + "sequence_id": "66084664-94bb-4366-b5f3-59a1de51e9b6", + "group_id": "group_5", + "sort_order": 0, + "enabled": true + } + ], + "quick_panel_selectors": [] +} \ No newline at end of file diff --git a/settings/vmix_functions.json b/settings/vmix_functions.json new file mode 100644 index 0000000..eab0ea7 --- /dev/null +++ b/settings/vmix_functions.json @@ -0,0 +1,307 @@ +{ + "version": 1, + "title": "Функции формул vMix JSON — хоккей", + "description": "Справочник функций для вычисляемых колонок хоккейных vMix JSON.", + "categories": [ + { + "title": "Поля и сборка строк", + "items": [ + { + "name": "get", + "example": "get('player')", + "description": "Взять поле по имени. Если поля нет — пустая строка." + }, + { + "name": "val", + "example": "val('total', '-')", + "description": "То же самое, что get()." + }, + { + "name": "concat", + "example": "concat(position, '. ', player)", + "description": "Склеить значения без разделителя." + }, + { + "name": "join", + "example": "join(' / ', player, club, total)", + "description": "Склеить только заполненные значения через разделитель." + }, + { + "name": "tpl", + "example": "tpl('#{position} {player} {total}')", + "description": "Шаблон с подстановкой полей в фигурных скобках." + }, + { + "name": "coalesce", + "example": "coalesce(player, name, '-')", + "description": "Первое непустое значение." + } + ] + }, + { + "title": "Текст", + "items": [ + { + "name": "split", + "example": "split(player, ' ', 0)", + "description": "Разбить строку и взять часть по индексу." + }, + { + "name": "part", + "example": "part(player, ' ', 1)", + "description": "Короткий вариант split(value, sep, index)." + }, + { + "name": "left", + "example": "left(player, 3)", + "description": "Первые N символов." + }, + { + "name": "right", + "example": "right(player, 3)", + "description": "Последние N символов." + }, + { + "name": "mid", + "example": "mid(player, 2, 4)", + "description": "Фрагмент строки." + }, + { + "name": "replace", + "example": "replace(player, ' ', ' ')", + "description": "Обычная замена текста." + }, + { + "name": "upper/lower/title/strip", + "example": "upper(country)", + "description": "Регистр и очистка пробелов." + }, + { + "name": "swap", + "example": "swap(player)", + "description": "Поменять порядок частей строки: Иван Петров → Петров Иван." + } + ] + }, + { + "title": "Условия", + "items": [ + { + "name": "case / iif", + "example": "case(to_par == 0, 'E', to_par)", + "description": "Если условие истинно — первое значение, иначе второе." + }, + { + "name": "empty / filled", + "example": "if_empty(total, '-', total)", + "description": "Проверка пустого/заполненного значения." + }, + { + "name": "if_empty", + "example": "if_empty(thru, '—', thru)", + "description": "Если пусто." + }, + { + "name": "if_filled", + "example": "if_filled(country, country, '')", + "description": "Если заполнено." + }, + { + "name": "if_contains", + "example": "if_contains(status, 'active', 'LIVE', '')", + "description": "Если строка содержит текст." + }, + { + "name": "if_not_contains", + "example": "if_not_contains(status, 'active', '', 'LIVE')", + "description": "Если строка не содержит текст." + }, + { + "name": "if_equals / if_eq", + "example": "if_eq(to_par, '0', 'E', to_par)", + "description": "Если значение равно ожидаемому." + }, + { + "name": "if_field_empty", + "example": "if_field_empty('today', '-', today)", + "description": "Проверить поле по имени." + } + ] + }, + { + "title": "Поиск и Regex", + "items": [ + { + "name": "contains", + "example": "contains(player, 'Иван')", + "description": "True/False: содержит текст." + }, + { + "name": "starts / ends", + "example": "starts(player, 'A')", + "description": "Начинается/заканчивается на текст." + }, + { + "name": "regex / match", + "example": "regex(player, '^A')", + "description": "Проверка регулярным выражением." + }, + { + "name": "if_regex", + "example": "if_regex(player, '^A', 'A', '')", + "description": "Условие по регулярному выражению." + }, + { + "name": "re_replace", + "example": "re_replace(title, '(\\d)(?=(\\d{3})+\\b)', '\\1.')", + "description": "Regex-замена." + }, + { + "name": "re_replace_first", + "example": "re_replace_first(text, '\\s+', ' ')", + "description": "Заменить только первое совпадение." + }, + { + "name": "re_remove", + "example": "re_remove(player, '\\s+')", + "description": "Удалить по regex." + }, + { + "name": "re_extract", + "example": "re_extract(player, '#(\\d+)', 1)", + "description": "Достать группу из текста." + }, + { + "name": "first_match", + "example": "first_match(title, {'СБ':'Барьеры', 'Бег':'Бег'}, '')", + "description": "Первое совпавшее правило." + } + ] + }, + { + "title": "Числа, время, даты", + "items": [ + { + "name": "number / num", + "example": "number(total, 0)", + "description": "Преобразовать в число." + }, + { + "name": "int/float/round/min/max/abs/sum", + "example": "round(number(total), 1)", + "description": "Базовая математика Python." + }, + { + "name": "format_thousands", + "example": "format_thousands(10000)", + "description": "10.000." + }, + { + "name": "format_distance", + "example": "format_distance('10000')", + "description": "Формат дистанций: 10.000." + }, + { + "name": "time_seconds", + "example": "time_seconds('1:02.34')", + "description": "Время в секунды." + }, + { + "name": "format_time", + "example": "format_time(62.34, 'auto_tt')", + "description": "Секунды обратно во время." + }, + { + "name": "time_diff", + "example": "time_diff(result, leader, 'auto_tt')", + "description": "Разница двух времен." + }, + { + "name": "today", + "example": "today('%d.%m.%Y')", + "description": "Сегодняшняя дата." + }, + { + "name": "age / age_at", + "example": "age_at(birthDate, today())", + "description": "Возраст по дате рождения." + }, + { + "name": "birth_year", + "example": "birth_year(birthDate)", + "description": "Год рождения." + } + ] + }, + { + "title": "Склейка JSON", + "items": [ + { + "name": "match", + "example": "player_id=id", + "description": "Сопоставление ключей: слева поле основного JSON, справа поле подключаемого источника." + }, + { + "name": "fields", + "example": "club=club\\ncountry=country", + "description": "Какие поля подтянуть: слева новое имя поля, справа поле источника." + }, + { + "name": "multiple", + "example": "first / last / all / count", + "description": "Что делать, если найдено несколько совпадений." + }, + { + "name": "source_type", + "example": "scores / tournament / round / vmix_json / url", + "description": "Тип подключаемого источника данных." + } + ] + }, + { + "title": "Вертикальные вычисления по таблице", + "items": [ + { + "name": "max", + "example": "max('total')", + "description": "Максимальное числовое значение колонки по всем строкам текущей таблицы. Для обычных чисел max(1, 2) тоже работает." + }, + { + "name": "min", + "example": "min('total')", + "description": "Минимальное числовое значение колонки по всем строкам текущей таблицы." + }, + { + "name": "avg / average / mean", + "example": "avg('total')", + "description": "Среднее числовое значение колонки по всем строкам текущей таблицы." + }, + { + "name": "values", + "example": "values('total')", + "description": "Список числовых значений колонки по всем строкам. Можно использовать в своих формулах." + }, + { + "name": "first_value / first", + "example": "first_value('total')", + "description": "Значение колонки из первой строки таблицы после сортировки/подготовки данных." + }, + { + "name": "diff_first / diff_from_first", + "example": "diff_first('total', 2)", + "description": "Разница между значением текущей строки и первой строки: current - first. Второй аргумент — округление." + }, + { + "name": "gap_first / gap_from_first", + "example": "gap_first('total', 2)", + "description": "То же, что diff_first(), но сразу форматирует со знаком +/-. Удобно для отставаний." + }, + { + "name": "row_index / row_number", + "example": "row_number()", + "description": "Номер текущей строки: row_index() с нуля, row_number() с единицы." + } + ] + } + ] +} \ No newline at end of file diff --git a/settings/vmix_json.json b/settings/vmix_json.json new file mode 100644 index 0000000..63bc01d --- /dev/null +++ b/settings/vmix_json.json @@ -0,0 +1,375 @@ +{ + "version": 1, + "configs": [ + { + "key": "scoreboard", + "title": "Верхний счёт", + "description": "Счёт, период, время и численные составы.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/scoreboard.json", + "source_type": "scoreboard", + "root_key": "rows", + "output_mode": "columns", + "default_limit": 1, + "enabled": true, + "columns": [ + { + "key": "game_id", + "label": "ID матча", + "source": "game_id", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "home_score", + "label": "Счёт хозяев", + "source": "home_score", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "away_score", + "label": "Счёт гостей", + "source": "away_score", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "period", + "label": "Период", + "source": "period", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "time", + "label": "Время", + "source": "time", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "timer_running", + "label": "Таймер запущен", + "source": "timer_running", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "strength", + "label": "Состав", + "source": "strength", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "strength_state_key", + "label": "Ключ состава", + "source": "strength_state_key", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "strength_state_label", + "label": "Подпись состава", + "source": "strength_state_label", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "home_strength", + "label": "Игроков хозяев", + "source": "home_strength", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "away_strength", + "label": "Игроков гостей", + "source": "away_strength", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "home_powerplay_label", + "label": "Подпись хозяев", + "source": "home_powerplay_label", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "away_powerplay_label", + "label": "Подпись гостей", + "source": "away_powerplay_label", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "status", + "label": "Статус", + "source": "status", + "default": "", + "enabled": true, + "mode": "field" + } + ], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Верхний счёт", + "description": "Счёт, период, время и численные составы.", + "columns": [ + "game_id", + "home_score", + "away_score", + "period", + "time", + "timer_running", + "strength", + "strength_state_key", + "strength_state_label", + "home_strength", + "away_strength", + "home_powerplay_label", + "away_powerplay_label", + "status" + ], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "info", + "title": "Информация о матче", + "description": "Команды, арена, дата, турнир и управление матчем.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/info.json", + "source_type": "info", + "root_key": "rows", + "output_mode": "columns", + "default_limit": 1, + "enabled": true, + "columns": [ + { + "key": "game_id", + "label": "ID матча", + "source": "game_id", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "home_team", + "label": "Хозяева", + "source": "home_team", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "away_team", + "label": "Гости", + "source": "away_team", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "arena", + "label": "Арена", + "source": "arena", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "date", + "label": "Дата", + "source": "date", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "start_time", + "label": "Время начала", + "source": "start_time", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "tournament_title", + "label": "Турнир", + "source": "tournament.title", + "default": "", + "enabled": true, + "mode": "field" + }, + { + "key": "period", + "label": "Период", + "source": "control.current_period", + "default": "", + "enabled": true, + "mode": "field" + } + ], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Информация о матче", + "description": "Команды, арена, дата, турнир и управление матчем.", + "columns": [ + "game_id", + "home_team", + "away_team", + "arena", + "date", + "start_time", + "tournament_title", + "period" + ], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "home_lineup", + "title": "Состав хозяев", + "description": "Все игроки левой команды.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/home_lineup.json", + "source_type": "home_lineup", + "root_key": "rows", + "output_mode": "all", + "default_limit": 0, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Состав хозяев", + "description": "Все игроки левой команды.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "away_lineup", + "title": "Состав гостей", + "description": "Все игроки правой команды.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/away_lineup.json", + "source_type": "away_lineup", + "root_key": "rows", + "output_mode": "all", + "default_limit": 0, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Состав гостей", + "description": "Все игроки правой команды.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "penalties", + "title": "Активные удаления", + "description": "Текущие удаления обеих команд.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/penalties.json", + "source_type": "penalties", + "root_key": "rows", + "output_mode": "all", + "default_limit": 0, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Активные удаления", + "description": "Текущие удаления обеих команд.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "officials", + "title": "Судьи", + "description": "Судьи выбранного матча.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/officials.json", + "source_type": "officials", + "root_key": "rows", + "output_mode": "all", + "default_limit": 0, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Судьи", + "description": "Судьи выбранного матча.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "events", + "title": "События матча", + "description": "Play-by-play и события выбранного матча.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/events.json", + "source_type": "events", + "root_key": "rows", + "output_mode": "all", + "default_limit": 0, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "События матча", + "description": "Play-by-play и события выбранного матча.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + }, + { + "key": "full_match", + "title": "Полный матч", + "description": "Сессия, турнир, матч и состояние управления одним объектом.", + "endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/full_match.json", + "source_type": "full_match", + "root_key": "rows", + "output_mode": "all", + "default_limit": 1, + "enabled": true, + "columns": [], + "joins": [], + "web_display": { + "enabled": true, + "tab_title": "Полный матч", + "description": "Сессия, турнир, матч и состояние управления одним объектом.", + "columns": [], + "sort_key": "", + "sort_dir": "asc" + } + } + ] +} \ No newline at end of file diff --git a/settings/vmix_settings.json b/settings/vmix_settings.json new file mode 100644 index 0000000..102a14d --- /dev/null +++ b/settings/vmix_settings.json @@ -0,0 +1,5 @@ +{ + "version": 1, + "active_vmix_json": "scoreboard", + "selection": {} +} \ No newline at end of file