]>
description | Privacy-focused webservice to catch up with Youtube subscriptions |
last change | Mon, 1 Apr 2024 13:53:22 +0000 (13:53 +0000) |
URL | https://git.gir.st/subscriptionfeed.git |
Contributors wanted! Please send me an email (see commit log) or message girst
on irc.libera.chat/#invidious
Test Instance: https://subscriptions.gir.st/
see INSTALL file
If you can program in Python or know HTML/CSS, get in touch!
get_video_info
returns a 403ing video url, remove from cache and retryget_video_info
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.
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).
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
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.
rough functional overview diagram
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.
2 weeks ago | master | shortlog | log | tree |