Giter VIP home page Giter VIP logo

podgrab's Introduction

Contributors Forks Stargazers Issues MIT License LinkedIn


Podgrab

Current Version -2022.07.07

A self-hosted podcast manager to download episodes as soon as they become live
Explore the docs »

Report Bug · Request Feature · Screenshots

Table of Contents

About The Project

Podgrab is a is a self-hosted podcast manager which automatically downloads latest podcast episodes. It is a light-weight application built using GO.

It works best if you already know which podcasts you want to monitor. However there is a podcast search system powered by iTunes built into Podgrab

Developers Note: This project is under active development which means I release new updates very frequently. It is recommended that you use something like watchtower which will automatically update your containers whenever I release a new version or periodically rebuild the container with the latest image manually.

Also check out my other self-hosted, open-source solution - Hammond - Vehicle and Expense management system.

Motivation

Podgrab started as a tool that I initially built to solve a specific problem I had. During the COVID pandemic times I started going for a run. I do not prefer taking my phone along so I would add podcast episodes to my smart watch which could be connected with my bluetooth earphones. Most podcasting apps do not expose the mp3 files directly which is why I decided to build this quick tool for myself. Once it reached a stage where my requirements were fulfilled I decided to make it a little pretty and share it with everyone else.

Product Name Screen Shot More Screenshots

Built With

Features

  • Download/Archive complete podcast
  • Auto-download new episodes
  • Tag/Label podcasts into groups
  • Download on demand
  • Podcast Discovery - Search and Add podcasts using iTunes API
  • Full-fledged podcast player - Play downloaded files or stream from original source. Play single episodes, full podcasts and podcast groups(tags)
  • Add using direct RSS feed URL / OMPL import / Search
  • Basic Authentication
  • Existing episode file detection - Prevent re-downloading files if already present
  • Easy OPML import/export
  • Customizable episode names
  • Dark Mode
  • Self Hosted / Open Source
  • Docker support

Installation

The easiest way to run Podgrab is to run it as a docker container.

Using Docker

Simple setup without mounted volumes (for testing and evaluation)

  docker run -d -p 8080:8080 --name=podgrab akhilrex/podgrab

Binding local volumes to the container

   docker run -d -p 8080:8080 --name=podgrab -v "/host/path/to/assets:/assets" -v "/host/path/to/config:/config"  akhilrex/podgrab

Using Docker-Compose

Modify the docker compose file provided here to update the volume and port binding and run the following command

version: "2.1"
services:
  podgrab:
    image: akhilrex/podgrab
    container_name: podgrab
    environment:
      - CHECK_FREQUENCY=240
     # - PASSWORD=password     ## Uncomment to enable basic authentication, username = podgrab
    volumes:
      - /path/to/config:/config
      - /path/to/data:/assets
    ports:
      - 8080:8080
    restart: unless-stopped
   docker-compose up -d

Build from Source / Ubuntu Installation

Although personally I feel that using the docker container is the best way of using and enjoying something like Podgrab, a lot of people in the community are still not comfortable with using Docker and wanted to host it natively on their Linux servers. Follow the link below to get a guide on how to build Podgrab from source.

Build from source / Ubuntu Guide

Environment Variables

Name Description Default
CHECK_FREQUENCY How frequently to check for new episodes and missing files (in minutes) 30
PASSWORD Set to some non empty value to enable Basic Authentication, username podgrab (empty)
PORT Change the internal port of the application. If you change this you might have to change your docker configuration as well (empty)

Setup

  • Enable websocket support if running behind a reverse proxy. This is needed for the "Add to playlist" functionality.
  • Go through the settings page once and change relevant settings before adding podcasts.

License

Distributed under the GPL-3.0 License. See LICENSE for more information.

Roadmap

  • Basic Authentication
  • Append Date to filename
  • iTunes Search
  • Existing episodes detection (Will not redownload if files exist even with a fresh install)
  • Downloading/downloaded indicator
  • Played/Unplayed Flag
  • OPML import
  • OPML export
  • In built podcast player
  • Set ID3 tags if not set
  • Filtering and Sorting options
  • Native installer for Windows/Linux/MacOS

Contact

Akhil Gupta - @akhilrex

Project Link: https://github.com/akhilrex/podgrab

Buy Me A Coffee

podgrab's People

Contributors

akhilrex avatar dannyhanes avatar fracai avatar hannaeko avatar ksurl avatar papodaca avatar strlght avatar unending avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

podgrab's Issues

Episode details

The episode summary is captured in the db but i dont see any way that will show it. hover, or show summary button in episode list would be nice

Add OPML import

I have an enhancement request for you. Add the ability to import podcasts from an OPML file.

[Feature Request] Allow the Setting of GUID / PUID on Docker Container

Sorry, I didn't know where to post on Docker Hub but I know this is the code repo... here goes...

It would be nice if the Docker container allowed the setting of GUID / PUID in the environment variables (similar to all images produced by LinuxServer.io images. As it stands now, the Docker container downloads all files as root:root and then I must constantly chown the entire folder to work with it.

Thanks for your consideration.

Add Episode Number to Filename

Similar to #25, could the ability to add an episode number to the file name based off of order of upload?

I found a podcast that did a bulk re-upload of their episodes on the same day and they reuse titles as it is a theatrical reading of a book.

[Feature Request] Ability to view current download queue

I noticed when I ask an episode to download it says that it's adding to a download queue, but I don't see any way to see the status of that queue in the interface. It would be helpful to know what's being downloaded/how long the queue is.

Podcasts missing thumbnail icon

looks like all podcasts on the relay.fm site and other squarespace based sites are missing the icon on the home page. for example add a podcast like The Test Drivers. it has the default podgrab art. If you click on the podcast, individual episodes have the icon picture. Other podcasts are fine (serial, soundcloud based feed, other hosts, etc)

Integration with AntennaPod

Integration with AntennaPod

I posted feature request here
An integration between a self-hosted project like Podgrab and an open source client like AntennaPod would be great.

Pub Date parsing error

There seems to be a date parsing error somewhere in your code.

I added Dan Carlin's hardcore history rss feed, and just one episode wasn't appearing. I thought it got skipped somehow, but went to "older" episodes and it showed up. Somehow the pub date was parsed and entered into the DB incorrectly for just that entry.

Here is the SQL insert command for that entry.

[100.376ms] [rows:1] INSERT INTO `podcast_items` (`id`,`created_at`,`updated_at`,`deleted_at`,`podcast_id`,`title`,`summary`,`episode_type`,`duration`,`pub_date`,`file_url`,`guid`,`image`,`download_date`,`download_path`,`download_status`) VALUES ("591fb0a7-dc26-42e2-a95b-3b151eb5d346","2021-01-02 02:51:17.31","2021-01-02 02:51:17.31",NULL,"3d015866-159e-41d3-9152-09524343d10f","Supernova in the East IV","Coral Sea, Midway and Guadalcanal are three of the most famous battles of the Second World War. Together they will shift the momentum in the Pacific theater and usher in the era of modern naval and amphibious warfare.","",0,"0000-00-00 00:00:00","http://feedproxy.google.com/~r/dancarlin/history/~5/lkhm6J41OJc/dchha65_Supernova_in_the_East_IV.mp3","http://traffic.libsyn.com/dancarlinhh/dchha65_Supernova_in_the_East_IV.mp3","","0000-00-00 00:00:00","",0)

Here is the line from the XLM that failed:

<pubDate>Wed, 3 Jun 2020 15:20:44 PST</pubDate>

Here is the line from the next episode that worked fine:

<pubDate>Fri, 13 Nov 2020 17:08:26 PST</pubDate>

Add shoutrrr support for notifications

Shoutrrr provides a go library for sending notifications to various channels (slack, discord, email, etc).

It would be useful for notifying on new downloads.

Maybe do 1 notification for when adding a new podcast so it doesn't flood a bunch of new download notifications.

Podcast not downloading when trying to download all

It could be literally any podcast I have in my system. I have about 39 podcasts added.

For example:

Serial
Making
Lost Mountain Saga

As soon as I enable the 'automatically download new episodes to disk', then attempt to download all episodes of a different podcasts, both podcasts begin downloading.

If I then uncheck the option and add another podcast to the 'download all' queue, it sits there again.

I tested this both with, and without, the 'download episodes whenever a new podcast is added' enabled and it didn't seem to impact things. Only when 'automatically download new episodes to disk' is enabled will the podcasts download all episodes.

Again, this also doesn't impact single episode downloads, which always trigger as soon as I click them.

Unrelated but tangentially related, is there a reason all podcasts need to be queued (asking since I have 39 of them) for a 200 response before the one I just tried to download will begin downloading?

Thanks very much.

Originally posted by @undaunt in #9 (comment)

[Bug] Downloading all episodes of 1 podcast forces download of other podcasts

Hello,

I was re-setting up the app from scratch after adding user: 1000:1000 into my compose. I then did precisely the following steps:

  1. Disabled 'download episodes whenever new podcast is added'
  2. Imported my OPML file
  3. Waited for basic metadata for each podcast to populate
  4. Chose only one podcast, and clicked download all.

This kicked off every podcast downloading 5 episodes, the default from 'How many episodes to be downloaded when a new podcast is added' - even though the parent choice of 'Download episodes whenever new podcast is added' was disabled.

I intended to only download all episodes from one specific podcast, but none from anything else. The use case here being I want to archive my favorite shows but have all of them contained within the database for future OPML export and/or episode download, but only when I choose.

Thank you.

Problems Downloading Episode Files From Web Interface

I am encountering an issue when using the web interface to download an episode already downloaded to my server by the docker container. The podcast player works but when I click the download episode file button it takes me to "https://assests/..." as opposed to the appropriate location to download the file.

[Feature Request] Download indicator

First of all thank you for your work.
I really like the minimalistic design.

It would be great to have a progress bar, when downloading podcasts.
Currently you have to refresh the page to check if the file has been downloaded.

I didn't have a look at the code, so I don't know how feasible it would be to implement this feature.

Backup

Hi,
Awesome work ! I'm searching podcast grabber for months ! Thank you very much.

I have a problem, Downloads folder is empty, no error on logs :

root@localhost:# /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker run -d --name='podgrab' --net='bridge' -e TZ="Europe/Paris" -e HOST_OS="Unraid" -e 'CHECK_FREQUENCY'='30' -p '6680:8080/tcp' -v '/mnt/user/appdata/podgrab/':'/config':'rw' -v '/mnt/user/Downloads/':'/data':'rw' 'akhilrex/podgrab'

2020/11/07 14:24:28 �[32m/api/db/dbfunctions.go:30
�[0m�[33m[0.789ms] �[34;1m[rows:10]�[0m SELECT * FROM `podcast_items` ORDER BY pub_date desc LIMIT 10
[GIN] 2020/11/07 - 14:24:28 | 200 | 1.999848ms | 192.168.1.4 | GET "/episodes"
[GIN] 2020/11/07 - 14:24:28 | 304 | 56.274µs | 192.168.1.4 | GET "/webassets/axios.min.js"
[GIN] 2020/11/07 - 14:24:28 | 304 | 46.794µs | 192.168.1.4 | GET "/webassets/vue.js"
[GIN] 2020/11/07 - 14:24:28 | 304 | 74.153µs | 192.168.1.4 | GET "/webassets/vue-toasted.min.js"
[GIN] 2020/11/07 - 14:24:32 | 200 | 391.268µs | 192.168.1.4 | GET "/podcastitems/e18a8d66-b300-4a15-8e20-af22b77871cd/download"
/assets/Les Grosses Ttes/Emission-du-5-novembre-2020.mp3

Nothing is found on Downloads folder.

Thank you again :)

[Feature request] Download queue

Feature request for a visualized tab to view pending download queue. Bonus if we can pause/cancel/change order. Bonus if we can change setting for simultaneous downloads, set speed, etc.

Thanks for all your effort in developing this!

Deleting feedback

I like the abilities. I was thinking about it and would it be use to mark podcasts as "inactive" and add that as a filter somehow? that way only active are displayed on main page unless you switch filters. I can then see old ones so I dont download them again. Just thinking out loud

Missing thumbnail for episode view

I am not sure if it was already happening before the latest update to fix the podcast list thumbnails but in episode tab, Accidental Tech Podcast and Robot or Not do not have thumbnails.

[Bug] Mismatched Podcasts

Podgrab is downloading the latest podcasts, however, it's not creating update entries in the GUI.

RSS Link of Podcast: https://www.kuow.org/feeds/podcasts/seattlenow/podcasts/rss.xml

Screenshot: image

ls of the podcast folder:
"1-0001-01-01-'Defund'-ideas-police-can-get-behind.mp3" 1-0001-01-01-Phase-2.mp3 "1-0001-01-01-Who-will-be-Seattle's-next-mayor.mp3" 1-0001-01-01-Casual-Friday-with-Chase-Burns-and-Michael-Shawn-Dugar.mp3 1-0001-01-01-The-vaccine-line-jumpers.mp3

Is Podgrab ARM ready ?

Hello !

First off, very nice project !!

I'd like to know if i can use Podgrab on a ARM computer like Raspberry, last Apple product (with Apple M1)...

Thanks !

Accented letters removed

Hey,
Accented letters are deleted from the folder name / file name of the podcast.
image
Instead of Les Grosses Têtes

[Feature Request] Backups in /config instead of /assets

TItle, essentially. Can we either choose the location of our backups, or instead direct them to the config location instead of asset location? I store my assets on a NAS, but keep all of my docker configs, databases, etc. in a separate ZFS location.

Thanks!

Problem downloading many episodes

To reproduce:

  • Increase "How many episodes to be downloaded when a new podcast is added" to 100 and save
  • Add a podcast with many episodes, for example "The Joe Rogan Experience"
  • It starts downloading the episodes but then spawns parallel downloads that re-download episodes that have been downloaded already
  • The problem gets much worse with more episodes and a longer process

Thanks and Github Sponsorship

Akhil, thanks so much for writing this. This is a great product and it really solves an issue for me.

Do you have any plan to setup Github sponsorship? I dont really trust putting my info into the "Buy Me A Coffee" link.

Thanks!

[Feature Request] Full Fledged Podcast Player?

Thanks for your hard work on this, @akhilrex !

I'm wondering if you have plans to make this project a potential go-to for podcast listening? A few major things I see that could help get there:

  • Being able to play the podcast via the PodGrab web interface
  • List entire show notes, not simply the description
  • Turn this into a PWA to make it mobile friendly

[Feature Request] File Naming based on metadata (or just Julian date)

When I listen to podcasts, it is easiest to keep them in folders for each podcast. You have done this and it works well. Now, it would be nice if the filenames started with the Julian date (2021-01-14-PodcastName.mp3) so that they naturally sorted themselves. Currently, you are using just the name and they all just get jumbled out of chronological order.
I suppose you could get sophisticated and add a metadata mask like many other downloaders do, but for me, <podcast name>/<julian date>-<episode name>.<file extension> is good enough. The mask might be popular because others would probably prefer all podcasts in one folder as: <podcast name>-<julian date>-<episode name>.<file extension>.

Examples:
multi-folder
My Podcast/2021-01-01-Happy New Year.mp3
or
single folder
My Podcast-2021-01-01-Happy New Year.mp3

Play faster and more...

Great service, I really like it. Congratulations.

I wanted to make three suggestions.

  • Play faster. x1.25, x1.5, x1.75 ...
  • Play the podcasts added to the list, also in streaming
    The hardest,
  • Save the playback position, where you stopped listening to the podcast.

So many great thanks

[Feature Request] Modify mp3 id3 tags for easy import to mp3 players (eg. Plex)

I'd love to see a way to modify the mp3 id3 tags within podgrab.

I'm going to use Self-Hosted's rss as an example

My ideal scenario is:

  • Title: <item><title>
  • Artist: <channel><title>
  • Album Artist: <item><author>
  • Album: <channel><title>
  • Comment: <item><description>

In theory, for each podcast this should create a single artist within Plex, with a single album, and all episodes within that one album. I haven't quite figured out how best to do track number/year/etc.

Feature requests

Hello!

Thanks for making this app, it's great. I had a few questions on possible features. Could you possibly add:

  • Ability to sort podcasts by name / last episode / date added type of options on the main page of all podcasts? - DONE
  • Add a download all episodes button to each podcast's page instead of only from the main podcast list page to prevent needing to nav away for downloading all
  • Pass through UID and GID along with time zone into the image for permissioning? I frequently pass through all 3 in linuxserver images as: TZ, PUID, and PGID. Right now everything is root/root.
  • For podcasts where their main image fails to load or has no image, extract an image from a recent episode file so the podcast image is not left as default. (Eg: https://feeds.fireside.fm/selfhosted/rss)

Thanks again.

Episode file names with illegal characters not parsed correctly

I have a podcast containing the "|" character in the title. Once the file is saved, the character gets converted into "" instead (U+F027) on a SMB share. As a result, the file cannot be downloaded using the "Download episode file" button since it looks for the file with "|" in it. In addition, the player cannot play the episode either.

I have not tested this with other illegal characters so I don't know if this problem applies to those as well (such as * . " / \ [ ] : ; | ,).

[UI Bug] Header Centering & Spacing

There appears to be slightly less white/black space on the /episodes page than the other four pages between the page title and the horizontal bars. If you click through all of them you'll notice the difference.

Also, the home and settings headers appear slightly to the left of where add podcast and player appear. Not sure which pair is truly center and which is off centered.

[Feature Request] Basic authentication

Thank you for working on this, the project looks amazing - it's great to see modern self-hosted projects like this!

Are you planning on adding some form of basic authentication? I would love to have podgrab exposed to the web, accessible on the go.

Scan folders for existing files

I'm coming from gPodder and have a fairly large library already built, is there a way for podgrab to scan the existing files and mark them as already downloaded?

[feature request]

as it stands all thumbnails for images for episodes and main index are remote. If my docker doesnt have external access for any reason all the images are dead. Could you at the minimum cache the main image for the podcast and even better to cache for episodes too. Although I think just the main image as the episode image would be more than ok

Downloading multiple episodes in one day

I am seeing an issue where if a podcast releases multiple episodes per day, it only downloads the first one released. Is this a known limitation? I can provide the name of a podcast where I see the issue with if that helps.

Thanks

Feature requests

First off, thanks for publishing this, at first glance it seems much faster than a dockerized instance of gPodder that I've been running with for a while. However, the former has a few niceties, and missing features, that hopefully wouldn't be too hard to add:

  • Folder structure and file naming/tagging settings.
  • Directory scanning, #8 or a "mark as downloaded" button if scanning directories isn't a trivial task.
  • A "download all" button to download episodes that aren't already on the disk.
  • An unplayed/played flag.
  • A grid layout option for the home page.
  • OPML export (thanks for adding import).

Github package

I think the new image being built by github actions is still set to private on your github account. The only public one is the old one from october (not docker hub but the packages tab on the profile)

Linux Install Instructions

I know I know... docker is the future, but I am not part of that future yet lol.

At some point I would love to install this on a fresh Ubuntu Server install minus docker.

Looks great!!

Sow more on episodes screen shows dupe info

when you show more it duplicates the episode info example

Born and raised in South America, chilis were the earliest crop domesticated in the continent and among the first items brought back to Europe by Columbus. Today people are really, really into them. Find out all about 'em in this classic episode. Learn more about your ad-choices at https://www.iheartpodcastnetwork.com show less

Born and raised in South America, chilis were the earliest crop domesticated in the continent and among the first items brought back to Europe by Columbus. Today people are really, really into them. Find out all about 'em in this classic episode. Learn more about your ad-choices at https://www.ihea show more

[Feature Request] Dark Mode & Home Page Whitespace

Dark background, lighter grey or white text, etc. for dark mode would be awesome.

Regarding the home page, you'd eliminate more white space if it were possible to put the sorting and layout options on the same vertical location as the home/episodes/settings/etc. header menu. The right side of that menu is currently available, and there's nothing to the left of the home page sorting/view options, so it would clean up a lot of unused space.

Feature request

Love the new selectable layout. Is it possible to make the grid width variable? Its certainly much nicer now but lots of whitespace on screen still.. Loving the progress

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.