v0.4 · identity · live
Shopping, auto-generated in video.
PLUTUS — the AI Shopping Channel — is a self-hosted live shopping platform: a viewer submits a product URL, an AI host scripts it, keyframes are generated and interpolated into motion with ffmpeg, and the segment airs on the channel. No external video APIs, no vendor lock-in, no cloud account.
$ git clone https://github.com/innotelinc/plutus.git && cd plutus && cp .env.example .env && ./setup.sh
v0.4 · identity · just shipped T2I keyframes air as full 10-second clips (JPEG/WebP frames normalized to PNG), demo playback is fully self-hosted, and CI runs a real browser playback check. Release notes
Channel-first, fallback-safe.
The safety of a broadcast schedule with the immediacy of a chat prompt — every submission has a path to air, even with no AI provider connected.
AI-generated clips
Submit a product URL and get back a video segment — script, keyframes, and motion, all generated.
Fully open source
No external video APIs, no vendor lock-in. T2I keyframes via OmniRoute + ffmpeg minterpolate.
Fallback studio
No image provider connected? Procedural keyframes keep the channel airing — never a dead screen.
Broadcast player
Event-driven clip switching, subtitles bound to clips, standby screen, live ticker, chat.
Real-time schedule
Convex subscriptions keep every viewer in sync with the channel clock — no polling loops.
Docker Compose stack
Backend, dashboard, web — one compose up, LAN-autodetected hosts, with the shared OmniRoute gateway.
A real channel, not a slide deck.
The v0.4 stack is runnable today: a self-hosted Convex backend, a Node action runtime with ffmpeg, T2I keyframes on air via the shared OmniRoute gateway, and sign-in through the shared Cerulean Authentik instance.
convex/pipeline.tsactionOrchestrates every submission: scrape → script → keyframes → schedule → air, with retries and fallbacks.
convex/videoAction.tsnodeGenerates keyframes (T2I or procedural PNG) and encodes clips with ffmpeg minterpolate — inside the container.
convex/channel.tsconvexChannel state: schedule rotation, product lifecycle, rate limits, SSRF-guarded submission.
src/app/page.tsxreactThe broadcast UI: player, subtitles, standby screen, ticker, chat, submit box.
One platform, five doors.
Every surface hangs off its own host under plutus.innotel.us, wildcard TLS via Cerulean, routed by NPM Edge.
app.plutus.innotel.usplannedapi.plutus.innotel.us · Convexplanneddash.plutus.innotel.us · Convex dashboardplannedOmniRoute · 350+ providersliveinnotelinc.github.io/plutusliveRoadmap.
Milestone-driven and honest — the channel airs what exists today.
Self-hosted stack: playback core, seeded schedule, submission pipeline, static export on nginx.
shippedPLUTUS rename, LAN-IP autodetection, ffmpeg 6.1 clip fixes, spec-correct fallback encoder, unit tests.
shippedImage provider wired through OmniRoute for T2I keyframes; scripted clips by default, procedural as fallback. Full 10s clips, self-hosted demo loop, CI e2e playback check.
v0.3.1 shippedAuthentik SSO via Cerulean: signed plutus_session cookie, viewers table, ADMIN badge for the admin group, browser-verified login flow.
v0.4.0 shippedHardening, docs, billing via Magnate for featured slots, public release artifacts.
later