Skip to content
gopeterPublic

About

Safe, whitelist-only YouTube client for kids, built as a PWA with offline playback and a Node.js server for downloads and sync

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Glotzi 📺

A safe, self-hosted YouTube client for kids: strict whitelist only, per-kid profiles, offline downloads. Your home server downloads every approved video (via yt-dlp) — the app plays exclusively these local copies. No ads, no recommendations, no escape hatches.

How it works

  • Parents whitelist single videos, playlists, or entire channels in a PIN-protected parent area.
  • The server (Fastify + SQLite + youtubei.js + yt-dlp) syncs metadata, downloads the videos, and serves app + media. Channels mirror their latest 10 uploads, playlists their first 20 entries (configurable).
  • Kids pick their profile in a PWA (React + Vite) and see only what's assigned to them. Search runs entirely on-device.
  • Tap ⬇ to store a video on the tablet — full offline playback on planes and road trips, including search and UI.
  • Nothing is exposed to the internet: LAN at home, VPN (WireGuard/Tailscale) on the road, HTTPS via DNS-01 certificates (Caddy + Cloudflare DNS).

Quick start

git clone <this repo> glotzi && cd glotzi
cp .env.example .env    # set ADMIN_PIN, DOMAIN, CF_API_TOKEN
docker compose up -d --build

Requires a Docker host on your home network and a Cloudflare-managed domain. Full walkthrough — DNS record, API token, Portainer/GHCR deployment, VPN setup, troubleshooting: docs/SETUP.md.

Configuration

.env: ADMIN_PIN (parent area PIN — long & random), DOMAIN, CF_API_TOKEN (Cloudflare, Zone:DNS:Edit + Zone:Zone:Read).

Optional (docker-compose.yml / stack environment):

Variable Default Meaning
MAX_HEIGHT 1080 Max video resolution (720 saves ~50% storage)
SYNC_INTERVAL_HOURS 6 Re-check interval for channels/playlists
MAX_VIDEOS_PER_CHANNEL 10 Channels are mirrored to their N most recent uploads
MAX_VIDEOS_PER_PLAYLIST 20 Playlists are mirrored to their first N entries

All data (DB, videos, thumbnails) lives in the /data volume — that's your backup target.

Development

cd web && npm install
GLOTZI_API=https://glotzi.yourdomain.tld npm run dev   # frontend at localhost:5173, real backend

Hot reload against your running instance — no build, no deploy. Omit GLOTZI_API to proxy to a locally running server instead (cd server && npm install && DATA_DIR=../data ADMIN_PIN=1234 node src/index.js, needs yt-dlp + ffmpeg in PATH). The service worker is disabled on localhost; secure-context APIs (OPFS etc.) work there without HTTPS.

Android APK (Fire tablet)

A Capacitor shell ships the app as a sideloadable APK — app-owned storage (no browser eviction of downloads), real app icon, Amazon-Kids-profile capable. Build it via GitHub Actions or locally: see docs/APK.md.

Roadmap

  • Capacitor APK for Fire tablets
  • Amazon Appstore submission (official Kids profile support)
  • Custom APK app icon
  • Screen time limits / bedtime mode
  • English UI (currently German)

Disclaimer

This software is intended for personal, private use — e.g. curating a safe media library for your own children from content you have legitimate access to. Downloading videos may violate the YouTube Terms of Service; check the laws and terms applicable to you before using this software. Do not use Glotzi to redistribute or publicly re-host content. The authors provide this software as-is, without warranty of any kind, and accept no responsibility for how it is used.

About

Safe, whitelist-only YouTube client for kids, built as a PWA with offline playback and a Node.js server for downloads and sync

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages