torttube/README.md
Kayos 238dfb8391 M0 scaffold — Python addon + Rust sidecar
Kodi addon (plugin.video.torttube) shell with Cargo workspace for the
rustypipe-backed sidecar binary. No working extraction yet — addon.xml
parses, main.py is a notification stub, sidecar's main.rs prints scaffold
banner. See MILESTONES.md for M1..M6.

License: GPL-3.0-or-later (matches rustypipe + NewPipeExtractor).
2026-05-23 08:14:09 -07:00

1.8 KiB

torttube

Kodi addon for YouTube via RustyPipe extraction + SponsorBlock segment skipping.

Replaces the dead plugin.video.youtube on LibreELEC RPi TVs after Google required account-linking for the upstream addon.

Architecture

Kodi (LibreELEC, RPi)
  └── plugin.video.torttube     [Python addon — UI, browse, settings]
        └── torttube-sidecar    [Rust binary — Innertube extraction,
                                 SponsorBlock fetch, JSON-over-stdio]
              ├── rustypipe     [YouTube Innertube client + sig decode]
              └── sponsorblock  [REST API client, SHA-256 prefix lookup]

Kodi addons are Python — the engine layer (n-param sig decoding, Innertube, SponsorBlock hashing) lives in a Rust sidecar so we get a single maintained extraction surface and clean aarch64/armv7 cross-compiles.

Status

M0 scaffold. Nothing playable yet — see MILESTONES.md.

Upstream contributions

NewPipeExtractor (Java) is the canonical reference for Innertube behaviour. When we hit a corner case RustyPipe doesn't cover we look at NPE for the fix, then either port it to RustyPipe (Rust PR) or fix NPE directly (Java PR). Either way upstream lands a real improvement.

Issues we're watching:

  • NPE #1339 — n-parameter deobfuscation
  • NPE #1444 — distinguish unavailable vs unextractable
  • NPE #1360 — refactor link handlers (help wanted)
  • NPE #1357 — JDoc checks in PR pipeline (good first issue)

License

GPL-3.0-or-later. Matches RustyPipe and NewPipeExtractor.