Skip to content

Design plan

Émilien (perso) edited this page Sep 28, 2024 · 6 revisions

Invidious companion will work with Invidious.

It is designed to offload the work of handling the retrieval of the video streams URLs from YouTube and helping this retrieval (proxy, google account, potoken). That's the only scope it will be designed for, any other features is outside of the scope of this project.

Invidious companion will be written in https://deno.com in order to create a fast program and being able to compile it into different CPU architectures.

How the user will configure the program

The user will have two possibilities of configuring it with Invidious:

  • If the user has enabled external_port filled in, he has to configure the HTTP routes inside its reverse proxy
  • If the user does not have external_port filled in, invidious will proxy the HTTP requests to the Invidious companion

In the config.yaml, the invidious companion will be configured through a parameter called invidious_companion:. It will be an URL for on which the application is listening to.

Different domain will be supported.

First goal

It will expose these HTTP routes:

  • /api/manifest/dash/id/: DASH endpoint for video.js
  • /latest_version: non dash endpoint (medium) for video.js

The features:

Future goal

It will expose these HTTP routes:

  • /api/v1/videos/: Single endpoint from Invidious for requesting video stream URLs
  • /api/manifest/hls_playlist/: livestream for video.js
  • /api/manifest/hls_variant/: livestream for video.js - in another future, HLS support for Apple devices
  • /videoplayback: strip out the videoplayback proxy from invidious and allow invidious companion to proxy it instead

The features:

Clone this wiki locally