Stash Roku App

:placard: Summary Roku app that streams from a local Stash server instance.
:link: Repository https://github.com/MrRedBeard/Stash-Roku-App

Stash Roku App

Roku app that streams from a local Stash server instance

I like the interface of Stash more than any other streaming server I have tried and it just works

Screenshot

Stash Server

Stash Server Readme

Developer Instructions

Roku Developer Mode

Home (Γ—3), Up (Γ—2), Right, Left, Right, Left, Right
:house: :house: :house: :up_arrow: :up_arrow: :right_arrow: :left_arrow: :right_arrow: :left_arrow: :right_arrow:

Roku CEC/ARC Debug Menu

:house: :house: :house: :house: :house: :down_arrow: :left_arrow: :up_arrow: :up_arrow: :up_arrow:
Sequence: Home Γ—5 β†’ Down β†’ Left β†’ Up β†’ Up β†’ Up

  • Shows HDMI-CEC devices connected and ARC audio negotiation logs.

Roku Reboot Shortcut

Home Γ—5 β†’ Up β†’ Rewind β†’ Rewind β†’ Fast Forward β†’ Fast Forward
:house::house::house::house::house: :up_arrow: :fast_reverse_button::fast_reverse_button: :fast_forward_button::fast_forward_button:

  • Quick reboot without unplugging

Roku Ads Menu

:house: :house: :house: :house: :up_arrow: :right_arrow: :down_arrow: :left_arrow: :up_arrow:
Home (Γ—4), Up, Right, Down, Left, Up

  • In the resulting menu, find β€œCycle scrollable ads” and set it to β€œAlways Disabled”.
  • Find β€œCycle home screen ad banner server” and change it to β€œDemo 3”.
  • Restart your Roku to see the changes.

Roku Network Menu

:house: :house: :house: :house: :house: :up_arrow: :down_arrow: :up_arrow: :down_arrow: :up_arrow:
Home Γ—5 β†’ Up β†’ Down β†’ Up β†’ Down β†’ Up

  • Check Wi-Fi signal, link speed, channel, and other diagnostics.

Roku Hidden System Info Panel

:house: :house: :house: :house: :house: :up_arrow: :right_arrow: :down_arrow: :left_arrow: :up_arrow:
Home Γ—5 β†’ Up β†’ Right β†’ Down β†’ Left β†’ Up

  • build number, model ID, serial, uptime, memory, temperature.

Roku Platform / Hardware Menu

:house::house::house::house::house: :fast_forward_button: :pause_button: :fast_reverse_button: :pause_button: :fast_forward_button:
Home Γ—5 β†’ Fast Forward β†’ Pause β†’ Rewind β†’ Pause β†’ Fast Forward

  • Access CPU / temperature / memory stats, Wi-Fi radio power settings.

Dev Setup

npm install
chmod +x scripts/*.sh

Stash Server

http://192.168.1.232:9999/

Stash API Key (Requires authentication to be turned on but you can generate a key then remove auth)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJzdGFzaCIsInN1YiI6IkFQSUtleSIsImlhdCI6MTc2MDM2NzgxNX0.AtUO0Rnt707OeDR5gfFr7b-Roe4TA5soMNX-nFVHjcc

TVs

Dev Interface for Screenshots

http://192.168.1.235/plugin_inspect
Launch app on TV, upload package, enter password and click screenshot

Test connection to Roku

curl -v -u "rokudev:roku" "http://192.168.1.235/plugin_install" 2>&1 | sed -n '1,20p'

Build

npm run build;          # bsc will now find bsconfig.json and stop whining
npm run package;        # zips to out/app.zip using your scripts
export ROKU_IP=192.168.1.235; export ROKU_PASS='roku';
npm run sideload;       # pushes to Developer Installer

Launch + console

npm run build;          # bsc will now find bsconfig.json and stop whining
npm run package;        # zips to out/app.zip using your scripts
export ROKU_IP=192.168.1.235; export ROKU_PASS='roku';
npm run sideload
curl -d '' "http://$ROKU_IP:8060/launch/dev"
nc "$ROKU_IP" 8085

Tail

npm run tail

Common Errors

Console connection is already in use.

  • ps aux | grep β€˜nc’
  • look for β€œnc” like username 799080 0.0 0.0 5844 2976 pts/1 T 10:05 0:00 nc 192.168.1.235 8085
  • kill -9 ######

Test Stash Graph API

curl -s -X POST "http://192.168.1.232:9999/graphql" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "ApiKey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJzdGFzaCIsInN1YiI6IkFQSUtleSIsImlhdCI6MTc2MDM2NzgxNX0.AtUO0Rnt707OeDR5gfFr7b-Roe4TA5soMNX-nFVHjcc" \
  --data-binary '{"query":"query GetScenes($filter: FindFilterType!, $scene_filter: SceneFilterType){ findScenes(filter:$filter, scene_filter:$scene_filter){ scenes{ id title duration } } }","variables":{"filter":{"page":1,"per_page":5},"scene_filter":{}}}'
curl -s -X POST "http://192.168.1.232:9999/graphql" \
  -H "Content-Type: application/json" -H "Accept: application/json" \
  -H "ApiKey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJzdGFzaCIsInN1YiI6IkFQSUtleSIsImlhdCI6MTc2MDM2NzgxNX0.AtUO0Rnt707OeDR5gfFr7b-Roe4TA5soMNX-nFVHjcc" \
  --data-binary '{"query":"query GetScenes($filter: FindFilterType!, $scene_filter: SceneFilterType){ findScenes(filter:$filter, scene_filter:$scene_filter){ scenes{ id title } } }","variables":{"filter":{"page":1,"per_page":5},"scene_filter":{}}}'

Resources

Roku Icons

Format: The icon must be a PNG file.
Dimensions: The icon must be 320 x 180 pixels.

UI Resolution Manifest Value Width Γ— Height Description / Typical Devices
SD sd 720 Γ— 480 Legacy non-HD devices (rare now)
HD hd 1280 Γ— 720 720p Roku devices & HD TVs
FHD fhd 1920 Γ— 1080 Full-HD layout grid (recommended)
(No UHD token) (auto-scaled) (3840 Γ— 2160) 4K TVs upscale FHD UI automatically

Example Apps