From d97ddf6b8e211e85dac0d6ab71771926d7b35cee Mon Sep 17 00:00:00 2001 From: Priveetee Date: Mon, 31 Aug 2026 14:19:48 +0200 Subject: [PATCH 1/7] ci: route workflows to R730 runners --- .github/workflows/ci.yml | 2 +- .github/workflows/component-image.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 218a117..0a38d01 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: validate-trusted: if: github.event_name != 'pull_request' - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] steps: - uses: actions/checkout@v7.0.1 with: diff --git a/.github/workflows/component-image.yml b/.github/workflows/component-image.yml index a9b052e..0952fa6 100644 --- a/.github/workflows/component-image.yml +++ b/.github/workflows/component-image.yml @@ -17,7 +17,7 @@ concurrency: jobs: validate: - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] outputs: channel: ${{ steps.payload.outputs.channel }} component: ${{ steps.payload.outputs.component }} @@ -100,7 +100,7 @@ jobs: deploy-beta: needs: validate if: needs.validate.outputs.channel == 'beta' - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] environment: beta steps: - name: Validate deployment configuration @@ -144,6 +144,6 @@ jobs: record-stable: needs: validate if: needs.validate.outputs.channel == 'stable' - runs-on: [self-hosted, Linux, X64, arko, typetype] + runs-on: [self-hosted, Linux, X64, r730, typetype] steps: - run: echo "Stable image recorded; no deployment was started." From b2403119d0b8e2d541f348692ebd18b8834537e9 Mon Sep 17 00:00:00 2001 From: Tax_Tux <138765817+Priveetee@users.noreply.github.com> Date: Mon, 31 Aug 2026 21:31:01 +0200 Subject: [PATCH 2/7] chore: benchmark dev runners From 02372b3b93f35c35b65867544f647b2fb224cdca Mon Sep 17 00:00:00 2001 From: Priveetee Date: Thu, 3 Sep 2026 12:00:11 +0200 Subject: [PATCH 3/7] fix: enable YouTube remote login in beta rollouts --- scripts/deploy-beta.sh | 15 +++++++++++---- scripts/deploy-beta.test.sh | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/scripts/deploy-beta.sh b/scripts/deploy-beta.sh index d0eb761..1ff6163 100755 --- a/scripts/deploy-beta.sh +++ b/scripts/deploy-beta.sh @@ -103,12 +103,14 @@ services=( garage ) -docker compose --project-directory "$root" --env-file "$root/.env" \ +proxy_url=$(awk -F= '$1 == "YOUTUBE_OUTBOUND_PROXY_URL" { value = substr($0, index($0, "=") + 1) } END { print value }' "$root/.env") +if [[ -z "$proxy_url" ]]; then + proxy_url=http://172.20.0.1:29080 +fi +YOUTUBE_OUTBOUND_PROXY_URL="$proxy_url" docker compose \ + --project-directory "$root" --env-file "$root/.env" \ -f "$source_root/docker-compose.dev.yml" config -q if [[ "$component" == all ]]; then - proxy_url=$(docker compose --project-directory "$root" --env-file "$root/.env" \ - -f "$source_root/docker-compose.dev.yml" config --environment \ - | sed -n 's/^YOUTUBE_OUTBOUND_PROXY_URL=//p') "$source_root/scripts/check-youtube-egress.sh" "$project" "$proxy_url" fi rollback_root="$root/.deploy-rollbacks" @@ -177,6 +179,11 @@ finish() { } trap finish EXIT +set_env_value "YOUTUBE_OUTBOUND_PROXY_URL" "$proxy_url" +if [[ "$component" == token || "$component" == server || "$component" == all ]]; then + set_env_value "YOUTUBE_REMOTE_LOGIN_ENABLED" "true" +fi + prune_unused_typetype_images install -m 644 "$source_root/.env.example" "$root/.env.example" diff --git a/scripts/deploy-beta.test.sh b/scripts/deploy-beta.test.sh index 21c7ae4..8a1ef07 100755 --- a/scripts/deploy-beta.test.sh +++ b/scripts/deploy-beta.test.sh @@ -103,6 +103,8 @@ if ! grep -Fq "TYPETYPE_SERVER_BETA_IMAGE=ghcr.io/typetype-video/typetype-server sed -n '/^TYPETYPE_.*_IMAGE=/p' "$stack/.env" >&2 exit 1 fi +grep -Fxq 'YOUTUBE_OUTBOUND_PROXY_URL=http://172.20.0.1:29080' "$stack/.env" +grep -Fxq 'YOUTUBE_REMOTE_LOGIN_ENABLED=true' "$stack/.env" if ! grep -Fq 'pull typetype-server' "$FAKE_DOCKER_LOG"; then echo "the server rollout did not pull only the server image" >&2 cat "$FAKE_DOCKER_LOG" >&2 From bc46270cd8b50ddc962cb5bf135653d1917b11cc Mon Sep 17 00:00:00 2001 From: Priveetee Date: Fri, 4 Sep 2026 13:34:55 +0200 Subject: [PATCH 4/7] fix: allow beta YouTube direct egress --- docker-compose.dev.yml | 4 ++-- scripts/check-youtube-egress.sh | 2 +- scripts/deploy-beta.sh | 3 --- scripts/validate-stack.sh | 9 +++------ 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 8bed84d..5b0fe25 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -26,7 +26,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_OUTBOUND_PROXY_URL is required} + 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 @@ -95,7 +95,7 @@ services: ipc: host environment: NODE_ENV: production - YOUTUBE_OUTBOUND_PROXY_URL: ${YOUTUBE_OUTBOUND_PROXY_URL:?YOUTUBE_OUTBOUND_PROXY_URL is required} + 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/scripts/check-youtube-egress.sh b/scripts/check-youtube-egress.sh index 86569e3..2963599 100755 --- a/scripts/check-youtube-egress.sh +++ b/scripts/check-youtube-egress.sh @@ -2,7 +2,7 @@ set -euo pipefail project="${1:?Compose project is required}" -proxy_url="${2:?YouTube outbound proxy URL is required}" +proxy_url="${2-}" anchor=$(docker ps -q \ --filter "label=com.docker.compose.project=${project}" | head -n 1) if [[ -z "$anchor" ]]; then diff --git a/scripts/deploy-beta.sh b/scripts/deploy-beta.sh index 1ff6163..efabe5a 100755 --- a/scripts/deploy-beta.sh +++ b/scripts/deploy-beta.sh @@ -104,9 +104,6 @@ services=( ) proxy_url=$(awk -F= '$1 == "YOUTUBE_OUTBOUND_PROXY_URL" { value = substr($0, index($0, "=") + 1) } END { print value }' "$root/.env") -if [[ -z "$proxy_url" ]]; then - proxy_url=http://172.20.0.1:29080 -fi YOUTUBE_OUTBOUND_PROXY_URL="$proxy_url" docker compose \ --project-directory "$root" --env-file "$root/.env" \ -f "$source_root/docker-compose.dev.yml" config -q diff --git a/scripts/validate-stack.sh b/scripts/validate-stack.sh index 58ca3db..85dd5be 100755 --- a/scripts/validate-stack.sh +++ b/scripts/validate-stack.sh @@ -24,10 +24,7 @@ done docker compose --env-file .env.example -f docker-compose.yml config -q docker compose --env-file .env.example -f docker-compose.yml -f docker-compose.arm64.yml config -q -if docker compose --env-file .env.example -f docker-compose.dev.yml config -q 2>/dev/null; then - echo "beta Compose must reject a missing outbound proxy" >&2 - exit 1 -fi +docker compose --env-file .env.example -f docker-compose.dev.yml config -q YOUTUBE_OUTBOUND_PROXY_URL=http://127.0.0.1:29083 \ docker compose --env-file .env.example -f docker-compose.dev.yml config -q @@ -50,8 +47,8 @@ if grep -q 'youtube-egress-relay' <<<"$dev_config"; then echo "beta Compose must use the externally validated egress proxy" >&2 exit 1 fi -if [[ $(grep -c 'YOUTUBE_OUTBOUND_PROXY_URL: http://127.0.0.1:29083' <<<"$dev_config") -ne 2 ]]; then - echo "beta Server and Token must share the configured outbound proxy" >&2 +if [[ $(grep -c 'YOUTUBE_OUTBOUND_PROXY_URL:' <<<"$dev_config") -ne 2 ]]; then + echo "beta Server and Token must expose the shared outbound proxy setting" >&2 exit 1 fi for config in "$stable_config" "$dev_config"; do From 5162f9f8714eb900cf581015f9df9ee2885e0df1 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Mon, 7 Sep 2026 15:06:38 +0200 Subject: [PATCH 5/7] feat: prepare TypeType 1.8.0 release --- Docs-TypeType | 2 +- RELEASE_NOTES.md | 112 ++++++++++++++++++++++++++++------------------ TypeType-Frontend | 2 +- TypeType-Player | 2 +- TypeType-Server | 2 +- TypeType-Token | 2 +- 6 files changed, 74 insertions(+), 48 deletions(-) diff --git a/Docs-TypeType b/Docs-TypeType index 4aaaa73..e8183d0 160000 --- a/Docs-TypeType +++ b/Docs-TypeType @@ -1 +1 @@ -Subproject commit 4aaaa738418f39019d06cc194d013725f951bff1 +Subproject commit e8183d0dc1227737b9c191167f9d4a3195543cf9 diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f65e4d1..12f68a4 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,74 +1,100 @@ -# TypeType 1.6.0 +# TypeType 1.8.0 -TypeType 1.6.0 improves web playback, connected YouTube accounts, subscription feeds, downloads, authentication and notifications. +TypeType 1.8.0 improves playback reliability, the watch experience, +account portability, sharing and localization. ## Playback -- Resume playback after returning to a suspended browser tab instead of stopping or restarting from the beginning. [#219](https://github.com/TypeType-Video/TypeType/issues/219) -- Stop replaying the current video when autoplay is disabled. [#224](https://github.com/TypeType-Video/TypeType/issues/224) -- Show the correct resolution and codec labels in the quality selector. [#227](https://github.com/TypeType-Video/TypeType/issues/227) -- Preserve the exact playback position when changing video quality instead of jumping backward. [#229](https://github.com/TypeType-Video/TypeType/issues/229) -- Preserve saved progress through MSE source transitions and expire stale cached positions before resume. -- Keep Safari playback transitions bounded when autoplay permission or user activation has expired. +- Recover stalled SABR segment requests instead of leaving playback stuck. +- Preserve the exact playback position across WebKit provider changes. +- Isolate WebKit seeks to prevent stale media state. +- Improve paused Firefox seeks by filling the playback buffer first. +- Synchronize compact player controls after seeking. +- Reduce playback regressions when switching or recovering media sources. +- Update TypeType-Player to MSE `0.1.59`. +- Keep BiliBili stream extraction compatible with the fixes introduced in 1.7.3. -## YouTube Accounts +## Floating Watch Player -- Preserve the selected connected YouTube account through SABR preparation, token refresh and playback recovery. -- Bind the YouTube player and media tokens to the same selected account. -- Guide content requiring authentication to the YouTube account connection flow. -- Add an option to hide members-only videos. [#225](https://github.com/TypeType-Video/TypeType/issues/225) +- Keep the current video visible while scrolling through the page. +- Add a draggable floating player. +- Persist the floating player position and state across navigation. +- Keep the compact player usable on mobile. +- Disable the floating player in landscape layouts where it would obstruct content. +- Keep the player stable when related videos are displayed. -## Subscription Feeds +## Sharing -- Correctly classify scheduled, active and finished live streams when applying the live visibility setting. [#213](https://github.com/TypeType-Video/TypeType/issues/213) -- Preserve the original ordering of scheduled live streams instead of continually promoting them. -- Remove finished or stale live entries from subscription feeds. +- Add a compact share menu anchored to the share button. +- Show the destination name next to each share icon. +- Add direct links to the original provider. +- Normalize YouTube Shorts share links. +- Improve the share menu layout on desktop and mobile. -## Subscription Groups API +## Playback Progress -- Add the complete Server contract for named subscription groups. [#172](https://github.com/TypeType-Video/TypeType/issues/172) -- Create, rename and delete groups. -- Assign a subscribed channel to multiple groups. -- Filter subscriptions and feeds by group or show ungrouped channels. -- Preserve stable pagination while group membership changes. -- Include groups and memberships in TypeType backups. +- Show playback progress directly on video cards. +- Add batch progress lookup for faster history and recommendation loading. +- Keep progress updates non-blocking during playback. -**Subscription groups are API-only in this release. There is no web interface for creating or managing groups yet.** The frontend integration remains tracked in [#172](https://github.com/TypeType-Video/TypeType/issues/172). +## Volume Controls -## Accounts And Notifications +- Support mouse-wheel volume changes on every player layout. +- Prevent the page from scrolling when the wheel is used over the volume slider. +- Keep volume controls usable in the compact and floating players. -- Fix initial OIDC installations requiring users to sign in twice. [#221](https://github.com/TypeType-Video/TypeType/issues/221) -- Add a setting to mute notification popups while keeping notifications available in the notification center. [#231](https://github.com/TypeType-Video/TypeType/issues/231) +## Localization -## Downloads +- Add the German interface locale. +- Add the German translation catalog. +- Improve layout behavior for longer translated labels. +- Make video settings responsive to the active locale. +- Continue rejecting untranslated frontend messages during validation. -- Allow downloads to work when Garage is only available through the internal TypeType network. A separate public Garage endpoint is no longer required. [#222](https://github.com/TypeType-Video/TypeType/issues/222) -- Keep artifact delivery behind the authenticated Server gateway. +## Account Portability -No configuration change or manual database migration is required. Server creates the subscription-group tables through its normal schema initialization. +- Support large YouTube Takeout archives. +- Add ZIP64 archive reading for large imports. +- Return a typed error when an upload is too large. +- Preserve bounded import processing and progress reporting. -## Thx +## YouTube Login + +- Fix remote YouTube login completion after passkey or 2FA. +- Stabilize remote YouTube input handling. +- Improve diagnostics for failed remote-login sessions. + +## Server Reliability -A huge thx to @kapdon for implementing the complete subscription-groups Server contract and for the careful work on pagination, backups and tests. +- Isolate the Server SABR contract behind explicit adapter boundaries. +- Expand SABR contract and playback recovery tests. +- Preserve bounded retries, playback generations and session isolation. -Thx to @CCGcastiel for proposing the live-stream visibility controls and helping improve subscription feeds. +No configuration change or manual database migration is required for this release. -Thx to @arcoast for reporting the OIDC first-login problem and the Garage download configuration issue. +## Thx + +Thx to @whiskeredtux and @tigershark482 for the detailed buffering, +seek and playback reports that helped improve SABR recovery. [#248](https://github.com/TypeType-Video/TypeType/issues/248) -Thx to @mfuchsberger for reporting the autoplay loop and proposing the option to hide members-only content. +Thx to @kinouzero for reporting remote YouTube login failures around +passkey and 2FA, and for testing the login fixes. [#250](https://github.com/TypeType-Video/TypeType/issues/250) -Thx to @therealresonix for the detailed quality selector and playback-position reports. +Thx to @Toastienergy for contributing the German translation and helping +test the localized interface, compact player and playback experience. -Thx to @Toni-Vide for proposing the notification mute setting. +Thx to @surasuku235 for reporting the BiliBili extraction regression +addressed in the previous release. [#262](https://github.com/TypeType-Video/TypeType/issues/262) -A special thx to my sponsors @Toastienergy and @filippobaroni for supporting TypeType. +A special thx to sponsors [@Toastienergy](https://github.com/Toastienergy) +and [@filippobaroni](https://github.com/filippobaroni) for supporting +TypeType. -Thx as well to everyone testing the beta, reporting playback problems, sharing logs, improving the documentation and helping other self-hosters. +Thx as well to everyone testing the beta, sharing playback logs, testing +mobile layouts, reviewing translations and helping other self-hosters. ## Updating Follow the [update guide](https://typetype-video.github.io/Docs-TypeType/self-hosting/maintenance). If necessary, follow the [rollback guide](https://typetype-video.github.io/Docs-TypeType/self-hosting/rollback). - -If u want to support TypeType, please share it with others. If u want to support it financially, u can do so through [GitHub Sponsors](https://github.com/sponsors/Priveetee). diff --git a/TypeType-Frontend b/TypeType-Frontend index d3c43fb..75014fd 160000 --- a/TypeType-Frontend +++ b/TypeType-Frontend @@ -1 +1 @@ -Subproject commit d3c43fba08f7116373bede6ad1f88091378022b2 +Subproject commit 75014fd767eafacb2cacca59d4a7181c585adbde diff --git a/TypeType-Player b/TypeType-Player index 6f07ef1..6d6c983 160000 --- a/TypeType-Player +++ b/TypeType-Player @@ -1 +1 @@ -Subproject commit 6f07ef18401f1df5a094c720007f7f5e81c25e7e +Subproject commit 6d6c983afed1b08fc03196ac13546a30272fcd52 diff --git a/TypeType-Server b/TypeType-Server index 4717181..e28953d 160000 --- a/TypeType-Server +++ b/TypeType-Server @@ -1 +1 @@ -Subproject commit 471718143ea6f42dffe626b340fe74dc4c6522e9 +Subproject commit e28953da4550b8c35582df704ce6d87ca0fc89d8 diff --git a/TypeType-Token b/TypeType-Token index ea097dd..bbe01b9 160000 --- a/TypeType-Token +++ b/TypeType-Token @@ -1 +1 @@ -Subproject commit ea097dd36e43e2ea6a6b3ab84cba49807804f88a +Subproject commit bbe01b95030f3c22dce035cffcebf9dff83387b8 From 30a0a8c16dfefa1a2e4b703b354cf1459b08b426 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Mon, 7 Sep 2026 15:12:19 +0200 Subject: [PATCH 6/7] chore: pin downloader 1.8.0 --- TypeType-Downloader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TypeType-Downloader b/TypeType-Downloader index 05a038d..a79d46a 160000 --- a/TypeType-Downloader +++ b/TypeType-Downloader @@ -1 +1 @@ -Subproject commit 05a038dfe1d7c58624da7a5abb525ed030b15b34 +Subproject commit a79d46a5d7371d6a7cc6fdef618158e6afeca504 From 9f1432a6bf6c44459865f4da84a53b161bcd3398 Mon Sep 17 00:00:00 2001 From: Priveetee Date: Mon, 7 Sep 2026 15:15:40 +0200 Subject: [PATCH 7/7] test: align beta rollout proxy expectation --- scripts/deploy-beta.test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy-beta.test.sh b/scripts/deploy-beta.test.sh index 8a1ef07..75eca5c 100755 --- a/scripts/deploy-beta.test.sh +++ b/scripts/deploy-beta.test.sh @@ -103,7 +103,7 @@ if ! grep -Fq "TYPETYPE_SERVER_BETA_IMAGE=ghcr.io/typetype-video/typetype-server sed -n '/^TYPETYPE_.*_IMAGE=/p' "$stack/.env" >&2 exit 1 fi -grep -Fxq 'YOUTUBE_OUTBOUND_PROXY_URL=http://172.20.0.1:29080' "$stack/.env" +grep -Fxq 'YOUTUBE_OUTBOUND_PROXY_URL=' "$stack/.env" grep -Fxq 'YOUTUBE_REMOTE_LOGIN_ENABLED=true' "$stack/.env" if ! grep -Fq 'pull typetype-server' "$FAKE_DOCKER_LOG"; then echo "the server rollout did not pull only the server image" >&2