Hi - is there a way to download a single episode of a podcast without subscribing? Thanks
Hello @Smollen
Thanks for chipping in on our community forum. Thatâs currently not possible, but there is a feature request for this:Add/play single episode without subscribing to podcast ¡ Issue #4710 ¡ AntennaPod/AntennaPod ¡ GitHub
Hey as the github issue is closed for discussion, maybe we could brainstorm here about UI/UX and technical details. I like to propose a minimal working solution that I feel could be easy enough to realize within a few weeks, even though I admit that I have little experience with AP feed updating etc.
First the flow would be like this: what used to be opening the preview now directly leads to the subscribe action but sets a flag to the feed: not-updated (already have that) and also a hidden flag (donât have that yet right?) Which will hide the episodes from all lists etc.
Then we need a subscribe button in the feedlist where now there are the settings and filter buttons.
And finally there needs to be a routine in the feed updating/fetching method that checks whether an episode of a preview feed is still in queue or downloaded, if not the feed is removed from the database.
Is this description good enough? Then we can go to the technical details, a roadmap might look like this:
- adapt the open preview mechanism (possible difficulties: the preview screen is a somewhat self contained screen now that can also be opened by other apps!)
- set not updating flag and implement hidden/preview flag
- check all lists to respect the new flag
- new routine for feed update to check for unused preview subscriptions (not in queue, not downloaded, what else?)
- adding a subscribe button to the feedlist which removes the hidden/preview flag as well as setting the not updating flag to the user preference default
Idea: maybe do some things like downloading or adding to favorites trigger a promt offering to subscribe because I would agree that having this kind of ghost feed for to long is not great. Although I donât see a real reason against it, if its not updated then itâs not slowing down the feed updating and the text only used up database space for a preview feed would be negligible I believe, but this point probably needs further thinking through, not too much though*
*letâs do a (minimal) working version and then beta it
The biggest problem I see is that users might just start using podcasts without ever subscribing. As long as there is some episode in the queue, this probably mostly works. But then when there happens to be no episode in the queue at some point, it would unexpectedly delete the âplayedâ state of that subscription. So I think these temporary subscriptions should either not be marked as played in the first place (which would be a bit strange when later subscribing) or the UI should make it really, really clear that we want them to click the âsubscribeâ button (and I currently have no idea how to best do that). Maybe even both? I can already see new users (who donât know what podcasts are) getting frustrated because they never subscribe and donât realize that this is why half of the features are missing. After it is implemented, we should probably do some user studies again, like the ones I did when rewriting the preview screen some years ago.
Note that the beta version targets existing users, but we really need to target new users with the studies here because if they donât understand the app immediately, they will just download another app. For beta users, a minimal version is probably enough because they know the general flow (subscribing etc). For new users, it might be less clear.
I suggest to not work on too many things at once and wait for the toolbar/home things to be resolved. Otherwise, that could get frustrating when having to always come back to the earlier PRs to get them merged
Agree, and if we remind them if they download an episode, favourite an eoisode or play another episode of a preview feed? Preventing playedstate feels hacky, i think we should adopted a frame of leading a smooth the way to subscribing with friendly reminders and then well just have to see in beta if thats enough to inform the users (i feel like subscribing is something most users know from yt).
I also have a icky feeling about never subscribing but if users know they could but dont even with reminders and they are happy with their ghost feeds, why not? Who are we to judge how to use AP
Most important i think is the cleanup routtine while feed updating, so that the ghost feeds dont clutter up the db if they are not in use.
Great so lets do both then
I dont have to do (all) this, just wanted to conceptualize a roadmap, anybody feel free to work on this - its important and a big leap for AP
the tasks could also be splited, i guess i would manage most but iâm not really familiar with feed updating/downloading service and i have other things going on, just a tiny AP rush rn
YouTube stores the âplayedâ state, playback history, etc even without subscribing. With AntennaPod, this would be stored for some time and then disappear when the temporary feed gets deleted. I worry mostly about the fact that visible data disappears again. Maybe an alternative could be to store the state but not display it. So when you later subscribe, you have the full data, but when you donât, it doesnât look like there was data that gets lost.
Lets not make it to complicated because of hypothetical worries that might not even have enough substance to trouble any real user. Metadata like played state is ephemeral anyways, its useful, but no need to store it for eternity. That would be my take
I actually like the yt way in this regard, i subscribe when i want more of it, but i have to listen to see if i do want more of it, and sometimes i just need to see a tutorial or listen to some sleep music then i dont want more of that, i just want that one video/episode.
I know the technical details/conception of yt and podcats are different but from a user view point - its not that different.
Thatâs indeed whatâs been proposed before. And I agree - I would just do that only on playback of an episode (not upon opening podcast preview).
I think I would also hide not-subscribed podcasts from the Subscriptions view - if thatâs what you mean with âfeedlistâ. If we would display them, itâd be contradicting the screenâs title. If needed, the podcast can be opened via the History screen (and of course via the âAdd podcastâ screen).
I think this risk is quite limited if the podcast isnât shown anywhere else in the app. As this functionality is much-requested, IMHO the benefits outweigh the potential (limited) risk.
As I interpret it, thatâs not whatâs being proposed: the podcast remains in the DB (no feed refreshes, and I also wouldnât show it anywhere). So historical data is preserved. (And if you meant to artificially delete that - I agree with @ueen that this goes against a smooth subscription experience.)
I think itâll be inherently clear from the fact that the podcast doesnât show up anywhere. Plus if we keep episode preview hidden as it is, the only likely âaccess pathâ is when receiving a shared episode.
The actual UX to make a single-play episode more accessible (less hidden) can be hashed out at a later point. Including any potential warnings.
Well, we would be the ones getting the support requests on the forum and on Mastodon
I like that idea. Just wondering if itâs really necessary - if thereâs no refresh, is it really harming to just keep it indefinitely? How much would the DB increase with, say, 10 additional feeds with maybe 10 episodes each?
If implemented, it should be a really long period. At least a year.
Where would this be visible, though? Only place would be playback history.
EDIT: ah, thatâs what you then go on to propose. That was my idea from the beginning, so I agree
Well. Disappearing data might be confusing for users and lead to questions to us (which we want to avoid). Going through such theoretical scenarios is what made AntennaPod the user-friendly & stable app it is today. (But the scenario is actually discussed in this thread, so Iâm happy )
Summary of my proposal, building on @ueenâs description:
- User starts episode preview from Podcast preview screen â Store podcast + episode in question (not all its current episodes) in DB; apply ânot subscribedâ flag, disable âkeep updatedâ flag.
- Not-subscribed podcasts donât show up any-where.
- Episodes from not-subscribed episodes only show in History screen.
- To be discussed if they also show/end up in the Queue. Probably necessary to not mess up Continued playback logic?
- If user opens the Podcast screen of a not-subscribed podcast (via History, Player or Queue):
- Display a big âSubscribeâ button
- Disable feed refresh (display modal with explanation of situation if pull-to-refresh is attempted)
- Hide âsettingsâ icon () (none are relevant if not subscribed)
Would you agree/did I capture that right?
Almost, i would allow pull to refresh, at most once a notification mentioning subscribing. Reminding of sensible useflow yes but disabling features to force one: no.
About delete preiew feeds with no active episode in queue or so Iâm not sure, i feel like delete after a week max, because not doing so would create true ghost feeds that are nowhere visible in the UI which seems like bad practice. Also what is lost is only 1 single playstate in probably over 90% of cases. But I guess youâre right that thereâs no real impairment in keeping the few bytes in db, expect of that would slow down anythingâŚ
They also might want to download it instead of just previewing/streaming. I think it would make sense to completely remove the preview screen and display it directly on the normal podcast screen.
Users have already asked for showing the date on the preview screen. When we allow downloading there, they will ask for the size as well. Then we would have to basically add more and more of the normal screen into the preview screen. Instead, I would just use the normal screen directly.
Fair enough. It was mainly to address @ByteHamsterâs concerns of users getting confused about not-subscribed feeds, but donât feel strongly about it.
Bad practice from which point of view? Technical/DB management?
Question is a bit when these users might subscribe to said podcast. Because at the time they do, Iâd want to still have the correct playback state (even if just 1 episode). But I guess that decision is made quickly after listening, so in that sense a week after episode removed from miniplayer/queue is fine.
If favourited, deletion should be prevented as well actually. Starts to sound complicated to determine if and when this data may be deleted. Personally I think I wouldnât bother and keep it indefinitely, if thereâs no tangible downside.
I agree. But then youâre talking a whole bunch of other UX/UI decisions. And as you know (weâve discussed this one a couple of times before) thatâs a tough one. So I would just focus on agreeing & implementing âthe back-endâ first (seems relatively straight-forward), and have the UX discussions in parallel/after.
Fully agree about that.
Actually I go further and believe when removing a podcast it should actually archive it and make it invisible. So if you subscribe again then episodes you have listened to are marked as read. Also with echo it would make sense to not remove information to be correct.
A (nice ?) side effect would be to keep episodes in queue even if you unsubscribe. Such episodes would in fact become âsingle episodes without subscriptionâ
For privacy it would mean when unsubscribing AntennaPod should ask you if you want to also remove information about episodes states and statistics. It could be a checkbox in the dialog which already appears when unsubscribing.
And it should be also possible to truly delete afterwards from settings or from entries in statistics screen.
Not so sure about that. There are times when you come back to a podcast forgetting you previously followed it. It would be a head-scratcher if you found that many earlier episodes did not show up. I think what you are suggesting is Archiving or Suspending a podcast subscription. Unsubscribing for me should mean exactly that getting rid of all its presence.
That said, I think there is also room for a Subscription Refresh function which would rebuild the database from active subscriptions and their listened history etc and in the process removing any orphan or ghost episodes it may find.
Itâs out of scope of this functionality of playing episodes of not-subscribed podcasts. But I understand the use-case, see the link here and agree itâs an argument for not auto-deleting feeds+episode data of not-subscribed podcasts.
Not sure the statistics screen is the best place, but yes, we should think later about a place from where the user could possibly âclean upâ not-subscribed podcasts.
I wonât follow up on that point here, apart from saying that I trust weâll find the right terminology when we get there. (Just to keep the focus here on back-end of playing a single episode.)
Technically thatâs easy to determine when to delete, we just need to define when and then itâs a single query to the database.
UX/UI are at the core of this so we canât leave that out. adding preview to db, setting the flags and open the feed will be way easier then what we are doing now, the only new thing is the preview/not subscribed flag that might be a bit tricky to think about everything and requires some testing, the rest should be relatively simple. then the only UI change will be the subscribe button on feedlist.
Maybe ByteHamster could offer a reality check on this formulation, but in my mind this will be super simple and a 1. Draft could be done in a day.
Yes, a user request (UX) is why weâre talking about this, so that way itâs at the core. But I was referring to the specific UX of making it easier to find/start playing an individual episode (other than the current option of initiating a âpreviewâ).
- Either we implement UI changes together with UI changes, which we then need to discuss further (Iâm not sure I agree with @ByteHamsterâs proposal â and if we go for it, we need to agree on the changes we require in the Podcast screen).
- Or we split the implementation in two: back-end now without any UI changes (the flag you mention; seems weâre at 95% agreemt), and UI review later (for making single episode play easier).
Benefits splitting in two, moving ahead with the back-end now: 1) it allows us to move a bit faster as back-end implementation doesnât have to wait on UI conclusions 2) it allows us to think about/work on receiving episode shares in parallel as an important part of the back-end is already locked/agreed (which may be higher priority than the UI changes).
Well I see your point but sorry to say: this makes no sense, it would mean changing the âbackendâ and keeping preview, right? That would require preview to be rewired as well: extra work that will be thrown out soon. What you call âbackendâ is closely intertwined with UI.
I guess we donât have to solve every UI detail now.
But preview needs to be replaced my feed, which will make all of this way easier.
Also I donât really see big disagreement about that (?) - letâs start doing a working version as formulated above?
Iâm suggesting to move ahead with something that we already agree on, and you want to wait until we have UI sorted. The world upside down
I see. I guess Iâm a little surprised that this mechanism (apply not-subscribed flag in DB) are tied to the preview screen. (Digression: I guess that implies that single playback from a received episode share needs its own implementation of setting the flag.)
I thought a bit further and I can see that opening the podcast screen works. Thatâs also how other apps (e.g. Podcast Addict) do it.
However, I donât think the button is the only UI change that should be implemented (yes, details, but I want the âMVPâ to be user-friendly also, and I want to avoid whoever implements this to get my comments after they made UI changes as thatâs demotivating). And letâs briefly address the UI changes that the user will face with this change:
- Are we OK with dropping the podcast description? It is visible on the preview, not on the full podcast screen. I think thatâs a loss (but fine to ârepairâ later).
- I think we already agreed on displaying the Subscribe button as it currently exists on the preview screen. I would
- put it inside the header container (i.e. with background image, below the cover and icon buttons)
- make the button not scroll off of the screen and display the podcast title in the app bar when itâs not visible on-screen (as in the GitHub app with issue titles, reason: so itâs visible what the âsubscribeâ button relates to, plus generally beneficial) - is this feasible?
- Are we OK with dropping the âInclude in auto downloadsâ button (revert #1915)?
- If not, we keep it as obnoxiously visible as on the current preview screen.
- If yes (my preferred option), we should set it active by default (when subscribing).
- Are we OK with dropping the episode descriptions? I think itâs a minor loss; less important than the podcast description - donât think that needs to be added back b/c an episode is quickly opened.
- Are we OK with âaddingâ the download/stream buttons? I guess so, as it fully closes #4710.
Following up on a comment from @ByteHamster in #4710 and my reply:
what happens if someone goes to the podcast page and downloads another episode of that podcast without subscribing?
Either nothing special (episode gets added, nothing else changes), or - probably better - a dialog is shown saying that theyâre currently not subscribed and adding more episodes is not possible, offering to âsubscribeâ (i.e. remove the ânot subscribedâ tag).
I guess based on earlier comments, weâll go for ânothing specialâ.
And two technical points with no conclusion yet:
- When we write the podcast to database: when opening the screen or when interacting with an episode. As suggested, I would do this only upon interacting with an episode (play, favourite, download), and only podcast+episode in question (not all episodes). Agreed?
- setting when opening podcast: easier technically but stores more data than needed (not great for sync also)
- setting when interacting with ep: needs changes in more places (technically more complicated) but doesnât store in db unnecessary data.
- Deletion of not-subscribed feeds: @ueen, @Matth78 & myself shared opinions already - keeping seems acceptable/preferred.
- I think we need to discuss later how we make viewable/removeable not-subscribed podcasts. For now I was thinking to have an option in the Subscriptions overflow menu to open same fragment with only not-subscribed podcasts.
This is what i said, in a sense the answer is no but if we have adding single episodes and dont remove the current preview screen, we need rewiring for that from what could be the new preview feedlist to the current preview. Which would be throw away if we do the new preview feedlist, that we want to do anyway and as its basically no work (just have to agree on where to put the subscribe button on the feedlist), i suggest doing that at once and dont produce throw away code
no it will still be avaliable when clicking on the cover in the feedlist as usual or we could keep the info button next to the new subscribe button that then is only covering/replacing the settings button.
instead to icon buttons like settings
resort to the deafult, i would suggest to not offer settings/filtering for preview feeds (this adds an incentive to subscribe).
yes, everything else than afromentioned stays the same or resorts to default settings.
is this the subscibing reminder? i would only use it rarely, suggestion: (only once) on pull-to-refresh in preview feed and when interacting with a second episode of a previewfeed (both easy database calls). This also solves
as then there is a clear reminder to subscribe most people will follow, so the effective lost data will be one playstate in a preview feed - which for me outways the cost of having ghost feeds in db that are not (and should not be )represented in UI. A week from last played to deletion of preview feed seems like a good timeframe (as its most likely that users to listen to a single episode and then within a week or two, to another episode and subscribe. After a week or two it becomes more and more unlikely and the cost of the ghost feeds overweigh in my view.) If i rediscover the podcast after (half a) year or so, i will have forgotton about that single playstate and wonât care about it - thats not the reason to delete, the reason to delete are ghost feeds. Because the UI should reflect the db IMHO and ghost feeds are hidden and thus feel weird.)
Hope this clears something up for you @keunes and we can move ahead with the proposal?: