From fb83b45818aafa0c8055b44a1857254a1d7db822 Mon Sep 17 00:00:00 2001 From: lashman Date: Thu, 21 May 2026 00:51:14 +0300 Subject: [PATCH] readme --- README.md | 96 ++++++++++++------------------------------------------- 1 file changed, 21 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index ba0d479..a8d47ae 100644 --- a/README.md +++ b/README.md @@ -18,99 +18,45 @@ Built for people who run their own servers. No cloud, no accounts, no subscripti
-## 🏴 Why Jellybloom? +## Why Jellybloom? You already run a Jellyfin server. You already own the media. So why does using it still feel like using a web app designed by committee? -Jellybloom is a ground-up desktop client for Windows. It talks directly to your Jellyfin server and makes browsing, discovering, and watching actually pleasant. Fast, dense, responsive, and fully under your control. - -No cloud dependencies. No data collection. No feature gates. No one profits from your watch history except you. +Jellybloom is a ground-up desktop client for Windows. It talks directly to your Jellyfin server and makes browsing, discovering, and watching actually pleasant. Fast, dense, responsive, and fully under your control. No cloud dependencies. No data collection. No feature gates. No one profits from your watch history except you.
-## ✨ What it does +## What it does -### 📺 Browse +### Browse -- **Home shelves** - curate your own rows or let the app suggest based on what you watch -- **Virtualized poster grid** - smooth scrolling with thousands of items -- **Unified fuzzy search** - titles, people, collections. Saved searches stick around -- **Quick look** - right-click any poster for a peek without losing your scroll position -- **Notification bell** - new episodes and movies, deduplicated by series so a full-season drop does not flood you +The home page is built from shelves you curate yourself, or you can let the app suggest rows based on what you actually watch. The poster grid uses virtualized scrolling so it stays smooth even with thousands of items. Right-click any poster for a quick look without losing your place. A notification bell tracks new episodes and movies, deduplicated by series so a full-season drop does not flood you. Search is fuzzy and unified across titles, people, and collections, and saved searches stick around if you find yourself looking for the same things repeatedly. -### 🎬 The player +### The player -- **Native subtitle rendering** - ASS/SSA via libass-wasm, plus SRT, VTT, and plain text -- **Subtitle search** - find and download from OpenSubtitles without leaving the player -- **Subtitle styling** - size, font, outline, color, background opacity, positioning -- **Bookmarks** - drop a pin with a note, shown as dots on the scrubber -- **A-B loop** - for study, reference, or that one perfect joke -- **Chapters and trickplay thumbnails** - jump around, hover the scrubber to see where you are -- **Speed control** - 0.5x to 3x -- **Picture filter** - brightness, contrast, saturation, hue, gamma for bad encodes -- **Audio graph** - compressor and parametric EQ for quiet or loud mixes -- **Audio passthrough** - let your receiver handle decoding -- **Quality and track menus** - switch streams on the fly -- **Resume prompt** - asks first so you do not spoil the cold open -- **End card** - next episode or related title as the credits roll -- **Mini player** - pop out to a floating window -- **Sleep timer** - fades out after your chosen duration -- **"Still watching?"** - gently checks in after a few episodes -- **Downloads** - save for offline playback -- **Cast** - send to another Jellyfin session on your network -- **SyncPlay** - watch together with friends, playback stays locked -- **Trakt.tv scrobbling** - optional, device-code auth, no redirects -- **Customizable keyboard shortcuts** - rebind everything +This is where most of the work went. The player is built on Vidstack with hls.js, and the entire chrome layer is custom. ASS and SSA subtitles render natively through libass-wasm so styled fansubs look exactly as intended, with SRT, WebVTT, and plain text supported too. You can search OpenSubtitles from inside the player, tweak size, font, outline, color, background opacity, and positioning. A picture filter adjusts brightness, contrast, saturation, hue, and gamma for badly-encoded sources. An audio graph gives you a compressor and parametric EQ. Audio passthrough lets your receiver handle decoding when it can. -### 📄 Detail pages +Beyond the basics: bookmarks with notes shown as dots on the scrubber, A-B looping, chapter navigation, trickplay thumbnails, speed control from 0.5x to 3x, a sleep timer, and a "still watching?" prompt that checks in after a few episodes so your stats do not run away. The resume prompt asks first so you do not spoil a cold open. The end card shows what is next as the credits roll. Pop out a mini player to keep watching while doing other things. Cast to another Jellyfin session on your network, or join a SyncPlay group to watch together with friends. Trakt.tv scrobbling is optional and uses device-code auth, no redirects. Every keyboard action can be rebound. -- **Hero** - backdrop, poster, logo overlay, ratings, action buttons -- **Cast and crew** - clickable filmographies with in-library matches highlighted -- **Composer block** - because the score matters -- **Awards** - from Wikidata -- **Filming locations** - mapped with Leaflet -- **Reception** - aggregates IMDb, TMDB, Rotten Tomatoes, Metacritic, and your own ratings -- **Reviews, trailers, trivia, tech specs** - from TMDB, YouTube, Wikipedia -- **Collection strip** - franchise entries -- **Series status** - air days, next episode, season count, production state -- **Anime filler detection** - flags filler and mixed-canon episodes -- **Versions selector** - pick between multiple files for one title -- **Watch timeline** - your personal history from the diary -- **Personal section** - your ratings, rewatch counts, notes. Stays local -- **Diary** - log watches with date, rating, rewatch flag. Export to Markdown, JSON, or Letterboxd CSV -- **Request button** - ask Radarr or Sonarr for missing titles without leaving the page +### Detail pages -### 🔭 Discover +Every title gets a rich detail page that pulls from multiple sources. The hero shows a backdrop, poster, and logo overlay from Jellyfin or TMDB, plus ratings and action buttons. Cast and crew are clickable, with in-library matches highlighted in a person's filmography. Awards come from Wikidata. Filming locations are mapped with Leaflet. Reception aggregates IMDb, TMDB, Rotten Tomatoes, Metacritic, and your own ratings. Reviews, trailers, trivia, and tech specs round it out, with badge icons for Dolby Vision, Atmos, DTS:X, and others. Anime filler detection flags filler and mixed-canon episodes. If you have multiple versions of a file, a selector lets you pick. The watch timeline draws from your diary. Your ratings, rewatch counts, and notes stay local. The diary lets you log watches and export to Markdown, JSON, or Letterboxd CSV. If something is missing, you can request it from Radarr or Sonarr without leaving the page. -Find things you do not already own. Needs a free TMDB API key. +### Discover -- **Tonight hero** - personalized spotlight based on your top genre -- **Spotlight hero** - trending pick of the day -- **Mood chips** - ten vibes that resolve to a filtered row -- **Roulette** - spin for a random highly-rated title -- **Decade strips** - the 90s, the 80s, etc. -- **Canonical lists** - top rated, cult classics, upcoming -- **On this day** - titles that premiered today -- **Library gap finder** - highest-rated missing titles in genres you already watch -- **Browse grid** - by genre, language, studio, network. Inline expansion -- **Advanced filters** - year range, rating, vote count, sort order +Find things you do not already own. Needs a free TMDB API key. There is a personalized spotlight based on your top genre, a trending pick, mood chips that resolve to filtered rows, a roulette for random highly-rated titles, decade strips, canonical lists, an "on this day" feature, and a library gap finder that shows the highest-rated missing titles in genres you already watch. Browse by genre, language, studio, or network, with inline expansion and advanced filters for year range, rating, vote count, and sort order. -### 👤 Profile and stats +### Profile and stats -- Watch streak, genre breakdown, year-in-review -- Personally top-rated titles, recent diary entries +Track your watch streak, genre breakdown, year-in-review summary, personally top-rated titles, and recent diary entries. -### ⚙️ Settings +### Settings -- Multiple Jellyfin servers with live dashboard -- Playback, audio, subtitle, and display preferences -- Home page and detail page section toggles -- TMDB, Fanart.tv, Trakt.tv, Sonarr, Radarr configuration -- Personal data management, privacy controls, full keyboard rebinds +Connect to multiple Jellyfin servers with a live dashboard. Configure playback, audio, subtitle, and display preferences. Toggle home page rows and detail page sections. Set up TMDB, Fanart.tv, Trakt.tv, Sonarr, and Radarr. Manage personal data, privacy controls, and rebind every keyboard shortcut.
-## ♿ Accessibility +## Accessibility Jellybloom targets WCAG 2.2 AAA conformance because a media client that only works for some people is not really a media client. @@ -126,7 +72,7 @@ Jellybloom targets WCAG 2.2 AAA conformance because a media client that only wor
-## 📦 Getting started +## Getting started ### Prerequisites @@ -153,7 +99,7 @@ npm run tauri:build # production desktop build
-## 🔧 Technology stack +## Technology stack | | Layer | Technology | |:--|:--|:--| @@ -172,7 +118,7 @@ npm run tauri:build # production desktop build
-## 🗂️ Project structure +## Project structure ``` jellybloom/ @@ -196,7 +142,7 @@ jellybloom/
-## 📜 License +## License Dedicated to the public domain under [CC0 1.0 Universal](LICENSE).