Skip to content

Roadmap

o51r15 edited this page Jun 25, 2026 · 1 revision

Roadmap

Completed

  • v0.1.0 — PostgreSQL backend migration. Replaces SQLite with Postgres, resolves Oban write contention, migrates full-text search to tsvector, rewrites all SQLite-specific query syntax.
  • Source-level content availability filtering — Per-source checkboxes to control whether public videos, members-only videos, or both are downloaded. Captures yt-dlp availability field at index time and re-evaluates on rescan.
  • Error classification systemerror_type field on media_items to distinguish permanent failures (members-only, unavailable, geo-blocked) from transient ones (network errors, rate limits).
  • Permanent failure prevention — Once a video is classified as a permanent failure, prevent_download: true is set automatically so it stops consuming retry cycles.
  • Oban Lifeline plugin — Rescues jobs stuck in executing state after a crash or container restart. Automatically retries them after 30 minutes.
  • yt-dlp version managementYT_DLP_VERSION env var controls update behavior: stable, nightly, master, pinned/none, or a specific version string.
  • Download prevention reason trackingdownload_prevented_reason field distinguishes manual prevention, policy blocks, and error-stops so re-indexing doesn't accidentally re-enable intentionally blocked items.
  • YouTube API key tester — One-click API key validation from the Settings page.
  • Sonarr-inspired UI overhaul — Source library as poster card grid, fanart banner on source detail pages, horizontal action bar, year-grouped episode list, Activity page, System Status page.
  • SABR bypass and video client override — Per-source video client selector to route around SABR-corrupted downloads. Cookie-incompatible clients blocked at save time when cookies are in use.
  • Cookie behaviour per source — Granular control: Disabled / When Needed / All Operations.
  • Source type selector — Channel vs Playlist is user-selectable on the new source form, overriding unreliable auto-detection.
  • Metadata editor — Edit source name and description with per-field lock toggles; upload or link a custom poster image.
  • Metadata reliability fixes — Scoped yt-dlp output template prevents JSON truncation on resource-constrained hosts; graceful error handling prevents metadata failures from causing Oban retry noise.

Planned

  • PubSub live UI updates (v0.4.0) — LiveViews currently don't subscribe to PubSub, leaving the UI stale until manual reload. Sources and activity pages should update in real time.
  • Sonarr UX completion (v0.4.1) — Remaining items from the Sonarr UX backlog: monitored toggle persistence, source card polish, and other minor UX gaps.
  • Queue diagnostics page — Oban queue health stats, stuck job detection, and bulk reset/cancel actions.
  • Bulk operations (v0.5.0) — Bulk source enable/disable, bulk media prevent/allow, and other multi-item actions.
  • Async backup (v0.5.0) — Background pg_dump so backup no longer blocks the HTTP request.
  • UX polish (v0.5.1) — Minor visual and interaction improvements across the UI.
  • SQLite migration task (v0.6.0)mix pinchflat.migrate_sqlite to help users migrate from upstream Pinchflat to this fork.
  • Notifications and backup completion (v0.6.1) — Apprise notification improvements and backup workflow completion.
  • v1.0.0 public promotion — r/selfhosted post and blog post capstone framing the project history.

Known Bugs

Playlist support is inconsistent

Playlists may fail to download media, fail to fetch metadata, or behave unpredictably depending on the deployment environment. In testing, one instance fetched nothing when a playlist URL was added; another downloaded episodes but never retrieved metadata. Channel URLs are more reliable. Under active investigation.

ARM hardware (Raspberry Pi) — source type misdetection

On ARM builds of yt-dlp, YouTube channel handle URLs are consistently misidentified as playlists because playlist_id != channel_id for handle-style URLs. This causes the wrong metadata path to be used (episode thumbnail instead of channel avatar). The source type selector (added in v0.3.7) works around this by letting you specify the type manually. ARM-specific bugs are low priority and may not be fixed promptly.

PO token not passed to source detail fetches

When adding a new source, get_source_details calls yt-dlp without the bgutil PO token extractor arguments. On ARM hardware without cookies configured, this can trigger bot detection from YouTube before the source is even saved. Workaround: configure cookies on the source. Long-term fix: pass PO token args to get_source_details.

Playlist metadata fetch produces no poster on some configurations

The metadata worker takes different code paths for channel vs playlist sources. On playlist-typed sources, it uses --write-thumbnail with playlist_items: 1, which writes an episode thumbnail rather than a channel/playlist avatar. This is expected behavior for true playlists but is a visible problem for channels that were misdetected as playlists. The source type selector resolves this for new sources; existing misdetected sources need to be manually corrected.

Clone this wiki locally