Invidious is an alternative front-end to YouTube
Go to file
psvenk f54fbd057e Add prefers-color-scheme support (#601)
* Add prefers-color-scheme support

This should fix <https://github.com/omarroth/invidious/issues/559>.
The cookie storage format has been changed from boolean
("true"/"false") to tri-state ("dark"/"light"/""), so that users
without a cookie set will get dark mode if they have enabled the dark
theme in their operating system. The code for handling the cookie
state, along with the user's operating system theme, has been factored
out into a new function `update_mode`, which is called both at window
load and at the "storage" event listener, because the "storage" event
listener is only trigerred when a change is made to the localStorage
from another tab/window (for more info - see
<https://stackoverflow.com/a/4679754>).
2019-08-15 11:29:55 -05:00
assets Add prefers-color-scheme support (#601) 2019-08-15 11:29:55 -05:00
config Add 'needs_update' column for scheduling feed refresh 2019-06-01 10:19:18 -05:00
docker docker: use alpine:edge base image for building 2019-08-15 01:37:25 +02:00
locales Add prefers-color-scheme support (#601) 2019-08-15 11:29:55 -05:00
screenshots Update CHANGELOG and bump version 2019-06-05 23:08:16 -05:00
spec Refactor continuation protocol buffers 2019-07-20 20:18:08 -05:00
src Add prefers-color-scheme support (#601) 2019-08-15 11:29:55 -05: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 travis: also test Docker build 2019-08-10 17:00:50 +02:00
CHANGELOG.md Update CHANGELOG and bump version 2019-07-12 23:45:21 -05:00
docker-compose.yml let docker listen to 127.0.0.1 by default 2019-06-17 10:46:37 -04: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 Add Travis CI and pin dependencies (#655) 2019-08-04 09:10:32 -05:00
shard.yml shard: update to crystal 0.30.1 2019-08-14 23:44:27 +02:00

Invidious

Build Status

Invidious is an alternative front-end to YouTube

  • Audio-only mode (and no need to keep window open on mobile)
  • Free software (AGPLv3 licensed)
  • No ads
  • No need to create a Google account to save subscriptions
  • Lightweight (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)
  • Does not require JS to play videos
  • Support for Reddit comments in place of YT comments
  • Import/Export subscriptions, watch history, preferences
  • Does not use any of the official YouTube APIs
  • Developer API

Liberapay: https://liberapay.com/omarroth
Patreon: https://patreon.com/omarroth
BTC: 356DpZyMXu6rYd55Yqzjs29n79kGKWcYrY
BCH: qq4ptclkzej5eza6a50et5ggc58hxsq5aylqut2npk

Invidious Instances

See Invidious Instances for a full list of publicly available instances.

Official Instances

Screenshots

Player Preferences Subscriptions

Installation

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

Docker:

Build and start cluster:

$ docker-compose up

And visit localhost:3000 in your browser.

Rebuild cluster:

$ docker-compose build

Delete data and rebuild:

$ docker volume rm invidious_postgresdata
$ docker-compose build

Linux:

Install dependencies

# Arch Linux
$ sudo pacman -S shards crystal imagemagick 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 librsvg2-dev postgresql imagemagick libsqlite3-dev

Add invidious user and clone repository

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

Setup 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
$ exit

Setup 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

OSX:

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

# Clone repository and setup postgres database
$ git clone https://github.com/omarroth/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

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

Update Invidious

You can see how to update Invidious here.

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: An Open Source YouTube app for privacy.
  • CloudTube: A JS-rich alternate YouTube player
  • PeerTubeify: On YouTube, displays a link to the same video on PeerTube, if it exists.
  • MusicPiped: A materialistic music player that streams music from YouTube.

Contributing

  1. Fork it ( https://github.com/omarroth/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

Contact

Feel free to send an email to omarroth@protonmail.com or join our Matrix Server, or #invidious on Freenode.

You can also view release notes on the releases page or in the CHANGELOG.md included in the repository.

License

GNU AGPLv3 Image

Invidious is Free Software: You can use, study share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.