Convert Figma logo to code with AI

iv-org logoinvidious

Invidious is an alternative front-end to YouTube

16,276
1,807
16,276
474

Top Related Projects

3,219

A fork of NewPipe with SponsorBlock functionality.

13,099

An Open Source YouTube app for privacy

Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player ( Windows / Mac / Linux ) A Butter-Project Fork

2,555

Privacy oriented video player for iOS, tvOS and macOS

An alternative frontend for YouTube, for Android.

Quick Overview

Invidious is an open-source alternative front-end to YouTube. It aims to provide a privacy-focused, lightweight, and ad-free experience for watching YouTube videos without relying on Google's official APIs or services. Invidious can be self-hosted or accessed through public instances.

Pros

  • Enhanced privacy: Does not track users or require Google accounts
  • Ad-free experience: Removes advertisements from videos
  • Lightweight and fast: Offers a simpler, more streamlined interface
  • Customizable: Provides various features and settings for personalization

Cons

  • Potential legal issues: May face copyright concerns from Google/YouTube
  • Dependency on YouTube: Relies on YouTube's infrastructure, making it vulnerable to changes
  • Limited features: Some advanced YouTube features may not be available
  • Maintenance challenges: Requires ongoing updates to keep up with YouTube changes

Getting Started

To set up your own Invidious instance:

  1. Clone the repository:

    git clone https://github.com/iv-org/invidious
    cd invidious
    
  2. Install dependencies (for Debian/Ubuntu):

    sudo apt update
    sudo apt install crystal libssl-dev libxml2-dev libyaml-dev libgmp-dev libreadline-dev postgresql postgresql-contrib
    
  3. Set up the database:

    sudo -u postgres psql -c "CREATE USER kemal WITH PASSWORD 'kemal';"
    sudo -u postgres psql -c "CREATE DATABASE invidious;"
    sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE invidious TO kemal;"
    
  4. Build and run Invidious:

    shards install
    crystal build src/invidious.cr
    ./invidious
    

Visit http://localhost:3000 to access your Invidious instance.

Competitor Comparisons

3,219

A fork of NewPipe with SponsorBlock functionality.

Pros of NewPipe

  • Native Android app with a user-friendly interface
  • Supports background playback and picture-in-picture mode
  • Allows downloading videos and audio for offline use

Cons of NewPipe

  • Limited to Android devices, not accessible on other platforms
  • Requires manual updates or installation from F-Droid
  • May break more frequently due to YouTube API changes

Code Comparison

Invidious (Crystal)

def self.fetch_video_info(id, region)
  response = YT_POOL.client &.get("/watch?v=#{id}&gl=#{region}")
  initial_data = extract_initial_data(response.body)
  player_response = extract_player_response(response.body)
  # ... (processing video information)
end

NewPipe (Java)

public static StreamInfo getInfo(String url) throws ExtractionException, IOException {
    // Video resource locator
    YoutubeStreamExtractor extractor = new YoutubeStreamExtractor(url);
    extractor.fetchPage();
    StreamInfo streamInfo = extractor.getStreamInfo();
    // ... (processing stream information)
}

Both projects aim to provide alternative YouTube frontends, but they differ in their approach and target platforms. Invidious is a web-based solution written in Crystal, while NewPipe is a native Android app written in Java. The code snippets show how each project handles video information extraction, with Invidious using HTTP requests and NewPipe utilizing a custom extractor.

13,099

An Open Source YouTube app for privacy

Pros of FreeTube

  • Desktop application with a user-friendly interface
  • Offers local subscription management and history tracking
  • Supports downloading videos directly within the app

Cons of FreeTube

  • Limited to desktop platforms, not accessible via web browsers
  • May require more frequent updates to maintain compatibility with YouTube changes

Code Comparison

FreeTube (JavaScript):

async function getVideoData(videoId) {
  const data = await ytdl.getInfo(videoId);
  return parseVideoData(data);
}

Invidious (Crystal):

def self.get_video(id, region)
  video = get_video_info(id, region)
  parse_video_info(video)
end

Both projects aim to provide alternative YouTube frontends, but they differ in their approach and target platforms. FreeTube is a desktop application built with Electron, offering a more native-like experience with features like local subscriptions and video downloads. Invidious, on the other hand, is a web-based solution that can be self-hosted or accessed through public instances.

FreeTube's desktop focus allows for a more integrated experience on supported platforms, while Invidious offers broader accessibility across devices through web browsers. The code comparison shows similar approaches to fetching video data, with FreeTube using JavaScript and Invidious using Crystal.

Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player ( Windows / Mac / Linux ) A Butter-Project Fork

Pros of Popcorn Time

  • User-friendly desktop application for streaming movies and TV shows
  • Integrated torrent streaming with a Netflix-like interface
  • Cross-platform support (Windows, macOS, Linux)

Cons of Popcorn Time

  • Legal concerns due to streaming copyrighted content
  • Requires more system resources for video playback and torrent handling
  • Less focus on privacy compared to Invidious

Code Comparison

Popcorn Time (JavaScript):

