]> git.gir.st - subscriptionfeed.git/blob - README.md
raise error if config file not found, some comments
[subscriptionfeed.git] / README.md
1 # Unnamed Youtube Frontend
2
3 Note: this is a work in progress, still unreleased software. Feel free to look around, but keep in mind that this repository will move servers for its public release.
4
5 Contributors wanted! Please send me an email (see commit log) or contact `girst` on irc.freenode.net (hanging out in `#invidious` for now)
6
7 Test Instance: http://delta.gir.st:8000/ (will move in the future)
8
9 TODO:
10 - task queue for refesh-cipher, pull-subs, update-websub
11 - should handle delays itself
12 - would allow us to just put a websub/pullsub request into the queue
13 whenever a user subscribes to a channel, without worrying about
14 ratelimiting ourselves.
15 - webhook: as blueprint; main app looks in envvar/config what to load?
16 - reddit blueprint:
17 - pin/hide videos (linking their reddit comments)
18 - abstract database access
19 we want to be able to choose between at least sqlite and postgres
20 - implement 'dangerous' functions as disablable blueprint
21 - search through invidious-api
22 - proxy for subtitles, hls/dash manifests, ...
23 - subtitles on /watch
24 - hls.js for livestreams
25 - proxy for geolocked videos?
26 - modern css frontend (flexbox)
27 - document all the things
28 - quality of life improvements:
29 - asynchronically call update-subs and pull-subs on subscribing, iff necessary
30 - get_video_info on incoming websub-webhook to get exact published date
31 - development-friendly error handling:
32 - log unkown info/endcards to file
33 - save get_video_info/reddit.json/etc with traceback
34 - proper support for sponsorblock (cached db?)
35 - allow pinning non-subscribed videos
36 would make reddit easier, less-surprising when unsubscribing from channels with pinned videos
37 - cleanups:
38 - move subsystem-specific stuff out of common/common.py (e.g. reddit)
39 - remove jsonify()
40 - purge magic strings (e.g guest token)
41 - fix all the TODOs and XXXs
42 - clean up login stuff
43 https://flask-login.readthedocs.io/en/latest/
44 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins
45 - jinja2: for/else
46 - welcome message: maybe make dismissable, show on all pages?
47 - find a name!
48 - /channel/UE.../videos 404s
49 - invidious search: api returns 'nice' author strings (e.g. numberphile instead of UC...)
50 if not channel_id.match(...): redirect('/user/...') (in invidious blueprint)
51 - reddit.j2: titles are double-html-escaped
52
53 stuff to look at:
54 - app.config.from_pyfile('the-config.cfg')
55 NOTE: this will not work for the non-python/non-flask parts
56
57 wishlist:
58 - proxy googlevideo (and probably thumnails) responses
59
60 # Installation
61
62 see INSTALL file
63
64 # Usage
65
66 Since user authentication is not yet implemented, users are for now identified by a randomized token. To "log in", just visit `/feed/subscriptions?token=....`. at the bottom, click 'Manage Subscriptions' and paste the UC...-URLs of channels you want to subscribe to.
67
68 If no token is specified, it defaults to `guest`. Since this is a readonly account, you can populate it by directly writing into the database:
69
70 first, prepare a file (guest.csv) of channel ids like so:
71 UCxxxxxxxxxxxxxxxxxxxxxxxx,guest,channel
72 then from the sqlite3 console, issue:
73 .mode csv
74 .import guest.csv subscriptions
75
76
77 # Notes
78 - caching external api requests
79 currently using in-memory-backend, which is purged every 10minutes. a real installation should use redis, which should scale better and handle purging for us.
80 the in-memory cache conflicts with gunicorn's worker model: which is a sepreate process for each request. switch to mulitple gthreads on a single worker to avoid getting the cache torn down after every request (note that threads may leak memory, if my observations from $dayjob are still valid).
81 - neater sqlite output:
82 .mode column
83 .headers on
Imprint / Impressum