selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

TypeType logo

Self-host TypeType

v1.11.1

Private video platform for YouTube, NicoNico, BiliBili

ReleaseOpen SourceMIT
Docker ComposeFull install guide
curl -fsSL https://raw.githubusercontent.com/TypeType-Video/TypeType/main/scripts/install-stack.sh | bash
Updated12 hours ago
LanguageShell
Setup difficultyAdvanced
MobileNative app
Stars
469
CPU
2 vCPU
RAM
4 GiB
Storage
20 GiB on SSD
Ports
8082 (Public web container; nginx serves the app, API, WebSockets, SABR, and downloads), 8080 (Server diagnostic and direct API port (loopback by default)), 8081 (Token health and version port (loopback by default))
Requires
Dragonfly, Garage, PostgreSQL
Docker
ghcr.io/typetype-video/typetype
The TypeType web app playing a YouTube video on desktopMobile web home screenMobile web search resultsMobile web playbackHome page on a self-hosted instanceWatching a video on a self-hosted instanceSearch results screenThe settings pageThe registration screen on a fresh install

What is TypeType?

TypeType is a video platform you run as your own private instance for YouTube, NicoNico, and BiliBili: one place to search across the three services, keep subscriptions, playlists, favorites, history, and watch progress on hardware you control. The web app plays videos through MSE and SABR with quality, audio-track, and subtitle controls, offers video and audio downloads backed by local or S3-compatible storage, and adds SponsorBlock, DeArrow, content blocking, imports from Google Takeout or PipePipe, and OIDC single sign-on with an admin area — and it ships no TypeType telemetry of its own. Self-hosting runs a Docker Compose stack (web, API server, Token, Downloader, PostgreSQL, Dragonfly, Garage) installed with a one-line script that generates secrets and bootstraps the object store; a beta stack, an update flow, and a rollback path are documented, and an optional experimental recommender service adds algorithm-picked home pages. A native Android client (F-Droid or signed APK) and the responsive web UI both talk to your instance. The central repository holds the orchestration stack under MIT while each component keeps its own license, and the project notes it is unaffiliated with the video services it fronts.

Should you self-host TypeType?

TypeType scores 48/100 on selfhost.directory (how scoring works) and ranks #66 of 118 in Media Server. It has 469 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v1.11.1, came out on 25 October 2026. New versions land roughly every 3 days.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is MIT-licensed and written mostly in Shell.

Its closest alternative on selfhost.directory is Jellyfin (88/100, 58 740 stars). It scores higher overall, so compare the two before you pick. See TypeType vs Jellyfin side by side.

Features

  • AI recommender home feedExperimental, optional overlay
  • Content Blocking
  • Data Import
  • Instance administration
  • MSE and SABR playback
  • Native Android client
  • OIDC Single Sign-On
  • Public demo instance
  • Search across YouTube, NicoNico, and BiliBili
  • Subscriptions, playlists, favorites, history, and watch progress
  • Video and audio downloads

TypeType README

How to install TypeType

Install TypeType with Docker Compose

curl -fsSL https://raw.githubusercontent.com/TypeType-Video/TypeType/main/scripts/install-stack.sh | bash

One-line installer creates ~/typetype-stack, generates secrets, and starts the stack; a beta stack variant and a manual no-script setup are also documented.

