Code Monkey home page Code Monkey logo

piped's Introduction

Piped

AGPL v3 Matrix Lemmy Registered Users IPFS Build GitHub Repo stars GitHub last commit Translation status

An open-source alternative frontend for YouTube which is efficient by design.

The Problem

YouTube has an extremely invasive privacy policy which relies on using user data in unethical ways. You give them a lot of data - ranging from ideas, music taste, content, political opinions, and much more than you think.

By using Piped, you can freely watch and listen to content without the fear of prying eyes watching everything you are doing.

Features:

User Features

  • No Ads
  • No Tracking
  • Lightweight on server and client
  • Infinite Scrolling
  • Light/Dark themes
  • Login
  • Feeds
  • Playlists
  • Integration with SponsorBlock
  • Integration with LBRY for streaming
  • Integration with Return YouTube Dislike via RYD-Proxy
  • 4K support
  • No connections to Google's servers
  • Playing just audio
  • PWA support
  • Locally saved Preferences
  • Available in many languages, thanks to our translators
  • Embedded video support
  • No age restriction
  • Bypasses Geo restrictions if possible through a federated network

Technical Features

  • Multi-region load-balancing
  • Performant by design, designed to handle 1000s of users concurrently
  • Does not use official YouTube APIs
  • Uses NewPipeExtractor to extract information
  • Public JSON API
  • Federated protocol on Matrix to let instances collaborate with each other

Screenshots

Player Trending Channel
Screenshot 1 Screenshot 2 Screenshot 3

Having trouble?

If you have any general questions regarding how Piped works or trouble setting up your own instance, please consult the following public chat rooms and documentation for help. Please use these platforms exclusively for such cases and do NOT open an issue.

Public Chat Rooms/Communities

Self-Hosting

See https://docs.piped.video/docs/self-hosting/ for more details.

The source code of the documentation website is available at https://github.com/TeamPiped/Documentation.

Documentation

The documentation can be found at https://docs.piped.video (accessible via IPNS as well).

Extensions

To redirect all YouTube links to Piped, you are highly recommended to use either Piped-Redirects or Libredirect.

Contributing

Translations

You can help by translating the project to a language you speak at https://hosted.weblate.org/projects/piped/frontend/

Mirrors

Forking, and contributing

Development Setup

pnpm install

Compiles and hot-reloads for development

pnpm dev

You can now make changes and view then in realtime!

Contact

If you would like to contact me personally, you may do so with the following means:

Please note that isn't meant for support, see Public Chat Rooms/Communities for that.

Donations

Donations can be made at:

  • bc1qhq8zjxmu405nvp37njj6zv3s980zg400pu9jfe (BTC)
  • 0x1D77D4cfB1a947514241bcf19B1F04738495e2fD (ETH)
  • 84wyyeGTrg4U1daJufi78bAFrBQgdRhmxJZvgYv8dAFeFVwkJaBEmw5C7fNniUM9n4jfrz3NeG32Agxtp7JNAcCUFPACfwA (XMR, aka Monero)
  • nano_1ngejzydncche4rdua3iebhj7sa95pw5geq4pb8phugtjf3tku933ktjb4pq (Nano)
  • XpzgouDTKCUuE8a92XqjX9b43gKL8oLihw (Dash)

FIAT donations can be made at:

Contributions in any other form are also welcomed.

Made with Piped

Mobile/desktop apps

  • LibreTube - Alternative frontend for YouTube, for Android.
  • YTDLnis - Video and audio downloader for Android that uses Piped to update formats.
  • Yattee - Alternative frontend for YouTube, for MacOS / IOS.
  • PsTube - Watch and download videos without ads on Android, Linux, Windows, iOS, and Mac OSX.
  • Harmony Music - YouTube Music alternative for Android, built with Flutter that supports piped linking for playlists.
  • VibeYou - Privacy focused music player for Android supporting playback via Piped.

Web apps

  • Piped-Material - Fork of Piped, focusing on better performance and a more usable design.
  • Hyperpipe - Alternative privacy respecting front-end for YouTube Music.
  • ytify - Complementary audio streaming frontend for YouTube & YouTube Music.
  • Musicale - Alternative frontend for YouTube Music with style.
  • conduit - Alternative frontend for YouTube, with a modern player and watch together capabilities.
  • DeskVideo - Desktop styled, customizable alternative frontend for YouTube.
  • ReacTube - Privacy friendly & distraction free YouTube frontend.

Other

YourKit

