обновление для подгрузки конфигов для веб-интерфейса

This commit is contained in:
2026-08-19 16:25:19 +03:00
parent ed9889439a
commit bddc0967b3
9 changed files with 4095 additions and 3 deletions

View File

@@ -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
}

158
settings/hockey_api.json Normal file
View File

@@ -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
}
}
}

296
settings/ui_builder.json Normal file
View File

@@ -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": []
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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() с единицы."
}
]
}
]
}

375
settings/vmix_json.json Normal file
View File

@@ -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"
}
}
]
}

View File

@@ -0,0 +1,5 @@
{
"version": 1,
"active_vmix_json": "scoreboard",
"selection": {}
}