> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livepeer.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Persona infrastructure maps

> Maps the infrastructure each of the five developer personas touches and the guides each persona needs.

export const CustomDivider = ({color = "var(--lp-color-border-default)", middleText = "", spacing = "default", style = {}, className = "", ...rest}) => {
  const spacingPresets = {
    default: {
      margin: "24px 0"
    },
    overlap: {
      margin: "-1rem 0 -1rem 0"
    },
    tight: {
      margin: "0 0 -1rem 0"
    },
    section: {
      margin: "0 0 -2rem 0"
    },
    sectionOverlap: {
      margin: "-1rem 0 -2rem 0"
    },
    deepOverlap: {
      margin: "-1rem 0 -1.5rem 0"
    }
  };
  const spacingStyle = spacingPresets[spacing] || spacingPresets.default;
  return <div role="separator" aria-orientation="horizontal" className={className} style={{
    display: "flex",
    alignItems: "center",
    ...spacingStyle,
    fontSize: style?.fontSize || "16px",
    height: "fit-content",
    ...style
  }} {...rest}>
      <span style={{
    marginRight: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
      </span>
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      {middleText && <>
          <Icon icon="circle" size={2} />
          <span style={{
    margin: "0 8px",
    fontWeight: "bold",
    color: color,
    opacity: 0.7
  }}>
            {middleText}
          </span>
          <Icon icon="circle" size={2} />
        </>}
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      <span style={{
    marginLeft: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <span style={{
    display: "inline-block",
    transform: "scaleX(-1)"
  }}>
          <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
        </span>
      </span>
    </div>;
};

**Project:** Livepeer docs-v2
**Branch:** `docs-v2-dev`
**Purpose:** Map all available infrastructure and the guides needed for each of the five developer personas.

Five maps. Each shows what the persona touches (infra) and what docs they need to walk the path (guides).

## Colour convention (consistent across all five)

| Class       | Meaning                                                       |
| ----------- | ------------------------------------------------------------- |
| `persona`   | The persona node itself                                       |
| `gw`        | Gateways (community, self-hosted, alternative)                |
| `sdk`       | SDKs and client libraries                                     |
| `trans`     | Transport layer (ingest, playback, trickle, data channels)    |
| `ref`       | Reference material (pipeline lists, model files, codec lists) |
| `proto`     | Protocol-layer code (go-livepeer, ai-runner, lpms)            |
| `chain`     | On-chain components (TicketBroker, contracts, payments)       |
| `plugin`    | Plugin platform (NaaP)                                        |
| `ecosystem` | Ecosystem integrations (streamplace, frameworks)              |
| `entry`     | Entry points (livepeer.org, whitepaper, forum)                |
| `repo`      | Source repositories                                           |
| `contract`  | Specific Solidity contracts                                   |
| `observ`    | Observability (Explorer, Subgraph, Dune)                      |
| `gov`       | Governance surfaces (LIPs, Treasury, forum)                   |
| `guide`     | Documentation pages (lavender, dashed)                        |
| `routing`   | Cross-tab routing (grey, dashed)                              |

<CustomDivider />

## Persona 1 – AI Persona ("OpenAI for video AI")

Looking for an inference API. Endpoint, key, models, schema, SDK, pricing.
Activation: first successful API call.

```mermaid theme={"theme":{"light":"github-light","dark":"dark-plus"}}
flowchart LR
  P1["Persona 1<br/>AI Persona"]:::persona

  CG["Cloud SPE<br/>Community Gateway<br/>(free, off-chain)"]:::gw
  SelfGW["Self-hosted<br/>Gateway"]:::gw

  AIJS["@livepeer/ai<br/>(JS/TS)"]:::sdk
  AIPY["livepeer-ai-python"]:::sdk
  REST["REST / curl"]:::sdk

  Pipelines["11 native pipelines<br/>T2I · I2I · I2V · I2T · A2T<br/>TTS · Upscale · SAM2<br/>LLM · Frame-Interp · LV2V"]:::ref
  Models["Model support<br/>aiModels.json"]:::ref

  GoLP["go-livepeer<br/>(Orchestrator)"]:::proto
  AIWorker["ai-worker<br/>(go side)"]:::proto
  AIRunner["ai-runner<br/>(Python GPU)"]:::proto

  Pay["TicketBroker<br/>+ probabilistic<br/>micropayments"]:::chain

  G_QS["Guide:<br/>AI Jobs Quickstart"]:::guide
  G_PIPE["Guide:<br/>AI Pipelines"]:::guide
  G_AUTH["Guide:<br/>AI Authentication"]:::guide
  G_SDK["Guide:<br/>AI SDKs Overview"]:::guide
  G_PRICE["Guide:<br/>Pricing & rate limits"]:::guide

  P1 --> G_QS --> CG
  P1 --> G_SDK
  G_SDK --> AIJS & AIPY & REST
  AIJS --> CG
  REST --> CG
  P1 -.graduate.-> SelfGW

  CG --> GoLP --> AIWorker --> AIRunner
  GoLP -.->|charges| Pay

  G_PIPE -.catalogue.-> Pipelines
  Pipelines -.run on.-> AIRunner
  Models -.load on.-> AIRunner
  G_AUTH -.guards.-> CG
  G_PRICE -.applies to.-> Pay

  classDef persona fill:#0b66ff,stroke:#0a4cc6,color:#fff
  classDef gw fill:#e1f5ee,stroke:#0f6e56,color:#04342c
  classDef sdk fill:#faeeda,stroke:#854f0b,color:#412402
  classDef ref fill:#fffae6,stroke:#8a7a0a,color:#3d3a0a
  classDef proto fill:#faece7,stroke:#993c1d,color:#4a1b0c
  classDef chain fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef guide fill:#eeedfe,stroke:#3c3489,color:#26215c,stroke-dasharray:4 2
```

<CustomDivider />

## Persona 2 – Video Platform Persona ("Mux with AI bolted on")

Looking for ingest endpoints, transcoding presets, embeddable player, VOD, webhooks, recording.
Activation: first stream goes live with playback URL working.

Boundary: this persona arrives expecting Studio-shaped infra. The Developers-tab Build path does NOT use Studio. Direct-network options: self-hosted Gateway with on-chain video transcoding, or Frameworks (open streaming stack). Studio acknowledged via routing only.

```mermaid theme={"theme":{"light":"github-light","dark":"dark-plus"}}
flowchart LR
  P2["Persona 2<br/>Video Platform"]:::persona

  SelfGW["Self-hosted Video Gateway<br/>(on-chain broadcaster)"]:::gw
  Frameworks["frameworks.network<br/>(open streaming stack)"]:::gw

  UIKit["@livepeer/react<br/>(Player + Broadcast)"]:::sdk
  WebRTMP["webrtmp-sdk"]:::sdk
  LJS["livepeer-js<br/>(server-side)"]:::sdk

  Ingest["RTMP / WebRTC ingest"]:::ref
  Playback["HLS / LL-HLS / DASH"]:::ref
  Codecs["H.264 · H.265 · AV1 · VP9"]:::ref

  GoLP["go-livepeer<br/>(transcoder)"]:::proto
  LPMS["lpms<br/>(media library)"]:::proto

  Pay["TicketBroker<br/>(ETH on Arbitrum)"]:::chain

  G_QS["Guide:<br/>Transcoding Direct Quickstart"]:::guide
  G_INGEST["Guide:<br/>Ingest & Playback"]:::guide
  G_LIVE["Guide:<br/>Live Events"]:::guide
  G_VOD["Guide:<br/>VOD & Recording"]:::guide
  G_PLAY["Guide:<br/>React Player"]:::guide
  G_GW["Guide:<br/>Gateway Decision"]:::guide

  R_STUDIO["Routing:<br/>If you want Studio,<br/>see Solutions tab"]:::routing

  P2 --> G_QS --> SelfGW
  P2 -.alt.-> Frameworks
  P2 -.acknowledge.-> R_STUDIO

  G_INGEST -.-> Ingest
  G_LIVE -.-> Ingest
  G_VOD -.-> Playback
  G_PLAY --> UIKit
  G_GW --> SelfGW

  UIKit --> Playback
  WebRTMP --> Ingest
  LJS --> SelfGW
  Ingest --> SelfGW
  SelfGW --> GoLP --> LPMS
  GoLP -.->|exposes| Codecs
  GoLP -.->|charges| Pay

  classDef persona fill:#0b66ff,stroke:#0a4cc6,color:#fff
  classDef gw fill:#e1f5ee,stroke:#0f6e56,color:#04342c
  classDef sdk fill:#faeeda,stroke:#854f0b,color:#412402
  classDef ref fill:#fffae6,stroke:#8a7a0a,color:#3d3a0a
  classDef proto fill:#faece7,stroke:#993c1d,color:#4a1b0c
  classDef chain fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef guide fill:#eeedfe,stroke:#3c3489,color:#26215c,stroke-dasharray:4 2
  classDef routing fill:#f1efe8,stroke:#5f5e5a,color:#2c2c2a,stroke-dasharray:6 3
```

<CustomDivider />

## Persona 3 – Compute Primitives Persona ("Modal/RunPod, but cheaper")

Looking for container runtime, GPU declarations, BYOC, per-GPU-second pricing, real-time vs batch.
Activation: first BYOC container running on the network with a request flowing through.

This persona has the densest infra map – they touch every modular surface: BYOC, ComfyStream, PyTrickle, trickle protocol, Stream Pack, NaaP plugins.

```mermaid theme={"theme":{"light":"github-light","dark":"dark-plus"}}
flowchart LR
  P3["Persona 3<br/>Compute Primitives"]:::persona

  CommGW["Community Gateway"]:::gw
  SelfGW["Self-hosted Gateway"]:::gw

  ByocSDK["@muxionlabs/byoc-sdk"]:::sdk
  PyTrickle["pytrickle<br/>(Python)"]:::sdk
  CSDocker["livepeer/comfystream<br/>Docker image"]:::sdk
  StreamPack["ComfyUI Stream Pack<br/>(custom nodes)"]:::sdk
  ComfyRTC["ComfyUI-RTC<br/>(WebRTC node)"]:::sdk

  Trickle["trickle protocol<br/>(transport)"]:::trans
  DataChan["data channels<br/>(text + structured)"]:::trans

  BYOCPipes["muxionlabs/<br/>livepeer-app-pipelines<br/>(reference impls)"]:::ref
  ByocExamples["muxionlabs/<br/>byoc-example-apps"]:::ref

  GoLP["go-livepeer<br/>(BYOC streaming path)"]:::proto
  AIRunner["ai-runner<br/>(alternate)"]:::proto
  Container["BYOC container<br/>(your model)"]:::proto

  NaaP["NaaP plugin platform<br/>(12 plugins live)"]:::plugin
  Pay["per-second compute<br/>(post-#3641)"]:::chain

  G_QS["Guide:<br/>BYOC Quickstart"]:::guide
  G_ARCH["Guide:<br/>BYOC Architecture"]:::guide
  G_PROD["Guide:<br/>BYOC Production"]:::guide
  G_PYT["Guide:<br/>PyTrickle"]:::guide
  G_CS["Guide:<br/>ComfyStream + RunPod"]:::guide
  G_TRICK["Guide:<br/>Trickle Protocol"]:::guide
  G_NAAP["Guide:<br/>Building a Plugin"]:::guide
  G_PAY["Guide:<br/>Per-second pricing"]:::guide

  P3 --> G_QS --> ByocSDK
  P3 --> G_PYT --> PyTrickle
  P3 --> G_CS --> CSDocker
  P3 --> G_TRICK --> Trickle
  P3 --> G_NAAP --> NaaP

  G_ARCH --> Container
  G_PROD --> DataChan
  G_PAY --> Pay

  ByocSDK --> CommGW & SelfGW
  PyTrickle --> Trickle
  CSDocker --> StreamPack & ComfyRTC
  CSDocker --> PyTrickle

  Trickle --> Container
  Container --> GoLP
  CommGW --> GoLP
  SelfGW --> GoLP
  GoLP -.alt path.-> AIRunner

  ByocExamples -.fork.-> Container
  BYOCPipes -.fork.-> Container

  GoLP -.->|charges| Pay
  NaaP -.runs alongside.-> SelfGW

  classDef persona fill:#0b66ff,stroke:#0a4cc6,color:#fff
  classDef gw fill:#e1f5ee,stroke:#0f6e56,color:#04342c
  classDef sdk fill:#faeeda,stroke:#854f0b,color:#412402
  classDef trans fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef ref fill:#fffae6,stroke:#8a7a0a,color:#3d3a0a
  classDef proto fill:#faece7,stroke:#993c1d,color:#4a1b0c
  classDef chain fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef plugin fill:#eaf3de,stroke:#3b6d11,color:#173404
  classDef guide fill:#eeedfe,stroke:#3c3489,color:#26215c,stroke-dasharray:4 2
```

<CustomDivider />

## Persona 4 – Live-Video-First Persona ("real-time streaming backend")

Looking for ingest endpoints, ABR ladders, HLS/LL-HLS/DASH playback, codec choices, low-latency tuning, player SDK. Less concerned with VOD, webhooks, or recording – that's Persona 2's territory. Building Twitch-shaped live experiences, sports streaming, real-time events, gaming streams.

Activation: first live stream up with sub-second-to-three-second glass-to-glass latency and a working playback URL.

Boundary: build path uses a self-hosted live Gateway or `frameworks.network`. Studio Streaming is acknowledged via routing only.

```mermaid theme={"theme":{"light":"github-light","dark":"dark-plus"}}
flowchart LR
  P4["Persona 4<br/>Live-Video-First"]:::persona

  SelfGW["Self-hosted Live Gateway<br/>go-livepeer broadcaster mode"]:::gw
  Frameworks["frameworks.network<br/>(open streaming stack)"]:::gw

  Player["@livepeer/react Player<br/>(LL-HLS, ABR, DVR)"]:::sdk
  Broadcast["@livepeer/react Broadcast<br/>(WebRTC publish)"]:::sdk
  WebRTMP["webrtmp-sdk<br/>(browser RTMP)"]:::sdk
  LJSServer["livepeer-js<br/>(server-side control)"]:::sdk

  Ingest["RTMP · WebRTC · SRT<br/>ingest endpoints"]:::trans
  ABR["ABR ladders<br/>(720p / 1080p / source)"]:::trans
  Playback["HLS · LL-HLS · DASH"]:::trans
  Codecs["H.264 · H.265 · AV1 · VP9"]:::trans
  LowLat["sub-3s glass-to-glass<br/>low-latency mode"]:::trans

  GoLP["go-livepeer<br/>(transcoder / broadcaster)"]:::proto
  LPMS["lpms<br/>(FFmpeg / RTMP / HLS)"]:::proto
  Catalyst["catalyst<br/>(media-server, optional)"]:::proto

  Pay["TicketBroker<br/>per-segment payments"]:::chain

  Streamplace["streamplace integration<br/>(AT Protocol live video)"]:::ecosystem

  G_QS["Guide:<br/>Live Streaming Quickstart"]:::guide
  G_INGEST["Guide:<br/>Ingest Setup"]:::guide
  G_ABR["Guide:<br/>ABR Configuration"]:::guide
  G_LOWLAT["Guide:<br/>Low-Latency Tuning"]:::guide
  G_PLAYER["Guide:<br/>Player Embedding"]:::guide
  G_CODEC["Guide:<br/>Codec Selection"]:::guide
  G_GW["Guide:<br/>Gateway Decision"]:::guide

  R_STUDIO["Routing:<br/>Studio Streaming<br/>→ Solutions tab"]:::routing

  P4 --> G_QS --> SelfGW
  P4 -.alt.-> Frameworks
  P4 -.acknowledge.-> R_STUDIO

  G_INGEST --> Ingest
  G_ABR --> ABR
  G_LOWLAT --> LowLat
  G_PLAYER --> Player
  G_CODEC --> Codecs
  G_GW --> SelfGW

  Broadcast --> Ingest
  WebRTMP --> Ingest
  Player --> Playback
  LJSServer --> SelfGW

  Ingest --> SelfGW
  SelfGW --> GoLP --> LPMS
  GoLP -.optional.-> Catalyst
  GoLP -->|emits| Playback
  GoLP -.->|charges| Pay
  GoLP -->|negotiates| ABR
  GoLP -->|encodes| Codecs

  SelfGW -.serves.-> Streamplace

  classDef persona fill:#0b66ff,stroke:#0a4cc6,color:#fff
  classDef gw fill:#e1f5ee,stroke:#0f6e56,color:#04342c
  classDef sdk fill:#faeeda,stroke:#854f0b,color:#412402
  classDef trans fill:#fffae6,stroke:#8a7a0a,color:#3d3a0a
  classDef proto fill:#faece7,stroke:#993c1d,color:#4a1b0c
  classDef chain fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef ecosystem fill:#eaf3de,stroke:#3b6d11,color:#173404
  classDef guide fill:#eeedfe,stroke:#3c3489,color:#26215c,stroke-dasharray:4 2
  classDef routing fill:#f1efe8,stroke:#5f5e5a,color:#2c2c2a,stroke-dasharray:6 3
```

<CustomDivider />

## Persona 5 – Protocol Persona ("crypto network contributor")

Looking for architecture, LPT economics, contracts, payment flow, governance, node operator and Delegator paths. Not building an app – extending or operating the network itself.

Activation: first merged PR to a Livepeer repo, first Orchestrator node activated, first treasury proposal submitted, or first delegation made.

Boundary: this persona's content lives in the **About** and **Community** tabs, not in Developers. The Developers tab acknowledges them via routing pages and points out. They're shown here to make the boundary explicit – what Developers *doesn't* document – and to confirm no Developers infra is missing because of it.

```mermaid theme={"theme":{"light":"github-light","dark":"dark-plus"}}
flowchart LR
  P5["Persona 5<br/>Protocol Persona"]:::persona

  Web["livepeer.org<br/>(marketing entry)"]:::entry
  Whitepaper["Livepeer whitepaper<br/>Petkanics & Tang, 2017"]:::entry

  Protocol["livepeer/protocol<br/>(Solidity contracts)"]:::repo
  GoLP["livepeer/go-livepeer<br/>(Go node)"]:::repo
  AIWorker["livepeer/ai-worker"]:::repo
  AIRunner["livepeer/ai-runner"]:::repo
  LPMS["livepeer/lpms"]:::repo
  Coordination["livepeer/coordination<br/>(async governance)"]:::repo

  Controller["Controller"]:::contract
  Bonding["BondingManager"]:::contract
  Ticket["TicketBroker"]:::contract
  Minter["Minter"]:::contract
  Rounds["RoundsManager"]:::contract
  LPT["LivepeerToken (LPT)"]:::contract
  AISR["AIServiceRegistry<br/>(opt-in / transitional)"]:::contract
  Bridge["arbitrum-lpt-bridge<br/>(Ethereum L1 ↔ Arbitrum)"]:::contract

  Explorer["explorer.livepeer.org"]:::observ
  Subgraph["livepeer/subgraph<br/>(The Graph)"]:::observ
  Dune["Dune dashboards<br/>(Rick, Stronk-Tech)"]:::observ

  Forum["forum.livepeer.org"]:::gov
  LIPs["LIPs<br/>(Livepeer Improvement Proposals)"]:::gov
  Treasury["Treasury<br/>(Arbitrum on-chain)"]:::gov

  R_ABOUT["Routes to:<br/>About tab<br/>(protocol, network, economics)"]:::routing
  R_COMM["Routes to:<br/>Community tab<br/>(contributing, opportunities)"]:::routing
  R_ORCH["Routes to:<br/>Orchestrators tab<br/>(operating a node)"]:::routing
  R_LPT["Routes to:<br/>LP Token tab<br/>(staking, delegating, voting)"]:::routing

  P5 --> Web --> Whitepaper
  P5 --> Forum
  P5 -.routes.-> R_ABOUT & R_COMM & R_ORCH & R_LPT

  Whitepaper -.cites.-> Protocol
  Protocol --> Controller
  Controller --> Bonding & Minter & Rounds & Ticket
  Bonding --> LPT
  Ticket --> LPT
  Bridge --> LPT

  GoLP -.implements.-> Ticket
  GoLP --> AIWorker --> AIRunner
  GoLP --> LPMS
  GoLP -.opts into.-> AISR

  Subgraph -.indexes.-> Protocol
  Explorer -.reads.-> Subgraph
  Dune -.queries.-> Subgraph

  Forum --> LIPs --> Treasury
  Coordination -.coordinates.-> LIPs

  classDef persona fill:#0b66ff,stroke:#0a4cc6,color:#fff
  classDef entry fill:#f6f0ff,stroke:#534ab7,color:#26215c
  classDef repo fill:#faece7,stroke:#993c1d,color:#4a1b0c
  classDef contract fill:#fbeaf0,stroke:#993556,color:#4b1528
  classDef observ fill:#e6f1fb,stroke:#185fa5,color:#042c53
  classDef gov fill:#eaf3de,stroke:#3b6d11,color:#173404
  classDef routing fill:#f1efe8,stroke:#5f5e5a,color:#2c2c2a,stroke-dasharray:6 3
```

<CustomDivider />

## Cross-persona observations

**Persona 5 confirms the Developers-tab IA is correct as scoped.** Almost nothing in this map should live in Developers. Whitepaper, contracts, observability stack, and governance forum belong in About + Community + Orchestrators + LP Token. The Developers tab's `routing/protocol-extenders.mdx` is the only Developers-side touchpoint – and that page exists to send Persona 5 *out* of the tab.

**Personas 2 and 4 share enough infra that the Build section should NOT have duplicate pages.** Both touch self-hosted Gateway, ingest endpoints, playback, codecs, lpms, TicketBroker. The distinction is intent (full Mux replacement vs. live-streaming engineer) and what they don't care about (Persona 4 skips VOD, recording, webhooks). Answer: `build/video/` covers both. Persona 2 reads VOD/recording pages, Persona 4 reads live/ABR/low-latency pages, `gateway-decision.mdx` is shared.

**Persona 3 is the densest map** because the modular pathway is genuinely the most surface-rich part of the developer story. Compute, transport, payments, plugins, Gateways-as-developer all converge on this persona. The Build IA's job-shaped subgroups (compute, transport, payments, plugins-and-extensions, Gateways-as-developer) are the direct answer to that density.

**Persona 1's path graduates to Persona 3.** A reader who arrives wanting OpenAI-shaped inference and stays often wants per-GPU-second pricing or BYOC eventually. The Developers IA should make that graduation visible – `gateway-decision.mdx` and `byoc/overview.mdx` both serve as graduation hand-offs.
