Go to file
kuhaku 52fa523df1
Add support for External Players (closes #418) (#1271)
* feat: add support for opening videos/playlists in external players (like mpv) #418

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: move external player settings into own section
feat: add warnings for when the external player doesn't support the current action (e.g. reversing playlists)
feat: add toggle in settings for ignoring unsupported action warnings

Signed-off-by: Randshot <randshot@norealm.xyz>

* improvement: do not append start offset argument when the watch progress is 0

Signed-off-by: Randshot <randshot@norealm.xyz>

* fix: fix undefined showToast error when clicking on the external player playlist button

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: add icon button for external player to watch-video-info (below video player) component
improvement: refactor the code for opening the external player into a separate function in utils.js

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: add support for ytdl protocol urls (supportsYtdlProtocol)
chore: fix lint error

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: add support for passing default playback rate to external player
improvement: add warning message for when the external player does not support starting playback at
             a given offset
chore: rename reverse, shuffle, and loopPlaylist fields for consistency

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: add setting for custom external player command line arguments

Signed-off-by: Randshot <randshot@norealm.xyz>

* chore: fix lint error

Signed-off-by: Randshot <randshot@norealm.xyz>

* improvement(watch-video-info.js): change the default for playlistId back to null (consistent with other occurrences)
improvement(utils.js/openInExternalPlayer): also check for empty playlistId string
fix(watch-video-info.js): fix merge error

Signed-off-by: Randshot <randshot@norealm.xyz>

* improvement(components/ft-list-video): check whether watch history is turned on, before adding a video to it
fix(store/utils): fix playlistReverse typo, causing `undefined` being set as a command line argument
fix(store/utils): check for 'string' type, instead of `null` and `undefined`
fix(views/Watch): fix getPlaylistIndex returning an incorrect index, when reverse was turned on
chore(locales/en-US): fix thumbnail and suppress typo
chore(locales/en_GB): fix thumbnail and suppress typo

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat: pause player when opening video in external player

Signed-off-by: Randshot <randshot@norealm.xyz>

* feat(externalPlayer): refactor externalPlayerCmdArguments into a separate static file `static/external-player-map.json`
chore(components/ft-list-video): fix lint error

Signed-off-by: Randshot <randshot@norealm.xyz>

* Revert "feat: pause player when opening video in external player"

This reverts commit 28b4713334bf941be9e403abf517bb4b89beb04f.

* feat: pause the app's player when opening video in external player

* This commit addresses above requested changes.

improvement(components/external-player-settings): move `externalPlayer` check to `ft-flex-box`
improvement(components/external-player-settings): use `update*` methods, instead of `handle*`

improvement(store/utils): move child_process invocation to `main/index.js` via IPC call to renderer
improvement(store/utils): use `dispatch` for calling actions
improvement(store/utils): get external player related settings directly in the action

improvement(renderer/App): move `checkExternalPlayer` call down into `usingElectron` if statement
fix(renderer/App): fix lint error

improvement(components/ft-list-playlist): remove unnecessary payload fields
fix(components/ft-list-playlist): fix typo in component name

improvement(components/ft-list-video): remove unnecessary payload fields

improvement(components/watch-video-info): remove unnecessary payload fields
improvement(views/Settings): add `usingElectron` condition

Signed-off-by: Randshot <randshot@norealm.xyz>

* fix(store/utils): fix toast message error

Signed-off-by: Randshot <randshot@norealm.xyz>

* fix(store/utils): fix a few code mess-ups

Co-authored-by: Svallinn <41585298+Svallinn@users.noreply.github.com>
2021-06-13 17:31:43 +02:00
.github Added Estonian, Serbian languages, fixed comment likes and bumped packages (#1311) 2021-05-22 21:21:48 +02:00
.vscode Revert unintended merged code from "Update package-lock.json" 2021-05-10 05:59:48 +01:00
_icons Add new Mac icon 2021-03-06 20:41:26 -05:00
_scripts Build: Suppress generation of `.build-id` links in rpm packages 2021-05-23 03:52:50 +01:00
src Add support for External Players (closes #418) (#1271) 2021-06-13 17:31:43 +02:00
static Add support for External Players (closes #418) (#1271) 2021-06-13 17:31:43 +02:00
.babelrc Push Latest Code to Repository 2020-02-16 13:30:00 -05:00
.editorconfig Use the Unix file ending 2020-06-03 21:19:27 -04:00
.eslintignore Push Latest Code to Repository 2020-02-16 13:30:00 -05:00
.eslintrc.js Update .eslintrc.js 2021-03-02 22:55:10 -05:00
.gitignore Added a debug folder to gitignore 2020-12-30 20:45:16 +01:00
.prettierrc Check for and remove all trailing commas 2020-08-04 22:18:39 -04:00
.whitesource Push Latest Code to Repository 2020-02-16 13:30:00 -05:00
CONTRIBUTING.md Update CONTRIBUTING.md 2020-10-08 15:26:41 -04:00
LICENSE Replace License with AGPLv3 version 2020-04-13 20:50:02 -04:00
README.md Update README.md 2021-03-01 10:03:52 -05:00
package-lock.json Bump normalize-url from 4.5.0 to 4.5.1 (#1400) 2021-06-13 11:16:28 +00:00
package.json Bumped yt-comment-scraper (#1389) 2021-06-03 20:09:14 +02:00
tsconfig.json Push Latest Code to Repository 2020-02-16 13:30:00 -05:00

README.md

FreeTube is an open source desktop YouTube player built with privacy in mind. Use YouTube without advertisements and prevent Google from tracking you with their cookies and JavaScript. Available for Windows, Mac & Linux thanks to Electron.

Please note that FreeTube is currently in Beta. While it should work well for most users, there are still bugs and missing features that need to be addressed.

Download FreeTube

Browser Extension

FreeTube is supported by the Privacy Redirect extension, which will allow you to open YouTube links into FreeTube. You must enable the option within the advanced settings for it to work.

Download Privacy Redirect for Firefox or Google Chrome.

If you have issues with the extension working with FreeTube, please create an issue in this repository instead of the extension repository.

How does it work?

FreeTube uses a built in extractor to grab and serve data / videos. The Invidious API can also optionally be used. FreeTube does not use any official APIs to obtain data. While YouTube can still see your video requests, it can no longer track you using cookies or JavaScript. Your subscriptions and history are stored locally on your computer and never sent out. Using a VPN or Tor is highly recommended to hide your IP while using FreeTube.

Screenshots

Features

  • Watch videos without ads
  • Use YouTube without Google tracking you using cookies and JavaScript
  • Two extractor APIs to choose from (Built in or Invidious)
  • Subscribe to channels without an account
  • Local subscriptions, history, and saved videos
  • Organize your subscriptions into "Profiles" to create a more focused feed
  • Export & import subscriptions
  • Open videos from your browser directly into FreeTube (with extension)
  • Mini Player
  • Full Theme support

Official Downloads

GitHub Releases

FreeTube Website

Flatpak on Flathub: Download Source

Unofficial Downloads

These builds are maintained by the community. While they should be safe, download at your own risk. There may be issues with using these versus the official builds. Any issues specific with these builds should be sent to their respective maintainer.

Arch User Repository (AUR): Download

Chocolatey: Download

Windows Portable: Download Source

Automated Builds (Nightly / Weekly)

Builds are automatically created from changes to our development branch via GitHub Actions.

The first build with a green check mark is the latest build. You will need to have a GitHub account to download these builds.

Contributing

If you have an idea or if you found a bug, please submit a GitHub issue so that we can track it. Please search the existing issues before submitting to prevent duplicates.

If you like to get your hands dirty and want to contribute, we would love to have your help. Send a pull request and someone will review your code. Please follow the Contribution Guidelines before sending your pull request.

Thank you very much to the People and Projects that make FreeTube possible!

Localization

Translation status

We are actively looking for translations! We use Weblate to make it easy for translators to get involved. Click on the badge above to learn how to get involved.

Contact

If you ever have any questions, feel free to make an issue here on GitHub. Alternatively, you can email me at FreeTubeApp@protonmail.com or you can join our Matrix Community. Don't forget to check out the rules before joining.

You can also stay up to date by reading the FreeTube Blog. View the welcome blog.

Donate

FreeTube on Liberapay

Bitcoin Address: 1Lih7Ho5gnxb1CwPD4o59ss78pwo2T91eS

Monero Address: 48WyAPdjwc6VokeXACxSZCFeKEXBiYPV6GjfvBsfg4CrUJ95LLCQSfpM9pvNKy5GE5H4hNaw99P8RZyzmaU9kb1pD7kzhCB

If you enjoy using FreeTube, you're welcome to leave a donation using the following methods. While your donations are much appreciated, only donate if you really want to. Donations are used for keeping the website up and running and eventual code signing costs.

License

GNU AGPLv3 Image

FreeTube 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.