YourKit has given an open source license for their profiler, greatly simplifying the profiling of Piped's performance.

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

piped's People

Contributors

70h avatar aashif-m avatar atilluf avatar bnyro avatar comradekingu avatar dependabot[bot] avatar firemasterk avatar fjuro avatar flipflop97 avatar get100percent avatar github-actions[bot] avatar joaooliva avatar jorgesumle avatar kskarthik avatar linerly avatar matthaiks avatar milotype avatar moisout avatar oersen avatar privacytime101 avatar qaz-6 avatar renovate[bot] avatar rex07 avatar rickym7 avatar rramiachraf avatar secularsteve avatar shjosan avatar thecashewtrader avatar weblate avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

piped's Issues

Videos unplayable on iOS

Videos are unplayable on iOS. Tested on iPhone X. Also the design is a bit off at the top, both in portrait and landscape layouts.

9DBF0F9C-21F3-4643-9845-F87148A8397A

Deciding on the Database to use

I'm thinking about MongoDB, but it's not free software according to the FSF. In the worst-case scenario, I would use it.

I'm thinking about using Hibernate which is an ORM, with either Postgres or CockroachDB.

Another idea is to use https://www.scylladb.com/ but it consumes a lot of ram. (2GB for a small environment). It's the fastest NoSQL database if I'm not wrong.

QUIC

org.schabi.newpipe.extractor.exceptions.ReCaptchaException: reCaptcha Challenge requested
	at me.kavin.piped.utils.DownloaderImpl.execute(DownloaderImpl.java:48)
	at org.schabi.newpipe.extractor.downloader.Downloader.get(Downloader.java:70)
	at org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonResponse(YoutubeParsingHelper.java:524)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSearchExtractor.onFetchPage(YoutubeSearchExtractor.java:67)
	at org.schabi.newpipe.extractor.Extractor.fetchPage(Extractor.java:56)
	at org.schabi.newpipe.extractor.search.SearchInfo.getInfo(SearchInfo.java:29)
	at me.kavin.piped.utils.ResponseHelper.searchResponse(ResponseHelper.java:215)
	at me.kavin.piped.Main.lambda$main$8(Main.java:132)
	at me.kavin.piped.Main$$Lambda$112/000000000000000000.apply(Unknown Source)
	at reactor.netty.http.server.DefaultHttpServerRoutes$HttpRouteHandler.apply(DefaultHttpServerRoutes.java:132)
	at reactor.netty.http.server.DefaultHttpServerRoutes.apply(DefaultHttpServerRoutes.java:98)
	at reactor.netty.http.server.DefaultHttpServerRoutes.apply(DefaultHttpServerRoutes.java:38)
	at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:607)
	at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:453)
	at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:510)
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:185)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795)
	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:836)

Consider shaka player

https://github.com/google/shaka-player

Why?

  • support ttml captions (videojs has a broken plugin for it)
  • support vp9/webm mse muxing (videojs doesn't)
  • more actively updated
  • Dash streams work
  • Should be easier to fix issues
  • Can be loaded asynchronously w/o errors

Downsides:

  • No in video thumbnail preview: shaka-project/shaka-player#559 - there is an active PR
    (Videojs has a plugin that uses vtt)
  • We need to see if it will work with single page apps (I don't want to recreate the player every time)

Benchmarking

Streams:

hey -c 50 -n 500 http://127.0.0.1:8080/streams/6zBfVElmWfw

Summary:
  Total:        10.8712 secs
  Slowest:      2.7826 secs
  Fastest:      0.2908 secs
  Average:      1.0226 secs
  Requests/sec: 45.9929

  Total data:   14749105 bytes
  Size/request: 29498 bytes

Response time histogram:
  0.291 [1]     |
  0.540 [15]    |โ– โ– โ– 
  0.789 [111]   |โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– 
  1.038 [179]   |โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– 
  1.287 [101]   |โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– 
  1.537 [44]    |โ– โ– โ– โ– โ– โ– โ– โ– โ– โ– 
  1.786 [38]    |โ– โ– โ– โ– โ– โ– โ– โ– 
  2.035 [9]     |โ– โ– 
  2.284 [0]     |
  2.533 [1]     |
  2.783 [1]     |


Latency distribution:
  10% in 0.6454 secs
  25% in 0.7870 secs
  50% in 0.9775 secs
  75% in 1.2136 secs
  90% in 1.5255 secs
  95% in 1.6920 secs
  99% in 1.8485 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0003 secs, 0.2908 secs, 2.7826 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0002 secs, 0.0000 secs, 0.0061 secs
  resp wait:    1.0219 secs, 0.2906 secs, 2.7824 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0050 secs

Status code distribution:
  [200] 500 responses

Login Page

This will be the first step to getting user accounts and feeds.

How to self-host

Hello, how can I self-host piped? Is it still too soon to have a docker-compose? I've noticed there's also a dockerized backend version.

Evaluate closure compiler

There's a webpack plugin, which can be used to improve performance and reduce the size of the further.

Settings Not Being Saved

I usually prefer setting the sponsor segments of the videos I watch, since I do like them (I watch mainly LinusTechTips (and their other channels), Gamers Nexus, and Level1Techs), and occasionally make use of them, so I tried disabling SponsorBlock and the other settings, however my changes do not get saved, and upon leaving the page, they get reverted.

Website Resource Utilization of User's Client PC

One of the main reasons why I had moved to Invidious (other than the privacy concerns), was Polymer YouTube's atrocious system resource utilization, which is why I tried to hold on as long as possible onto the old polymer-free YouTube.

Back then, I had an i3-540 (nowadays I use an i5-4570 with a Radeon HD6950), and I was able to play 1080p60fps with barely any stutters, however with the polymer theme, anything above 720p30Hz was unpractical.

Additionally, we have a BayTrail Celeron Chromebook (dechromified), that used to be able to play 720p30fps without any stuttering on the old pre-polymer YouTube, however with the polymer YouTube, anything above 240p is unplayable due to the stuttering.
With Invidious, Even 720p60fps/1080p30fps is playable with minimal stuttering, however with Piped, I cannot go above 480p due to the stuttering.

Could something be done about this? Possible a "lite" version of the website (possibly with the Invidious GUI above the Piped backend)?

[Feature Request] Keyboard Shortcuts

I was quite surprised that Piped doesn't yet feature any keyboard shortcuts, so here is the request.

Basic ones are pretty obvious:
Horizontal arrow keys: Moving through the video
Vertical arrow keys: Changing volume
Space/Super (however you'd like to call it): Play/Pause
F: Fullscreen
M: Mute

Others should also chime in with suggestions.

Just an idea

You guys should collaborate with the ViewTube devs to make a bigger team

Autoplay Preference for player

This may very well be an a bug within Firefox, not with Piped.

When changing resolution, videos automatically start playing on Piped, but only with Firefox, Edge had no such issue.
Sometimes (rarely) opening a new page on Piped has the video autoplaying, again only on Firefox.

Both Firefox and Edge (possible via flag) have autoplay for both audio and video blocked.

Captcha solved response can be invalidated early

Caused by: org.schabi.newpipe.extractor.exceptions.ParsingException: Got HTML document, expected JSON response (latest url was: "https://www.youtube.com/watch?v=HJiog3Fbur0&pbj=1")
        at org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getValidJsonResponseBody(YoutubeParsingHelper.java:643)
        at org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getJsonResponse(YoutubeParsingHelper.java:667)
        at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.onFetchPage(YoutubeStreamExtractor.java:711)
        at org.schabi.newpipe.extractor.Extractor.fetchPage(Extractor.java:54)
        at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:68)
        at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:64)
        at org.schabi.newpipe.extractor.stream.StreamInfo.getInfo(StreamInfo.java:60)
        at me.kavin.piped.utils.ResponseHelper.lambda$streamsResponse$1(ResponseHelper.java:63)
        at me.kavin.piped.utils.ResponseHelper$$Lambda$530/0x0000000000000000.get(Unknown Source)
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source)
        ... 1 more

Perhaps have a minimum delay of 5/10 minutes?

Additional task: remove timeout at
https://github.com/TeamPiped/Piped-Backend/blob/a2cd2baf2aa361bece822d0b6954774cf3c72ac5/src/main/java/me/kavin/piped/utils/ResponseHelper.java#L81

Light Theme

I understand the importance of having a dark theme, and they many people prefer it, however not everyone does, and many (including me) prefer having a light theme (as long as it isn't too blinding).

Piped logo concept

I thought it would be cool for Piped to have a nice logo. Maybe you already have something in mind but I designed this as a concept logo. I can send you the .psd (Photoshop) and .svg if you like it or want to modify it.

Don't worry if you don't like it, I enjoy making these.

Comments

Requires backend changes, should be simple though.

Search Box

Similar to how it is on YouTube/Invidious

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.