Invidious is an alternative front-end to YouTube
Go to file
2020-10-25 09:35:16 +01:00
assets Fix feed menu overlap at ipad screen widths 2020-10-07 23:01:18 -05:00
config Add migration script for polymer redesign 2020-06-15 18:20:31 -05:00
docker Use bash in the shebang 2020-08-19 13:36:35 -05:00
kubernetes Remove space 2020-09-06 00:37:43 -07:00
locales Merge weblate 2020-04-20 16:46:00 -05:00
screenshots polish some stuff (#1436) 2020-10-23 22:17:40 +00:00
spec Fix spec 2020-07-26 15:29:03 -04:00
src Fix storyboards 2020-10-25 09:35:16 +01:00
.editorconfig Initial commit 2017-11-23 01:48:55 -06:00
.gitignore Update .gitignore 2018-07-14 08:35:25 -05:00
.travis.yml Update .travis.yml 2020-08-14 11:51:44 +02:00
CHANGELOG.md polish some stuff (#1436) 2020-10-23 22:17:40 +00:00
docker-compose.yml Merge pull request #1254 from SuperSandro2000/patch-2 2020-08-03 17:11:50 +02:00
invidious.service Add logfile to systemd service and fix path 2019-01-23 21:31:52 +01:00
LICENSE Change license 2018-01-28 11:32:40 -06:00
README.md Update README.md (#1433) 2020-10-23 22:03:08 +00:00
shard.yml Use the new version of lsquic.cr (#1413) 2020-10-16 09:47:12 +00:00
TRANSLATION TRANSLATION file for l10n 2020-05-26 18:02:21 +00:00

Invidious

Build Status Translation Status

Invidious is an alternative front-end to YouTube

Invidious instances:

Public Invidious instances are listed here.

Invidious features:

  • Copylefted libre software (AGPLv3+ licensed)
  • Audio-only mode (and no need to keep window open on mobile)
  • Lightweight (the homepage is ~4 KB compressed)
  • Tools for managing subscriptions:
    • Only show unseen videos
    • Only show latest (or latest unseen) video from each channel
    • Delivers notifications from all subscribed channels
    • Automatically redirect homepage to feed
    • Import subscriptions from YouTube
  • Dark mode
  • Embed support
  • Set default player options (speed, quality, autoplay, loop)
  • Support for Reddit comments in place of YouTube comments
  • Import/Export subscriptions, watch history, preferences
  • Developer API
  • Does not use any of the official YouTube APIs
  • Does not require JavaScript to play videos
  • No need to create a Google account to save subscriptions
  • No ads
  • No CoC
  • No CLA
  • Multilingual (translated into many languages)

Screenshots:

Player Preferences Subscriptions

Installation:

To manually compile invidious you need at least 2GB of RAM. If you have less you can setup SWAP to have a combined amount of 2 GB or use Docker instead.

After installation take a look at the Post-install steps.

Automated installation:

Invidious-Updater is a self-contained script that can automatically install and update Invidious.

Docker:

Build and start cluster:

$ docker-compose up

Then visit localhost:3000 in your browser.

Rebuild cluster:

$ docker-compose build

Delete data and rebuild:

$ docker volume rm invidious_postgresdata
$ docker-compose build

Manual installation:

Linux:

Install the dependencies

# Arch Linux
$ sudo pacman -S base-devel shards crystal librsvg postgresql

# Ubuntu or Debian
# First you have to add the repository to your APT configuration. For easy setup just run in your command line:
$ curl -sSL https://dist.crystal-lang.org/apt/setup.sh | sudo bash
# That will add the signing key and the repository configuration. If you prefer to do it manually, execute the following commands:
$ curl -sL "https://keybase.io/crystal/pgp_keys.asc" | sudo apt-key add -
$ echo "deb https://dist.crystal-lang.org/apt crystal main" | sudo tee /etc/apt/sources.list.d/crystal.list
$ sudo apt-get update
$ sudo apt install crystal libssl-dev libxml2-dev libyaml-dev libgmp-dev libreadline-dev postgresql librsvg2-bin libsqlite3-dev zlib1g-dev

Add an Invidious user and clone the repository

$ useradd -m invidious
$ sudo -i -u invidious
$ git clone https://github.com/iv-org/invidious
$ exit

Set up PostgresSQL

$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
$ sudo -i -u postgres
$ psql -c "CREATE USER kemal WITH PASSWORD 'kemal';" # Change 'kemal' here to a stronger password, and update `password` in config/config.yml
$ createdb -O kemal invidious
$ psql invidious kemal < /home/invidious/invidious/config/sql/channels.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/videos.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/channel_videos.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/users.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/session_ids.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/nonces.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/annotations.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/playlists.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/playlist_videos.sql
$ exit

Set up Invidious

$ sudo -i -u invidious
$ cd invidious
$ shards update && shards install
$ crystal build src/invidious.cr --release
# test compiled binary
$ ./invidious # stop with ctrl c
$ exit

Systemd service:

$ sudo cp /home/invidious/invidious/invidious.service /etc/systemd/system/invidious.service
$ sudo systemctl enable invidious.service
$ sudo systemctl start invidious.service

Logrotate:

$ sudo echo "/home/invidious/invidious/invidious.log {
rotate 4
weekly
notifempty
missingok
compress
minsize 1048576
}" | tee /etc/logrotate.d/invidious.logrotate
$ sudo chmod 0644 /etc/logrotate.d/invidious.logrotate

MacOS:

# Install dependencies
$ brew update
$ brew install shards crystal postgres imagemagick librsvg

# Clone the repository and set up a PostgreSQL database
$ git clone https://github.com/iv-org/invidious
$ cd invidious
$ brew services start postgresql
$ psql -c "CREATE ROLE kemal WITH PASSWORD 'kemal';" # Change 'kemal' here to a stronger password, and update `password` in config/config.yml
$ createdb -O kemal invidious
$ psql invidious kemal < config/sql/channels.sql
$ psql invidious kemal < config/sql/videos.sql
$ psql invidious kemal < config/sql/channel_videos.sql
$ psql invidious kemal < config/sql/users.sql
$ psql invidious kemal < config/sql/session_ids.sql
$ psql invidious kemal < config/sql/nonces.sql
$ psql invidious kemal < config/sql/annotations.sql
$ psql invidious kemal < config/sql/privacy.sql
$ psql invidious kemal < config/sql/playlists.sql
$ psql invidious kemal < config/sql/playlist_videos.sql

# Set up Invidious
$ shards update && shards install
$ crystal build src/invidious.cr --release

Post-install configuration:

Detailed configuration available in the configuration guide.

If you use a reverse proxy, you must configure invidious to properly serve request through it:

https_only: true : if your are serving your instance via https, set it to true

domain: domain.ext: if you are serving your instance via a domain name, set it here

external_port: 443: if your are serving your instance via https, set it to 443

Update Invidious

Instructions are available in the updating guide.

Usage:

$ ./invidious -h
Usage: invidious [arguments]
    -b HOST, --bind HOST             Host to bind (defaults to 0.0.0.0)
    -p PORT, --port PORT             Port to listen for connections (defaults to 3000)
    -s, --ssl                        Enables SSL
    --ssl-key-file FILE              SSL key file
    --ssl-cert-file FILE             SSL certificate file
    -h, --help                       Shows this help
    -c THREADS, --channel-threads=THREADS
                                     Number of threads for refreshing channels (default: 1)
    -f THREADS, --feed-threads=THREADS
                                     Number of threads for refreshing feeds (default: 1)
    -o OUTPUT, --output=OUTPUT       Redirect output (default: STDOUT)
    -v, --version                    Print version

Or for development:

$ curl -fsSLo- https://raw.githubusercontent.com/samueleaton/sentry/master/install.cr | crystal eval
$ ./sentry
🤖  Your SentryBot is vigilant. beep-boop...

Documentation

Documentation can be found in the wiki.

Extensions

Extensions can be found in the wiki, as well as documentation for integrating it into other projects.

Made with Invidious

  • FreeTube: A libre software YouTube app for privacy.
  • CloudTube: A JavaScript-rich alternate YouTube player
  • PeerTubeify: On YouTube, displays a link to the same video on PeerTube, if it exists.
  • MusicPiped: A material design music player that streams music from YouTube.
  • LapisTube: A fancy and advanced (experimental) YouTube front-end. Combined streams & custom YT features.
  • HoloPlay: Funny Android application connecting on Invidious API's with search, playlists and favoris.

Contributing

  1. Fork it ( https://github.com/iv-org/invidious/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new pull request

Translation

  • Log in with an account you have elsewhere, or register an account and start translating at Hosted Weblate.

Donate:

Liberapay: https://liberapay.com/iv-org/

Contact

Feel free to join our Matrix room, or #invidious on freenode. Both platforms are bridged together.

Liability

We take no responsibility for the use of our tool, or external instances provided by third parties. We strongly recommend you abide by the valid official regulations in your country. Furthermore, we refuse liability for any inappropriate use of Invidious, such as illegal downloading. This tool is provided to you in the spirit of free, open software.

You may view the LICENSE in which this software is provided to you here.

  1. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.