{
  "schemaVersion": "1.0",
  "item": {
    "slug": "roku-control",
    "name": "Roku Control",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/IMaloney/roku-control",
    "canonicalUrl": "https://clawhub.ai/IMaloney/roku-control",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/roku-control",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=roku-control",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "references/common-apps.md",
      "references/remote-keys.md",
      "references/roku.json",
      "scripts/roku_control.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/roku-control"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/roku-control",
    "agentPageUrl": "https://openagent3.xyz/skills/roku-control/agent",
    "manifestUrl": "https://openagent3.xyz/skills/roku-control/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/roku-control/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Roku Control",
        "body": "Control Roku devices over your local network using the External Control Protocol (ECP). No authentication, cloud services, or complex setup required - just local HTTP commands."
      },
      {
        "title": "Prerequisites",
        "body": "Roku device on the same network as OpenClaw\nRoku's IP address (can be discovered automatically)"
      },
      {
        "title": "Setup (First Time)",
        "body": "1. Discover your Roku:\n\npython3 scripts/roku_control.py discover\n\nThis will show all Roku devices on your network with their IP addresses.\n\n2. Save the IP address:\n\nNote your Roku's IP (e.g., 192.168.1.100) for use in commands.\n\n3. Test connectivity:\n\npython3 scripts/roku_control.py --ip 192.168.1.100 info"
      },
      {
        "title": "Device Information",
        "body": "# Get device details\npython3 scripts/roku_control.py --ip 192.168.1.100 info\n\n# List all installed apps\npython3 scripts/roku_control.py --ip 192.168.1.100 apps\n\n# See what's currently playing\npython3 scripts/roku_control.py --ip 192.168.1.100 active"
      },
      {
        "title": "Navigation & Control",
        "body": "# Navigate menus\npython3 scripts/roku_control.py --ip 192.168.1.100 key Up\npython3 scripts/roku_control.py --ip 192.168.1.100 key Down\npython3 scripts/roku_control.py --ip 192.168.1.100 key Left\npython3 scripts/roku_control.py --ip 192.168.1.100 key Right\npython3 scripts/roku_control.py --ip 192.168.1.100 key Select\n\n# Go home\npython3 scripts/roku_control.py --ip 192.168.1.100 key Home\n\n# Go back\npython3 scripts/roku_control.py --ip 192.168.1.100 key Back"
      },
      {
        "title": "Playback",
        "body": "# Play/pause\npython3 scripts/roku_control.py --ip 192.168.1.100 key Play\npython3 scripts/roku_control.py --ip 192.168.1.100 key Pause\n\n# Rewind/fast forward\npython3 scripts/roku_control.py --ip 192.168.1.100 key Rev\npython3 scripts/roku_control.py --ip 192.168.1.100 key Fwd\n\n# Instant replay (back 10 seconds)\npython3 scripts/roku_control.py --ip 192.168.1.100 key InstantReplay"
      },
      {
        "title": "Volume & Power",
        "body": "# Volume control (Roku TV or HDMI-CEC enabled)\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeUp\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeMute\n\n# Power off\npython3 scripts/roku_control.py --ip 192.168.1.100 key PowerOff"
      },
      {
        "title": "Launch Apps",
        "body": "# Launch by app ID (faster)\npython3 scripts/roku_control.py --ip 192.168.1.100 launch 12  # Netflix\n\n# Launch by app name (case-insensitive)\npython3 scripts/roku_control.py --ip 192.168.1.100 launch Netflix\npython3 scripts/roku_control.py --ip 192.168.1.100 launch YouTube\npython3 scripts/roku_control.py --ip 192.168.1.100 launch \"Disney+\""
      },
      {
        "title": "Search & Text Input",
        "body": "# Send search text\npython3 scripts/roku_control.py --ip 192.168.1.100 text \"Breaking Bad\"\n\n# This is much faster than individual key presses for searches"
      },
      {
        "title": "Natural Language Translation",
        "body": "Map user requests to commands:\n\nNavigation:\n\n\"Go to home screen\" → key Home\n\"Go back\" → key Back\n\"Scroll down\" / \"Move down\" → key Down\n\"Select this\" / \"Click\" → key Select\n\nPlayback:\n\n\"Play\" / \"Resume\" → key Play\n\"Pause\" → key Pause\n\"Rewind\" → key Rev\n\"Fast forward\" → key Fwd\n\"Go back 10 seconds\" / \"Replay that\" → key InstantReplay\n\nVolume:\n\n\"Turn up the volume\" → key VolumeUp\n\"Turn down the volume\" → key VolumeDown\n\"Mute\" / \"Unmute\" → key VolumeMute\n\nApps:\n\n\"Open Netflix\" → launch Netflix\n\"Launch YouTube\" → launch YouTube\n\"Start Hulu\" → launch Hulu\n\nSearch:\n\n\"Search for Breaking Bad\" → text \"Breaking Bad\"\n\"Find Stranger Things\" → Open search + send text\n\nPower:\n\n\"Turn off the TV\" → key PowerOff"
      },
      {
        "title": "Common App IDs",
        "body": "See references/common-apps.md for a comprehensive list.\n\nQuick reference:\n\nNetflix: 12\nYouTube: 837\nHulu: 2285\nDisney+: 291097\nAmazon Prime Video: 13\nHBO Max: 61322\nThe Roku Channel: 151908\n\nTo get app IDs for your specific Roku:\n\npython3 scripts/roku_control.py --ip <ip> apps"
      },
      {
        "title": "Complete Key Reference",
        "body": "See references/remote-keys.md for all supported remote keys.\n\nCommon keys: Home, Back, Up, Down, Left, Right, Select, Play, Pause, Rev, Fwd, VolumeUp, VolumeDown, VolumeMute, PowerOff, Search, Info"
      },
      {
        "title": "Watch Netflix",
        "body": "# Go home, launch Netflix\npython3 scripts/roku_control.py --ip 192.168.1.100 key Home\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 launch 12"
      },
      {
        "title": "Search and Play",
        "body": "# Open search, send text, select first result\npython3 scripts/roku_control.py --ip 192.168.1.100 key Search\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 text \"The Office\"\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 key Select"
      },
      {
        "title": "Quick Replay",
        "body": "# Go back 10 seconds and resume\npython3 scripts/roku_control.py --ip 192.168.1.100 key InstantReplay\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 key Play"
      },
      {
        "title": "Movie Night Setup",
        "body": "# Launch streaming app, adjust volume\npython3 scripts/roku_control.py --ip 192.168.1.100 launch \"Disney+\"\nsleep 2\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown"
      },
      {
        "title": "Device Mapping",
        "body": "Store your Roku IP in references/roku.json:\n\n{\n  \"living_room\": {\n    \"ip\": \"192.168.1.100\",\n    \"name\": \"Living Room TV\",\n    \"model\": \"Roku Ultra\"\n  },\n  \"bedroom\": {\n    \"ip\": \"192.168.1.101\",\n    \"name\": \"Bedroom Roku\",\n    \"model\": \"Roku Streaming Stick+\"\n  }\n}\n\nThen reference by friendly name in conversations."
      },
      {
        "title": "Troubleshooting",
        "body": "\"No Roku devices found\"\n\nEnsure Roku is powered on and connected to network\nCheck that OpenClaw and Roku are on same network/subnet\nSome routers block SSDP discovery - try manual IP if known\nVerify Roku's network settings in Settings → Network\n\n\"Connection timeout\"\n\nVerify IP address is correct\nPing the Roku: ping <roku-ip>\nCheck firewall isn't blocking port 8060\nRoku may have changed IP (use DHCP reservation)\n\n\"Key not working\"\n\nSome keys only work on Roku TVs (volume, power, inputs)\nVolume keys require HDMI-CEC or Roku TV\nPower commands may not be supported on older devices\nCheck references/remote-keys.md for compatibility\n\nApp won't launch\n\nVerify app is installed: run apps command\nUse correct app ID (case-sensitive for name matching)\nSome apps require additional authentication in their own UI\n\nDiscovery not finding device\n\nTry manual IP if you know it: check router DHCP leases\nRoku's IP is shown in Settings → Network → About\nSet static IP or DHCP reservation for reliability"
      },
      {
        "title": "Movie Night Routine",
        "body": "Combine with Govee lights skill:\n\n# Dim lights\nfor light in \"living room\" \"tv lights\"; do\n  python3 govee-lights/scripts/govee_control.py brightness \"$light\" 15\n  python3 govee-lights/scripts/govee_control.py temp \"$light\" 2700\ndone\n\n# Launch streaming app\npython3 roku-control/scripts/roku_control.py --ip 192.168.1.100 launch Netflix\n\n# Set comfortable volume\npython3 roku-control/scripts/roku_control.py --ip 192.168.1.100 key VolumeDown"
      },
      {
        "title": "Notes",
        "body": "ECP protocol works entirely over LAN (no internet required)\nNo authentication or API keys needed\nCommands are instant (local network speed)\nMultiple Roku devices can be controlled independently\nWorks with Roku TVs, streaming sticks, and boxes\nPower-on commands not supported (ECP limitation - Roku must be awake)\nFor power-on, use HDMI-CEC or network wake features if available"
      },
      {
        "title": "Limitations",
        "body": "Cannot power on a fully-off Roku (ECP only works when device is on)\nVolume/power commands limited to Roku TVs or HDMI-CEC setups\nNo feedback on success/failure for some commands\nText input is character-by-character (slower for long searches)\nDiscovery requires SSDP (some networks block multicast)"
      }
    ],
    "body": "Roku Control\n\nControl Roku devices over your local network using the External Control Protocol (ECP). No authentication, cloud services, or complex setup required - just local HTTP commands.\n\nPrerequisites\nRoku device on the same network as OpenClaw\nRoku's IP address (can be discovered automatically)\nSetup (First Time)\n\n1. Discover your Roku:\n\npython3 scripts/roku_control.py discover\n\n\nThis will show all Roku devices on your network with their IP addresses.\n\n2. Save the IP address:\n\nNote your Roku's IP (e.g., 192.168.1.100) for use in commands.\n\n3. Test connectivity:\n\npython3 scripts/roku_control.py --ip 192.168.1.100 info\n\nCommon Operations\nDevice Information\n# Get device details\npython3 scripts/roku_control.py --ip 192.168.1.100 info\n\n# List all installed apps\npython3 scripts/roku_control.py --ip 192.168.1.100 apps\n\n# See what's currently playing\npython3 scripts/roku_control.py --ip 192.168.1.100 active\n\nNavigation & Control\n# Navigate menus\npython3 scripts/roku_control.py --ip 192.168.1.100 key Up\npython3 scripts/roku_control.py --ip 192.168.1.100 key Down\npython3 scripts/roku_control.py --ip 192.168.1.100 key Left\npython3 scripts/roku_control.py --ip 192.168.1.100 key Right\npython3 scripts/roku_control.py --ip 192.168.1.100 key Select\n\n# Go home\npython3 scripts/roku_control.py --ip 192.168.1.100 key Home\n\n# Go back\npython3 scripts/roku_control.py --ip 192.168.1.100 key Back\n\nPlayback\n# Play/pause\npython3 scripts/roku_control.py --ip 192.168.1.100 key Play\npython3 scripts/roku_control.py --ip 192.168.1.100 key Pause\n\n# Rewind/fast forward\npython3 scripts/roku_control.py --ip 192.168.1.100 key Rev\npython3 scripts/roku_control.py --ip 192.168.1.100 key Fwd\n\n# Instant replay (back 10 seconds)\npython3 scripts/roku_control.py --ip 192.168.1.100 key InstantReplay\n\nVolume & Power\n# Volume control (Roku TV or HDMI-CEC enabled)\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeUp\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeMute\n\n# Power off\npython3 scripts/roku_control.py --ip 192.168.1.100 key PowerOff\n\nLaunch Apps\n# Launch by app ID (faster)\npython3 scripts/roku_control.py --ip 192.168.1.100 launch 12  # Netflix\n\n# Launch by app name (case-insensitive)\npython3 scripts/roku_control.py --ip 192.168.1.100 launch Netflix\npython3 scripts/roku_control.py --ip 192.168.1.100 launch YouTube\npython3 scripts/roku_control.py --ip 192.168.1.100 launch \"Disney+\"\n\nSearch & Text Input\n# Send search text\npython3 scripts/roku_control.py --ip 192.168.1.100 text \"Breaking Bad\"\n\n# This is much faster than individual key presses for searches\n\nNatural Language Translation\n\nMap user requests to commands:\n\nNavigation:\n\n\"Go to home screen\" → key Home\n\"Go back\" → key Back\n\"Scroll down\" / \"Move down\" → key Down\n\"Select this\" / \"Click\" → key Select\n\nPlayback:\n\n\"Play\" / \"Resume\" → key Play\n\"Pause\" → key Pause\n\"Rewind\" → key Rev\n\"Fast forward\" → key Fwd\n\"Go back 10 seconds\" / \"Replay that\" → key InstantReplay\n\nVolume:\n\n\"Turn up the volume\" → key VolumeUp\n\"Turn down the volume\" → key VolumeDown\n\"Mute\" / \"Unmute\" → key VolumeMute\n\nApps:\n\n\"Open Netflix\" → launch Netflix\n\"Launch YouTube\" → launch YouTube\n\"Start Hulu\" → launch Hulu\n\nSearch:\n\n\"Search for Breaking Bad\" → text \"Breaking Bad\"\n\"Find Stranger Things\" → Open search + send text\n\nPower:\n\n\"Turn off the TV\" → key PowerOff\nCommon App IDs\n\nSee references/common-apps.md for a comprehensive list.\n\nQuick reference:\n\nNetflix: 12\nYouTube: 837\nHulu: 2285\nDisney+: 291097\nAmazon Prime Video: 13\nHBO Max: 61322\nThe Roku Channel: 151908\n\nTo get app IDs for your specific Roku:\n\npython3 scripts/roku_control.py --ip <ip> apps\n\nComplete Key Reference\n\nSee references/remote-keys.md for all supported remote keys.\n\nCommon keys: Home, Back, Up, Down, Left, Right, Select, Play, Pause, Rev, Fwd, VolumeUp, VolumeDown, VolumeMute, PowerOff, Search, Info\n\nAdvanced Workflows\nWatch Netflix\n# Go home, launch Netflix\npython3 scripts/roku_control.py --ip 192.168.1.100 key Home\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 launch 12\n\nSearch and Play\n# Open search, send text, select first result\npython3 scripts/roku_control.py --ip 192.168.1.100 key Search\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 text \"The Office\"\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 key Select\n\nQuick Replay\n# Go back 10 seconds and resume\npython3 scripts/roku_control.py --ip 192.168.1.100 key InstantReplay\nsleep 1\npython3 scripts/roku_control.py --ip 192.168.1.100 key Play\n\nMovie Night Setup\n# Launch streaming app, adjust volume\npython3 scripts/roku_control.py --ip 192.168.1.100 launch \"Disney+\"\nsleep 2\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\npython3 scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\n\nDevice Mapping\n\nStore your Roku IP in references/roku.json:\n\n{\n  \"living_room\": {\n    \"ip\": \"192.168.1.100\",\n    \"name\": \"Living Room TV\",\n    \"model\": \"Roku Ultra\"\n  },\n  \"bedroom\": {\n    \"ip\": \"192.168.1.101\",\n    \"name\": \"Bedroom Roku\",\n    \"model\": \"Roku Streaming Stick+\"\n  }\n}\n\n\nThen reference by friendly name in conversations.\n\nTroubleshooting\n\n\"No Roku devices found\"\n\nEnsure Roku is powered on and connected to network\nCheck that OpenClaw and Roku are on same network/subnet\nSome routers block SSDP discovery - try manual IP if known\nVerify Roku's network settings in Settings → Network\n\n\"Connection timeout\"\n\nVerify IP address is correct\nPing the Roku: ping <roku-ip>\nCheck firewall isn't blocking port 8060\nRoku may have changed IP (use DHCP reservation)\n\n\"Key not working\"\n\nSome keys only work on Roku TVs (volume, power, inputs)\nVolume keys require HDMI-CEC or Roku TV\nPower commands may not be supported on older devices\nCheck references/remote-keys.md for compatibility\n\nApp won't launch\n\nVerify app is installed: run apps command\nUse correct app ID (case-sensitive for name matching)\nSome apps require additional authentication in their own UI\n\nDiscovery not finding device\n\nTry manual IP if you know it: check router DHCP leases\nRoku's IP is shown in Settings → Network → About\nSet static IP or DHCP reservation for reliability\nIntegration with Other Skills\nMovie Night Routine\n\nCombine with Govee lights skill:\n\n# Dim lights\nfor light in \"living room\" \"tv lights\"; do\n  python3 govee-lights/scripts/govee_control.py brightness \"$light\" 15\n  python3 govee-lights/scripts/govee_control.py temp \"$light\" 2700\ndone\n\n# Launch streaming app\npython3 roku-control/scripts/roku_control.py --ip 192.168.1.100 launch Netflix\n\n# Set comfortable volume\npython3 roku-control/scripts/roku_control.py --ip 192.168.1.100 key VolumeDown\n\nNotes\nECP protocol works entirely over LAN (no internet required)\nNo authentication or API keys needed\nCommands are instant (local network speed)\nMultiple Roku devices can be controlled independently\nWorks with Roku TVs, streaming sticks, and boxes\nPower-on commands not supported (ECP limitation - Roku must be awake)\nFor power-on, use HDMI-CEC or network wake features if available\nLimitations\nCannot power on a fully-off Roku (ECP only works when device is on)\nVolume/power commands limited to Roku TVs or HDMI-CEC setups\nNo feedback on success/failure for some commands\nText input is character-by-character (slower for long searches)\nDiscovery requires SSDP (some networks block multicast)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/IMaloney/roku-control",
    "publisherUrl": "https://clawhub.ai/IMaloney/roku-control",
    "owner": "IMaloney",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/roku-control",
    "downloadUrl": "https://openagent3.xyz/downloads/roku-control",
    "agentUrl": "https://openagent3.xyz/skills/roku-control/agent",
    "manifestUrl": "https://openagent3.xyz/skills/roku-control/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/roku-control/agent.md"
  }
}