About
The AI Shopping Channel.
PLUTUS is a self-hosted live shopping platform. Viewers paste a product URL; an AI host scripts a segment, keyframes are generated and interpolated into motion, and the clip airs on a real-time broadcast schedule. Everything runs on your own hardware.
What it is
- A 24/7 channel — a broadcast schedule that rotates products, fills gaps, and never shows a dead screen.
- A submission studio — paste a URL, the pipeline scrapes the product, scripts three clips, and airs them.
- A self-contained video plant — keyframe generation and ffmpeg motion interpolation run inside the backend container.
- A viewer surface — live player with subtitles, standby screen, ticker, and chat.
How a segment airs
Every submission travels the same path, with a fallback at each AI-dependent step:
- Scrape — the product page is fetched and title, price, and image are extracted (SSRF-guarded).
- Script — an OmniRoute model writes three 10-second clips: intro, feature, call-to-action. If no provider is connected, a canned studio script is used.
- Keyframes — an image model generates three frames per clip. Without a provider, the procedural generator draws them — the channel still airs.
- Motion — ffmpeg
minterpolateturns the keyframes into a smooth 10-second clip inside the container. - Air — clips are scheduled against the channel clock; a cron keeps the schedule rolling and recovers stuck items.
Design principles
- Never a dead screen. Every AI dependency has a non-AI fallback; the schedule always has a next clip.
- Self-hosted first. No external video APIs, no cloud accounts, no telemetry. The AI gateway (OmniRoute) fronts whatever providers you connect.
- One job per platform. PLUTUS is VideoOps in the Innotel Platform Stack — it consumes identity, secrets, trust, and edge rather than re-implementing them.
- Operator-friendly. LAN-IP autodetection, one-command setup,
make helpas the first stop.
Role in the Innotel Platform Stack
PLUTUS is the stack's VideoOps platform. It owns the channel experience end-to-end and consumes the platform services:
| Consumes | Provides |
|---|---|
| OmniRoute (AI gateway) | Scripting + keyframe generation for the shopping channel |
| Cerulean (Trust) | DNS and TLS for plutus.innotel.us |
| NPM Edge | Public routing for the app and dashboard hosts |
| Infisical (Secrets) | Production credentials (OmniRoute keys, admin secret) |
| Authentik (Identity) | Viewer SSO via the shared Cerulean instance — live in v0.4 |
The full owns / consumes / does-not-own map lives in docs/stack.md; the ecosystem definition lives in the Innotel Platform Stack repo.
Status
v0.4 — identity. The stack boots, the playback check passes, and submissions air end-to-end. AI-generated T2I keyframes run through the shared OmniRoute gateway (JPEG/WebP frames normalized to PNG, animated by ffmpeg minterpolate into full 10-second clips), with procedural fallback keeping the channel on air when a provider is unavailable. Demo playback is fully self-hosted, and CI runs a real browser playback check against the compose stack. Sign-in works end-to-end through the shared Cerulean Authentik (v0.4): SSO login → signed session cookie → /auth/me, viewer accounts in the viewers table, and an ADMIN badge for the plutus-admins group. v0.4.0 release notes. See the releases for details.