YTUHD unlocks 1440p (2K) and 2160p (4K) options in the iOS YouTube app by expanding codec/media capability paths (VP9/AV1) that YouTube may otherwise gate by device, codec support, or app behavior.
- Raises VP9/AV1 stream capability limits to 4K/60.
- Preserves 1440p/2160p VP9 and AV1 formats during format filtering.
- Routes VP9/AV1 decoding to a compatible path depending on device and YouTube version.
- Hooks codec support checks so software decode paths can be used correctly.
- iOS 11+
- As of YouTube 20.47.3, the built-in software VP9 decoder (
HAMVPXVideoDecoder) was removed. - YTUHD provides
YTUHDVPXVideoDecoder(libvpx-backed) and replaces the originalHAMVPXVideoDecoderon app versions that still have it. - On devices with hardware VP9 decode support, VideoToolbox hardware decode is used.
- On older devices, VP9 can still run through software decode (
YTUHDVPXVideoDecoder).
- As of YouTube 19.28.1, YouTube adds a software AV1 decoder path (
HAMDav1dVideoDecoder) for devices that do not provide native AV1 hardware decode. - If hardware AV1 decode is unavailable and YouTube does not provide
HAMDav1dVideoDecoder, YTUHD providesYTUHDDav1dVideoDecoder(dav1d-backed). YTUHDDav1dVideoDecoderreplaces the originalHAMDav1dVideoDecoderon app versions that have it.Apply film grainand decode thread controls are forwarded into the dav1d config.
YTUHD can run with server-driven ABR disabled so format filtering is handled by the client ABR hooks.
- This mode is intended as a fallback/compatibility path.
- Client-ABR-only behavior is reliable only on iOS 14+ and YouTube versions that include PoToken (Proof of Origin) implementation.
- On older environments or app builds without PoToken support, server ABR should remain enabled.
These options are shown in the YTUHD section inside YouTube settings:
Use VP9/AV1: Enables the codec capability path used by YTUHD. Restart the app after changing.VP9 for all: Keeps VP9 across all resolutions. If off, non-4K VP9/AV1 streams are filtered out.Disable server ABR: Forces the client ABR path. Keep this off unless you need compatibility fallback behavior.Use AV1 (dav1d): Shows only when hardware AV1 is unavailable.Apply film grain: Shows withUse AV1 (dav1d)and controls AV1 grain synthesis.Decode threads: Software decode thread count (default: 2).Skip loop filter,Loop filter optimization,Row threading: VP9 software decode tuning options.
Sideloaded apps often lose private entitlements required for hardware VP9 decode, so software decode will be used instead (higher battery cost).
YTUHD uses libundirect. For sideload builds, use this command to build the tweak with the trimmed down version of libundirect:
make SIDELOAD=1As package:
make package SIDELOAD=1Using TrollStore can help preserve entitlements for sideloaded YouTube builds.
YTUHD requires Theos. Static libraries are built automatically on first make:
Install build tools for dav1d first:
brew install meson ninjaBuild:
make packageRebuild third-party static libraries explicitly:
make libvpx # vendor/libvpx_ios/libvpx.a
make dav1d # vendor/dav1d_ios/libdav1d.avendor/libvpx and vendor/dav1d are git submodules.
To pull newer upstream revisions:
git submodule update --remoteThen rebuild the static libraries:
make libvpx
make dav1dOptional (recommended) sanity step before packaging:
make packageThird-party notices are documented in NOTICES.