App.View.ShowDetail = App.View.Item.extend({
    template: '#show-detail-tpl',
    className: 'show-detail',

    initialize: function () {
        App.View.Item.prototype.initialize.call(this);
    }
});

Invidious (Crystal):

class InvidiousApplication < Kemal::Application
  def initialize
    super
    setup_routes
    setup_middlewares
  end

  private def setup_routes
    # Route definitions
  end
end

Both projects use different programming languages and frameworks, reflecting their distinct purposes. Popcorn Time focuses on a desktop application for media streaming, while Invidious is a web-based alternative front-end for YouTube, prioritizing privacy and lightweight functionality.

2,555

Privacy oriented video player for iOS, tvOS and macOS

Pros of Yattee

  • Native iOS and macOS app, providing a smoother user experience on Apple devices
  • Supports multiple backends (Invidious, Piped, local) for greater flexibility
  • Offers picture-in-picture and background playback features

Cons of Yattee

  • Limited to iOS and macOS platforms, reducing accessibility for non-Apple users
  • Requires installation on user devices, unlike Invidious which is web-based
  • May have a steeper learning curve for new users compared to Invidious

Code Comparison

Yattee (Swift):

struct ContentView: View {
    var body: some View {
        NavigationView {
            List(videos) { video in
                VideoRow(video: video)
            }
        }
    }
}

Invidious (Crystal):

get "/watch" do |env|
  id = env.params.query["v"]?
  video = get_video(id)
  templated "watch"
end

The code snippets highlight the different approaches: Yattee uses Swift for native app development, while Invidious uses Crystal for server-side rendering. This reflects their fundamental differences in architecture and target platforms.

An alternative frontend for YouTube, for Android.

Pros of LibreTube

  • Native Android app with a modern, user-friendly interface
  • Supports background playback and picture-in-picture mode
  • Offers additional features like SponsorBlock integration and custom playlists

Cons of LibreTube

  • Limited to Android devices, not accessible on other platforms
  • Requires separate backend (Piped) for functionality
  • May have slower development cycle due to smaller contributor base

Code Comparison

Invidious (Crystal):

def self.fetch_video_info(id, region)
  response = YT_POOL.client &.get("/watch?v=#{id}&gl=#{region}")
  initial_data = extract_initial_data(response.body)
  # ... (processing logic)
end

LibreTube (Kotlin):

suspend fun getVideoInfo(videoId: String): VideoInfo {
    val response = httpClient.get("$PIPED_URL/streams/$videoId")
    val json = response.bodyAsText()
    return Json.decodeFromString(json)
}

Both projects aim to provide privacy-focused YouTube alternatives, but they differ in approach. Invidious is a web-based solution written in Crystal, while LibreTube is an Android app written in Kotlin. Invidious can be self-hosted and accessed from any device with a web browser, whereas LibreTube offers a native mobile experience but is limited to Android. LibreTube relies on Piped as its backend, while Invidious is a standalone solution.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Invidious logo

Invidious

License: AGPLv3 Build Status GitHub commits GitHub issues GitHub pull requests Translation Status Awesome Humane Tech

An open source alternative front-end to YouTube

Website  â€¢  Instances list  â€¢  FAQ  â€¢  Documentation  â€¢  Contribute  â€¢  Donate

Chat with us:
Matrix Libera.chat (IRC)
Fediverse: @invidious@social.tchncs.de
E-mail

Screenshots

PlayerPreferencesSubscriptions

Features

User features

  • Lightweight
  • No ads
  • No tracking
  • No JavaScript required
  • Light/Dark themes
  • Customizable homepage
  • Subscriptions independent from Google
  • Notifications for all subscribed channels
  • Audio-only mode (with background play on mobile)
  • Support for Reddit comments
  • Available in many languages, thanks to our translators

Data import/export

  • Import subscriptions from YouTube, NewPipe and Freetube
  • Import watch history from YouTube and NewPipe
  • Export subscriptions to NewPipe and Freetube
  • Import/Export Invidious user data

Technical features

  • Embedded video support
  • Developer API
  • Does not use official YouTube APIs
  • No Contributor License Agreement (CLA)

Quick start

Using invidious:

Hosting invidious:

Documentation

The full documentation can be accessed online at https://docs.invidious.io/

The documentation's source code is available in this repository: https://github.com/iv-org/documentation

Extensions

We highly recommend the use of Privacy Redirect, a browser extension that automatically redirects Youtube URLs to any Invidious instance and replaces embedded youtube videos on other websites with invidious.

The documentation contains a list of browser extensions that we recommended to use along with Invidious.

You can read more here: https://docs.invidious.io/applications/

Contribute

Code

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

Translations

We use Weblate to manage Invidious translations.

You can suggest new translations and/or correction here: https://hosted.weblate.org/engage/invidious/.

Creating an account is not required, but recommended, especially if you want to contribute regularly. Weblate also allows you to log-in with major SSO providers like Github, Gitlab, BitBucket, Google, ...

Projects using Invidious

A list of projects and extensions for or utilizing Invidious can be found in the documentation: https://docs.invidious.io/applications/

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.