Skip to content

Releases: TheBadFella/Pinchflat-NGX

Release 2026.9.28 - Source Import and Download Fixes

Choose a tag to compare

@TheBadFella TheBadFella released this 27 Sep 18:02
efa5c10

This release fixes download failures and source creation friction, and adds text-file source import. SQLite and PostgreSQL images are published for linux/amd64 and linux/arm64.

  • SQLite: ghcr.io/thebadfella/pinchflat-ngx:2026.9.28 (latest)
  • PostgreSQL: ghcr.io/thebadfella/pinchflat-ngx:2026.9.28-postgres (latest-postgres)

Sources

  • New Source selects the first available media profile. Cloning a source keeps its selected profile. (#72)
  • Import sources from a text file with one URL per line. The result shows which entries were added, rejected, or repeated. (#73)

Downloads and PostgreSQL

  • Staged downloads finish when yt-dlp returns null subtitle or thumbnail metadata, and the moved video is saved at its final path. (#64)
  • PostgreSQL stores the full yt-dlp error for unavailable videos without failing while recording the download error. (#74)
  • Jobs can broadcast before the web endpoint starts without failing. A failed yt-dlp update leaves the working executable in place. (#66)

Docker and maintenance

  • GHCR images are retained by the package cleanup job. (#65)
  • Docker builds no longer make a redundant yt-dlp update request that hit GitHub's API rate limit. (#77)
  • Bump the application version to 2026.9.28.

Dependency updates

PR #63 refreshed:

  • Containers and CI: Node 25, Docker Buildx 4.4.1, and Build Push 7.4.0.
  • Frontend: Alpine.js 3.17.3 and Prettier 3.9.8.
  • Elixir app: Phoenix 1.8.14, LiveView 1.2.12, LiveDashboard 0.9.1, and Oban 2.24.1.
  • Other Elixir packages: Mox, OpenApiSpex, Swoosh, and tzdata.

Verification

  • Hosted lint and test jobs passed with SQLite and PostgreSQL; PostgreSQL migration tests passed.
  • The Docker release workflow built both database variants for amd64 and arm64 and published the manifests.
  • Both amd64 images pulled locally and reported pinchflat 2026.9.28. The published SQLite image passed its health check and served the Sources page.

Commit Range

Release 2026.9.19 - Rebrand to Pinchflat-ngx, Brand Assets, and Gallery

Choose a tag to compare

@TheBadFella TheBadFella released this 20 Sep 03:43

Rebrand to Pinchflat-ngx

PinchYT has officially been rebranded to Pinchflat-ngx across the entire application, UI, documentation, and container release pipelines.

⚠️ Container Image Migration Notice

Please update your docker-compose.yml or container run commands to migrate to the new image name:

  • SQLite (Default):
    image: ghcr.io/thebadfella/pinchflat-ngx:latest
  • PostgreSQL:
    image: ghcr.io/thebadfella/pinchflat-ngx:latest-postgres

Note

For backward compatibility, images are dual-published to ghcr.io/thebadfella/pinchyt for this release so existing deployments are not disrupted. Your existing data directories, database files, and config mounts remain 100% compatible.


Highlights in This Release

  • Brand Identity & AMOLED Theme:

    • New Material 3 AMOLED loop monogram logo, dark favicon, and scalable SVG brand assets stored under docs/assets/brand/.
    • Responsive expanded and collapsed brand header navigation
    • Updated sidebar with direct links to the Pinchflat-ngx Wiki.
  • Interface Gallery & Channel Artwork:

    • High-resolution UI captures for the Dashboard, Sources Table, Sources Poster Grid, Source Details, Channel Discovery, and System Diagnostics.
    • Poster grid and source detail headers now display full YouTube channel artwork.
  • PostgreSQL & Production Improvements:

    • Enhanced PostgreSQL 18 in-app database backups and retention management.
    • Multi-architecture container builds supporting both linux/amd64 and linux/arm64.

Release 2026.9.18 - HEAD Probe Optimization and Sources Query Improvements

Choose a tag to compare

@TheBadFella TheBadFella released this 18 Sep 04:59

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release includes performance improvements for uptime/health probes and the Sources view, resolving log noise and excessive database queries. Use the versioned tags below, or latest / latest-postgres once the Docker workflow finishes.

  • SQLite: ghcr.io/thebadfella/pinchyt:2026.9.18
  • PostgreSQL: ghcr.io/thebadfella/pinchyt:2026.9.18-postgres

Performance and Health Probes

  • HEAD Probe Fast-Path: HEAD / requests now return HTTP 200 immediately without running database aggregations or rendering views, stopping uptime monitors (Homepage siteMonitor, Uptime Kuma, reverse proxies) from executing database query bursts every few seconds.
  • Sources Query Optimization: Sources.list_sources() is now only queried for JSON requests, avoiding redundant database lookups when rendering the Sources HTML view (which is handled by IndexTableLive).
  • Monitoring Toggle Safety: Form changesets in SourceEnableToggle are isolated to %{enabled: ...} on update events to prevent preloaded structs from triggering Ecto casting errors.

Maintenance

  • Bump the application version to 2026.9.18.

Verification

  • Automated test added in test/pinchflat_web/controllers/page_controller_test.exs validating HEAD / responses.
  • Full ExUnit test suite passed with 86 tests and 0 failures.
  • Prettier, mix format, and Credo passed with 0 issues.

Commit Range

Release 2026.9.14 - Source Library, Channel Discovery, and PostgreSQL

Choose a tag to compare

@TheBadFella TheBadFella released this 14 Sep 16:33
4d15b63

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

Sources table

Sources poster grid

Source detail

Source detail

Channel Discovery

Channel Discovery

PostgreSQL backups in Settings

PostgreSQL backups

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_PATH finishes 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 latest image. A separate PostgreSQL image is published as latest-postgres and <version>-postgres. There is no automatic copy from an existing SQLite database.
  • The PostgreSQL image can create custom-format pg_dump backups 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.
  • latest is SQLite-only. PostgreSQL images use latest-postgres and <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 master after 2026.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

Release 2026.9.6 - OIDC Sign-In and a New Documentation Home

Choose a tag to compare

@TheBadFella TheBadFella released this 07 Sep 01:41
744387b

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release adds optional OpenID Connect sign-in, gives the project README a focused Material 3 refresh, and moves detailed setup and operations guidance into the public wiki.

OIDC Single Sign-On

  • Add optional OIDC/OAuth 2.0 login using the authorization code flow with PKCE, state, and nonce validation.
  • Support provider discovery, configurable scopes, client authentication methods, display names, and redirect URIs.
  • Protect browser sessions with encrypted cookies, safe return paths, and LiveView disconnects on logout.
  • Keep feeds and route-token access compatible with existing clients. Public API and health-check routes remain public by design.
  • Add an end-to-end setup guide for Authentik and other standards-compliant OIDC providers in the PinchYT wiki.

Special thanks to @TomRoyls, PinchYT's first community contributor, for proposing and implementing the initial OIDC flow and its test coverage in #37.

README and Wiki

  • Rebuild the README as a concise Material 3 project landing page without losing the complete list of additions over upstream Pinchflat.
  • Launch the public wiki with focused guides for installation, environment variables, OIDC, upgrades and rollback, backups and restore, diagnostics, and PinchYT-specific features.
  • Add clearer links to the web UI, instance-local API documentation, support channels, and operational guides.

Maintenance

  • Refresh Elixir, frontend, and Docker workflow dependencies through #36.
  • Add repository-specific contributor guidance, verification workflows, and UI smoke-test data for maintainers.
  • Bump the application version to 2026.9.6.

Verification

  • GitHub Actions completed the full project checks successfully.
  • All 1,547 tests passed.
  • README links, rendered Markdown, the hero artwork, and every published wiki page were checked after publication.

Commit Range

Release 2026.8.21 - ARM64 Docker Images

Choose a tag to compare

@TheBadFella TheBadFella released this 21 Aug 14:26
6769535

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release restores multi-platform Docker images so PinchYT is easier to run across more self-hosted systems.

ARM64 Docker Images

I've seen users forking PinchYT just to add ARM64 builds, so I thought I'd add those builds directly.

  • Published release and version tags now include both linux/amd64 and linux/arm64 images.
  • Docker automatically selects the correct architecture when pulling a multi-platform tag.
  • ARM64 builds run natively on GitHub's ARM64 runners and support 64-bit ARM systems, including Raspberry Pi devices running a 64-bit OS.

Documentation

  • Add a README section describing the GHCR image location, supported architectures, and the difference between latest and pinned version tags.

Commit Range

  • Previous release: 2026.8.17
  • New release: 2026.8.21

Release 2026.8.17 - yt-dlp Settings, Failed Downloads, and Version Status

Choose a tag to compare

@TheBadFella TheBadFella released this 17 Aug 17:52

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release covers changes after 2026.8.14 and focuses on Settings controls for yt-dlp, failed-download recovery, sidebar version status, and a cleaner Docker Compose layout.

Highlights

Settings & yt-dlp

  • Add a Settings editor for extra yt-dlp base config options (the same flags you would put in a yt-dlp config file).
  • Add Settings search so notifications, extractor, cookies, and yt-dlp options are easier to find.
  • Expose yt-dlp download, index, and metadata worker limits in Settings. Compose YT_DLP_*_WORKER_CONCURRENCY env vars still override the UI when set.

Downloads & Retries

  • Add a Failed tab on Home with retry-all and per-item retry from history and source tables.
  • Keep cookies on forced retries even when livestream prechecks are skipped.

Interface & Diagnostics

  • Add a sidebar status card for PinchYT (Latest, or the installed version with an update warning) and the configured yt-dlp policy (Stable, Nightly, Frozen, Until stable, or a pinned version).
  • Keep Diagnostics integrity tools usable on small screens.

Docker & Operations

  • Move Compose files into docker/ and add a root compose.yaml include so docker compose up still works from the repo root.
  • Continue installing FFmpeg from yt-dlp/FFmpeg-Builds latest (master builds, currently FFmpeg 9.x). That feed does not publish a separate n9.0 tarball yet.

Maintenance & Dependencies

  • Update Phoenix LiveDashboard from 0.8.7 to 0.9.0.
  • Update Alpine.js from 3.15.12 to 3.16.1.
  • Update Prettier from 3.9.5 to 3.9.6.
  • Update GitHub Actions actions/checkout from 7.0.0 to 7.0.1.
  • Update GitHub Actions docker/login-action from 4.4.0 to 4.6.0.

Commit Range

  • Previous release: 2026.8.14
  • New release: 2026.8.17
  • Compared range: 2026.8.14..2026.8.17

Release 2026.8.14 - File Reconciliation and Database Maintenance

Choose a tag to compare

@TheBadFella TheBadFella released this 15 Aug 01:01

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release covers changes after 2026.7.2 and focuses on file reconciliation, safe database maintenance, downloader and indexing reliability, and framework updates.

Highlights

File Reconciliation & Media Server Compatibility

  • Add File Reconciliation Engine (Local, Online, and Full sync modes) to move, rename, and backfill media and sidecars without re-downloading media.
  • Add live progress tracking, parallel background asset backfills, and interrupted-run crash recovery during reconciliation apply.
  • Switch episode thumbnail filenames from <basename>-thumb.jpg to <basename>.jpg for immediate, out-of-the-box Plex compatibility alongside Jellyfin and Kodi.

Database Maintenance & Diagnostics

  • Add safe database compaction (SQLite VACUUM) with free disk space checks and background job queue pausing to eliminate lock contention.
  • Add scheduled monthly automatic database compaction.
  • Add on-demand SQLite integrity checks directly from the Diagnostics UI.
  • Add Queue Diagnostics controls to reset, requeue, or delete failed, stuck, or discarded Oban jobs.
  • Add non-blocking exponential retry backoff with jitter to eliminate thundering herd retries on transient errors.

Download & Indexing Controls

  • Add per-tab channel indexing (/videos, /shorts, /streams) so --break-on-existing never misses newly published Shorts or Streams.
  • Add Source Index Cutoff Date with automatic forced re-indexing when a cutoff date is widened.
  • Add dual SponsorBlock category selection (independent mark vs remove category lists).
  • Add option to exclude YouTube AI-upscaled / super-resolution format streams (ignore_youtube_super_resolution).
  • Add robust JSON response decoding to prevent unhandled decoder errors on malformed responses.
  • Add cookie file management for uploading, pasting, and inspecting cookies directly from the web UI.
  • Add independent concurrency settings separating download worker limits from indexing worker limits.

Interface & Design Polish

  • Modernize UI across all views with 100% adherence to Material Design 3 semantic tokens and surface foundations.
  • Add global 12h / 24h clock display preference.

Maintenance & Dependencies

  • Update Phoenix from 1.8.8 to 1.8.11.
  • Update Phoenix LiveView from 1.2.5 to 1.2.9.
  • Update Ecto from 3.14.0 to 3.14.2.
  • Update Oban from 2.23.0 to 2.23.1.
  • Update Swoosh from 1.26.2 to 1.27.0.
  • Update Prettier from 3.9.4 to 3.9.5.
  • Update GitHub Actions docker/login-action to v4.4.0.

Commit Range

  • Previous release: 2026.7.2
  • New release: 2026.8.14
  • Compared range: 2026.7.2..2026.8.14

Release 2026.7.2 - Queue Diagnostics and Download Controls

Choose a tag to compare

@TheBadFella TheBadFella released this 02 Jul 21:40

Important

Personal Fork Disclaimer: PinchYT is maintained as a personal fork of Pinchflat for continued development and day-to-day self-hosted use.

This release covers changes after 2026.6.6 and focuses on operational visibility, safer download behavior, and more complete settings controls.

Highlights

Queue Diagnostics

  • Add a Queue Diagnostics page for inspecting Oban jobs by state.
  • Move app/runtime information into diagnostics so operations details live together.
  • Add controls to reset or cancel individual jobs and clear discarded queues.

Download And Indexing Controls

  • Add settings for yt-dlp update policy, including nightly, nightly-until-stable, and pinned behavior.
  • Add yt-dlp version lookup and update management helpers.
  • Add YouTube API key testing from Settings.
  • Add cookies file management for uploading, pasting, inspecting, and clearing the shared cookies file.
  • Add a setting to ignore unavailable, private, removed, or members-only media instead of retrying indefinitely.
  • Surface unavailable and auto-skipped media as distinct statuses in the Other tab.

Reliability Fixes

  • Fix indexing reschedule behavior so it can override unique Oban options instead of deduplicating against an executing job.
  • Fix NFO aired dates to render as plain dates.
  • Pass force: true through redownload flows where needed.
  • Update Oban worker uniqueness state handling for the new :suspended state.
  • Improve source metadata error handling and related tests.

Interface And Data Polish

  • Label binary byte sizes with IEC units such as KiB, MiB, and GiB.
  • Fix source table Size values so they remain correct after re-sorting.
  • Clarify metadata and NFO toggle labels in the media profile form.
  • Add README coverage for the new settings, status, and diagnostics features.

Maintenance

  • Update Phoenix from 1.8.7 to 1.8.8.
  • Update Phoenix LiveView from 1.1.28 to 1.2.3.
  • Update Oban from 2.22.1 to 2.23.0.
  • Update Finch from 0.21.0 to 0.22.0.
  • Update Credo from 1.7.18 to 1.7.19.
  • Update Prettier from 3.8.3 to 3.8.4.
  • Configure Dependabot for automated dependency updates across supported ecosystems.

Commit Range

  • Previous release: 2026.6.6
  • New release: 2026.7.2
  • Compared range: 2026.6.6..2026.7.2

Release 2026.6.6 - Single-Video Sources, Selective Playlists, and Material 3 UI

Choose a tag to compare

@TheBadFella TheBadFella released this 16 Jun 21:34

Important

Personal Fork Disclaimer: This fork is maintained for personal use and to continue development while the upstream project remains the canonical source.

Note

I was previously running this as a fork of another fork, and finally decided to attach it directly to the original canonical app!

Features Included in this Fork

Sources

  • Single Video Sources: Add one-off YouTube video URLs directly as sources, not just channels and playlists.
  • Selective Playlist Downloads: Delay playlist downloads, review indexed items, and choose exactly what to fetch from the Selection flow.
  • Stronger Source Controls: Manage sources faster with clearer automatic vs delayed indicators plus inline and dropdown start, pause, and stop actions.
  • Faster Source Actions: New inline notification links and direct source delete controls make routine source management quicker.
  • Per-Source Folder Routing: Send each source into its own folder with a picker for existing folders and template-aware output routing.

Interface

  • Material 3 AMOLED Theme: A darker, more opinionated visual layer with Material-inspired spacing, surfaces, controls, and hierarchy.
  • Native Tailwind v4 Pipeline: Shared theme tokens and the native Tailwind v4 asset pipeline make the refreshed UI more consistent and maintainable.
  • Cleaner Form UX: Better toggles, custom selects, clearer source/profile editing states, and improved source creation guidance.
  • Collapsible Sidebar: Desktop navigation can collapse for a denser, more focused layout.
  • Broader Mobile Polish: Source, job, and history views have improved responsive layouts for smaller screens.

Downloads

  • Cookie Management UI: Upload, paste, and inspect the shared cookies.txt file directly from the app.
  • Download Speed Visibility: See live download speed in the jobs dashboard and media tables.
  • Smarter Retry Behavior: Retry flows clear stale errors properly and keep task state more accurate.
  • Nightly yt-dlp Builds: Track newer yt-dlp builds for faster compatibility with upstream extractor changes.

Operations

  • Extra Diagnostics: More structured logging around source creation, indexing, enqueueing, and skipped downloads.
  • Ongoing Fork Tweaks: Small workflow, UI, and reliability improvements that are useful in self-hosted daily use.