Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/component-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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."
95 changes: 85 additions & 10 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,100 @@
# TypeType 1.7.3
# TypeType 1.8.0

TypeType 1.7.3 fixes BiliBili videos that failed during stream extraction after a metadata format change.
TypeType 1.8.0 improves playback reliability, the watch experience,
account portability, sharing and localization.

## Playback

- Update PipePipeExtractor to the BiliBili metadata fix used by TypeType-Server.
- Restore BiliBili stream extraction and preserve the available audio and video formats.
- Update TypeType-Server to `1.7.2`. [PR #83](https://github.com/TypeType-Video/TypeType-Server/pull/83)
- 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.

No frontend change, configuration change or manual database migration is required.
## Floating Watch Player

- 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.

## Sharing

- 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.

## Playback Progress

- Show playback progress directly on video cards.
- Add batch progress lookup for faster history and recommendation loading.
- Keep progress updates non-blocking during playback.

## Volume Controls

- 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.

## Localization

- 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.

## Account Portability

- 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.

## 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

- Isolate the Server SABR contract behind explicit adapter boundaries.
- Expand SABR contract and playback recovery tests.
- Preserve bounded retries, playback generations and session isolation.

No configuration change or manual database migration is required for this release.

## Thx

Thx to everyone who reported BiliBili playback failures and shared detailed diagnostics.
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)

A special thx to sponsors [@Toastienergy](https://github.com/Toastienergy) and [@filippobaroni](https://github.com/filippobaroni) for supporting TypeType.
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 @Toastienergy for contributing the German translation and helping
test the localized interface, compact player and playback experience.

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 sponsors [@Toastienergy](https://github.com/Toastienergy)
and [@filippobaroni](https://github.com/filippobaroni) for supporting
TypeType.

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).
2 changes: 1 addition & 1 deletion TypeType-Frontend
Submodule TypeType-Frontend updated 101 files
2 changes: 1 addition & 1 deletion TypeType-Server
Submodule TypeType-Server updated 176 files
2 changes: 1 addition & 1 deletion TypeType-Token
Submodule TypeType-Token updated 1 files
+1 −1 package.json
4 changes: 2 additions & 2 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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}
Expand Down
2 changes: 1 addition & 1 deletion scripts/check-youtube-egress.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 8 additions & 4 deletions scripts/deploy-beta.sh
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,11 @@ 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")
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"
Expand Down Expand Up @@ -177,6 +176,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"
Expand Down
2 changes: 2 additions & 0 deletions scripts/deploy-beta.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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=' "$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
Expand Down
9 changes: 3 additions & 6 deletions scripts/validate-stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down