/my-yt

A clean and minimal youtube frontend, without all the ads and whistles

Primary LanguageJavaScript

my-yt

MYGA - make youtube great again

A clean and minimal youtube frontend, without all the ads and whistles. Supported by yt-dlp, and optionally your local AI model, to make your youtube experience local, mindful, succint and ad free.

preview my-yt

Features

  • Channel management/Subscriptions
  • Download videos from YouTube, using yt-dlp behind the scenes
  • Summarize video content using your local AI model
  • Ignore videos you don't want to watch
  • Play videos in background
  • Offline media playback
  • Subtitles using <track> element and WebVTT API
  • No dependencies (except for nano-spawn, which itself has no transient deps)
  • HTML/CSS only, no JS frameworks on client/server side
  • Host it in your home network to playback videos on all your devices
  • Just JSON files for persistence, stupid simple management and backup

Application runs on http://localhost:3000

Installation (node.js)

git clone https://github.com/christian-fei/my-yt.git
cd my-yt
npm i
# install yt-dlp, please see https://github.com/yt-dlp/yt-dlp

npm start

Installation (docker)

git clone https://github.com/christian-fei/my-yt.git
cd my-yt
docker compose up --build -d

or (currently wip)

docker run -p 3000:3000 -v /path/to/your/data/folder/for/persistence:/app/data christianfei/my-yt:latest

Why?

  • Why not??
  • wanted to get back my chronological feed, instead of a "algorithmically curated" one
    • you can just go to the "Subscriptions" page if you want to see your YouTube videos in chronological order, as gently pointed out on HN
  • no distractions
  • no clickbait thumbnails (using mq2 instead of mqdefault thumbnail, thanks @drcheap)
  • no comments
  • no related videos, or any algorithmically determined videos pushed in your face
  • no ads (in "just skip the sponsors")
  • just videos and a clean UI
  • wanted to try integrate the so much hyped AI in a personal project
  • wanted to try out yt-dlp
  • wanted to experiment with the HTML5 <track> element and WebVTT API
  • just wanted to make this, ok?
  • I am even paying for YouTube Premium, so it's not a matter of money, but a matter of control over my attention and enhanced offline experience

Upcoming features (TODO)

  • Make it possible to delete downloaded videos
  • Have a way to view a video at a reasonable size in between the small preview and full screen
  • Add a way to download a single video without subscribing to a channel
  • Specify LLM server endpoint
    • List and choose available model to use for summarization
  • add some options for download quality (with webm merge for 4k support)

Project

Here are some links to help you understand the project better:

Bare HTTP server

Handles SSE for client updates

Implements HTTP Ranged requests for video playback

Makes requests using the chat completions API of LMStudio.

Utility functions for Server-sent events

Summarizes video transcript using LMStudio API

yt-dlp wrapper to download videos, get channel videos and video information and transcript

Handles persistence of video information (set video as downloaded, summary, ignored, upserting videos, etc.)

dependency less, bare HTML5, CSS3 and JS for a basic frontend

Handles SSE updates, interacting with the API

General information

Currently, on the LLM side of things:

  • supports basic chat completions API (LMStudio right now)
    • expects lms server to be running on http://localhost:1234
  • works with meta-llama-3.1-8b-instruct model
  • customization will come in the future if there's enough interest (let me know by opening an issue or pull-request)

dev todo (ignore this section, or open a PR!)

  • handle clear search
  • handle empty state /
  • cta add channels if none
  • handle no subtitles
  • add app state (e.g. filtering)

Download the project while you can before I get striked with a DMCA takedown request