Richard Lora
669c685d5e
Merge branch 'master' into optional-disable-api-features
2026-05-23 21:12:32 -04:00
Richard Lora
2782facc94
fix(extractors): skip lockupViewModel items missing collectionThumbnailViewModel
...
YouTube changed the thumbnail structure for some collection/playlist items.
Use dig? and return nil to skip unparseable items instead of crashing.
2026-05-24 01:03:32 +00:00
Richard Lora
5ad8fcfc4d
fix(before_all): avoid double-write on halted responses to prevent HTTP/2 corruption
...
Store response body in env instead of writing directly; let halt() do the single
write+close in the before_all block, eliminating Closed stream errors and
ERR_HTTP2_PROTOCOL_ERROR on subsequent requests (e.g. /login).
2026-05-23 22:21:18 +00:00
Richard Lora
623f715a8c
fix: replace bare translate() with I18n.translate() in ECR templates and routes
2026-05-23 20:48:51 +00:00
Richard Lora
3ab75a1ab3
fix(search_box): use I18n.translate instead of bare translate in ECR template
2026-05-23 18:30:37 +00:00
Richard Lora
1dd549fd4b
fix(before_all): use I18n.translate for page_disabled error messages
2026-05-23 18:24:04 +00:00
Fijxu
99390d065d
fix: fix Missing hash key: "collectionThumbnailViewModel" for channel video thumbnails ( #5725 )
...
Now the Innertube structure doesn't include `collectionThumbnailViewModel`
and `primaryThumbnail` keys.
Now the structure looks like this:
```
"horizontalListRenderer": {
"items": [
{
"lockupViewModel": {
"contentImage": {
"thumbnailViewModel": {
"image": {
"sources": []
...
```
Fixes: https://github.com/iv-org/invidious/issues/5516
2026-05-20 21:36:50 -04:00
dependabot[bot]
e82ac674ae
chore(deps): bump int128/docker-manifest-create-action ( #5721 )
...
Bumps [int128/docker-manifest-create-action](https://github.com/int128/docker-manifest-create-action ) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/int128/docker-manifest-create-action/releases )
- [Commits](https://github.com/int128/docker-manifest-create-action/compare/v2.20.0...v2.21.0 )
---
updated-dependencies:
- dependency-name: int128/docker-manifest-create-action
dependency-version: 2.21.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-19 14:08:06 -04:00
Fijxu
103f80e617
CI: update Crystal 1.20.1 to 1.20.2 in ci.yml matrix
2026-05-17 16:59:49 -04:00
Fijxu
9ee39bc437
chore: update Crystal to 1.20.2 in OCI
2026-05-17 16:58:36 -04:00
Fijxu
529fc8a8a3
fix: restore referrerpolicy for embed youtube link that got removed in commit bc64cd9
2026-05-12 23:13:37 -04:00
Fijxu
b4728b81dc
chore: update openssl to 3.6.2 in OCI ( #5701 )
2026-05-12 15:28:41 -04:00
Richard Lora
ed87890e85
Merge branch 'master' into optional-disable-api-features
2026-05-10 19:36:20 -04:00
dependabot[bot]
f914ce8040
Bump int128/docker-manifest-create-action from 2.19.0 to 2.20.0 ( #5705 )
...
Bumps [int128/docker-manifest-create-action](https://github.com/int128/docker-manifest-create-action ) from 2.19.0 to 2.20.0.
- [Release notes](https://github.com/int128/docker-manifest-create-action/releases )
- [Commits](https://github.com/int128/docker-manifest-create-action/compare/v2.19.0...v2.20.0 )
---
updated-dependencies:
- dependency-name: int128/docker-manifest-create-action
dependency-version: 2.20.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-05 09:31:29 -04:00
Fijxu
57ba257233
CI: Unify ARM64 and AMD64 Dockerfiles ( #5700 )
...
* CI: Unify ARM64 and AMD64 Dockerfiles
* chore: remove replacement of Dockerfile in docker-compose.yml for ci.yml build-docker job
* Combine images into manifest list
* fix wrong tag for nightly container release
* forgot this ^^'
2026-05-04 14:59:24 -04:00
Fijxu
e012334975
chore: update Crystal to 1.20.1 in OCI
2026-05-01 14:12:15 -04:00
Fijxu
85a078a580
CI: update Crystal 1.20.0 to 1.20.1 in ci.yml matrix ( #5703 )
2026-04-30 13:18:49 -04:00
Fijxu
afea61bb8f
CI: display progress and stats when compiling Invidious in ci.yml matrix ( #5696 )
2026-04-28 06:42:45 -04:00
Fijxu
fd313e0107
CI: Bump Crystal version matrix ( #5691 )
...
* CI: Bump Crystal version matrix
Add Crystal 1.19.2 and 1.20.0
* update crystal 1.19.1 to 1.19.2
2026-04-27 20:15:11 -04:00
Fijxu
0c600988ca
chore: update Crystal to 1.20.0 in OCI ( #5692 )
...
* chore: update Crystal to 1.20.0 in amd64 OCI
* use alpine:edge with crystal 1.20.0 to build Invidious, use alpine:3.23 for final layer
2026-04-27 20:11:51 -04:00
Cameron Radmore
264e7c24e9
player: Use correct time parameter for YouTube embed redirects ( #5660 )
2026-04-26 14:02:11 -04:00
Fijxu
9eda6e5bc4
chore: lint api/v1/channels.cr ( #5693 )
2026-04-25 16:57:45 -04:00
Fijxu
73c749f13f
Encapsulate helpers constants and functions inside it's own Helpers module ( #5639 )
...
It encapsulates all related code from helpers.cr into it's own module.
2026-04-25 16:57:33 -04:00
Fijxu
bc64cd9b67
Encapsulate translation constants and functions inside it's own module ( #5637 )
...
It encapsulates all related code from translation into it's own module.
Required for the migration to the crystal stdlib logger: https://github.com/iv-org/invidious/pull/5426
2026-04-25 16:55:55 -04:00
dependabot[bot]
54365c0e2a
Bump crystal-lang/install-crystal from 1.9.1 to 1.9.2 ( #5686 )
...
Bumps [crystal-lang/install-crystal](https://github.com/crystal-lang/install-crystal ) from 1.9.1 to 1.9.2.
- [Release notes](https://github.com/crystal-lang/install-crystal/releases )
- [Commits](https://github.com/crystal-lang/install-crystal/compare/v1.9.1...v1.9.2 )
---
updated-dependencies:
- dependency-name: crystal-lang/install-crystal
dependency-version: 1.9.2
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-04-14 01:11:37 +02:00
ChunkyProgrammer
606467c693
Playlists: fix parsing error when some videos are paid for in a course ( #5207 )
...
* Playlists: fix parsing error when some videos are paid for in a course
* Remove redundant casting to string
fix rebase error
Co-Authored-By: syeopite <70992037+syeopite@users.noreply.github.com>
* Fix rebase issues
---------
Co-authored-by: syeopite <70992037+syeopite@users.noreply.github.com>
2026-04-09 14:52:03 +02:00
NorkzYT
7ca2bbd768
fix(before_all): halt response after rendering disabled page error
...
The return from before_all did not stop the route handler from
executing. The trending/popular/hashtag routes still ran and
overwrote the 403 response. Now set a halted flag and use Kemal
halt in the before_all block to prevent route handler execution.
Error page now renders with the full Invidious theme (dark mode,
navbar, CSS) matching the rest of the UI.
2026-03-23 01:59:38 +00:00
NorkzYT
8cd5f0f652
fix(search_homepage): center subscription hint text under search bar
2026-03-23 00:16:45 +00:00
NorkzYT
58ced289d3
fix(playlists): prevent duplicate videos in the same playlist
...
Check if the video already exists in the playlist before inserting.
Uses the existing select_index() query. Returns 409 via the API and
silently redirects back on the web UI.
Applied to both the web route (playlist_ajax) and the API v1 route
(POST /api/v1/auth/playlists/:plid/videos).
2026-03-23 00:11:25 +00:00
NorkzYT
0eb941f498
feat(search): subscription-only search mode when YouTube search is disabled
...
When pages_enabled.search is false, instead of blocking search entirely,
the search bar now searches within the user's subscriptions and saved
playlists only. YouTube's search API is never called.
Changes:
- routes/search.cr: detect search_disabled, force subscription+playlist
search for logged-in users, 403 for anonymous users
- search/processors.cr: new subscriptions_and_playlists() method that
queries both the subscription materialized view and playlist_videos
table, merges and deduplicates results
- before_all.cr: let /search through to the route handler (APIs still
blocked), keep /hashtag/* blocked
- search_box.ecr: dynamic placeholder ("Search subscriptions & playlists")
- search_homepage.ecr: hint text when in subscription-only mode
- search.ecr: hide YouTube filters, show lock icon + notice, custom
empty-results message
- template.ecr: always show search bar (subscription search needs it)
- en-US.json: 6 new locale strings for subscription-only search UX
2026-03-22 22:27:17 +00:00
NorkzYT
562389bc6d
fix(pages_enabled): hide search UI and block all search routes when disabled
...
- Hide navbar search box when CONFIG.page_enabled?("search") is false
- Keep Invidious logo visible with proper width when search bar is hidden
- Hide search widget on search_homepage when search is disabled
- Block /results, /api/v1/search/suggestions in before_all guard
- Block /hashtag/* and /api/v1/hashtag/* when search is disabled
2026-03-22 21:42:11 +00:00
NorkzYT
ea36b2ba4b
fix(preferences): unchecked pages_enabled checkboxes now persist correctly
...
HTML checkboxes send no value when unchecked, so the fallback
"|| \"on\"" always re-enabled popular/trending/search on save.
Changed default to "off" to match the pattern used by captcha_enabled,
login_enabled, and other checkbox toggles in the same handler.
2026-03-22 21:10:55 +00:00
dependabot[bot]
749791cdf1
Bump docker/login-action from 3 to 4 ( #5661 )
...
Bumps [docker/login-action](https://github.com/docker/login-action ) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases )
- [Commits](https://github.com/docker/login-action/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: docker/login-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 09:59:52 +01:00
dependabot[bot]
d7361cbb9a
Bump docker/build-push-action from 6 to 7 ( #5662 )
...
Bumps [docker/build-push-action](https://github.com/docker/build-push-action ) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases )
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7 )
---
updated-dependencies:
- dependency-name: docker/build-push-action
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 09:59:44 +01:00
dependabot[bot]
f07c9a7209
Bump docker/metadata-action from 5 to 6 ( #5663 )
...
Bumps [docker/metadata-action](https://github.com/docker/metadata-action ) from 5 to 6.
- [Release notes](https://github.com/docker/metadata-action/releases )
- [Commits](https://github.com/docker/metadata-action/compare/v5...v6 )
---
updated-dependencies:
- dependency-name: docker/metadata-action
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 09:59:34 +01:00
dependabot[bot]
cf9b6c4fcb
Bump docker/setup-buildx-action from 3 to 4 ( #5664 )
...
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action ) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases )
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 09:59:26 +01:00
Richard Lora
bd6dd9cb55
feat: add search_page_disabled locale + preferences page filtering + debug config route
...
- Fix kemal_static_file_handler directory_listing to use Path types (Crystal API compat)
- Add missing search_page_disabled translation key to en-US.json
- Filter preferences default_home options based on pages_enabled config
- Add admin-only /debug_config route for verifying configuration state
2026-02-28 19:01:35 -05:00
Richard Lora
2933c7e2f4
Merge branch 'master' into optional-disable-api-features
2026-02-28 18:48:26 -05:00
Ashley :3
21d0d1041a
Remove noreferrer since youtube now requires referrers on embeds ( #5642 )
...
* Remove noreferer since youtube now requires referers on embeds
* Update src/invidious/views/watch.ecr
---------
Co-authored-by: Fijxu <fijxu@nadeko.net>
2026-02-23 21:36:12 -03:00
Fijxu
fda8d1b528
Remove trailing whitespaces from codebase ( #5634 )
...
Removes trailing whitespaces found across the codebase using `find . -type f -exec grep -lE ' +$' {} +`
[skip ci]
2026-02-19 14:28:22 -03:00
Jeroen Boersma
e7f8b15b21
Add title listen button time updates ( #5625 )
...
When switching between Listen and Watching the timestamp in the url of
the listen of watch button is now updated automatically.
This means if you switch between listening and viewing you keep in sync
with time.
2026-02-16 16:39:44 -03:00
Fijxu
60c31e3069
Remove sort by rating and date in video search filters ( #5629 )
...
* Remove sort by rating and date in video search filters
Closes https://github.com/iv-org/invidious/issues/5626
* Remove check of protobug generation of rating and date sort filters in Invidious spec
2026-02-16 14:06:06 -03:00
Emilien
11db343cfb
Prepare for next release
2026-02-07 22:10:11 +01:00
Émilien (perso)
118d635650
Release v2.20260207.0 ( #5621 )
...
* Release v2.20260207.0
* Fix release notes for Crystal/OpenSSL
* fix comment about pr #5566 , #5338
Co-authored-by: Fijxu <fijxu@nadeko.net>
* fix comment about memory leaks
Co-authored-by: Fijxu <fijxu@nadeko.net>
* Clarify release notes for proxy header stripping
---------
Co-authored-by: Fijxu <fijxu@nadeko.net>
v2.20260207.0
2026-02-07 21:47:19 +01:00
Fijxu
29c29f7c8d
Update src/invidious/routes/routes.cr
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-06 18:50:36 +01:00
Fijxu
067a426235
refactor: Move top level constants to it's own modules
2026-02-06 18:50:36 +01:00
Samantaz Fox
ffd9f4b112
pages/watch: HTML escape 'action' in download widget
...
Caught in the review of PR 5224, but forgot to click on "send review" in time.
I realized that too late, after the PR was already merged.
2026-02-06 18:44:37 +01:00
Fijxu
cc7cb94095
Document use of unix sockets for db
2026-02-06 18:39:53 +01:00
Fijxu
0ee92e3298
Update src/invidious/routes/before_all.cr
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-06 18:35:20 +01:00
Fijxu
a3a97ccf07
Only generate companion CSP one time to reuse it
2026-02-06 18:35:20 +01:00