How to configure TypeType

  • ALLOWED_ORIGINShttp://localhost:8082,http://127.0.0.1:8082,http://localhost:5173,http://127.0.0.1:5173
  • AUTH_ALLOW_INSECURE_COOKIESfalse
  • AUTH_SESSION_TTL_DAYS30
  • BILIBILI_SESSION_ENCRYPTION_KEY
  • DOWNLOADER_S3_ACCESS_KEY
  • DOWNLOADER_S3_SECRET_KEY
  • DOWNLOADER_SERVICE_URLhttp://typetype-downloader:18093
  • DRAGONFLY_MAX_MEMORY2gb
  • DRAGONFLY_THREADS4
  • DRAGONFLY_URLredis://dragonfly:6379
  • EXTRACTOR_HTTP_VERSIONHTTP/21 uses one request per connection; use it if Server stops answering under a crowd while its processor is idle.

    1 uses one request per connection; use it if Server stops answering under a crowd while its processor is idle.

    values: HTTP/2, 1

  • EXTRACTOR_SIMULTANEOUS_REQUESTS_PER_HOST64Requests the extractor may have on their way to one host at once.

    Requests the extractor may have on their way to one host at once.

  • GARAGE_RPC_SECRETSET_ME_GARAGE_RPC_SECRET
  • GITHUB_ISSUE_TEMPLATEbug_report_backend.md
  • GITHUB_REPOTypeType-Video/TypeType
  • HOST_BIND_DOWNLOADER_BETA127.0.0.1
  • HOST_BIND_GARAGE_S3127.0.0.1
  • HOST_BIND_GARAGE_S3_BETA127.0.0.1
  • HOST_BIND_SERVER127.0.0.1
  • HOST_BIND_SERVER_BETA127.0.0.1
  • HOST_BIND_TOKEN
  • HOST_BIND_TOKEN_BETA
  • HOST_PORT_DOWNLOADER_BETA19093
  • HOST_PORT_GARAGE_S33900
  • HOST_PORT_GARAGE_S3_BETA3900
  • HOST_PORT_SERVER8080
  • HOST_PORT_SERVER_BETA18080
  • HOST_PORT_TOKEN
  • HOST_PORT_TOKEN_BETA
  • HOST_PORT_WEB8082
  • HOST_PORT_WEB_BETA18082
  • OIDC_CLIENT_IDThe client ID from your OIDC provider. Required to enable OIDC.

    The client ID from your OIDC provider. Required to enable OIDC.

  • OIDC_CLIENT_SECRETThe client secret from your OIDC provider. Required to enable OIDC.

    The client secret from your OIDC provider. Required to enable OIDC.

  • OIDC_DISCOVERY_URL<issuer>/.well-known/openid-configurationOverride only if OIDC discovery lives elsewhere.

    Override only if OIDC discovery lives elsewhere.

  • OIDC_ISSUEROIDC provider issuer URL (OIDC_ISSUER_URL also works). Required to enable OIDC.

    OIDC provider issuer URL (OIDC_ISSUER_URL also works). Required to enable OIDC.

  • OIDC_PROVIDER_NAMEOIDCName shown on the "Sign in with..." button.

    Name shown on the "Sign in with..." button.

  • OIDC_SCOPESopenid email profileOIDC scopes requested.

    OIDC scopes requested.

  • POSTGRES_DBtypetype
  • POSTGRES_PASSWORD
  • POSTGRES_USERtypetype
  • RECOMMENDER_CACHE_URLredis://dragonfly:6379
  • RECOMMENDER_DATABASEtypetype_recommender
  • RECOMMENDER_ENABLEDfalse
  • RECOMMENDER_INTERNAL_TOKEN
  • RECOMMENDER_MEMORY_LIMIT2g
  • RECOMMENDER_SERVICE_URLhttp://typetype-recommender:8190
  • RECOMMENDER_STREAM_REQUESTS_PER_MINUTE15
  • S3_ENDPOINThttp://garage:3900
  • S3_PUBLIC_ENDPOINThttp://garage:3900
  • SABR_INITIALIZATION_RANGEonoff skips a request that YouTube refuses on every play for some addresses.

    off skips a request that YouTube refuses on every play for some addresses.

    values: on, off

  • STREAM_PREVIEWSonoff refuses every video asked before anyone watches it, such as a card being hovered.

    off refuses every video asked before anyone watches it, such as a card being hovered.

    values: on, off

  • SUBSCRIPTION_FEED_FRESHNESS_SECONDS60How old a subscription feed may be before reading it starts a refresh; can only be raised, up to one day.

    How old a subscription feed may be before reading it starts a refresh; can only be raised, up to one day.

  • SUBSCRIPTION_FEED_MAX_CONCURRENT_FETCHES20Channel pages asked at once when a subscription feed is built; can only be lowered.

    Channel pages asked at once when a subscription feed is built; can only be lowered.

  • SUBTITLE_SERVICE_URLhttp://typetype-token:8081
  • TYPETYPE_API_BASEhttp://typetype-server:8080
  • TYPETYPE_DOWNLOADER_BETA_IMAGE
  • TYPETYPE_DOWNLOADER_HOSTtypetype-downloader
  • TYPETYPE_DOWNLOADER_IMAGE
  • TYPETYPE_DOWNLOADER_PORT18093
  • TYPETYPE_POSTGRES_VECTOR_IMAGEpgvector/pgvector:pg17
  • TYPETYPE_RECOMMENDER_IMAGE
  • TYPETYPE_RECOMMENDER_PORT8190
  • TYPETYPE_SERVER_BETA_IMAGE
  • TYPETYPE_SERVER_HOSTtypetype-server
  • TYPETYPE_SERVER_IMAGE
  • TYPETYPE_SERVER_PORT8080
  • TYPETYPE_TOKEN_BETA_IMAGE
  • TYPETYPE_TOKEN_HOST
  • TYPETYPE_TOKEN_IMAGE
  • TYPETYPE_TOKEN_PORT
  • TYPETYPE_WEB_BETA_IMAGE
  • TYPETYPE_WEB_IMAGE
  • YOUTUBE_LIVE_PROBElive client firstafter asks the usual client first and the live client only for what it says is live; use on a busy instance.

    after asks the usual client first and the live client only for what it says is live; use on a busy instance.

    values: after

  • YOUTUBE_OPENS_PER_MINUTE0 (no limit)Videos the whole instance opens at YouTube per minute; over it, each video waits its turn, 30 seconds at most.

    Videos the whole instance opens at YouTube per minute; over it, each video waits its turn, 30 seconds at most.

  • YOUTUBE_OUTBOUND_PROXY_URL
  • YOUTUBE_REMOTE_LOGIN_CALLBACK_BASE_URLhttp://typetype-server:8080
  • YOUTUBE_REMOTE_LOGIN_CALLBACK_ORIGINhttp://typetype-server:8080
  • YOUTUBE_REMOTE_LOGIN_ENABLEDfalse
  • YOUTUBE_REMOTE_LOGIN_FRAME_FPS10
  • YOUTUBE_REMOTE_LOGIN_INTERNAL_TOKEN
  • YOUTUBE_REMOTE_LOGIN_MAX_FRAME_BYTES524288
  • YOUTUBE_REMOTE_LOGIN_MAX_SESSIONS2
  • YOUTUBE_REMOTE_LOGIN_SERVICE_URLhttp://typetype-token:8081
  • YOUTUBE_REMOTE_LOGIN_TTL_MS480000
  • YOUTUBE_REQUEST_LOGoff1 writes one log line per request sent to YouTube. For diagnosis only.

    1 writes one log line per request sent to YouTube. For diagnosis only.

    values: off, 1

  • YOUTUBE_SESSION_ENCRYPTION_KEY
  • YOUTUBE_SESSION_RENEWALonAfter three videos refused within a minute, Server asks Token for a new session once, then waits two minutes. off disables it.

    After three videos refused within a minute, Server asks Token for a new session once, then waits two minutes. off disables it.

    values: on, off

TypeType releases & version history

More in Media Server

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…