{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "chocobozzz--peertube",
    "name": "PeerTube",
    "tagline": "Federated self-hosted video platform with live streaming, an OpenAPI REST API, and peertube-cli.",
    "shortTagline": "Federated video platform",
    "description": "Framasoft's ActivityPub video platform: upload, transcode, live stream, moderate, and federate from your own server. Everything the web client does goes through the documented REST API, and configuration is a production.yaml file.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "video-streaming",
    "alternativeTo": [
      "YouTube",
      "Vimeo"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "Angular",
        "Express",
        "ffmpeg"
      ],
      "packageManager": "npm",
      "database": [
        "PostgreSQL",
        "Redis"
      ],
      "hostingTarget": [
        "Linux server",
        "Docker",
        "YunoHost"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/Chocobozzz/PeerTube",
        "owner": "Chocobozzz",
        "name": "PeerTube",
        "license": "AGPL-3.0",
        "stars": 15297,
        "lastCommit": "2026-08-28"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.joinpeertube.org/api-rest-reference.html",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Upload and import videos",
        "reachable": true,
        "evidence": "REST API videos/upload and imports; docs.joinpeertube.org/maintain/tools covers CLI import"
      },
      {
        "job": "Manage channels and playlists",
        "reachable": true,
        "evidence": "REST API video-channels and video-playlists sections"
      },
      {
        "job": "Create and manage live streams",
        "reachable": true,
        "evidence": "REST API videos/live; README: permanent live streams supported"
      },
      {
        "job": "Moderate: abuses, blocklists, comments",
        "reachable": true,
        "evidence": "REST API abuses and server blocklist sections"
      },
      {
        "job": "Manage users and registrations",
        "reachable": true,
        "evidence": "REST API users section"
      },
      {
        "job": "Follow and unfollow other instances",
        "reachable": true,
        "evidence": "REST API server following; docs admin/following-instances"
      },
      {
        "job": "Change instance configuration at runtime",
        "reachable": true,
        "evidence": "REST API config/custom writes local-production.json, reloaded on the fly"
      },
      {
        "job": "Install plugins and themes",
        "reachable": true,
        "evidence": "REST API plugins section (admin)"
      },
      {
        "job": "Run remote transcoding runners",
        "reachable": true,
        "evidence": "REST API runners section"
      },
      {
        "job": "Serve video P2P to viewers",
        "reachable": false,
        "evidence": "Browser-side WebRTC behavior; no API action, it is a viewer feature"
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/Chocobozzz/PeerTube"
          },
          {
            "kind": "container",
            "url": "https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/docker.md"
          },
          {
            "kind": "installable",
            "url": "https://docs.joinpeertube.org/install/any-os"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Copy config/production.yaml.example to config/production.yaml and set webserver, database, redis, smtp, transcoding, live, and storage. Docker deployments override with PEERTUBE_* variables. Runtime settings land in config/local-production.json through the admin UI or API. Plugins and themes extend behavior without forking.",
      "envVars": [
        "PEERTUBE_* (Docker overrides)",
        "PT_INITIAL_ROOT_PASSWORD",
        "NODE_ENV",
        "NODE_CONFIG_DIR",
        "FFMPEG_PATH",
        "FFPROBE_PATH",
        "YOUTUBE_DL_DOWNLOAD_BEARER_TOKEN",
        "HTTP_PROXY",
        "HTTPS_PROXY"
      ],
      "configFiles": [
        "config/production.yaml",
        "config/default.yaml",
        "config/local-production.json"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 12
    },
    "useWhen": [
      "I need to host training or community video on my own domain with an API my agent can upload to",
      "I want live streaming plus VOD without YouTube's policies, and I can accept AGPL"
    ],
    "accounts": [],
    "active": true,
    "lastActivity": "2026-08-28",
    "gotchas": [
      "AGPL-3.0; modifications to a public instance must be published",
      "Needs PostgreSQL, Redis, nginx, and ffmpeg; the FAQ warns transcoding is CPU-heavy",
      "YAML config is read at start; restart after edits"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: web platform, Angular client, server on any OS",
      "executionModel": "no model at runtime; ffmpeg transcoding",
      "operability": "OpenAPI schema at support/doc/api/openapi.yaml and docs.joinpeertube.org/api-rest-reference.html, published by the PeerTube project",
      "effort": "docs.joinpeertube.org/maintain/configuration: production.yaml overrides default.yaml; PEERTUBE_* env for Docker",
      "editions": "README license section: AGPL-3.0; no paid edition",
      "active": "GitHub pushedAt 2026-08-28; release v8.2.4 2026-08-04"
    },
    "confidence": {
      "formFactor": 0.99,
      "executionModel": 0.99,
      "operability": 0.95,
      "effort": 0.9,
      "reach": 0.85,
      "editions": 0.99
    },
    "openQuestions": [
      "Confirm the exact PEERTUBE_* variable names from support/docker/production/.env"
    ],
    "sources": [
      {
        "url": "https://joinpeertube.org/",
        "foundBy": "sourcing:video-streaming:curated"
      },
      {
        "url": "https://github.com/Chocobozzz/PeerTube",
        "foundBy": "sourcing:video-streaming:curated"
      },
      {
        "url": "https://docs.joinpeertube.org/maintain/configuration",
        "foundBy": "analysis"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Official REST API with near-complete Reach; production.yaml is a documented config-only surface; AGPL caps Adaptable at 2.",
      "disputed": []
    },
    "url": "apps/chocobozzz--peertube.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/chocobozzz--peertube.json"
  }
}
