From 181e3ebea8e5a697f7b75f9e30225ff5b80ef21f Mon Sep 17 00:00:00 2001 From: Priveetee Date: Sat, 18 Jul 2026 19:47:00 +0200 Subject: [PATCH 1/4] fix: share YouTube egress across services --- .env.example | 1 + docker-compose.dev.yml | 2 ++ docker-compose.yml | 2 ++ 3 files changed, 5 insertions(+) diff --git a/.env.example b/.env.example index ca997ce..3643204 100644 --- a/.env.example +++ b/.env.example @@ -33,6 +33,7 @@ DOWNLOADER_S3_ACCESS_KEY=SET_ME_ACCESS_KEY DOWNLOADER_S3_SECRET_KEY=SET_ME_SECRET_KEY GARAGE_RPC_SECRET=SET_ME_GARAGE_RPC_SECRET YOUTUBE_REMOTE_LOGIN_ENABLED=false +YOUTUBE_OUTBOUND_PROXY_URL= YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN=SET_ME_YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN YOUTUBE_SESSION_ENCRYPTION_KEY=SET_ME_YOUTUBE_SESSION_ENCRYPTION_KEY YOUTUBE_REMOTE_LOGIN_CALLBACK_ORIGIN=http://typetype-server:8080 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index eda5c76..68df035 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -21,6 +21,7 @@ services: DATABASE_PASSWORD: ${DATABASE_PASSWORD:-${POSTGRES_PASSWORD:-typetype}} DRAGONFLY_URL: ${DRAGONFLY_URL:-redis://dragonfly:6379} DOWNLOADER_SERVICE_URL: http://typetype-downloader:18093 + YOUTUBE_OUTBOUND_PROXY_URL: ${YOUTUBE_OUTBOUND_PROXY_URL:-} YOUTUBE_REMOTE_LOGIN_ENABLED: ${YOUTUBE_REMOTE_LOGIN_ENABLED:-false} YOUTUBE_REMOTE_LOGIN_SERVICE_URL: http://typetype-token:8081 YOUTUBE_REMOTE_LOGIN_CALLBACK_BASE_URL: http://typetype-server:8080 @@ -89,6 +90,7 @@ services: ipc: host environment: NODE_ENV: production + YOUTUBE_OUTBOUND_PROXY_URL: ${YOUTUBE_OUTBOUND_PROXY_URL:-} YOUTUBE_REMOTE_LOGIN_ENABLED: ${YOUTUBE_REMOTE_LOGIN_ENABLED:-false} YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN: ${YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN:-} YOUTUBE_REMOTE_LOGIN_CALLBACK_ORIGIN: ${YOUTUBE_REMOTE_LOGIN_CALLBACK_ORIGIN:-http://typetype-server:8080} diff --git a/docker-compose.yml b/docker-compose.yml index d6f6990..5437e99 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,6 +22,7 @@ services: GITHUB_REPO: ${GITHUB_REPO:-TypeType-Video/TypeType} GITHUB_ISSUE_TEMPLATE: ${GITHUB_ISSUE_TEMPLATE:-bug_report_backend.md} DOWNLOADER_SERVICE_URL: http://typetype-downloader:18093 + YOUTUBE_OUTBOUND_PROXY_URL: ${YOUTUBE_OUTBOUND_PROXY_URL:-} YOUTUBE_REMOTE_LOGIN_ENABLED: ${YOUTUBE_REMOTE_LOGIN_ENABLED:-true} YOUTUBE_REMOTE_LOGIN_SERVICE_URL: http://typetype-token:8081 YOUTUBE_REMOTE_LOGIN_CALLBACK_BASE_URL: http://typetype-server:8080 @@ -123,6 +124,7 @@ services: ipc: host environment: NODE_ENV: production + YOUTUBE_OUTBOUND_PROXY_URL: ${YOUTUBE_OUTBOUND_PROXY_URL:-} YOUTUBE_REMOTE_LOGIN_ENABLED: ${YOUTUBE_REMOTE_LOGIN_ENABLED:-true} YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN: ${YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN:-} YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN_FILE: /run/typetype-secrets/youtube_remote_login_internal_token From 5339a7145360bc7bbc6a81c6f61588c46ba2da6b Mon Sep 17 00:00:00 2001 From: Priveetee Date: Sun, 19 Jul 2026 15:47:29 +0200 Subject: [PATCH 2/4] docs: prepare TypeType 1.1.0 release notes --- RELEASE_NOTES.md | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 4d8fdde..70b2e96 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,19 +1,31 @@ -# TypeType 1.0.4 +# TypeType 1.1.0 -TypeType 1.0.4 is a hotfix for YouTube SABR playback. It restores playback for -on-demand videos whose initialization segments were not returned during session -startup. +TypeType 1.1.0 adds native YouTube livestream playback over SABR, an +embeddable player, and several library and availability improvements. ## What changed -- Restore the SABR cold-start request state used to fetch audio and video - initialization segments. -- Prevent affected playback sessions from repeatedly restarting before the - browser can initialize its MediaSource buffers. -- Preserve the existing playback API, stream selection and self-hosting - configuration. +- Play YouTube livestreams through stateful SABR with live-edge following, + DVR seeking, quality changes, and playback recovery. +- Add an embed route with start-time parameters, guest access control, and a + manual retry action. +- Add Watch Later directly to video menus. +- Improve imported playlist loading, ordering, duplicate handling, and deleted + video filtering. +- Show scheduled, members-only, and unavailable states on video cards, and + keep active livestreams visible in the subscription feed. +- Recover automatically when YouTube expires the player context used for SABR + admission. +- Allow the Server and Token services to share the optional + `YOUTUBE_OUTBOUND_PROXY_URL` setting. -No database migration or environment change is required. +No database migration is required. The new proxy setting is optional and +existing configurations remain valid. + +## Thanks + +Thanks to @tam1m for contributing the embed player, and to everyone who +reported and tested the changes in this release. ## Updating From f7078d398733aae9521ec312918cb75e837e1899 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Sun, 19 Jul 2026 16:44:40 +0200 Subject: [PATCH 3/4] docs: clarify live playback scope --- RELEASE_NOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 70b2e96..ffe31b8 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -6,7 +6,7 @@ embeddable player, and several library and availability improvements. ## What changed - Play YouTube livestreams through stateful SABR with live-edge following, - DVR seeking, quality changes, and playback recovery. + DVR seeking, and playback recovery. - Add an embed route with start-time parameters, guest access control, and a manual retry action. - Add Watch Later directly to video menus. From c01b3939a175bb20feafad5deff9c9c248c9f90c Mon Sep 17 00:00:00 2001 From: Priveetee Date: Sun, 19 Jul 2026 17:22:00 +0200 Subject: [PATCH 4/4] chore: update component release pins --- Docs-TypeType | 2 +- TypeType-Downloader | 2 +- TypeType-Frontend | 2 +- TypeType-Player | 2 +- TypeType-Server | 2 +- TypeType-Token | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Docs-TypeType b/Docs-TypeType index a69d6f7..d50f45e 160000 --- a/Docs-TypeType +++ b/Docs-TypeType @@ -1 +1 @@ -Subproject commit a69d6f7d6c16a4d59d0693075457592a0040eecc +Subproject commit d50f45e841b5cd657305c97f20a96d9f69cd24c0 diff --git a/TypeType-Downloader b/TypeType-Downloader index f82abf3..7763ee1 160000 --- a/TypeType-Downloader +++ b/TypeType-Downloader @@ -1 +1 @@ -Subproject commit f82abf3947911aad67f57e0a0bd52e114c2c8375 +Subproject commit 7763ee165333a0132a59ec25b4548a4b9084bb16 diff --git a/TypeType-Frontend b/TypeType-Frontend index 3e9f3cb..0dfd90a 160000 --- a/TypeType-Frontend +++ b/TypeType-Frontend @@ -1 +1 @@ -Subproject commit 3e9f3cb70ea376c2f4eafffb210678964e37f75a +Subproject commit 0dfd90a5c8acb60b5c0a6d13409af314117d8bfd diff --git a/TypeType-Player b/TypeType-Player index 5b8fdc8..7a0b1c2 160000 --- a/TypeType-Player +++ b/TypeType-Player @@ -1 +1 @@ -Subproject commit 5b8fdc84c552bc85b5c2804bf58b32f46b333437 +Subproject commit 7a0b1c23fb7790682e233f1ff0295cbd6af2cad8 diff --git a/TypeType-Server b/TypeType-Server index 232fa28..dd16b3b 160000 --- a/TypeType-Server +++ b/TypeType-Server @@ -1 +1 @@ -Subproject commit 232fa28d2f88d069328c299e5074c4142bb8c165 +Subproject commit dd16b3b1379c94d738f5cd129664a94479ffe49c diff --git a/TypeType-Token b/TypeType-Token index 6795a61..8b820fe 160000 --- a/TypeType-Token +++ b/TypeType-Token @@ -1 +1 @@ -Subproject commit 6795a612822f9b18a8f11e789126382636cfea20 +Subproject commit 8b820febe6ecdb9426dc6c64c1b606acca3cdf9a