371 Commits

Author SHA1 Message Date
Jonathan Sykes
9c1ec4ac51 Add presenter view, stats, lyrics worker, watch party with voice chat, timestamp sharing, soundbites, notes, transcript search, PiP, EQ, sleep fade, gestures and external players; fix the crossfade end-of-song race 2026-09-20 00:07:12 +08:00
Jonathan Sykes
ca07e1fdf1 Add gapless and crossfade playlist transitions with a mode toggle, and a waveform seek bar for audio-only playback 2026-09-19 16:12:33 +08:00
Jonathan Sykes
71fc51fb50 Add a lyrics-only service mode view with the sung line centred and auto-sized, and a free local faster-whisper script to transcribe saved songs 2026-09-19 08:33:00 +08:00
Jonathan Sykes
b82f17cd46 Add phone remote control: pair a phone with a 6-digit code or QR to drive a desktop instance's playback, queue, volume, sleep timer and service mode 2026-09-18 20:19:00 +08:00
Jonathan Sykes
524db986d2 Add shared synced lyrics, chapters and personal bookmarks with revision history, API tokens and an admin page 2026-09-18 18:10:10 +08:00
Jonathan Sykes
a20dd0a3a6 Replace saved copies that fail to play, reject truncated saves, and re-check the device cache when the app returns to the foreground 2026-09-18 10:11:20 +08:00
Jonathan Sykes
64f45a102d Check the playlist inbox when the app returns to the foreground and every two minutes while open
Sent playlists were only picked up on a cold start, so an installed PWA
resumed from the background never showed them.
2026-09-18 09:28:01 +08:00
Jonathan Sykes
e4ac04cb5c Sample two short windows before re-encoding a cached video and skip the full encode when HEVC will not save 15 percent 2026-09-14 00:51:14 +08:00
Jonathan Sykes
8b0060d42a Re-encode cached videos to HEVC when it saves at least 15 percent and serve them only to devices that can decode HEVC 2026-09-13 21:09:15 +08:00
Jonathan Sykes
91dab289c3 Show the update banner only when the running build differs from the server and make Refresh UI land the new shell on flaky links 2026-09-13 17:42:50 +08:00
Jonathan Sykes
5fb863ba25 Cache every played or saved video on the server via background jobs with a validation gate and a Broken re-download button 2026-09-13 09:45:01 +08:00
Jonathan Sykes
292a0c7e29 Show the video inline in service mode and keep audio alive in the background 2026-09-08 17:36:55 +08:00
Jonathan Sykes
a3089dde74 Add a service mode shortcut to the now-playing bar and a video panel toggle 2026-09-08 16:59:43 +08:00
Jonathan Sykes
3e1b56610f Let a shared playlist be sent to another user by name 2026-09-08 15:52:46 +08:00
Jonathan Sykes
9366b1749c Keep service mode full-bleed on iOS and hide the player chrome behind it 2026-09-08 11:55:15 +08:00
Jonathan Sykes
765a00b412 Drop the old Windows desktop build artifacts from the tree 2026-09-08 11:44:14 +08:00
Jonathan Sykes
e91fe83cc7 Fill the phone screen in service mode and open it on the playing song 2026-09-08 06:51:03 +08:00
Jonathan Sykes
06f80debc0 Prefer h264 formats for saves so cached copies play on every device 2026-09-01 07:02:57 +08:00
Jonathan Sykes
a159c1e642 Note deferred cookies-jar work for the YouTube bot gate in the backlog 2026-08-27 10:28:48 +08:00
Jonathan Sykes
d073d20060 Retry yt-dlp against alternate player clients when YouTube demands sign-in 2026-08-27 07:22:02 +08:00
Jonathan Sykes
94fff8f862 Report live streams as unsupported instead of an empty quality list 2026-08-24 01:07:18 +08:00
Jonathan Sykes
c141959654 Serialize saves, disable idle timeout, cap savable length at 3h 2026-08-24 00:21:18 +08:00
Jonathan Sykes
04c419d151 Coalesce save downloads, kill them on disconnect, refuse live and over-long videos 2026-08-23 23:50:10 +08:00
Jonathan Sykes
ea9e372c1e Rate-limit save downloads so they no longer starve playback 2026-08-23 23:13:45 +08:00
Jonathan Sykes
d1ba9d1e9c Fix play proxy cancel crashing the server on client disconnect 2026-08-23 22:54:31 +08:00
Jonathan Sykes
831063125d Enable bun as yt-dlp JS runtime to avoid throttled stream URLs 2026-08-23 22:41:37 +08:00
Jonathan Sykes
8177f5c665 Chunk playback proxy at 10MB and merge adaptive streams for saves 2026-08-23 15:43:01 +08:00
Jonathan Sykes
c8a9755e93 Restrict playback proxy to direct https streams, prefer adaptive
Newer yt-dlp surfaces HLS (m3u8) and DASH-segment formats whose url is a
manifest, not media bytes; proxying those served the video element an
unplayable m3u8 and broke Range seeking (416). Keep only protocol=https
formats, and prefer adaptive video-only streams (paired with the separate
audio) over progressive muxed formats, which are more reliable.
2026-08-23 15:15:02 +08:00
Jonathan Sykes
defc8a7f1a Proxy YouTube playback through server to fix intermittent 403s
Direct googlevideo URLs are bound to the extractor's IP and expire, so the
browser fetching them from a different IP got intermittent 403s on playback.
Route playback through a same-origin /api/play proxy that fetches the stream
server-side (matching the extractor IP) with yt-dlp's own http_headers and
forwards Range headers for seeking; fall back to piping yt-dlp for SABR/itag-18
formats a plain GET can't fetch. Prefer adaptive streams over progressive in
the playback fallback order.
2026-08-23 15:04:18 +08:00
Jonathan Sykes
ee78c8561b fix playlist name overflow with 2-line clamp 2026-08-17 02:13:51 +00:00
Jonathan Sykes
c08558cfb4 Enhance 5 layout themes with structural CSS — topbar, nav accents, mini-bar, ambient layers 2026-08-17 00:29:52 +00:00
Jonathan Sykes
9c2146aef8 Fix layout theme grid overrides breaking mobile — wrap in min-width:861px 2026-08-17 00:21:50 +00:00
Jonathan Sykes
eb6ed215fe Add 6 selectable layout themes to Settings (Appearance) 2026-08-16 16:33:26 +00:00
Jonathan Sykes
d01aedd4b2 Record the new playlist and set-list features in the backlog 2026-08-16 13:58:41 +00:00
Jonathan Sykes
8ef16a8b38 Add per-song notes on playlist entries 2026-08-16 13:58:22 +00:00
Jonathan Sykes
14e1d8e3dd Add service mode set-list view with screen wake lock 2026-08-16 13:51:27 +00:00
Jonathan Sykes
c5f47514ad Show per-playlist offline status and add a keep-offline pin 2026-08-16 13:45:19 +00:00
Jonathan Sykes
b868dabe27 Add bulk import of a YouTube playlist URL 2026-08-16 13:39:02 +00:00
Jonathan Sykes
27b28f767b Add shareable single-playlist links with additive import 2026-08-16 13:32:18 +00:00
Jonathan Sykes
57413a07a1 Hide the list pane on the home view until the first search 2026-08-16 12:58:05 +00:00
Jonathan Sykes
5a9304780a Give the empty-home playlist grid the full pane height instead of a clipped 16:9 box 2026-08-16 08:52:18 +00:00
Jonathan Sykes
4fd68ae88e Document cache layout, offline thumbnails and test invocation 2026-08-16 08:48:50 +00:00
Jonathan Sykes
49198ff239 Cache video thumbnails for offline use 2026-08-15 07:26:56 +00:00
Jonathan Sykes
fa9ef000b9 Show playlists instead of the branding hero on the empty home 2026-08-15 07:19:46 +00:00
Jonathan Sykes
b2154bd9c4 Add shareable profile link to settings and sidebar 2026-08-15 06:58:43 +00:00
Claude Worker
70460232f0 feat: Add scrubber with A/B markers for video editing/downloading 2026-07-18 17:59:20 +00:00
Claude Worker
046aa67108 feat: Add visual scrubber to video editor
Task #69 completed by ClaudeQueue

ClaudeQueue
2026-07-18 17:50:27 +00:00
Claude Worker
8c0776f97d feat: Add support for editing video
Add an Edit
2026-07-18 16:43:15 +00:00
Jonathan Sykes
94dba16ff6 Add plan-queue and run-queue skills 2026-07-16 20:51:51 +08:00
Jonathan Sykes
6fff68884b add per-song remember-position flag and playlist play-in-full mode 2026-07-14 15:15:11 +08:00