All Projects → mxpv → Podsync

mxpv / Podsync

Licence: mit
Turn YouTube or Vimeo channels, users, or playlists into podcast feeds

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Podsync

Lightgallery.js
Full featured JavaScript image & video gallery. No dependencies
Stars: ✭ 5,168 (+686.61%)
Mutual labels:  vimeo, youtube
Superembed.js
Fluid width for YouTube, Vimeo, Vine, VideoPress, DailyMotion, and more embedded videos.
Stars: ✭ 615 (-6.39%)
Mutual labels:  vimeo, youtube
SharpGrabber
Download from YouTube, Vimeo, PornHub, HLS (M3U8 files) with .NET and JavaScript, Library and desktop app for downloading high quality media
Stars: ✭ 138 (-79%)
Mutual labels:  youtube, vimeo
React Player
A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion
Stars: ✭ 5,931 (+802.74%)
Mutual labels:  vimeo, youtube
Sonatamediabundle
Symfony SonataMediaBundle
Stars: ✭ 415 (-36.83%)
Mutual labels:  vimeo, youtube
podpodge
Convert YouTube playlists to audio-only RSS feeds for podcast apps to consume.
Stars: ✭ 32 (-95.13%)
Mutual labels:  youtube, podcast
Embera
A Oembed consumer library, that gives you information about urls. It helps you replace urls to youtube or vimeo for example, with their html embed code. It has advanced features like offline support, responsive embeds and caching support.
Stars: ✭ 268 (-59.21%)
Mutual labels:  vimeo, youtube
Modal Video
Stars: ✭ 224 (-65.91%)
Mutual labels:  vimeo, youtube
Plyr
A simple HTML5, YouTube and Vimeo player
Stars: ✭ 20,859 (+3074.89%)
Mutual labels:  vimeo, youtube
Ultimate Python Resource Hub
The Ultimate resource hub of Python: All at one place
Stars: ✭ 298 (-54.64%)
Mutual labels:  podcast, youtube
laravel-video-api
Laravel (Youtube/Vimeo) Video Data API
Stars: ✭ 53 (-91.93%)
Mutual labels:  youtube, vimeo
Android Dev Sources
All those Android development sources that you need to be and stay awesome!
Stars: ✭ 434 (-33.94%)
Mutual labels:  podcast, youtube
React Plyr
📺 A React video component based on Plyr
Stars: ✭ 254 (-61.34%)
Mutual labels:  vimeo, youtube
Rssbox
📰 I consume the world via RSS feeds, and this is my attempt to keep it that way.
Stars: ✭ 492 (-25.11%)
Mutual labels:  vimeo, youtube
Lazyframe
🛀🏽 Dependency-free library for lazyloading iframes
Stars: ✭ 237 (-63.93%)
Mutual labels:  vimeo, youtube
php-video-url-parser
A Simple and efficient PHP Video URL Parser that provides you thumbnails and embed codes for various video streaming websites
Stars: ✭ 57 (-91.32%)
Mutual labels:  youtube, vimeo
Workflowshare
Workflow实例分享
Stars: ✭ 137 (-79.15%)
Mutual labels:  vimeo, youtube
Min Vid
Popout video player in Firefox
Stars: ✭ 180 (-72.6%)
Mutual labels:  vimeo, youtube
Openwhyd
💎 Like Pinterest, for Music
Stars: ✭ 287 (-56.32%)
Mutual labels:  vimeo, youtube
Lightgallery
A customizable, modular, responsive, lightbox gallery plugin.
Stars: ✭ 4,829 (+635.01%)
Mutual labels:  vimeo, youtube

Podsync

Podsync

GitHub release (latest SemVer) Go Report Card Patreon Twitter Follow

Podsync - is a simple, free service that lets you listen to any YouTube / Vimeo channels, playlists or user videos in podcast format.

Podcast applications have a rich functionality for content delivery - automatic download of new episodes, remembering last played position, sync between devices and offline listening. This functionality is not available on YouTube and Vimeo. So the aim of Podsync is to make your life easier and enable you to view/listen to content on any device in podcast client.

Features

  • Works with YouTube and Vimeo.
  • Supports feeds configuration: video/audio, high/low quality, max video height, etc.
  • mp3 encoding
  • Update scheduler supports cron expressions
  • Episodes filtering (match by title).
  • Feeds customizations (custom artwork, category, language, etc).
  • OPML export.
  • Supports episodes cleanup (keep last X episodes).
  • One-click deployment for AWS.
  • Runs on Windows, Mac OS, Linux, and Docker.
  • Supports ARM.
  • Automatic youtube-dl self update.
  • Supports API keys rotation.

Dependencies

If you're running the CLI as binary (e.g. not via Docker), you need to make sure that dependencies are available on your system. Currently, Podsync depends on youtube-dl and ffmpeg.

On Mac you can install those with brew:

brew install youtube-dl ffmpeg

Access tokens

In order to query YouTube or Vimeo API you have to obtain an API token first.

Configuration example

You need to create a configuration file (for instance config.toml) and specify the list of feeds that you're going to host. Here is an example how configuration might look like:

