Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expand integration beyond YouTube #515

Open
bizxta opened this issue Oct 15, 2020 · 44 comments
Open

Expand integration beyond YouTube #515

bizxta opened this issue Oct 15, 2020 · 44 comments

Comments

@bizxta
Copy link

bizxta commented Oct 15, 2020

Great idea around this. I'm using it mostly through YouTube Vanced. Has been so helpful!

As a possible avenues to expand, it would be nice to support more places. Besides other websites, I'm also talking about providing functionality similar to Netflix's skip functionalities. E.g. if segments are known for a TV show, and say the Kodi (or the up next) plugin is updated to use these, it can figure out when the show stops for real, and when starts for real, allowing for a huge amount of time saving when binging shows.

@ajayyy
Copy link
Owner

ajayyy commented Oct 15, 2020

I think this is probably only possible with a whitelisted set of sites due to how the videoID will have to be fetched in different ways for each website.

@bizxta
Copy link
Author

bizxta commented Oct 15, 2020

That makes sense, what about places like Kodi or VLC among others? Where it's TV shows rather than services?

@ajayyy
Copy link
Owner

ajayyy commented Oct 17, 2020

This would be much harder as it would not be easy to get a consistent identifier from the file

@Joe-Dowd
Copy link
Contributor

Joe-Dowd commented Oct 18, 2020

Also it would require pushing new permissions to users, anything involving another website should be a fork, not incorporated into this.

@ajayyy
Copy link
Owner

ajayyy commented Oct 18, 2020

Permissions aren't really an issue as they can be handled the same way as for Invidious

@mat926

This comment has been minimized.

@swedneck
Copy link

I try to watch stuff on odysee.com when my youtube subs are available there, but not having sponsorblock makes this a much worse experience sadly. Would be lovely to have support for more video sites.

@SameenAhnaf
Copy link

Facebook Watch support should also be added.

This was referenced Oct 14, 2021
@seniorm0ment
Copy link

Requesting support for Podcasts as in #994
And a reply to @ajayyy what exactly are you confused with Podcasts?

@seniorm0ment
Copy link

Requesting support for PeerTube as per #993

@haakonstorm
Copy link

haakonstorm commented Oct 16, 2021

(Was originally commenting on #994)
Came here looking for exactly this!

Great idea. Joe Rogan said most people actually listen to his podcasts. As opposed to watching them on Youtube (before Spotify..).

A lot of the content I consume personally, I do so on the go with Marco Arments wonderful Overcast app on iOS.

  • OP ([Feature] Podcast Support #994) use a different subscription stack. I guess fragmentation of actual podcast player software is an issue when it comes to how to provide UI to contribute to the actual Sponsorblock database.

The POST to /api/skipSegments expects videoID: string. Perhaps this can simply be reused, say with a hash of the podcast episode URL and/or the file itself? Then service: string can be allowed to contain "file", or "url"?

I'm thinking a simple shell script using e.g. jq and httpie could be used to create the JSON and post the actual segment. Something along the lines of:

$ podsponsorblock.sh --startTime 1222 --endtime 1242 episode.mp3

   [source] episode.mp3
     [hash] ed7b87dd19f64d57565ae6a0202adfca..
[startTime] 1222.0
  [endTime] 1242.0
  [service] File

POSTing to Sponsorblock API...

{
  videoID: "ed7b87dd19f64d57565ae6a0202adfca..",
  userID: "54F1B31B-0A1C-4DA6-9EC5-BA9B988D69A3"
  userAgent: "podsponsorblock/0.0.1",
  service: "File",
  videoDuration: 123456.7,

  segments: [{ 
     segment: [1222.0, 1242.0],
     category: "sponsor",
     actionType: "skip"
  }]
}
  • Then in the case of trimming a release downloaded as a File, ffmpeg or similar tool can be used to delete the appropriate segments.
  • yt-dlp which both already supports Sponsorblock and other sites than YT, get a means to trim files/URLs.
  • As long as a central repository of segments and IDs of releases exist, and a means to contribute to it, the API can be put to use many more places. Perhaps Marco Arment also would be interested in adding support for Overcast.

I'm looking to build a simple automated downloads of content from various places, removal of sponsor segments, then convert to Apples audiobook format .m4b. This has great functionality including sync last-listened-to timestamp across devices, and great UI for actual listening.

@seniorm0ment
Copy link

Excellent reply, thank you for your insight.
Personally something I have been debating is how will the central repo apply? For example, YouTube is a centralized source. All IDs will lead to YouTube. PeerTube is federated, while not centralized, the identifications remain the same.

Podcasts can realistically be hosted from anywhere, furthermore there are many websites which pull the podcasts to centralized sources. This includes gPodder, iTunes, and others.
While I would not be opposed to adding ID mappings for each popular service, is there a real way to get them to match if someone views something from gPodder, that only has a Sponsorblock entry on iTunes? Unfortunately that will be a downside if it can't be figured out. But I would still rather have it on one than none.

Furthermore your goal to build a downloads archive is exactly what I do and plan to do. I download everything from a site like gPodder.
There is a service called PodGrab that I plan to try, it is essentially a self-hosted podcast downloader and manager (although this can be done with just yt-dlp and a file manager if desired, metadata is nice). Although I heard you can also self-host a gPodder server. That sounds more appealing but I can't find information on it. If that's what I think it is, then I think gPodder might be the way to go.

Either way, I'd really be interested in this. Sponsors on Podcasts are becoming increasingly bad, and make listening unejoyable at times and can take the listener out of the mood.
Thank you for your comment.

@ajayyy
Copy link
Owner

ajayyy commented Oct 16, 2021

I have looked at a few online podcast players, and annoyingly, there doesn't seem to be a way to extract the podcast guid out of them.

Btw, on discord in the #new-site-discussion there are two threads discussing podcasts if you want to see some of the stuff I tried so far.

@haakonstorm
Copy link

OK moving to discord.
FTR; perhaps the iTunes Search API's trackId can be used to ID. Most releases are on there.

@seniorm0ment
Copy link

I'd be willing to discuss it, but I'm not going over to Discord. It's privacy invasive.
I hope progress is updated here when more if determined.

Also gPodder has identifiers, my point was if someone downloaded something from gPodder, and someone else submitted times to the iTunes ID then, the gPodder person wouldn't have the Sponsorblock times.
But yeah I think support wise gPodder is a must, and if you want a secondary then iTunes ID.

@ajayyy
Copy link
Owner

ajayyy commented Oct 17, 2021

It's on matrix too

@bizxta
Copy link
Author

bizxta commented Nov 30, 2021

@neilunger
Copy link

As far as adding Odysee support, would this be possible with their URL scheme?

For example, Veritasium's latest video has this URL on Youtube:
https://www.youtube.com/watch?v=ao2Jfm35XeE

But then this URL on Odysee:
https://odysee.com/@veritasium:f/the-mystery-of-snowflakes:f

It is not immediately obvious how these two URLs correlate. However, the open source extension Watch on Odysee is still able to redirect me from Veritasium's Youtube video to the Odysee version. From a VERY quick glance, it looks like they call ${LBRY_API_HOST}/yt/resolve?${params} in yt.ts to check if the YT video has an Odysee equivalent, so it seems like it is possible to correlate the two with a LBRY API check -- although maybe not easy for SponsorBlock to parse if their database follows a URL-based scheme, which I believe it does.

I'm not intimately familiar with either of these codebases - does anyone know how difficult it would be to add this functionality in? Could it be possible to run that API check locally whenever an opted-in user goes to a YouTube video, and then add that Odysee video as a "secondary" URL in the SponsorBlock database?

@ajayyy
Copy link
Owner

ajayyy commented Dec 14, 2021

I think it would be easier to separate, as some videos have extra lbry content

@neilunger
Copy link

I believe (but could be wrong) that API will only return a value if the creator has set up LBRY's YouTube <-> Odysee automatic syncing, which will automatically upload any published YT video to Odysee. If so, I think the videos would only be different across platforms if the creator went out of their way to edit them once they were uploaded to Odysee. I don't know if editing is possible. I would guess most people who have gone out of their way to put extra LBRY-only content in their videos manually upload all of their videos. But regardless, that is a very valid concern, because if I'm wrong about any of that, that could definitely mess up some percentage of Odysee videos with SponsorBlock.

@ajayyy
Copy link
Owner

ajayyy commented Dec 14, 2021

We do have to deal with the case of edited YouTube videos surprisingly often

@neilunger
Copy link

Oh that's another edge case I didn't think about. If the YT video gets automatically published to Odysee, but then the YT vid gets edited, but the Odysee one doesn't... could cause issues

@jackinloadup
Copy link

Just a tourist here but maybe the ability to alias a url to another? Kinda like a dns CNAME. With so many creators I follow uploading the same video to multiple platforms it seems practical.

@xoores
Copy link

xoores commented Apr 16, 2022

Hey @ajayyy, just wanted to check about the Odysee support - I saw that server should have the necessary service tag but I cannot figure out whether it has been enabled/created for clientside?

Thx

@ghost
Copy link

ghost commented Apr 20, 2022

some podcasts insert arbitrary ads at time of download depending on whatever profile of your ip they have at the time
regarding ids, it would be trivial to require complete downloads and then cryptographically hash the file

This was referenced Jun 30, 2022
@erkinalp
Copy link

erkinalp commented Jun 30, 2022

LBRY

Domain name: N/A (decentralised, living on the blockchain)
Content identifier format: Claim ID (arbitrary string)

Applicable categories:

  • all (video&audio)
  • sponsor, self promotion, exclusive access, interaction reminder, preview (other content)

Nebula

Domain name: nebula.app
Content identifier format: Title in snake case

A single MCN non-interactive video platform.

Applicable categories: All except sponsor and interaction reminder, and additional category "out-of-the-network promotion" (Nebula is a single MCN platform), self promotion also covering in-network promotion

Floatplane

Domain name: floatplane.com
Identifier format: ?

A tech-focussed subs-only video network.

Applicable categories: Self-promotion, chapter, exclusive access, preview, technical mishap, intro, highlight, outro

@stefanmm
Copy link

For YT videos imported to Odysee - /~https://github.com/stefanmm/sponsorblock-odysee
I was in touch with Odysee devs and this approach is the only way right now. They will contact me back when/if they improve YT integration. Feel free to test and improve my code, it is not the best in the world but it works.

@trymeouteh
Copy link

LBRY support would be amazing to see.

@loopeey
Copy link

loopeey commented Dec 17, 2022

+1 for rumble support.

Also here is a neat site to use with it.
https://openrss.org

@erkinalp
Copy link

erkinalp commented Dec 17, 2022

Add VOYD, a Swedish website for sharing video and audio.

Content identifier: A number followed by title in snake case

Applicable categories: Self-promotion, chapter, exclusive access, preview, technical mishap, intro, highlight, outro.

@Ethorbit
Copy link

Rumble support would be nice.

@GUImodder
Copy link

Any news on that subject? Youtube is getting so toxic that content creators are fleeing left and right (well bad choice of words a guess; but you get what I mean)...

@ccuser44
Copy link

Is this exactly what Sponsorblock should be doing? Or shouls it stay specifically for yt
(I'm not casting a decision on either this comment is simply to encourage discussion)

@erkinalp
Copy link

Chaos Computer Club

Domain name: media.ccc.de
Content identifier format: number-snake case name

Applicable categories: Intro, filler, self promotion, outro

@GUImodder
Copy link

It sure would be great if a developer or two would give a statement in this particular issue...

@yoshimo
Copy link

yoshimo commented Aug 1, 2023

Podcasts would benefit from user added chaptermarks (some production pipelines don't add them) and skips for sponsors, intro,outro and so on.
Since only 10% of all podcasts use a unique global identifier (guid) that is consistent across different hosting platforms, this could be a challenge.

@JonasOlson
Copy link

only 10% of all podcasts use a unique global identifier (guid)

Oh, there is such a thing? Maybe we should promote it, to get more people to use it. That could be beneficial in various other ways too.

@yoshimo
Copy link

yoshimo commented Aug 1, 2023

It is part of the /~https://github.com/Podcastindex-org/podcast-namespace project for an improved standard.

@Jab2870
Copy link

Jab2870 commented Jan 22, 2024

Just wanted to add that I think supporting podcasts would be a huge feature. I suspect that since podcasts can be hosted in multiple places, it may be difficult to keep track of, but something like podcastindex.org might be a good index.

@yoshimo
Copy link

yoshimo commented Jan 22, 2024

Recent podcasts have identifier that is consistent across different hosters so it should be easy to identify them properly.

@WesleyAC
Copy link

WesleyAC commented Feb 2, 2024

Looking into how to do this for podcasts (I write a small podcast client and would like to implement support for this). I looked through about a dozen podcast RSS feeds that I have listened to, and all of them had a guid element for each episode that appears to be sufficiently unique and stable. There is a mix of strategies that are used, some hosts (for example, Buzzsprout and Substack) namespace them with a incrementing index of some sort, while others use a UUID.

While there could be something to be said for incorporating a more enforcably unique identifier (such as the RSS feed URL or cryptographic hash), I think those both have significant downsides in terms of being quite brittle, and in the hash case, not allowing for streaming.

I think relying on a ID from a centralized service (whether a particular player or something like podcastindex.org) would be a mistake.

The concern about some podcasts inserting advertising dynamically seems legitimate, and I'd be curious to hear thoughts on how to work around or prevent it from causing problems.

@yoshimo
Copy link

yoshimo commented Feb 2, 2024

It would be nice if this could be used to remove Breaks and Intro-Countdowns from Twitch videos as well.

@Reezlaw
Copy link

Reezlaw commented May 13, 2024

I'd like to humbly suggest adding Patreon support. Some creators have the audacity to leave interaction reminders, sponsors and self-promotion in their paid content too, which I find particularly annoying.

@VitaliyAT
Copy link

RuTube pls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests