OCP Plugins Reference¶
In a nutshell
OCP (the OpenVoiceOS Common Play system) is the part of OVOS that plays media: music, podcasts, news, radio and the like. Each plugin on this page teaches it to handle one kind of source, such as YouTube links, Bandcamp pages, RSS feeds, or local files. So if you ask to play something, the right plugin knows how to find the actual audio stream and start it. See the Glossary for unfamiliar terms.
This page covers stream extractors: plugins that turn a URL or search request into a playable stream. The playback engine that plays that stream is OCP Audio Plugin. The playback backends it can use are Media Playback Plugins.
What OCP means here
"OCP" names three different things in OVOS. Know which one a page is about:
- The OCP pipeline plugin: matches utterances like "play some jazz" to a media request. See OCP Pipeline.
- The OCP skill base class:
OVOSCommonPlaybackSkill; skills built on it provide or embody media for the pipeline to find. See OCP Skills. - The legacy OCP audio plugin:
ovos-plugin-common-play, the current default playback engine running insideovos-audio. See The OCP Audio Plugin.
Writing a plugin instead of choosing one? See Writing an OCP Stream Extractor Plugin, which covers the OCPStreamExtractor base class, its abstract methods, entry point registration, and testing.
| Plugin | Description | License | Maturity |
|---|---|---|---|
| ovos-ocp-files-plugin | Lets OCP play local files (file:// URIs) and reads their audio tags/metadata so the player can show a title and artist |
MIT | not rated |
| ovos-ocp-news-plugin | Extracts the real stream for a known set of spoken-news provider URLs at playback time | Apache-2.0 | not rated |
| ovos-ocp-bandcamp-plugin | Scrapes Bandcamp pages via py-bandcamp to extract the real audio stream |
Apache-2.0 | not rated |
| ovos-ocp-rss-plugin | Parses an RSS/podcast feed and extracts the newest audio enclosure as the playable stream | Apache-2.0 | not rated |
| ovos-ocp-youtube-plugin | Resolves YouTube/YouTube Music URLs via a selectable yt-dlp/pytube/Invidious/webview backend |
Apache-2.0 | not rated |
| ovos-ocp-m3u-plugin | Downloads a .pls/.m3u playlist and extracts the first playable stream URL inside it |
Apache-2.0 | not rated |
| ovos-media-classifier | Pluggable media-intent classifier that routes a request to the right MediaProviders; deployed as a dependency of ovos-ocp-pipeline-plugin |
Apache-2.0 | not rated |
Maturity reflects repository health (age, activity, open issues/PRs, in-repo docs), not version. See the Maturity Scale.
Maturity not yet rated for this family
These plugins are not yet individually rated in the manual (see the OCP comparison table in Choosing Plugins). "not rated" means unrated, not unmature.
ovos-ocp-files-plugin¶
-
GitHub: ovos-ocp-files-plugin
-
Description: A stream extractor that lets OCP play local files (
file://URIs, or plain paths on disk) and reads their embedded audio tags (title, artist, album) so the player can display them. It bundles a fork of theaudio-metadatatag-reading library.
ovos-ocp-news-plugin¶
-
GitHub: ovos-ocp-news-plugin
-
Description: A stream extractor for spoken-news providers. It registers the stream extractor id (SEI)
news, so any result URI of the formnews//<url>is routed to it. It also recognizes a hardcoded table of known news-provider URLs directly (URL_MAPPINGS) so skills can hand it a raw provider URL without thenews//prefix. At playback time it looks the URL up in that table and calls the matching extractor function to resolve the real, playable stream. The TSF (Portugal) source resolves the current bulletin by scraping it from TSF's listing page rather than guessing a predictable URL, since TSF now hosts bulletins on a CDN with unpredictable per-bulletin filenames. The GR1 (Italy) source resolves Rai's relinker URL server-side with a browser-like User-Agent before handing back the final stream, since the relinker rejects requests without one.
ovos-ocp-bandcamp-plugin¶
-
GitHub: ovos-ocp-bandcamp-plugin
-
Description: A stream extractor for Bandcamp pages, registering the SEI
bandcamp. It recognizes bothbandcamp//<url>results and any bare URL containingbandcamp., then strips thebandcamp//SEI prefix (if present) before delegating the actual page scraping to thepy-bandcamplibrary (get_stream_data) to pull out the real audio stream URL and track metadata.
ovos-ocp-rss-plugin¶
-
GitHub: ovos-ocp-rss-plugin
-
Description: A stream extractor for RSS/podcast feeds, registering the SEI
rss. Given arss//<feed-url>(or bare feed URL), it parses the feed withfeedparser, takes the most recent entry, and returns the first enclosure link whose MIME type containsaudio, along with that entry's title, publish timestamp, and duration when the feed provides them. It only ever surfaces the newest playable item in the feed, not the whole episode list.
ovos-ocp-youtube-plugin¶
-
GitHub: ovos-ocp-youtube-plugin
-
Description: A stream extractor for YouTube and YouTube Music links. Unlike the other extractors on this page, it is a small router over multiple interchangeable backends:
youtube-dl/yt-dlp,pytube, an Invidious mirror, or a webview fallback, selectable via theyoutube_backend/ydl_backend/invidious_hostsettings, since any single scraping approach tends to break whenever YouTube changes its page format. It also has a dedicated path for resolving a channel's current live stream. Thepytubebackend depends ontutubo.pytube, which only exists ontutubo<3.0.0; a newertutubois tolerated (the other backends keep working), but selecting thepytubebackend againsttutubo>=3.0.0raises a clear error telling you to pintutubo<3.0.0or use the defaultyoutube-dlbackend instead.
ovos-ocp-m3u-plugin¶
-
GitHub: ovos-ocp-m3u-plugin
-
Description: A stream extractor for
.m3uand.plsplaylist URLs, registering the SEIsm3uandpls. These playlist formats aren't understood by the GUI player directly, so the plugin downloads the playlist file itself and returns the first line that looks like anhttpstream URL as the actual playable URI.
ovos-media-classifier¶
-
GitHub: ovos-media-classifier
-
Description: ⚠️ Experimental. Work in progress, not yet deployed in OpenVoiceOS. A self-describing, pluggable media-intent classifier: given a spoken request, it decides whether it is a media request at all and, if so, classifies it along several axes at once (media type, playback modality, structure, explicitness, tags, qualifiers) so OCP can route it to the right
MediaProviders and apply content policy. It is a router, not a resolver. It does not turn a title into a playable stream. The OCP stream-extractor plugins on this page do that.
Read next: Media Playback Plugins Related: OCP Audio Plugin · OCP Pipeline · Media Skills (OCP)