[server]
port = 8080
# Bind a specific IP addresses for server ,"*": bind all IP addresses which is default option, localhost or 127.0.0.1  bind a single IPv4 address
bind_address = "172.20.10.2" 
# Specify path for reverse proxy and only [A-Za-z0-9]
path = "test"
data_dir = "/app/data" # Don't change if you run podsync via docker

# Tokens from `Access tokens` section
[tokens]
youtube = "YOUTUBE_API_TOKEN" # YouTube API Key. See https://developers.google.com/youtube/registering_an_application
vimeo = [ # Multiple keys will be rotated.
  "VIMEO_API_KEY_1", # Vimeo developer keys. See https://developer.vimeo.com/api/guides/start#generate-access-token
  "VIMEO_API_KEY_2"
]

[feeds]
  [feeds.ID1]
  url = "{FEED_URL}" # URL address of a channel, group, user, or playlist. 
  page_size = 50 # The number of episodes to query each update (keep in mind, that this might drain API token)
  update_period = "12h" # How often query for updates, examples: "60m", "4h", "2h45m"
  quality = "high" # or "low"
  format = "video" # or "audio"
  # custom.cover_art_quality use "high" or "low" to special cover image quality from channel cover default is equal with "quality" and disable when custom.cover_art was set.
  # custom = { title = "Level1News", description = "News sections of Level1Techs, in a podcast feed!", author = "Level1Tech", cover_art = "{IMAGE_URL}", cover_art_quality = "high", category = "TV", subcategories = ["Documentary", "Tech News"], explicit = true, lang = "en" } # Optional feed customizations
  # max_height = 720 # Optional maximal height of video, example: 720, 1080, 1440, 2160, ...
  # cron_schedule = "@every 12h" # Optional cron expression format. If set then overwrite 'update_period'. See details below
  # filters = { title = "regex for title here", not_title = "regex for negative title match", description = "...", not_description = "..." } # Optional Golang regexp format. If set, then only download matching episodes.
  # opml = true|false # Optional inclusion of the feed in the OPML file (default value: false)
  # clean = { keep_last = 10 } # Keep last 10 episodes (order desc by PubDate)
  # youtube_dl_args = [ "--write-sub", "--embed-subs", "--sub-lang", "en,en-US,en-GB" ] # Optional extra arguments passed to youtube-dl when downloading videos from this feed. This example would embed available English closed captions in the videos. Note that setting '--audio-format' for audio format feeds, or '--format' or '--output' for any format may cause unexpected behaviour. You should only use this if you know what you are doing, and have read up on youtube-dl's options!

[database]
  badger = { truncate = true, file_io = true } # See https://github.com/dgraph-io/badger#memory-usage

[downloader]
self_update = true # Optional, auto update youtube-dl every 24 hours
timeout = 15 # Timeout in minutes

# Optional log config. If not specified logs to the stdout
[log]
filename = "podsync.log"
max_size = 50 # MB
max_age = 30 # days
max_backups = 7
compress = true

Please note: Automatically clean-up will not work without a database configuration.

Episodes files will be kept at: /path/to/data/directory/ID1, feed will be accessible from: http://localhost/ID1.xml

If you want to hide Podsync behind reverse proxy like nginx, you can use hostname field:

[server]
port = 8080
hostname = "https://my.test.host:4443"

[feeds]
  [feeds.ID1]
  ...

Server will be accessible from http://localhost:8080, but episode links will point to https://my.test.host:4443/ID1/...

Schedule via cron expression

You can use cron_schedule field to build more precise update checks schedule. A cron expression represents a set of times, using 5 space-separated fields.

Field name Mandatory? Allowed values Allowed special characters
Minutes Yes 0-59 * / , -
Hours Yes 0-23 * / , -
Day of month Yes 1-31 * / , - ?
Month Yes 1-12 or JAN-DEC * / , -
Day of week Yes 0-6 or SUN-SAT * / , - ?

Month and Day-of-week field values are case insensitive. SUN, Sun, and sun are equally accepted. The specific interpretation of the format is based on the Cron Wikipedia page: https://en.wikipedia.org/wiki/Cron

Predefined schedules

You may use one of several pre-defined schedules in place of a cron expression.

Entry Description Equivalent to
@monthly Run once a month, midnight, first of month 0 0 1 * *
@weekly Run once a week, midnight between Sat/Sun 0 0 * * 0
@daily (or @midnight) Run once a day, midnight 0 0 * * *
@hourly Run once an hour, beginning of hour 0 * * * *

Intervals

You may also schedule a job to execute at fixed intervals, starting at the time it's added or cron is run. This is supported by formatting the cron spec like this:

@every <duration>

where "duration" is a string accepted by time.ParseDuration.

For example, @every 1h30m10s would indicate a schedule that activates after 1 hour, 30 minutes, 10 seconds, and then every interval after that.

One click deployment

Deploy to AWS

How to run

Run as binary:

$ ./podsync --config config.toml

Run via Docker:

$ docker pull mxpv/podsync:latest
$ docker run \
    -p 8080:8080 \
    -v $(pwd)/data:/app/data/ \
    -v $(pwd)/config.toml:/app/config.toml \
    mxpv/podsync:latest

Run via Docker Compose:

$ docker-compose up

How to make a release

Just push a git tag. CI will do the rest.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].