Important
Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.
This is the production release of the source, download, discovery, and PostgreSQL work that landed after 2026.9.6. It replaces the 2026.9.11-beta prerelease. Use the versioned tags below, or latest / latest-postgres once the Docker workflow finishes.
- SQLite:
ghcr.io/thebadfella/pinchyt:2026.9.14 - PostgreSQL:
ghcr.io/thebadfella/pinchyt:2026.9.14-postgres
Screenshots
These are from a local SQLite install. PostgreSQL backup screens show the SQLite image's unavailable state.
Sources table and poster grid
Source detail
Channel Discovery
PostgreSQL backups in Settings
Sources and library
- Sort Home history by Upload Date, Indexed At, or Downloaded At without resetting the active tab, filters, or pagination.
- Switch the Sources page between the existing table and a poster grid. Filters, sort, and pagination stay shared.
- Source detail pages show counts for Downloaded, Pending, Failed, Prevented, and Skipped, and group the current media page by upload year.
- Lock a source name or description so metadata refresh cannot overwrite it. Unlocking does not immediately restore fetched values.
- Set a custom source poster from a local upload or a URL (JPEG, PNG, WebP). Removing it restores fetched artwork.
- When creating a source, choose Automatic, Channel, Playlist, or Video. Automatic keeps current URL detection. An explicit type is checked against the URL instead of being silently converted.
Channel Discovery
- A Discovery page suggests channels from local description mentions and from featured channels on sources you already have.
- Scanning stays off until you enable it in Settings. Accept opens the normal New Source form.
- The page uses the same app shell as the rest of the UI.
Downloads and availability
- Store the availability yt-dlp reports during indexing and refresh (public, unlisted, members-only, private). Missing or unknown values stay empty and do not stop indexing.
- Each source can choose whether to download public/unlisted media and members-only media. Private media stays blocked. Existing sources keep their current download behavior.
- Failed and prevented items keep a durable reason: manual, policy, or error, plus whether a failure is transient or permanent. Retry Now follows normal retry rules; Force Retry can attempt a permanent failure.
- YouTube rate limits and similar bot-challenge responses are not treated as permanent download blocks.
- A source can override the YouTube player client passed to yt-dlp. Default keeps the existing command.
- Optional bgutil-compatible PO-token provider via
POT_PROVIDER_URL. Disabled installs keep the current container layout and yt-dlp arguments. DOWNLOAD_STAGING_PATHfinishes a download on local disk, then transfers complete files to the media library. If unset, downloads still go straight to the library.
PostgreSQL
- SQLite remains the
latestimage. A separate PostgreSQL image is published aslatest-postgresand<version>-postgres. There is no automatic copy from an existing SQLite database. - The PostgreSQL image can create custom-format
pg_dumpbackups from Settings. SQLite images show this as unavailable. Dumps are database state only; they do not include media files. - PostgreSQL deployments use PostgreSQL 18 by default, including client tools and the documented data volume path. Existing PostgreSQL 16 volumes are not compatible as-is.
Maintenance
- Bump the application version to
2026.9.14. - Follow-up UI and policy fixes after the first cut of this work, including source library layout, Channel Discovery in the app shell, and download error classification.
latestis SQLite-only. PostgreSQL images uselatest-postgresand<version>-postgres.- The Sources page no longer returns HTTP 400 for sources that already have stored metadata.
Verification
- Automated coverage for this work shipped with the merges on
masterafter2026.9.6, including pull requests #55, #56, #57, #58, #59, and #60. - Screenshots were taken against the running Docker UI on SQLite. Live PostgreSQL dumps, a real OIDC provider, and live yt-dlp discovery scans were not re-run for this tag.
Commit Range
- Previous release:
2026.9.6 - This tag:
2026.9.14 - Compared range:
2026.9.6...2026.9.14




