torttube/MILESTONES.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

2.2 KiB

torttube milestones

M0 — Scaffold [current]

  • Sulkta-Coop/torttube on LAN Gitea
  • Layout: addon/ (Python) + sidecar/ (Rust workspace)
  • GPL-3.0 license headers
  • crafting-table build target produces a static aarch64 sidecar binary

M1 — sidecar resolve

  • reads {"op":"resolve","id":"<yt-id>"} from stdin
  • calls rustypipe → returns {"streams":[…],"title":"…","duration_s":N}
  • handles age-restricted + region-restricted as typed errors, not panics
  • sig decoding verified against a known-good video
  • DASH manifest URL or per-itag direct stream URL — whichever inputstream.adaptive prefers

M2 — SponsorBlock

  • {"op":"sponsorblock","id":"<yt-id>"} → segments array
  • SHA-256 prefix lookup (privacy-preserving — only send first 4 hex chars)
  • category filter honoured from addon settings (skip / mute / show only)
  • cache per-session

M3 — Kodi addon plays one video

  • addon.xml + main.py register as video plugin
  • hardcoded list of 3 test videos
  • select → sidecar resolve → stream URL → Kodi player
  • verified end-to-end on LibreELEC RPi at 192.168.0.158

M4 — search + channel browse

  • search box → sidecar {"op":"search","q":"…"} → results
  • channel browse → {"op":"channel","id":"…"}
  • playlist browse → {"op":"playlist","id":"…"}
  • result thumbnails + duration + uploader

M5 — SponsorBlock skipping

  • background thread on Player() polls position
  • when position enters a skip segment → xbmc.Player().seekTime(end)
  • toast on skip + skip-counter in settings
  • category toggles in settings.xml

M6 — install + cross-compile

  • crafting-table builds torttube-sidecar.aarch64 + .armv7
  • addon.zip ships with platform detect via xbmc.getCondVisibility('system.platform.linux.raspberrypi')
  • one-shot install path documented for LibreELEC /storage/.kodi/

Upstream PR targets (parallel, opportunistic)

Pick one as we hit it organically — don't gate milestones on these.

  • NPE #1357 (JDoc) — smallest, just to land a credible PR
  • NPE #1444 (typed errors) — clean signal/contract change
  • rustypipe — file issues + PRs on codeberg as we hit gaps