Commit Graph

6009 Commits

Author SHA1 Message Date
Fijxu
867f06398b Merge pull request #5949 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2026-10-31 18:36:56 -03:00
Fijxu
118611376a Merge branch 'master' into weblate-invidious-translations 2026-10-31 18:21:21 -03:00
Fijxu
a7d760e2c8 chore: update to Crystal 1.22.2 (#6106) 2026-10-31 18:03:44 -03:00
Fijxu
a1d7429f07 chore+fix: Fix wrong filename for exported subscriptions that are not NewPipe and set correct filenames and extensions for each export
Closes https://github.com/iv-org/invidious/issues/6105
2026-10-31 17:55:10 -03:00
Fijxu
ad96695869 chore: convert Invidious::User::Export#to_invidious to a struct
Closes https://github.com/iv-org/invidious/issues/6104

Part of code cleaning of issue https://github.com/iv-org/invidious/issues/5744
2026-10-31 17:39:35 -03:00
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
9f0b4c89f7 chore: Encapsulate more functions into their own modules and improve spec files (#6046)
* chore: Encapsulate more functions into their own modules and improve specs

* update path for required .cr file in search/hastag_spec.cr

* make the linter happy

* Align PR changes with the current source code
2026-10-31 15:44:45 -03:00
dependabot[bot]
0e0732b5b2 chore(deps): bump nixpkgs from 02c087f to 3ec6363 in /nix (#6102)
Bumps [nixpkgs](https://github.com/NixOS/nixpkgs) from `02c087f` to `3ec6363`.
- [Commits](02c087f3fe...3ec636362e)

---
updated-dependencies:
- dependency-name: nixpkgs
  dependency-version: 3ec636362e1816bc2f0888fa0fa2c69f1bc9e504
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 15:37:46 -03:00
dependabot[bot]
9e94c43a47 chore(deps): bump flake-utils from 11707dc to b7a79d3 in /nix (#6086)
Bumps [flake-utils](https://github.com/numtide/flake-utils) from `11707dc` to `b7a79d3`.
- [Release notes](https://github.com/numtide/flake-utils/releases)
- [Commits](11707dc2f6...b7a79d3fea)

---
updated-dependencies:
- dependency-name: flake-utils
  dependency-version: b7a79d3fea1e214f6d668d521cecec0c01e26544
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-31 15:37:36 -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
bf3fbea466 fix: fix warnings from deprecations across Crystal versions (#6100) 2026-10-23 19:46:24 -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
Hosted Weblate
3d93e10ae8 Update Norwegian Bokmål translation
Co-authored-by: Telaneo <telaneo@users.noreply.hosted.weblate.org>
2026-10-23 21:45:16 +00:00
Hosted Weblate
02c7a0da7d Update Alemannic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ramuroN <ramon.gruenig@stud.hslu.ch>
2026-10-23 21:45:15 +00:00
Hosted Weblate
54e89a5dae Update Swedish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
2026-10-23 21:45:14 +00:00
Hosted Weblate
377d7d779e Update French translation
Update French translation

Co-authored-by: ABCraft19 <lesenfantsbergaoui@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Léo Deravine <leoDeravineContact@proton.me>
2026-10-23 21:45:14 +00:00
Hosted Weblate
6bc6db3e5e Update Indonesian translation
Update Indonesian translation

Update Indonesian translation

Update Indonesian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Steven Felix <stevenfelix505@users.noreply.hosted.weblate.org>
2026-10-23 21:45:13 +00:00
Hosted Weblate
86e26b80ec Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sergio Marques <so.boston.android@gmail.com>
2026-10-23 21:45:12 +00:00
Hosted Weblate
06b898bbea Update Catalan translation
Co-authored-by: Ecron <ecron_89@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2026-10-23 21:45:12 +00:00
Hosted Weblate
10e49bd258 Update Japanese translation
Co-authored-by: Himmel <himmel@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2026-10-23 21:45:11 +00:00
Hosted Weblate
481af4ba2e Update Ukrainian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2026-10-23 21:45:11 +00:00
Hosted Weblate
cec351ab57 Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ramuroN <ramon.gruenig@stud.hslu.ch>
2026-10-23 21:45:10 +00:00
Hosted Weblate
4f5cfd178d Update Galician translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ninjum <ninhum@gmx.com>
2026-10-23 21:45:10 +00:00
Fijxu
3d23fdccbb chore: update to Crystal 1.22.1 (#6099) 2026-10-23 18:44:57 -03:00
Fijxu
6150c01ce2 chore(deps, nix): update Crystal to 1.21 in Nix development shell 2026-10-23 18:04:49 -03:00
dependabot[bot]
3b21f78e99 chore(deps): bump nixpkgs from 151fa4e to 02c087f in /nix (#6097)
Bumps [nixpkgs](https://github.com/NixOS/nixpkgs) from `151fa4e` to `02c087f`.
- [Commits](151fa4e8dd...02c087f3fe)

---
updated-dependencies:
- dependency-name: nixpkgs
  dependency-version: 02c087f3fe673c9e317f206a627cb6b910336dbe
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-23 18:03:04 -03:00
dependabot[bot]
62d43376d8 Merge pull request #6096 from iv-org/dependabot/github_actions/crystal-lang/install-crystal-1.9.4
chore(deps): bump crystal-lang/install-crystal from 1.9.3 to 1.9.4
2026-10-23 18:02:53 -03:00
Fijxu
4a271dac20 Prepare for next release 2026-10-22 21:03:09 -03:00
Fijxu
b852c4bc40 Release v2.20261022.0 (#6093)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
v2.20261022.0
2026-10-22 19:42:56 -03:00
github-actions[bot]
af3214a165 Release v2.20261022.0 2026-10-22 03:49:08 +00:00
Alex Epelde
3c9555de30 fix: remove fake Content-Length header for non-2xx image responses (#6062)
* fix: remove Content-Length header for non-2xx image responses

it's a lie

* fix: remove check

---------

Co-authored-by: Fijxu <fijxu@nadeko.net>
2026-10-22 00:42:03 -03:00
Emilien
efcfb1ef03 fix: retry 3 times create new release script 2026-10-19 09:28:14 +02:00
Fijxu
57cc097022 chore: Add Video ID validation to imported watched videos and improve SQL query 2026-10-13 08:06:23 -03:00
Fijxu
41d044692c chore: update to Crystal 1.22.0 (#6083) 2026-10-13 06:26:10 -03:00
Fijxu
907fe54aab chore: update to ameba 1.7.0 and adapt most of the code to it (#6082)
* chore: update to ameba 1.7.0 and adapt most of the code to it

* forgot to add this to build ameba into the ./bin directory for use, as ameba does not longer offer a postinstall script

* forgot to update ameba in the shards files

* remove leftover : in rescue

* Use ameba linter action instead of installing it with shards
2026-10-13 06:14:16 -03:00
Fijxu
7286c6dea4 chore: update openssl to 3.6.5 in OCI (#6080) 2026-10-11 13:51:17 -03:00
Fijxu
b91e517c36 chore(deps): update ameba to 1.6.4 and spectator to 1.12.4 (#6047) 2026-10-11 13:17:39 -03:00
dependabot[bot]
dc1011d74e chore(deps): bump nixpkgs from 6774f7b to 151fa4e in /nix (#6078)
Bumps [nixpkgs](https://github.com/NixOS/nixpkgs) from `6774f7b` to `151fa4e`.
- [Commits](6774f7bc25...151fa4e8dd)

---
updated-dependencies:
- dependency-name: nixpkgs
  dependency-version: 151fa4e8ddfdd8dd25d945ad94ed54a13de9f6e4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 12:51:17 -03:00
dependabot[bot]
20bcaa0e1d chore(deps): bump crystal-lang/install-crystal from 1.9.2 to 1.9.3 (#6077)
Bumps [crystal-lang/install-crystal](https://github.com/crystal-lang/install-crystal) from 1.9.2 to 1.9.3.
- [Release notes](https://github.com/crystal-lang/install-crystal/releases)
- [Commits](https://github.com/crystal-lang/install-crystal/compare/v1.9.2...v1.9.3)

---
updated-dependencies:
- dependency-name: crystal-lang/install-crystal
  dependency-version: 1.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-11 12:51:03 -03:00
dependabot[bot]
381c6e8c92 chore(deps): bump nixpkgs from dc5d91f to 6774f7b in /nix (#6064)
Bumps [nixpkgs](https://github.com/NixOS/nixpkgs) from `dc5d91f` to `6774f7b`.
- [Commits](dc5d91f840...6774f7bc25)

---
updated-dependencies:
- dependency-name: nixpkgs
  dependency-version: 6774f7bc253789b113a4f39285dc0fa100abeacc
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-30 20:14:26 -03:00
Fijxu
1454eada06 chore: Use full URL for mocks git submodule (#6066)
When working on Invidious forks that are not iv-org/invidious, the git
submodule will try to be fetched from the user fork instead of
`iv-org/mocks`, so it's better to use a full URL instead.
2026-09-30 17:20:46 -03:00
Fijxu
c88230067b fix: Also add User-Agent for ytimg.com requests (#6038)
* fix: Also add User-Agent for ytimg.com requests, excluding youtube cookies

* strictly match only youtube.com and ytimg.com subdomains
2026-09-16 00:28:31 -03:00
dependabot[bot]
3012b9c0e3 chore(deps): bump nixpkgs from 34ab990 to dc5d91f in /nix (#6028)
Bumps [nixpkgs](https://github.com/NixOS/nixpkgs) from `34ab990` to `dc5d91f`.
- [Commits](34ab99075a...dc5d91f840)

---
updated-dependencies:
- dependency-name: nixpkgs
  dependency-version: dc5d91f840324650bac8c379428c7037a416959a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-16 00:24:40 -03:00
Fijxu
248c315b4e chore: update openssl to 3.6.4 in OCI 2026-09-15 18:04:56 -03:00
Fijxu
e4ad826f1f chore: lint and remove unused variables 2026-09-14 23:38:43 -03:00
Fijxu
9f8bc9e2c4 chore(ameba): Do not exclude /api routes from Lint/UselessAssign (#5900) 2026-09-14 23:07:37 -03:00
Fijxu
b052ced0b4 feat: show message for unsupported Crystal versions at compile time (#5909)
Show a nice message for unsupported versions of the Crystal compiler, encouraging the user compiling Invidious, to update it's Crystal compiler version.
2026-09-14 23:07:10 -03:00
Fijxu
47756e0d1e chore: Update headers sent to innertube in JSON requests (#6040)
* chore: Update headers sent to innertube in JSON requests

* it should be a String, not a Bool
2026-09-14 23:05:07 -03:00
Fijxu
f3e6d6d84e feat: sanity check video IDs with regex (#6037)
* feat: sanity check video IDs with regex

* Return 400 instead

* fix wrong function

* add coderabbit suggestion about PCRE2 regex and length of the string with a new line

* Use validate_video_id on more places

* Add video id validation to /watch route.
2026-09-14 23:04:25 -03:00