]> git.gir.st - subscriptionfeed.git/summary
 
descriptionPrivacy-focused webservice to catch up with Youtube subscriptions
last changeMon, 1 Apr 2024 13:53:22 +0000 (13:53 +0000)
readme

Unnamed Youtube Frontend

Contributors wanted! Please send me an email (see commit log) or message girst on irc.libera.chat/#invidious

Test Instance: https://subscriptions.gir.st/

Installation

see INSTALL file

Features

Non-Features

TODOs

If you can program in Python or know HTML/CSS, get in touch!

important/big features

users' wishlist

internal stuff

Advanced Topics

Extending Unnamed Youtube Frontend

UYtF is trivially extensible using Flask Blueprints. Just drop a new blueprint in app/ and register it in the [frontend]modules section of config.ini. The Blueprint inside a module is expected to be named frontend. An example_blueprint is provided, which shows off how to use fallback_route and fetching the user token on guest-accessible routes.

The default youtube blueprint provides unblockable but minimal versions of the /channel and /playlist endpoints. A custom blueprint (or, as an example, the browse blueprint) can overwrite existing routes by being listed before the one to be overridden in config.ini. A blueprint may also delegate a request to another (lower precedence) blueprint using return fallback_route(*args, **kwargs). This can be useful if the endpoint might not be as reliable.

Proxying videos

This is useful to watch videos that are IP-locked. add the proxy blueprint to the [frontend]modules list in config.ini to enable (disabled by default, as it is resource-intensive, blocks a gunicorn thread and hasn't been tested w.r.t. googlebanning).

Guest User

The guest user doesn't really exist; you can't log in as guest, and all guest views are read-only. To modify the shown subscription feed, you'll have to modify the database manually. To add a single channel, issuing INSERT INTO subscriptions (user, channel_id) VALUES ("guest", "UC..."). To load many at once, prepare a file (guest.csv) of channel ids that looks like this:

UCxxxxxxxxxxxxxxxxxxxxxxxx,guest,channel

Then from the sqlite3 console, issue: .mode csv .import guest.csv subscriptions

Running modules on different Hosts

The webhooks and proxy modules support being ran standalone on a different machine. For this, remove them from config.ini's [frontend]modules and start them using gunicorn by replacing app:app with (e.g.) app.webhooks:app() (the parenthesis are required, as those use the factory pattern to not uselessly instantiate the Flask app object if it wouldn't be needed). An example is given in config/subscriptions-webhooks.service.

Note that the proxy endpoint can't reliably access ip-restricted streams if its IP is different to the frontend's.

Functional Overview

rough functional overview diagram

License

This project is licensed under the GNU Affero General Public License, Version 3.

A copy of hls.js is included; it is available under the Apache License, Version 2.0.

A modified copy of python-protobuf is included; it is available under the MIT License.

shortlog
2024-04-01 girstbypass android rate limiting/ipban master
2024-03-20 girstupdate youtube api calls to client version 18
2024-01-26 girstsupport ancient /v/<video_id> urls
2024-01-26 girstfix inserting NULLs into videos table
2024-01-25 girstbypass eating disorder (and probably others) search...
2024-01-25 girstimplement /feeds/videos.xml endpoint
2024-01-25 girstonly do fallback_route('.channel') on video subpage
2024-01-25 girstadd link to youtube playlist from /watch
2024-01-21 girstsearch results: ignore community posts related entries
2024-01-21 girstignore searchFrictionViewModel
2024-01-21 girstdetect ip ban
2024-01-21 girstmore aggressive sponsor blocking
2024-01-21 girstsearch: support new 'medium length' filter
2024-01-21 girstsupport (hiding) youtube shorts everywhere
2023-10-31 girstnoshorts: always show videos with undeterminate shorts...
2023-10-31 girstadd piped.video link to watch and error pages
...
heads
2 weeks ago master
Imprint / Impressum