Kodi Remote

I’m having difficulty trying to get this to work in node red sending it to Home Assistant. For instance, this works:

{
  "action": "pageup",
  "entity_id": "media_player.kodi_de1dd1bc895a38c",
  "method": "Input.ExecuteAction"
}

and it’s even simpler for just pressing the key up:

{"method":"Input.Up"}

EDIT: got smallforward working with:

{
    "playerid": 1,
    "value": {
        "step": "smallforward"
    },
    "method": "Player.Seek"
}

and including the entity_id doesn’t help either. https://kodi.wiki/view/JSON-RPC_API/v12#Player.Seek mentions a step parameter…

I’m doing this in node red so that based on the source input on my receiver, I can control Kodi, or Netflix et cetera with the same virtual remote.

I just use a helper/Boolean input and check what it is set to and route it to the correct remote, in this example: Kodi. Here’s the code:

[{"id":"36ee710550b80842","type":"api-current-state","z":"ed20569e.0fcf18","name":"","server":"ec455634.5638","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.preamp_kodi_source","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":790,"y":4340,"wires":[["74b2e29eb8998f86"],[]]},{"id":"ef06d2c7ab4bb047","type":"api-call-service","z":"ed20569e.0fcf18","name":"","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"media_player","service":"media_pause","entityId":"media_player.kodi_de1dd512f4f69f","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1530,"y":3940,"wires":[[]]},{"id":"5278f7c1901177a4","type":"api-call-service","z":"ed20569e.0fcf18","name":"Down","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Down\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4240,"wires":[[]]},{"id":"74b2e29eb8998f86","type":"switch","z":"ed20569e.0fcf18","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"play","vt":"str"},{"t":"eq","v":"pause","vt":"str"},{"t":"eq","v":"stop","vt":"str"},{"t":"eq","v":"left","vt":"str"},{"t":"eq","v":"right","vt":"str"},{"t":"eq","v":"up","vt":"str"},{"t":"eq","v":"down","vt":"str"},{"t":"eq","v":"select","vt":"str"},{"t":"eq","v":"back","vt":"str"},{"t":"eq","v":"rewind","vt":"str"},{"t":"eq","v":"fastforward","vt":"str"},{"t":"eq","v":"chup","vt":"str"},{"t":"eq","v":"chdn","vt":"str"},{"t":"eq","v":"home","vt":"str"},{"t":"eq","v":"info","vt":"str"},{"t":"eq","v":"ContextMenu","vt":"str"}],"checkall":"true","repair":false,"outputs":16,"x":1090,"y":4340,"wires":[["87d6e9ee7aea42cd"],["ef06d2c7ab4bb047"],["007f67d0ec07c03e"],["ac4d352e99f291cb"],["ae3754f5f82579c9"],["fe7e8d0612cb9c20"],["5278f7c1901177a4"],["5417f138cd7de57c"],["cc8949ebe30cf62a"],["40805776949d3fe7"],["c46c3a2f93a9534b"],["704c3ebe7afd8a39"],["8d61cecfe55f2e07"],["72efed837659fde3"],["5f9edc3f6c072d6d"],["bf569baa5c9334c1"]]},{"id":"fe7e8d0612cb9c20","type":"api-call-service","z":"ed20569e.0fcf18","name":"Up","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Up\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4180,"wires":[[]]},{"id":"ae3754f5f82579c9","type":"api-call-service","z":"ed20569e.0fcf18","name":"Right","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Right\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4120,"wires":[[]]},{"id":"ac4d352e99f291cb","type":"api-call-service","z":"ed20569e.0fcf18","name":"Left","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Left\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4060,"wires":[[]]},{"id":"5417f138cd7de57c","type":"api-call-service","z":"ed20569e.0fcf18","name":"Select","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Select\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4300,"wires":[[]]},{"id":"72efed837659fde3","type":"api-call-service","z":"ed20569e.0fcf18","name":"Home","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Home\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4660,"wires":[[]]},{"id":"cc8949ebe30cf62a","type":"api-call-service","z":"ed20569e.0fcf18","name":"Back","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Back\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4360,"wires":[[]]},{"id":"87d6e9ee7aea42cd","type":"api-call-service","z":"ed20569e.0fcf18","name":"","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"media_player","service":"media_play","entityId":"media_player.kodi_de1dd512f4f69f","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1530,"y":3880,"wires":[[]]},{"id":"007f67d0ec07c03e","type":"api-call-service","z":"ed20569e.0fcf18","name":"","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"media_player","service":"media_stop","entityId":"media_player.kodi_de1dd512f4f69f","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1530,"y":4000,"wires":[[]]},{"id":"208b80c401fb0c7a","type":"server-events","z":"ed20569e.0fcf18","name":"","server":"ec455634.5638","version":1,"event_type":"kodi_call_method_result","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":810,"y":4800,"wires":[[]]},{"id":"40805776949d3fe7","type":"api-call-service","z":"ed20569e.0fcf18","name":"  small backward","server":"ec455634.5638","version":3,"debugenabled":true,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"playerid\":1,\"value\":{\"step\":\"smallbackward\"},\"method\":\"Player.Seek\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":4420,"wires":[[]]},{"id":"c46c3a2f93a9534b","type":"api-call-service","z":"ed20569e.0fcf18","name":"  small  forward","server":"ec455634.5638","version":3,"debugenabled":true,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"playerid\":1,\"value\":{\"step\":\"smallforward\"},\"method\":\"Player.Seek\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1470,"y":4480,"wires":[[]]},{"id":"8d61cecfe55f2e07","type":"api-call-service","z":"ed20569e.0fcf18","name":"Page Down","server":"ec455634.5638","version":3,"debugenabled":true,"service_domain":"kodi","service":"call_method","entityId":"","data":"{\"action\":\"pagedown\",\"method\":\"Input.ExecuteAction\",\"entity_id\":\"media_player.kodi_de1dd512f4f69f\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1470,"y":4600,"wires":[[]]},{"id":"704c3ebe7afd8a39","type":"api-call-service","z":"ed20569e.0fcf18","name":"Page Up","server":"ec455634.5638","version":3,"debugenabled":true,"service_domain":"kodi","service":"call_method","entityId":"","data":"{\"action\":\"pageup\",\"method\":\"Input.ExecuteAction\",\"entity_id\":\"media_player.kodi_de1dd512f4f69f\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1460,"y":4540,"wires":[[]]},{"id":"5f9edc3f6c072d6d","type":"api-call-service","z":"ed20569e.0fcf18","name":"Info","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.Info\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1450,"y":4720,"wires":[[]]},{"id":"bf569baa5c9334c1","type":"api-call-service","z":"ed20569e.0fcf18","name":"ContextMenu","server":"ec455634.5638","version":3,"debugenabled":false,"service_domain":"kodi","service":"call_method","entityId":"media_player.kodi_de1dd512f4f69f","data":"{\"method\":\"Input.ContextMenu\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1470,"y":4780,"wires":[[]]},{"id":"ec455634.5638","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]

Small update to include some Kodi window navigation shortcuts thanks to stefanos. Details here: https://community.home-assistant.io/t/kodi-tv-series-button/399204/3?u=tom_l

Additional scripts (not all used in the card):

lounge_kodi_window_albums:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: music
      parameters:
        - Albums

lounge_kodi_window_artists:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: music
      parameters:
        - Artists

lounge_kodi_window_movies:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: videos
      parameters:
        - MovieTitles

lounge_kodi_window_recent_movies:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: videos
      parameters:
        - RecentlyAddedMovies

lounge_kodi_window_recent_tv_shows:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: videos
      parameters:
        - RecentlyAddedEpisodes

lounge_kodi_window_tv_shows:
  sequence:
    service: kodi.call_method
    target:
      entity_id: media_player.lounge_osmc_kodi
    data:
      method: GUI.ActivateWindow
      window: videos
      parameters:
        - TvshowTitles

New card layout:

entities:
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_input_home
        icon: mdi:home
        name: Home
        tap_action:
          service: script.lounge_kodi_input_home
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_window_recent_movies
        icon: mdi:movie-open-star
        name: New Movies
        tap_action:
          service: script.lounge_kodi_window_recent_movies
        template: menu_button
        type: custom:button-card
      - entity: script.lounge_kodi_window_recent_tv_shows
        icon: mdi:television-shimmer
        name: New TV
        tap_action:
          service: script.lounge_kodi_window_recent_tv_shows
        template: menu_button
        type: custom:button-card
      - entity: script.lounge_kodi_window_albums
        icon: mdi:music-box
        name: Albums
        tap_action:
          service: script.lounge_kodi_window_albums
        template: menu_button
        type: custom:button-card
    type: custom:hui-element
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_input_contectx_menu
        icon: mdi:menu
        name: Menu
        tap_action:
          service: script.lounge_kodi_input_contectx_menu
        template: menu_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_info
        icon: mdi:information-outline
        name: Info
        tap_action:
          service: script.lounge_kodi_input_info
        template: menu_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_up
        icon: mdi:arrow-up-bold
        name: Up
        styles:
          card:
            - background: var(--secondary-background-color-alpha)
        tap_action:
          service: script.lounge_kodi_input_up
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_window_artists
        icon: mdi:account-music
        name: Artists
        tap_action:
          service: script.lounge_kodi_window_artists
        template: menu_button
        type: custom:button-card
    type: custom:hui-element
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_player_play_pause
        icon: mdi:play-pause
        name: Play/Pause
        tap_action:
          service: script.lounge_kodi_player_play_pause
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_left
        icon: mdi:arrow-left-bold
        name: Left
        styles:
          card:
            - background: var(--secondary-background-color-alpha)
        tap_action:
          service: script.lounge_kodi_input_left
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_select
        icon: mdi:check-circle-outline
        name: Ok
        tap_action:
          service: script.lounge_kodi_input_select
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_right
        icon: mdi:arrow-right-bold
        name: Right
        styles:
          card:
            - background: var(--secondary-background-color-alpha)
        tap_action:
          service: script.lounge_kodi_input_right
        template: icon_button
        type: custom:button-card
    type: custom:hui-element
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_player_stop
        icon: mdi:stop
        name: Stop
        tap_action:
          service: script.lounge_kodi_player_stop
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_back
        icon: mdi:backburger
        name: Return
        tap_action:
          service: script.lounge_kodi_input_back
        template: menu_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_down
        icon: mdi:arrow-down-bold
        name: Down
        styles:
          card:
            - background: var(--secondary-background-color-alpha)
        tap_action:
          service: script.lounge_kodi_input_down
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_input_next_subtitle
        icon: mdi:comment-text-outline
        name: Subtitle
        tap_action:
          service: script.lounge_kodi_input_next_subtitle
        template: menu_button
        type: custom:button-card
    type: custom:hui-element
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_player_rewind
        icon: mdi:rewind
        name: Rewind
        tap_action:
          service: script.lounge_kodi_player_rewind
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_fast_fwd
        icon: mdi:fast-forward
        name: Forward
        tap_action:
          service: script.lounge_kodi_player_fast_fwd
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_skip_back
        icon: mdi:skip-previous
        name: Skip Back
        tap_action:
          service: script.lounge_kodi_player_skip_back
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_skip_fwd
        icon: mdi:skip-next
        name: Skip Fwd
        tap_action:
          service: script.lounge_kodi_player_skip_fwd
        template: icon_button
        type: custom:button-card
    type: custom:hui-element
  - card_type: horizontal-stack
    cards:
      - entity: script.lounge_kodi_player_skip_back_30
        icon: mdi:rewind-30
        name: Back 30s
        tap_action:
          service: script.lounge_kodi_player_skip_back_30
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_skip_back_10
        icon: mdi:rewind-10
        name: Back 10s
        tap_action:
          service: script.lounge_kodi_player_skip_back_10
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_skip_fwd_10
        icon: mdi:fast-forward-10
        name: Fwd 10s
        tap_action:
          service: script.lounge_kodi_player_skip_fwd_10
        template: icon_button
        type: custom:button-card
      - entity: script.lounge_kodi_player_skip_fwd_30
        icon: mdi:fast-forward-30
        name: Fwd 30s
        tap_action:
          service: script.lounge_kodi_player_skip_fwd_30
        template: icon_button
        type: custom:button-card
    type: custom:hui-element
  - artwork: full-cover
    entity: media_player.lounge_osmc_kodi
    group: true
    hide:
      artwork: false
      controls: true
      icon: false
      name: false
      power: true
      power_state: true
      source: false
      volume: true
    icon: mdi:kodi
    info: scroll
    type: custom:mini-media-player
show_header_toggle: false
title: Kodi Remote
type: entities
2 Likes

Good job… :+1:

1 Like

Note the error at that line (method)

1 Like

Thanks everyone for the script pointers that has helped me out enormously. Thought I would share my remote. It is not exclusively used for Kodi. The tabs down the left allow me to select each component and the buttons appear and vanish as necessary depending on the selection. Clearly I have modified the Yatse remote. I am a big fan of Floorplan for Home Assistant and I have used this here. It has allowed me to have these multiple images on one page as well as tailoring some buttons which respond differently depending on whether it is a tap or a hold. I will put a few scripts at the bottom that I don’t think anyone has done above.

So the extra scripts I needed were to bring up the live TV channels, to be able to bring up the NOW PLAYING screen and to change the aspect ratio of videos.

  rumpus_kodi_window_tv:
    mode: queued
    alias: "Rumpus Kodi Remote TV"
    sequence:
      service: kodi.call_method
      target:
        entity_id: media_player.192_168_1_178
      data:
        method: GUI.ActivateWindow
        window: tvchannels

  rumpus_kodi_window_fullscreen:
    mode: queued
    alias: "Rumpus Kodi Remote Fullscreen"
    sequence:
      service: kodi.call_method
      target:
        entity_id: media_player.192_168_1_178
      data:
        method: GUI.SetFullscreen
        fullscreen: true

  rumpus_kodi_window_aspectratio:
    mode: queued
    alias: "Rumpus Kodi Remote Aspect Ratio"
    sequence:
      service: kodi.call_method
      target:
        entity_id: media_player.192_168_1_178
      data:
        method: Input.ExecuteAction
        action: aspectratio
1 Like

Yay! Someone else with a “Rumpus Room”.

I got some funny questions from international users when they saw that in my config. :rofl:

1 Like

If anyone would like to see a bit more of the remote in action I have posted a video tour of the whole thing over here: Share your Floorplan - #715 by OzGav

Would it be possible for someone to list out the steps to get a kodi dashboard lien this one set up. I have glanced through the 104 posts but as a novice am trying to workout where to start and what’s the minimum I need to have it working. And then how do I get it looking as cool as these.

1 Like

Have a read of this post.

Use these templates and files:


paper-buttons-row can make a decent looking remote.

1 Like

I have made the cards. Don’t quite have it working. Think it’s because I don’t have the corresponding scripts. Does that sound right? Any quick guide on setting up the script part?

You haven’t explained what you mean by not having it working. What are you trying to accomplish? What have you done? In answer to you request for a guide to scripts Scripts - Home Assistant

OzFav

not sure it is quite right

Next I tried to add the custom button card. Went and downloaded the github as a zip. I am meant to unzip this and put it into config/www folder. I assumed it needs to be unzipped. Not sure how to do this. I tried using Studio Code Server. Can not see to how to get all the files in there.

What do I have to do next after getting the files into the config/www

Looks like you haven’t loaded the hui-element plug-in correctly. Have you added the resource? I don’t use it but the instructions and debugging help is here Lovelace Plugins · thomasloven/hass-config Wiki · GitHub

I updated to Kodi Matrix recently, FYI these scripts that used to work in Kodi Leia:

  lounge_kodi_player_skip_back_10:
    sequence:
      - service: kodi.call_method
        data:
          entity_id: media_player.kodi
          method: Player.Seek
          playerid: 1
          value: "smallbackward"

  lounge_kodi_player_skip_back_30:
    sequence:
      - service: kodi.call_method
        data:
          entity_id: media_player.kodi
          method: Player.Seek
          playerid: 1
          value: "bigbackward"

  lounge_kodi_player_skip_fwd_10:
    sequence:
      - service: kodi.call_method
        data:
          entity_id: media_player.kodi
          method: Player.Seek
          playerid: 1
          value: "smallforward"

  lounge_kodi_player_skip_fwd_30:
    sequence:
      - service: kodi.call_method
        data:
          entity_id: media_player.kodi
          method: Player.Seek
          playerid: 1
          value: "bigforward"

Need to be updated to:

lounge_kodi_player_skip_back_10:
  sequence:
    service: kodi.call_method
    data:
      entity_id: media_player.lounge_osmc_kodi
      method: Player.Seek
      playerid: 1
      value: 
        step: "smallbackward"

lounge_kodi_player_skip_back_30:
  sequence:
    service: kodi.call_method
    data:
      entity_id: media_player.lounge_osmc_kodi
      method: Player.Seek
      playerid: 1
      value: 
        step: "bigbackward"

lounge_kodi_player_skip_fwd_10:
  sequence:
    service: kodi.call_method
    data:
      entity_id: media_player.lounge_osmc_kodi
      method: Player.Seek
      playerid: 1
      value: 
        step: "smallforward"

lounge_kodi_player_skip_fwd_30:
  sequence:
    service: kodi.call_method
    data:
      entity_id: media_player.lounge_osmc_kodi
      method: Player.Seek
      playerid: 1
      value: 
        step: "bigforward"

I have used a template and assigned them Input.Up, Input.Down, Input.Select etc. With these I have a functional remote that helps me navigate Kodi.

However, when there is a video playing, these buttons dont work. I want Input.Select to bring up the OSD, Input.Right to seek 10 seconds etc. This is the behavious I see with Yatse and other apps, for instance. How do I achieve this?

Probably need to use a script for your service calls and then within that IF-THEN-ELSE and check for the state of the player and then send the different commands based on that

1 Like

I am already using scripts for the service calls. Will try and incorporate the logic. Thanks for the pointer.

Has anyone found a way to make a button where the Window “Download subtitles” is opened?