Skip to content

Instantly share code, notes, and snippets.

@balexandre
Last active August 30, 2023 08:51
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save balexandre/60a4f89b3c79cb7adb5aaf87829207e8 to your computer and use it in GitHub Desktop.
Save balexandre/60a4f89b3c79cb7adb5aaf87829207e8 to your computer and use it in GitHub Desktop.
My F1Viewer configuration
{
"live_retry_timeout": 60,
"preferred_language": "en",
"check_updates": true,
"save_logs": true,
"log_location": "",
"horizontal_layout": false,
"theme": {
"background_color": "#000000",
"border_color": "#0CA597",
"category_node_color": "#0CA597",
"folder_node_color": "#0CA597",
"item_node_color": "#931547",
"action_node_color": "#0CA597",
"loading_color": "#931547",
"live_color": "",
"update_color": "",
"no_content_color": "#EEEEEE",
"info_color": "",
"error_color": "",
"terminal_accent_color": "",
"terminal_text_color": ""
},
"tree_ratio": 1,
"output_ratio": 1,
"custom_playback_options": [{
"title": "download with ffmpeg",
"command": ["ffmpeg", "-hide_banner", "-loglevel", "warning", "-i", "$url", "-c", "copy", "$title.mp4"]
}, {
"title": "Stream on VLC",
"command": ["C:\\Program Files\\VideoLAN\\VLC\\vlc.exe", "$url"]
}, {
"title": "Stream on MPV (1080p)",
"command": ["mpv", "--quiet", "--no-border", "$url"]
}, {
"title": "Stream on MPV (720p)",
"command": ["mpv", "--vid=2", "--no-border", "$url"]
}, {
"title": "Stream with Streamlink+MPV (720p)",
"command": ["streamlink", "--player", "C:\\ProgramData\\chocolatey\\lib\\mpv.install\\tools\\mpv.exe", "--hls-audio-select", "*", "$url", "720p"]
}, {
"title": "Stream with Streamlink+MPV (1080p)",
"command": ["streamlink", "--player", "C:\\ProgramData\\chocolatey\\lib\\mpv.install\\tools\\mpv.exe", "--hls-audio-select", "*", "$url", "1080p"]
}
],
"multi_commands": [{
"title": "Onboard, track and data (4k)",
"targets": [
{
"match_title": "Main Feed",
"command": ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=2880", "--geometry=0:0", "$url"]
},
{
"match_title": "Charles Leclerc",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:0", "$url"]
},
{
"match_title": "Sebastian Vettel",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:33%", "$url"]
},
{
"match_title": "Lewis Hamilton",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:67%", "$url"]
},
{
"match_title": "Max Verstappen",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:100%", "$url"]
},
{
"match_title": "Lando Norris",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=67%:100%", "$url"]
},
{
"match_title": "Driver Tracker",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=0:100%", "$url"]
},
{
"match_title": "Data Channel",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=33%:100%", "$url"]
}
]}, {
"title": "Onboard, track and data (3440x1440) + drivers audio",
"targets": [
{
"match_title": "Main Feed",
"command": ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=1750", "--geometry=0:0", "$url"]
},
{
"match_title": "Lewis Hamilton",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:0", "--autofit=860", "$url"]
},
{
"match_title": "Daniel Ricciardo",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:0", "--autofit=860", "$url"]
},
{
"match_title": "Charles Leclerc",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:483", "--autofit=860", "$url"]
},
{
"match_title": "Lando Norris",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:483", "--autofit=860", "$url"]
},
{
"match_title": "Max Verstappen",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:960", "--autofit=860", "$url"]
},
{
"match_title": "Sergio Perez",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:960", "--autofit=860", "$url"]
},
{
"match_title": "Driver Tracker",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=0:945", "--autofit=860", "$url"]
},
{
"match_title": "Data Channel",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=687:922", "--autofit=1064", "$url"]
}
]}, {
"title": "Onboard, track and data (3440x1440 + PLC)",
"targets": [
{
"match_title": "Pit Lane",
"command": ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=1750", "--geometry=0:0", "$url"]
},
{
"match_title": "Lewis Hamilton",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:0", "--autofit=860", "$url"]
},
{
"match_title": "Daniel Ricciardo",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:0", "--autofit=860", "$url"]
},
{
"match_title": "Charles Leclerc",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:483", "--autofit=860", "$url"]
},
{
"match_title": "Lando Norris",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:483", "--autofit=860", "$url"]
},
{
"match_title": "Max Verstappen",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:960", "--autofit=860", "$url"]
},
{
"match_title": "Sergio Perez",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:960", "--autofit=860", "$url"]
},
{
"match_title": "Driver Tracker",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=0:945", "--autofit=860", "$url"]
},
{
"match_title": "Data Channel",
"command": ["mpv", "--aid=2", "--mute=yes", "--vid=2", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=687:922", "--autofit=1064", "$url"]
}
]}
]
}
@balexandre
Copy link
Author

balexandre commented Dec 12, 2020

example from settings above on a 3440x1440 screen

image


streaming options for Video and Audio

│     Video --vid=1 (h264 1920x1080 25.000fps) (7015 kbps)
│     Video --vid=2 (h264 1280x720 25.000fps) (5190 kbps)
│     Video --vid=3 (h264 1024x576 25.000fps) (2963 kbps)
│     Video --vid=4 (h264 768x432 25.000fps) (1953 kbps)
│     Video --vid=5 (h264 640x360 25.000fps) (1310 kbps)
│     Video --vid=6 (h264 512x288 25.000fps) (918 kbps)
│     Video --vid=7 (h264 384x216 25.000fps) (519 kbps)
│     Audio --aid=1 --alang=eng (*) (aac 2ch 44100Hz)
│     Audio --aid=2 --alang=fre (aac 2ch 44100Hz)
│     Audio --aid=3 --alang=ger (aac 2ch 44100Hz)
│     Audio --aid=4 --alang=dut (aac 2ch 44100Hz)
│     Audio --aid=5 --alang=spa (aac 2ch 44100Hz)
│     Audio --aid=6 (aac 2ch 44100Hz)
│     Audio --aid=7 (aac 2ch 44100Hz) (192 kbps)      

Note that some times, they send double streaming per stop point, so vid=1 and vid=2 would be the 1080p resolution, same for audio, just keep an eye on your first load to see this menu in the output window.

@MarcoMeirelles
Copy link

Any tip for a 1920 x 1080 monitor? Tried to divide all size values by 4 (since it's 4k) but no success, the sizes are too small and the main feed does not appear at all

@balexandre
Copy link
Author

@MarcoMeirelles in a 1920x1080, I would suggest something like this

image

and just point out what streams you want to focus on the best, for example:

  • 1150x646 Main or PLC stream
  • Data channel stream
  • 3 driver streams

@MarcoMeirelles
Copy link

@MarcoMeirelles in a 1920x1080, I would suggest something like this

image

and just point out what streams you want to focus on the best, for example:

  • 1150x646 Main or PLC stream
  • Data channel stream
  • 3 driver streams

Muito obrigado meu amigo Tuga, vou experimentar esse layout

@PhillipAlpha
Copy link

Any tip for a 1920 x 1080 monitor? Tried to divide all size values by 4 (since it's 4k) but no success, the sizes are too small and the main feed does not appear at all

They changed the name of the "main feed" to "world feed"

@grgsim
Copy link

grgsim commented Jun 27, 2021

Any tip for a 1920 x 1080 monitor? Tried to divide all size values by 4 (since it's 4k) but no success, the sizes are too small and the main feed does not appear at all

If I may, here is my personal favorite layout for 1080p monitors:
layout

Just make sure to hide taskbar to have full 1080pix vertical (right click on it -> taskbar settings -> automatically hide the taskbar in desktop mode)

@balexandre
Copy link
Author

@grgsim it's a personal opinion, for my "taste" I couldn't have your layout, I couldn't read the data screen well enough as I find that really useful to see the gaps between drivers in real-time and their section timings 😊

@grgsim
Copy link

grgsim commented Jun 27, 2021

@balexandre agreed, though it depends on your monitor size imo. In fact on 23" I don't use the data channel with this layout, but on 27" it's big enough for me.
It's a personal choice but I prefer having 100% of my monitor's space used, and if need be pull my iPad on the side to check the data 🙂

@PhillipAlpha
Copy link

did anyone else notice they flipped the VID quality scale? now its 1-6 with quality ascending?

@grgsim
Copy link

grgsim commented Jun 27, 2021

did anyone else notice they flipped the VID quality scale? now its 1-6 with quality ascending?

Noticed that too, but even worse the order is not consistent (here onboard cam) :
image

@osamarao
Copy link

When watching replays, is there an easy way of keeping all screens in sync?

@balexandre
Copy link
Author

@willowtreeapps no, but my script starts the videos with 30s delay so no loading/lag will be into them, and then, all you need is to pause the main feed so all others can catch up... delay is even noticed in the PitLane channel as they have 3 screens and sometimes you do notice some delay between them.

Nevertheless, that's how I end up with ... start all, find a good point and pause the main screen until one of the others catch up, for the rest of the race, they never get out of phase fr more than a few seconds, very watchable

@zierbeek
Copy link

zierbeek commented Mar 18, 2022

If I past this in a .toml on Mac, it doesn't seem to work :/

@balexandre
Copy link
Author

balexandre commented Mar 18, 2022

this original used json format, as it was the type of format F1Viewer used to use, now it uses a YAML/TOML approach

New configuration

here's a rough conversion, update your config file with the contents below

# notify about new releases
check_updates = true
# don't show driver names in their team's colour
disable_team_colors = false
# show the output at the bottom
horizontal_layout = false
# check for a live F1TV stream every x seconds
live_retry_timeout = 60
# change the size ratio of differen parts
output_ratio = 1
tree_ratio   = 1

# F1TV has not been consistent with the code for their audio tracks, these vaules have been observed in the past
# "deu" -> german
# "fra" -> french
# "spa" -> spanish
# "nld" -> dutch
# "por" -> portugese
# "eng" -> english
# "fx"  -> no commentary
# "cfx" -> no commentary
# onboards only:
# "teamradio"   -> team radio
# "obc"         -> team radio
# list them according to your preference
preferred_languages = ["teamradio", "obc", "eng"]
save_logs           = false
# wrap the output of executed commands or cut it off
terminal_wrap = true

# custom playback options can be used to execute any command, this example uses ffmpeg to donload the video
# [[custom_playback_options]]
#   command = ["ffmpeg", "-hide_banner", "-loglevel", "error", "-i", "$url", "-c", "copy", "-f", "mp4", "$title.mp4"]
#   proxy   = true
#   title   = "Download as mp4"

# mult commands can be used to start multiple streams at once, this example starts the world feed an the onboard for the GOAT ;)
# [[multi_commands]]
#   title = "Open World Feed and HAM onboard"
#   [[multi_commands.targets]]
#     command     = ["mpv", "$url", "--alang=$lang", "--quiet"] # define a command to execute
#     match_title = "World Feed"
#   [[multi_commands.targets]]
#     command_key = "custom mpv"      # you can also reference previously defined custom commands
#     match_title = "Lewis [a-zA-Z]+" # regex is also supported

# live session hooks are like custom multi commands, but they are automatically started if a new live session is detected 
# [[live_session_hooks]]
#   title = "Open Pit Lane and Data Channel"
#   [[live_session_hooks.targets]]
#     command     = ["mpv", "$url", "--alang=$lang", "--quiet"] # define a command to execute
#     match_title = "Pit Lane"
#   [[live_session_hooks.targets]]
#     command_key = "custom mpv"      # you can also reference previously defined custom commands
#     match_title = "Data Channel"

# you can override the default colours by providing new values in hex format (#RRGGBB)
[theme]
  action_node_color     = "#008B8B"
  background_color      = ""
  border_color          = "#FFFFFF"
  category_node_color   = "#FF4500"
  error_color           = "#FF0000"
  folder_node_color     = "#FFFFFF"
  info_color            = "#008000"
  item_node_color       = "#90EE90"
  live_color            = "#FF0000"
  loading_color         = ""
  multi_command_color   = "#7FFFD4"
  no_content_color      = "#FF4500"
  terminal_accent_color = "#008000"
  terminal_text_color   = "#FFFFFF"
  update_color          = "#8B0000"

[[custom_playback_options]]
  title = "download with ffmpeg"
  command = ["ffmpeg", "-hide_banner", "-loglevel", "warning", "-i", "$url", "-c", "copy", "$title.mp4"]
  proxy = false

[[custom_playback_options]]
  title = "Stream on VLC"
  command = ["C:\\Program Files\\VideoLAN\\VLC\\vlc.exe", "$url"]
  proxy = false

[[custom_playback_options]]
  title = "Stream on MPV (1080p)"
  command = ["mpv", "--quiet", "--no-border", "$url"]
  proxy = false

[[custom_playback_options]]
  title = "Stream on MPV (720p)"
  command = ["mpv", "--vid=5", "--no-border", "$url"]
  proxy = false

[[custom_playback_options]]
  title = "Stream with Streamlink+MPV (720p)"
  command = ["streamlink", "--player", "C:\\ProgramData\\chocolatey\\lib\\mpv.install\\tools\\mpv.exe", "--hls-audio-select", "*", "$url", "720p"]
  proxy = false

[[custom_playback_options]]
  title = "Stream with Streamlink+MPV (1080p)"
  command = ["streamlink", "--player", "C:\\ProgramData\\chocolatey\\lib\\mpv.install\\tools\\mpv.exe", "--hls-audio-select", "*", "$url", "1080p"]
  proxy = false

[[multi_commands]]
  title = "Onboard, track and data (4k)"

  [[multi_commands.targets]]
    match_title = "World Feed"
    command = ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=2880", "--geometry=0:0", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Charles Leclerc"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:0", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Sebastian Vettel"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:33%", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lewis Hamilton"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:67%", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Max Verstappen"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=100%:100%", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lando Norris"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=67%:100%", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Driver Tracker"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=0:100%", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Data Channel"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--autofit=960", "--geometry=33%:100%", "$url"]
    proxy = false

[[multi_commands]]
  title = "Onboard, track and data (3440x1440) + drivers audio"

  [[multi_commands.targets]]
    match_title = "World Feed"
    command = ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=1750", "--geometry=0:0", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lewis Hamilton"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:0", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Daniel Ricciardo"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:0", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Charles Leclerc"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:483", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lando Norris"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:483", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Max Verstappen"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:960", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Sergio Perez"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:960", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Driver Tracker"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=0:945", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Data Channel"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=687:922", "--autofit=1064", "$url"]
    proxy = false

[[multi_commands]]
  title = "Onboard, track and data (3440x1440 + PLC)"

  [[multi_commands.targets]]
    match_title = "Pit Lane"
    command = ["mpv", "--start=0", "--quiet", "--no-border", "--autofit=1750", "--geometry=0:0", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lewis Hamilton"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:0", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Daniel Ricciardo"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:0", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Charles Leclerc"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:483", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Lando Norris"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:483", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Max Verstappen"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=1748:960", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Sergio Perez"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=2600:960", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Driver Tracker"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=0:945", "--autofit=860", "$url"]
    proxy = false

  [[multi_commands.targets]]
    match_title = "Data Channel"
    command = ["mpv", "--aid=2", "--mute=yes", "--vid=5", "--start=0", "--quiet", "--no-border", "--cache-pause-initial=yes", "--cache-pause-wait=35", "--geometry=687:922", "--autofit=1064", "$url"]
    proxy = false

Output

this will output your Live & Replays with

image

IMPORTANT NOTE

  • remember to check the paths of the config as I'm pointing my players to a Windows Folder, just replace them for the path you have in your system
  • as well, change the name of the drivers you want to see

@zierbeek
Copy link

thanks man!

@JustJoostNL
Copy link

JustJoostNL commented Mar 31, 2022

Hi, i have 2 screens, a big 1680x1050 (main display) and a smaller 1920x1080 (second display) For my main display (1680x1050) i want to create a thing like this:
image

But then for my resolution (other sizes of the windows), how can i do that easily?

Also on my second smaller screen (1920x1080) i want like 15 driver cams (it doesnt matter if they are super small, i want them just as big as possible) how can i set that up also like the image above easily?

Is there software to make zones like this? (i really dont want to use powertoys because it using to much ram)

The help is welcome, because I am not really familiar with this!

@PhillipAlpha
Copy link

PhillipAlpha commented Mar 31, 2022

I oddly enough run that first screen layout but with the big screen at the bottom left rather than top right.

[[multi_commands]]
title = "Title "

[[multi_commands.targets]]
match_title = "" //Big screen here
command = ["mpv", "--quiet", "--mute=no", "--no-border", "--autofit=1280", "--geometry=0:0", "$url"]
proxy = false

[[multi_commands.targets]]
match_title = ""
command = ["mpv", "--mute=yes", "--vid=3", "--quiet", "--no-border", "--autofit=640", "--geometry=1280:0", "$url"]
proxy = false

[[multi_commands.targets]]
match_title = ""
command = ["mpv", "--mute=yes", "--vid=3", "--quiet", "--no-border", "--autofit=640", "--geometry=1280:360", "$url"]
proxy = false

[[multi_commands.targets]]
match_title = ""
command = ["mpv", "--mute=yes", "--vid=3", "--quiet", "--no-border", "--autofit=640", "--geometry=0:720", "$url"]
proxy = false

[[multi_commands.targets]]
match_title = ""
command = ["mpv", "--mute=yes", "--vid=3", "--quiet", "--no-border", "--autofit=640", "--geometry=640:720", "$url"]
proxy = false

[[multi_commands.targets]]
match_title = ""
command = ["mpv", "--mute=yes", "--vid=3", "--quiet", "--no-border", "--autofit=640", "--geometry=1280:720", "$url"]
proxy = false

@JustJoostNL
Copy link

Thanks, how do you create these multicommands "zones"? I also want to make a layout myself but i really dont know how to do and what to fill in at geometry and autofit.

@PhillipAlpha
Copy link

if you adjust and copy the bit above into your config file located at C:\users\your profile\appdata\roaming\f1viewer\config.toml on windows it should load up properly

you can even have muliple entries

@JustJoostNL
Copy link

Yeah, i know but i want to make mulitple multicommands, so i want to make the layout and scaling by myself, but how can i do that fast and efficiently. How does the --geometry and --autofit work? (so if i want to create a box like one on the image, but a other size/scaling how can i do that?)
image

@PhillipAlpha
Copy link

autofit is used to squeeze the window into a set width - and the corresponding height (i also use the vid command to ensure that i get the quality suitable for the window, otherwise it'll just pick the best quality possible)

all geometry does is placement of the window?

everything ultimately comes down to your native resulution and is based on the width of the window, thats the only scale you can adjust.

@JustJoostNL
Copy link

Thanks, but how do i know what to fill in at --geometry if i want it in the top right what to fill in then, i really dont know that....

@PhillipAlpha
Copy link

PhillipAlpha commented Mar 31, 2022

it'd be tough to fit to a 1680 by 1050 display tbh, as all the streams are locked in at 16:9 aspect ratio.

the main streams are:

vid=1 480x270
vid=2 512x288
vid=3 640x480
vid=4 960x540
vid=5 1280x720
vid=6 1920x1080 (this is only available for F1 Live, International, Data Channel and Driver Tracker)

so the best way to make it fit is to work out how big these 16:9 windows can be to on your screen with no gaps.

you can scale the width with autofit, but thats still not going to switch it to fit your 16:10 display.

But for top right to fit in would be 100%:0(or you can replace 100% with the width of your top left stream in pixels)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment