Commit Graph

148 Commits

Author SHA1 Message Date
unrealtournament
1dc3335ce6 Add subscription JSON export for NewPipe (#5826)
The current option to export subscriptions for NewPipe (`Export subscriptions as OPML (for NewPipe & FreeTube)`) isn't accepted by NewPipe anymore. As far as I can tell, NewPipe only accepts importing from its own SQLite database, from Google Account CSV export and from its own JSON export format. This is mentioned in https://github.com/iv-org/invidious/issues/5438.

This PR adds support to export subscriptions in the NewPipe compatible format. I'm looking for input on a few points:
- I'm not a huge fan of hardcoding the NewPipe version in the export, but it is required by NewPipe to recognize it as a valid file. If someone has a better idea I'm all ears but I think it's the only way. In any case, NewPipe can import formats in a backwards compatible way in the future so it shouldn't be a huge deal.
- I haven't checked if the OPML export option actually works for FreeTube. If it doesn't, it should probably be removed altogether, for now I just removed the `(for NewPipe)` part.
- The translations would need to be updated, but I don't know how that is handled in this project so I need some help there.

The new format looks like this:
```
{
  "subscriptions": [
    {
      "service_id": 0,
      "url": "https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA",
      "name": "Veritasium"
    },
    {
      "service_id": 0,
      "url": "https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HA",
      "name": "Vsauce"
    }
  ],
  "app_version": "0.29.0",
  "app_version_int": 1014
}
```


* add subscription json export for NewPipe

* remove old newpipe export format

* make newpipe export values constant

* remove duplicate export option, add i18n keys

* Convert to_newpipe to a serializable struct

* Use same naming format as NewPipe for the exported subscriptions

---------

Co-authored-by: Fijxu <fijxu@nadeko.net>
2026-10-31 17:34:46 -03:00
Fijxu
1c4b41f960 chore: remove hd720 quality (#6098)
Removes HD720 quality selection as Youtube removed their combined video+audio video that was 720p. Now the only available is `360p`, which is `medium` quality.

```bash
curl -v --request POST   --url 'http://127.0.0.1:8282/companion/youtubei/v1/player'   --header 'Authorization: Bearer aaaaaaaaaaaaaaaa'   --header 'Content-Type: application/json' --data '{ "videoId": "w8pldQdmJLU" }' | jq ".streamingData.formats"
```

```json
[
  {
    "itag": 18,
    "url": "https://rr5---sn-bg0s7ns7.googlevideo.com/videoplayback?expire=1792812370&ei=8tDbar3yB_KZ1sQP8uOj8Qs&ip=XXX.XXX.XXX.XXX&id=o-APoOBo3WyyLXjPSe0Xl2-xCsyWMXchaMPRmTj4UkJLIz&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&cps=287&met=1792790770%2C&mh=Jl&mm=31%2C29&mn=sn-bg0s7ns7%2Csn-nja7sne6&ms=au%2Crdu&mv=m&mvi=5&pl=24&rms=au%2Cau&initcwndbps=1035875&bui=AWzQHwpX4VrhBTsG4T0oAvHR1r5mZV7dm9zuppZNtDgE-Rtl3uRA0ZdG0dB-9qxIXIvldmCzBxn5z56X&spc=mpRQ_2sfg4_5MN9L7ud3V7iopLB8etaGr4oP8_ybjBJXsh5x2m3s7S0vAvyCaReTumAvCPjh&vprv=1&svpuc=1&mime=video%2Fmp4&ns=-vYnufuN-GgbAW4adIGA9qkZ&rqh=1&cnr=14&ratebypass=yes&dur=922.528&lmt=1777285489878458&mt=1792790257&fvip=2&fexp=51565116%2C52184237&c=TVHTML5_SIMPLY&sefc=1&txp=5538534&n=OmKOje1BMpTH1A&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AE0s2JYwRgIhAJtYiKwBsjK4CvpjZOl5S_8xCj_AistOGOTnAzsNTQVKAiEA7C00y1m2vnleOHitHEYDeqCwWdr9tL0ziE-uUF6TS4Y%3D&lsparams=cps%2Cmet%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAP5bBhB-vi5vVQwqNts5AinZONLEnjUGgLh95gwih1PUAiBkzkyrObM9E92u3_EyeoVXrl8yhSjMWUP0uZYliiNOlA%3D%3D&pot=Mo4ElVvWMMqFrkWVH96K2MVfm9IX1lFWMzlSGzKrGVtqZJmyrZpPrWxuRkzAlF0qfnhyZLx10LtIcXfkhjDr_n0cX2i8QSX5ua_bxwJAvzlBs5c6ONqI85Txc7xcm_fHKbWh_WO_MoUcdO5vwD4ON62PeBou5Kf9i-vdjQIvAV06WxjdAYuVjllHBrixE2bb20tcAFWxbeBMc4L3ZAjx2JL8JVpXhtUKUh34q2Zr33-u6FHtsItK1f-4T-OYTI8p0sk5w07LGYKWcgf0PlDJy_In2tIfYSyM1oQpd64uSxXKLk0igNIAg7ulbjmNGnmY2Q1lENO2wXWUhs8d-uPqJjzgfd6Fcb9LZE03qACgKxR_HqWJImaI0fcFfYmj22zaib-tIX6KHL0ntAu1lrjoURaIU4CO_cXI5S_S4LfS37d62tcK8GFeobMKfiA92tMCVxjQymVEVQJ7n8QqbUn7b6XYAXjUp8N-Aj_RBiEh8Yy18kTkEYpx7uR9gusxxjH68Q-zAAE2p1iGhOU_XwUB9J9rqjrs4vdBqONw4WLqhVTzd24s4lACPHXClw3x9lYZPJDy9a82XMZImcVDkVN0w0cJMD9ssbep9rBJnhcwRKBIzwFSH282Nod-hIJ5Edj4azcT0zmHwdXyXq6bmENuQymZ8U8bAcU6I0d4XD1GxmQoHwCkbsiXuBnC2pBcsjvu3w%3D%3D&cver=1.0&alr=no",
    "mimeType": "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
    "bitrate": 213181,
    "width": 640,
    "height": 360,
    "lastModified": "1777285489878458",
    "quality": "medium",
    "fps": 24,
    "qualityLabel": "360p",
    "projectionType": "RECTANGULAR",
    "audioQuality": "AUDIO_QUALITY_LOW",
    "approxDurationMs": "922528",
    "audioSampleRate": "44100",
    "audioChannels": 2,
    "qualityOrdinal": "QUALITY_ORDINAL_360P"
  }
]
```

(ip query parameter anonymized to `XXX.XXX.XXX.XXX`, not a real IP of course.)
2026-10-25 22:19:48 -03:00
Cameron Radmore
87cadfd813 feat(channel): add support for shows tab (#6033)
* feat(channel): add support for shows tab

* feat: add support for /show/ urls

* chore(docs): add comment for GridShowRenderer and fix format

* fix: check that shows tabs exists before trying to fetch/parse

* fix: Remove `thumbnaiext`

This property doesn't exist.

Not exactly sure how it happened but I'm guessing I combined thumbnailOverlays and text somehow when I was doing a find and replace (Ctrl + H) and then formatting json with prettier
2026-10-23 19:53:05 -03:00
Fijxu
66fed560e1 chore: Completely remove Reddit from Invidious (#6087)
* chore: Completely remove Reddit from Invidious

* chore: remove reddit from config.example.yml

* fix comment preferences for nojs

* Add fallback for people that used reddit in the comments API and their preferences

* add missing TODO

* chore: remove unused swap_comments JS function from watch.js

* remove blank line
2026-10-23 19:05:40 -03:00
syeopite
4501c9df9c Show message when comments are turned off (#4051)
* Add error message when comments are disabled

* Add btn to try reddit comments when yt is disabled

* Escape warning messages for disabled comments

* Add missing semicolons

* Update comment detection to not use msg renderer

* Use short syntax for comment entry-point detection

Co-authored-by: Samantaz Fox <coding@samantaz.fr>

* Condense try-reddit-comments-link HTML in player.js

Co-authored-by: Samantaz Fox <coding@samantaz.fr>

* Improve locale keys for comments disabled messages

Co-authored-by: Samantaz Fox <coding@samantaz.fr>

* Remove extra whitespace

* Use button instead of anchor for try reddit link

* Request Reddit comm when yt disabled during nojs=1

* Change order of commentsEnabled in parse results

* Lint

* Rebase error

* update the naming of the comments section in Innertube

Downstreamed from 36ac67610d

---------

Co-authored-by: Samantaz Fox <coding@samantaz.fr>
Co-authored-by: Fijxu <fijxu@nadeko.net>
2026-08-03 15:18:13 -04:00
Fijxu
8ef5ea03d4 feat: Add support for POST requests on searches for privacy (#5551)
Use already set preferences variable

Use span for description, grammar fix from Copilot
2026-05-29 23:48:11 -04:00
Fijxu
a7935bc378 fix: restore dmca_content functionality (#5228)
* fix: restore dmca_content functionality

This restores (or adds) the functionality of the `dmca_content` config
option that at this date, has been unused and makes no effect.

* only disable download widget for dmca video ids
2025-12-06 17:15:25 -03:00
Fijxu
fdf0a25b9e Add Livestreams to trending page (#5480) 2025-10-16 17:31:48 -03:00
Fijxu
f9cf70f9d7 Add default playlist preference (#5449)
* Add default playlist preference

Closes https://github.com/iv-org/invidious/issues/5421

* Add option to set default playlist to none

* Move it to player preferences
2025-09-11 11:05:09 -03:00
syeopite
2c857b5ab6 Remove text captchas from Invidious (#5308)
textcaptcha.com seems to be down since April and it does not appear that
service will be restored.

Text captchas can be easily automated using free LLMs, so keeping the
text captcha is more like a gate to create accounts in mass on public
Invidious instances.

It also gives headaches like bots automating account creation to modify
the videos that appear popular page of each instance (since the popular
page is based on the subscriptions of the registered users).
2025-05-17 16:37:55 -07:00
Fijxu
00299ca4a0 Remove Image CAPTCHA and Text CAPTCHA from locale 2025-05-17 19:23:40 -04:00
syeopite
c288005bfd Make "show technical details" btn translatable 2025-03-19 22:52:04 -07:00
syeopite
9de69c0052 Improve design of placeholder item
Also makes it show the error backtrace
2025-03-19 22:52:03 -07:00
syeopite
58ad848d56 Channels: Support YouTube's change to from /community to /posts (#5183) 2025-02-26 14:13:22 -08:00
syeopite
9fbe3944b0 Channels: Add Courses to channel page and channel API (#5158)
Closes #5144
2025-02-26 14:08:44 -08:00
syeopite
f95f87e448 Frontend: Add a first page and previous page buttons for channel navigation (#4123) 2025-02-26 13:54:25 -08:00
Fijxu
d70681538a Channels: Fix community tab 2025-02-18 19:20:55 -03:00
ChunkyProgrammer
eaf47385c5 Add Courses to channel page and channel API 2025-01-25 14:43:39 -05:00
Samantaz Fox
952b3625a0 Add "Filipino (auto-generated)" to the list of caption languages 2024-10-10 20:31:22 +02:00
Samantaz Fox
d3830f7870 Translations update from Hosted Weblate (#4862) 2024-10-08 17:56:39 +02:00
Samantaz Fox
82ac9a8609 Preferences: Add option to control preloading of video data (#4122)
This PR adds a configuration option to control the preloading of video data on
page load with the HTML5 'preload'[1] attribute on the `<video>` element.

The option is enabled by default, meaning that the `preload` attribute's value
will be 'auto'. If users want to prevent preloading of video data, they
can disable the option, which will set the attribute value to 'none'.

[1](https://www.w3schools.com/tags/att_video_preload.asp)

Closes issue 4110
2024-10-08 17:38:06 +02:00
Hosted Weblate
3af11d800c Update English (United States) translation
Co-authored-by: Dick Groskamp <dikgro@yahoo.co.uk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-10-06 16:16:36 +02:00
Hosted Weblate
6ed872d72b Update English (United States) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lime bar <limebarartist@gmail.com>
2024-04-25 18:35:09 +02:00
Samantaz Fox
e0ce59d3e8 Channels: Add support for multi-image community posts (#4412)
This PR adds a CSS-only image carousel for community posts with more than
one image attached.

Closes issue 3522
2024-02-19 00:16:17 +01:00
Samantaz Fox
d3703baba9 I18n: Add missing translation strings (#4424)
Closes issue 3120
2024-02-19 00:15:44 +01:00
ChunkyProgrammer
ef6b766b29 Add support for multi image community posts 2024-02-15 21:45:21 -05:00
shironeko
6b33820f1f Add missing translation strings
closes #3120
2024-02-08 19:01:19 -05:00
ChunkyProgrammer
fe8b1b4cc4 Add title to toggle theme icon 2023-12-07 11:43:56 -05:00
RadoslavL
c0d75bc52f Removed <noscript> and the user preferences option 2023-10-22 13:54:35 +03:00
Ulysses Zhan
81a4f29c73 add 'Import YouTube watch history (.json)' entry to en-US.json 2023-10-16 21:46:41 -07:00
RadoslavL
5cdbc184c7 Added a previous_page_button preference option and made switching between the first page and previous page buttons possible 2023-09-30 18:36:43 +03:00
RadoslavL
4788a3b4a9 Removed unnecessary spaces 2023-09-27 11:45:02 +03:00
RadoslavL
905582db66 Added a first page button 2023-09-27 11:28:47 +03:00
Thomas Lange
bf470704a5 Add option to control preloading of video data
Fix #4110 by adding an option to control the preloading of video data on
page load. If disabled ("false"), the browser will not preload any video
data until the user explicitly hits the "Play" button.

If enabled ("true"), the default behavior will be used, which means the
browser decides how much of the video will be preloaded.
2023-09-26 22:21:12 +02:00
Samantaz Fox
70b80ce8ad I18n: Add translation strings for new feature (fr/en) 2023-07-28 08:11:15 +02:00
Samantaz Fox
c8ade5194b UI: Nicer buttons (#3763) 2023-07-16 17:36:35 +02:00
ChunkyProgrammer
f2fa3da9d2 Add support for releases and podcasts tabs 2023-07-14 16:15:20 -07:00
Samantaz Fox
080c7446c6 HTML: Use new buttons for playlists (save/delete/add videos/etc...) 2023-07-08 20:48:32 +02:00
Samantaz Fox
8d2ab70cbc User: Remove broken Google login (localized strings) 2023-06-11 16:34:59 +02:00
Gavin
c421f1f205 Merge branch 'iv-org:master' into youtube-playlist-import 2023-04-03 17:09:34 -07:00
Jarek Baran
0fe1b1ec19 download_widget: Add missing translation key 2023-03-30 12:52:03 +02:00
Samantaz Fox
8a44bd11d2 Videos: Fix 0 views and empty license field (#3557) 2023-03-20 19:15:12 +01:00
Samantaz Fox
6837e42928 Video page: add song title + remove song license on music videos (#3680) 2023-03-13 00:09:08 +01:00
Samantaz Fox
b4806e7ba9 Comments: Add support for custom emojis + member info (#3636) 2023-03-12 23:42:38 +01:00
ChunkyProgrammer
d8e23d34b6 add song title for music tracks 2023-03-07 11:38:09 -05:00
Ashirg-ch
3ddcfea8fa Update English (United States) translation 2023-02-28 20:36:14 +01:00
techmetx11
8eca5b270e Video: Fix 0 views, and empty license field 2023-02-26 14:01:08 +01:00
ChunkyProgrammer
bc5d81fe60 use string builder to create images
change member to sponsor
2023-02-19 12:46:46 -05:00
ChunkyProgrammer
76ad4e8026 show member icon, hide deleted emojis, fix non-custom emojis 2023-02-16 14:12:56 -05:00
Gavin Johnson
96344f28b4 added youtube playlist import functionality. fixes issue #2114
Signed-off-by: Gavin Johnson <gavinj1984@gmail.com>
2023-01-28 09:26:16 -08:00