Skip to content

Priveetee/TypeType

Repository files navigation

TypeType

MIT license TypeType PipePipe React

TypeType is a self-hostable video app for YouTube, NicoNico and BiliBili.

It is not only a web UI. This repository contains the TypeType web client and the deployment files for running the full stack: frontend, Kotlin API backend, PostgreSQL, Dragonfly, media proxying, token service, downloader service and Garage-backed download storage.

Start Here

Install and start the stack with one command:

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

The installer creates ~/typetype-stack, generates local downloader credentials, selects available ports when defaults are busy, starts the services, and bootstraps Garage.

After install:

cd ~/typetype-stack
docker compose ps
curl -fsS http://localhost:8080/health

Open the web app:

http://localhost:8082

Default local endpoints:

Service URL
Web app http://localhost:8082
API backend http://localhost:8080
Token service http://localhost:8081
Garage S3 http://localhost:3900

Download the stack files without starting Docker:

curl -fsSL https://raw.githubusercontent.com/Priveetee/TypeType/main/scripts/install-stack.sh | bash -s -- --download-only

Screenshots

TypeType home

Multi-Service Search

TypeType multi-service search

YouTube NicoNico BiliBili
YouTube search NicoNico search BiliBili search

Playback

TypeType watch flow

YouTube NicoNico BiliBili
YouTube watch page NicoNico watch page BiliBili watch page
Save to playlist Download formats NicoNico danmaku
Save to playlist Download format picker NicoNico danmaku

Library Flow

TypeType library flow

Playlists History Import
Playlists History Import
Channel Settings
Channel page Settings

Subscriptions:

Subscriptions

Import and settings flow:

TypeType import and settings flow

Mobile layout:

TypeType mobile flow

Home Search Watch
TypeType mobile home TypeType mobile search TypeType mobile watch

What It Does

  • Plays YouTube, NicoNico and BiliBili videos from a self-hosted web app.
  • Stores history, subscriptions, playlists, favorites, watch later, progress and settings on your own instance.
  • Searches, loads trending feeds, shows comments and opens channel pages through the backend API.
  • Proxies media when direct browser playback is unreliable or provider-specific headers are needed.
  • Generates DASH manifests when separate audio/video streams are available.
  • Imports YouTube Takeout data and PipePipe backup data.
  • Runs download jobs through a separate downloader service.

What This Is Not

  • Not a hosted SaaS.
  • Not a YouTube-only frontend clone.
  • Not a fork of Piped, FreeTube, LibreTube, Invidious or NewPipe.
  • Not a browser-side extractor. Extraction stays behind the HTTP API boundary.
  • Not affiliated with YouTube, NicoNico, BiliBili or any upstream video platform.

Stack

Role Project
Web client React, TypeScript, Vite, TanStack Router, TanStack Query, Tailwind CSS
API backend Kotlin, Ktor, PipePipeExtractor
User data PostgreSQL
Extraction cache Dragonfly
Media proxy TypeType-Server
Token service TypeType-Token
Downloader TypeType-Downloader
Download storage Garage S3
Deployment Docker Compose

API Smoke Tests

Run these after the stack is up.

Health:

curl -fsS http://localhost:8080/health

YouTube search:

curl -fsS "http://localhost:8080/search?q=lofi&service=0"

NicoNico suggestions:

curl -fsS "http://localhost:8080/suggestions?query=miku&service=6"

BiliBili trending:

curl -fsS "http://localhost:8080/trending?service=5"

YouTube stream extraction:

curl -fsS "http://localhost:8080/streams?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ"

NicoNico stream extraction:

curl -fsS "http://localhost:8080/streams?url=https%3A%2F%2Fwww.nicovideo.jp%2Fwatch%2Fsm9"

Create a guest session for protected user-data endpoints:

curl -fsS -X POST http://localhost:8080/auth/guest

Use the returned token as a bearer token, or let Python extract it:

TOKEN="$(curl -fsS -X POST http://localhost:8080/auth/guest | python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])')"
curl -fsS http://localhost:8080/settings -H "Authorization: Bearer ${TOKEN}"

Service IDs:

Service ID
YouTube 0
BiliBili 5
NicoNico 6

Manual Install

The installer is recommended. If you want to run from a cloned repository instead:

git clone https://github.com/Priveetee/TypeType.git
cd TypeType
cp .env.example .env
./scripts/setup-stack.sh

Manual Docker Compose flow:

cp .env.example .env
docker compose pull
docker compose up -d
./scripts/bootstrap-garage.sh
docker compose ps

If you do the manual flow, edit .env before exposing the stack outside localhost. In particular, replace the downloader S3 access key and secret key values.

Updating

Update the whole stack:

cd ~/typetype-stack
docker compose pull
docker compose up -d --force-recreate
docker compose ps

Update only the web client:

cd ~/typetype-stack
docker compose pull typetype
docker compose up -d --force-recreate --no-deps typetype

Local Development

Install dependencies:

bun install

Create the frontend environment file:

cp apps/web/.env.example apps/web/.env

Set the API URL:

VITE_API_URL=http://localhost:8080

Run the dev server:

bun run dev

Open:

http://localhost:5173

Checks:

bun run check
bun run build
bun run knip
bun run sherif

Related Repositories

Clone the source repositories directly:

git clone https://github.com/Priveetee/TypeType.git
git clone https://github.com/Priveetee/TypeType-Server.git
git clone https://github.com/Priveetee/TypeType-Downloader.git
git clone https://github.com/Priveetee/TypeType-Token.git

Notes

TypeType is usable, but it is still young. Video providers change frequently, and provider-specific extraction, signed URLs, manifests, headers, range requests and cache TTLs can break over time.

The clean boundary is HTTP. The web client talks to the API; extraction stays in TypeType-Server.

Acknowledgments

TypeType is a clean rewrite, but its direction was shaped by existing open-source video clients and extractor projects.

License

This repository is MIT licensed. See LICENSE.

TypeType-Server is GPLv3 because it uses PipePipeExtractor.

About

Privacy-respecting video platform frontend

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages