Skip to content

rabilrbl/otvi

OTVI

OTVI (Open TV Interface) is a YAML-driven television streaming platform. It lets providers expose login, channel browsing, and playback flows through configuration instead of custom per-provider application code.

What It Includes

  • otvi-server - Axum backend for auth, provider integration, streaming APIs, and static asset serving
  • otvi-core - shared types, provider schema, and template/extraction utilities
  • otvi-web - Leptos WebAssembly frontend for login, channel browsing, and playback
  • docs/ - Docusaurus documentation site with versioned release snapshots and a release blog

Architecture

flowchart LR
    operator["Provider author / operator"]
    config["providers/*.yaml"]

    subgraph server["otvi-server"]
        direction TB
        static["Static asset server"]
        api["Axum JSON API"]
        schema["Provider schema endpoint"]
        runtime["Provider runtime\ntemplates + extractors"]
    end

    subgraph browser["Browser"]
        direction TB
        web["otvi-web\nLeptos + WebAssembly"]
        player["Video player\nHLS / DASH / DRM config"]
    end

    subgraph providers["Provider platforms"]
        direction TB
        auth["Authentication"]
        catalog["Channel catalog"]
        playback["Playback + DRM"]
    end

    operator --> config
    config --> runtime
    static -- "serves app shell" --> web
    web -- "JSON API" --> api
    api --> schema
    api --> runtime
    runtime -- "HTTP" --> auth
    runtime -- "HTTP" --> catalog
    runtime -- "HTTP" --> playback
    api -- "normalized responses" --> web
    web --> player

    classDef source fill:#f6f8fa,stroke:#8c959f,color:#24292f
    classDef serverNode fill:#ddf4ff,stroke:#0969da,color:#24292f
    classDef client fill:#dafbe1,stroke:#1a7f37,color:#24292f
    classDef external fill:#fff8c5,stroke:#9a6700,color:#24292f
    class operator,config source
    class static,api,schema,runtime serverNode
    class web,player client
    class auth,catalog,playback external
Loading

Quick Start

Prerequisites

  • Rust stable
  • trunk for the frontend: cargo binstall trunk
  • wasm32-unknown-unknown: rustup target add wasm32-unknown-unknown
  • wasm-pack for frontend UI tests: cargo binstall wasm-pack
  • Bun for the docs site and frontend package scripts

Local Development

# build the frontend
(cd web && trunk build)

# run the backend
cargo run -p otvi-server

The app serves on http://localhost:3000 by default.

Common Commands

# full Rust test suite
cargo test --workspace --all-features

# frontend UI tests
(cd web && wasm-pack test --headless --firefox --features ui-test --lib)

# docs site
(cd docs && bun install && bun run build)

Documentation

  • Product and operator docs: docs/
  • Docs site maintainer workflow: docs/README.md
  • Contributing guide: CONTRIBUTING.md
  • Release process: RELEASING.md
  • Security policy: SECURITY.md
  • Support guide: SUPPORT.md
  • Code of conduct: CODE_OF_CONDUCT.md

Repository Workflow

  • dev is the integration branch for normal pull requests
  • main stages the next release and should stay closer to release-candidate quality
  • Pushes to main automatically create pre-release builds with binaries for all supported platforms
  • Release automation publishes binaries and containers from vX.Y.Z tags
  • Tagged releases require matching versions in crates/otvi-core/Cargo.toml, crates/otvi-server/Cargo.toml, and web/Cargo.toml
  • GHCR images are published without a floating latest tag; use dev, main, v0, v0.1, or a full release tag such as v0.1.0
  • Public docs default to the latest released version; unreleased docs remain available separately

Repository files can document and enforce part of this model, but GitHub settings still need administrator setup. See CONTRIBUTING.md and RELEASING.md.

License

AGPL-3.0-only. See LICENSE.

About

A generic, YAML-driven television interface that lets any TV provider expose live playback (HLS / DASH + DRM) through simple configuration files.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages