TubeSync

image

TubeSync is a PVR (personal video recorder) for YouTube. Or, like Sonarr but for YouTube (with a built-in download client). It is designed to synchronize channels and playlists from YouTube to local directories and update your media server once media is downloaded.

If you want to watch YouTube videos in particular quality or settings from your local media server, then TubeSync is for you. Internally, TubeSync is a web interface wrapper on youtube-dl and ffmpeg with a task scheduler.

There are several other web interfaces to YouTube and youtube-dl all with varying features and implementations. TubeSync’s largest difference is full PVR experience of updating media servers and better selection of media formats. Additionally, to be as hands-free as possible, TubeSync has gradual retrying of failures with back-off timers so media which fails to download will be retried for an extended period making it, hopefully, quite reliable.

Dashboard

Sources

Source Details

Media overview

Media Details

1 Like

PG docker compose

#!/bin/bash
#
################################################################################
---
- hosts: localhost
  gather_facts: false
  tasks:
    # FACTS #######################################################################
    - name: 'Set Known Facts'
      set_fact:
        pgrole: 'tubesync'
        intport: '4848'
        extport: '4848'
        image: 'ghcr.io/meeb/tubesync:v0.9.1'

    # CORE (MANDATORY) ############################################################
    - name: 'Including cron job'
      include_tasks: '/opt/communityapps/apps/_core.yml'

    # LABELS ######################################################################
    - name: 'Adding Traefik'
      set_fact:
        pg_labels:
          traefik.enable: 'true'
          traefik.port: '{{intport}}'
          traefik.frontend.auth.forward.address: '{{gauth}}'
          traefik.frontend.rule: 'Host:{{pgrole}}.{{domain.stdout}}{{tldset}}{{cname}}'
          traefik.frontend.headers.SSLHost: '{{domain.stdout}}'
          traefik.frontend.headers.SSLRedirect: 'true'
          traefik.frontend.headers.STSIncludeSubdomains: 'true'
          traefik.frontend.headers.STSPreload: 'true'
          traefik.frontend.headers.STSSeconds: '315360000'
          traefik.frontend.headers.browserXSSFilter: 'true'
          traefik.frontend.headers.contentTypeNosniff: 'true'
          traefik.frontend.headers.customResponseHeaders: 'X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex'
          traefik.frontend.headers.forceSTSHeader: 'true'

    - name: 'Setting {{pgrole}} Volumes'
      set_fact:
        pg_volumes:
          - '/opt/appdata/{{pgrole}}:/tubesync'
          - '/mnt/move/{{pgrole}}:/downloads'
          - '{{path.stdout}}:{{path.stdout}}'
          - '/etc/localtime:/etc/localtime:ro'

    - name: 'Setting {{pgrole}} ENV'
      set_fact:
        pg_env:
          PUID: '1000'
          PGID: '1000'

    # MAIN DEPLOYMENT #############################################################
    - name: 'Deploying {{pgrole}}'
      docker_container:
        name: '{{pgrole}}'
        image: '{{image}}'
        pull: yes
        published_ports:
          - '{{ports.stdout}}{{extport}}:{{intport}}'
        volumes: '{{pg_volumes}}'
        env: '{{pg_env}}'
        restart_policy: unless-stopped
        networks:
          - name: plexguide
            aliases:
              - '{{pgrole}}'
        state: started
        labels: '{{pg_labels}}'
```[Processing: tubesync.yml...]()