Repository navigation
Tags
Tags
fix: queue each video of a channel added without a tab (closes #1111) yt-dlp returns a channel URL without a tab (youtube.com/@name) as a playlist of its tabs: Videos, Live, Shorts, each a playlist itself. The playlist loop forced every entry to a video, so each tab became one row that downloaded the whole tab in a single process, and one failure failed the row. Retrying it re-added the tab, which then expanded per video under the playlist template instead of the channel one, so every file was downloaded again into a differently named folder. Add a nested playlist entry as a playlist: each tab's videos are queued as the tab's own URL would queue them, with the channel's folder and context. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: report yt-dlp extractor crashes as errors instead of a 500 (closes #1108) yt-dlp wraps its own failures in YoutubeDLError but lets an extractor bug out as-is. GloboArticle claims every *.globo.com URL, and on a direct m3u8 link with a live token it fetches the playlist as its "webpage" and crashes on .strip() of a missing title. The add path caught only YoutubeDLError, so the AttributeError reached aiohttp as a bare "500 Server got itself in trouble". Each place that runs yt-dlp now also catches any other exception, logs the traceback, and reports it the same way as an extraction error: - add: a failed entry in Completed with the message - download: an error status with a message, instead of none - browse and subscribe: an error response, instead of a 500 - subscription check: recorded on the subscription, so it shows the error and waits its interval instead of re-checking every tick Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: don't mark private playlist videos seen in subscription scans (c… …loses #1105) A video added to a playlist while still private was listed by the scan, marked seen, failed to download, and was never queued once published. Scans now pass yt-dlp's no-youtube-unavailable-videos compat option, which leaves the hidden private/deleted placeholders out of the listing, so such a video is new on the first check after it goes public. It is added to any compat_opts the user configured. The Browse dialog shares the scan and no longer lists those placeholders either. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
build: upgrade Python and frontend dependencies aiohttp 3.14.3 -> 3.14.5 fixes Dependabot alerts 272-274 (unbounded memory/CPU on crafted requests, no timeout before the first request byte, Secure not enforced on the shared cookie). Everything else moves to its latest release in range: Angular 22.2.3, angular-eslint 22.6, vitest 5.0.5, multidict 7, and the transitive source-map-js 1.2.2 that pnpm audit flagged under jsdom. typescript stays on ~6.0: Angular 22.2 and typescript-eslint both still require < 6.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: apply the connect-time address guard to playlist/channel metadat… …a files The feed-level metadata pass runs yt-dlp in the main process, outside the download subprocess's socket guard, and the thumbnail it fetches is saved into the download directory. Its URL comes from the feed, so it was only as trustworthy as the site that served it. socket_guard_scope applies the same guard to the calling thread for the duration of that pass, with the same proxy and PO token provider allowances as a download. A refused thumbnail is a yt-dlp warning; the add and the other metadata files are unaffected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PreviousNext