torttube/docs/install.md
Kayos ffc7332910 Declare plugin.video.youtube as a Kodi addon dep
addon.xml now requires plugin.video.youtube >=7.0.0 in addition to
xbmc.python and (optional) inputstream.adaptive. When a user installs
torttube, Kodi resolves the dep and auto-fetches plugin.video.youtube
from the official Kodi addon repository — user only manages torttube,
the dep is transparent.

This is Cobb's preferred 'one-addon experience' without the
maintenance liability of vendoring + maintaining 5.6MB / 15k LOC of
their player code in our tree.

README architecture diagram updated to show pv.youtube as a dependency
rather than a sibling. docs/install.md notes that Kodi auto-installs
the dep — no manual pv.youtube step needed.

Addon version 0.0.12.
2026-05-23 12:15:06 -07:00

87 lines
3.7 KiB
Markdown

# Installing torttube on the LibreELEC RPi
The addon ships as a single `plugin.video.torttube-<version>.zip` that
contains the Python addon, a static aarch64 sidecar binary, and yt-dlp's
aarch64 release binary (for Tier 2/3 fallback). Nothing else needs to be
installed on the Pi.
## Build the zip (Sulkta-internal)
```bash
bash scripts/build-addon-zip.sh
# → /mnt/user/downloads/torttube/plugin.video.torttube-0.0.1.zip on Lucy
```
The script cross-compiles the sidecar in a throwaway
`messense/rust-musl-cross:aarch64-musl` container, fetches yt-dlp's
official `yt-dlp_linux_aarch64` release binary, packages everything,
drops the result at `/mnt/user/downloads/torttube/` (Lucy SMB).
## Install on the Pi (Kodi UI flow)
1. On the Pi: Settings → File manager → Add source → enter
`smb://lucy/downloads/` → name it `lucy-downloads`.
2. Settings → Add-ons → Install from zip file → `lucy-downloads`
`torttube/plugin.video.torttube-<version>.zip`.
3. Kodi installs torttube **and automatically installs
`plugin.video.youtube`** from the official Kodi repo because it's
declared as a dep in our addon.xml. No separate install step needed.
4. The addon appears under Video add-ons.
Unsigned addons need `Settings → System → Add-ons → Unknown sources` ON.
## Install via SSH + JSON-RPC (no UI needed)
If SSH is enabled (`Settings → Services → SSH`):
```bash
# from any LAN host with ssh access to the Pi
scp plugin.video.torttube-0.0.1.zip kodi-host:/tmp/
ssh kodi-host 'cd /storage/.kodi/addons && unzip -o /tmp/plugin.video.torttube-0.0.1.zip && chmod +x plugin.video.torttube/bin/*'
ssh kodi-host 'systemctl restart kodi'
# wait ~5s for Kodi to come back, then enable the addon
curl -u kodi:<pw> -H "Content-Type: application/json" -X POST http://<kodi-host>:8080/jsonrpc \
-d '{"jsonrpc":"2.0","id":1,"method":"Addons.SetAddonEnabled","params":{"addonid":"plugin.video.torttube","enabled":true}}'
```
Freshly-installed addons land in Kodi's database as `enabled:false`
the SetAddonEnabled call above flips that. Without it, Player.Open with
the plugin URL fails silently with "Unable to find plugin" in kodi.log.
## Verify
After install, fire the smoke from any LAN client:
```bash
curl -u kodi:pineapple -H "Content-Type: application/json" \
-X POST http://192.168.0.158:8080/jsonrpc -d '{
"jsonrpc": "2.0", "id": 1, "method": "Player.Open",
"params": {"item": {"file":
"plugin://plugin.video.torttube/?action=play&id=dQw4w9WgXcQ"}}}'
```
The TV should switch to playback of "Never Gonna Give You Up" within a
few seconds (rustypipe resolve takes ~1s, then Kodi starts the stream).
## Troubleshooting
- **Black screen + "no stream URL"** notification: rustypipe returned
separate audio + video streams (DASH-style), and we're picking the
video stream which may be video-only. This is the M3 known gap —
needs the audio+video merge work in M3+. Workaround: try a video that
yt-dlp's tier-2 path can resolve to a combined format; the sidecar
falls back automatically.
- **Sidecar crashes**: `cat /storage/.kodi/temp/kodi.log | grep torttube`
on the Pi. Sidecar logs to stderr; Kodi captures those.
- **yt-dlp permission denied**: addon's bin/ dir needs +x. The zip
preserves perms but if you copied files manually, `chmod +x bin/*`.
- **HTTPS errors from sidecar**: it bundles rustls + webpki roots, so
no system CA store needed. If you see "invalid certificate", your Pi
clock is wrong (LibreELEC's NTP failed).
## Updating
Just rebuild + bump the version in `addon/plugin.video.torttube/addon.xml`,
re-run `build-addon-zip.sh`, install the new zip from the same SMB
location. Kodi will treat it as an upgrade if the version is higher.