{"id":14235432,"url":"https://github.com/natumbri/mopidy-youtube","last_synced_at":"2026-02-23T04:33:59.724Z","repository":{"id":14222755,"uuid":"16929683","full_name":"natumbri/mopidy-youtube","owner":"natumbri","description":"Mopidy extension for playing music from YouTube","archived":false,"fork":false,"pushed_at":"2025-09-26T15:04:12.000Z","size":64529,"stargazers_count":271,"open_issues_count":15,"forks_count":77,"subscribers_count":18,"default_branch":"develop","last_synced_at":"2025-12-20T16:18:40.866Z","etag":null,"topics":["mopidy","mopidy-backend","python","youtube-player"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/natumbri.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-02-17T23:05:55.000Z","updated_at":"2025-11-19T04:15:16.000Z","dependencies_parsed_at":"2023-12-12T02:43:20.059Z","dependency_job_id":null,"html_url":"https://github.com/natumbri/mopidy-youtube","commit_stats":{"total_commits":506,"total_committers":26,"mean_commits":19.46153846153846,"dds":"0.20158102766798414","last_synced_commit":"0a069b75716bddfc849492c3df9f450fa4563c61"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/natumbri/mopidy-youtube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natumbri%2Fmopidy-youtube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natumbri%2Fmopidy-youtube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natumbri%2Fmopidy-youtube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natumbri%2Fmopidy-youtube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/natumbri","download_url":"https://codeload.github.com/natumbri/mopidy-youtube/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natumbri%2Fmopidy-youtube/sbom","scorecard":{"id":676170,"data":{"date":"2025-08-11","repo":{"name":"github.com/natumbri/mopidy-youtube","commit":"f14535e6aeec19d5a581aebe4b8143211b462cc4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 2/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'","Warn: branch protection not enabled for branch 'release-3.4'","Warn: branch protection not enabled for branch 'release-3.3'","Warn: branch protection not enabled for branch 'release-3.2'","Warn: branch protection not enabled for branch 'release-3.0'","Warn: branch protection not enabled for branch 'release-2.1.0'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-21T21:32:59.758Z","repository_id":14222755,"created_at":"2025-08-21T21:32:59.758Z","updated_at":"2025-08-21T21:32:59.758Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29738079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T02:24:00.660Z","status":"ssl_error","status_checked_at":"2026-02-23T02:22:56.087Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mopidy","mopidy-backend","python","youtube-player"],"created_at":"2024-08-20T21:01:55.423Z","updated_at":"2026-02-23T04:33:59.685Z","avatar_url":"https://github.com/natumbri.png","language":"Python","funding_links":[],"categories":["Python","Playback \u0026 Services"],"sub_categories":["Text-to-Speech"],"readme":"****************************\nMopidy-YouTube\n****************************\n\n.. image:: https://img.shields.io/pypi/v/Mopidy-YouTube\n    :target: https://pypi.org/project/Mopidy-YouTube/\n    :alt: Latest PyPI version\n\n.. image:: https://img.shields.io/circleci/build/gh/natumbri/mopidy-youtube\n    :target: https://circleci.com/gh/natumbri/mopidy-youtube\n    :alt: CircleCI build status\n\n.. image:: https://img.shields.io/codecov/c/gh/natumbri/mopidy-youtube\n    :target: https://codecov.io/gh/natumbri/mopidy-youtube\n    :alt: Test coverage\n\nMopidy extension that plays sound from YouTube.\n\n\nInstallation\n============\n\nThese installation 'instructions' are for unixy systems. It may be possible to \ninstall it on other systems, using other commands.  You should have a working \n`mopidy` installation before you install `mopidy-youtube`.\n\nDepending on how your unixy system is configured, you may need to install as\nsuperuser (eg, using `sudo`).\n\nInstall from PyPI by running::\n\n    python3 -m pip install Mopidy-Youtube\n\nInstall from github by running::\n\n    python3 -m pip install https://github.com/natumbri/mopidy-youtube/archive/develop.zip\n\n\nInstall `youtube-dl` (or a compatible package) from PyPI by running, for example::\n\n    python3 -m pip install --upgrade youtube-dl\n\nFor more information about youtube-dl, see https://github.com/ytdl-org/youtube-dl\nOther compatible (and possibly more up-to-date) libraries may include \n`yt-dlp` (https://github.com/yt-dlp/yt-dlp) and `youtube-dlc`.\n\nIf you wish to use an alternate youtube-dl library, in your configuration file\nyou must set the `youtube_dl_package` option to the package name of an alternative\npackage:: \n\n    [youtube]\n    youtube_dl_package = [name] : package name of an alternative package \n    \t\t\t\t  to replace \"youtube_dl\", for example \n\t\t\t\t  \"yt_dlp\"\n\n\nMake sure you already have the GStreamer plugins, especially the \"bad\"\ncollection of plugins. For example, on Debian/Ubuntu you can install it\nby running::\n\n    sudo apt-get install gstreamer1.0-plugins-bad\n\n\nConfiguration\n=============\n\nBefore starting Mopidy, you must add configuration for\nMopidy-YouTube to your Mopidy configuration file::\n\n    [youtube]\n    enabled = true\n\nIf you want to cache files, set allow_cache to true. The cache directory\nwill be the one specified for cache_dir in mopidy [core] configuration::\n\n    allow_cache = true\n\nOnly tracks (and their related metadata and image) that are added to the\nmopidy track list will be cached.  Search results are not cached.\nIf you want to use cached images, mopidy-HTTP must be enabled and configured\ncorrectly.  It is bundled with Mopidy and enabled by default.\n\nIf you want mopidy-youtube to use the YouTube API, before starting Mopidy, \nyou must add your Google API key to your Mopidy configuration file\nand set api_enabled = true::\n\n    youtube_api_key = \u003capi key you got from Google\u003e\n    api_enabled = true\n\nIf you want mopidy-youtube to use YouTube Music, instead of regular YouTube, set\nmusicapi_enabled = true::\n\n    musicapi_enabled = true  \n\nThe musicapi may be used with or without the youtube api.  \n\nTo use the YouTube Music api, you will also need to install an additional python\npackage (`ytmusicapi` \u003e= 0.19).  Install `ytmusicapi` from PyPI, for example, \nby running::\n\n    python3 -m pip install --upgrade ytmusicapi   \n\nIf you want to see the YouTube playlists of a channel in your mopidy library,\nyou need to include the channel ID in your config file::\n\n    channel_id = \u003cchannel id\u003e\n\nIf you want to see your own channel's private YouTube Music playlists in your\nmopidy library, you need to::\n\n    - set channel_id to the id for your own channel\n    - enable the music api and \n    - set a musicapi_browser_authentication_file\n\nYou can obtain the musicapi browser authentication file by process \nmentioned in the `ytmusicapi readme \u003chttps://ytmusicapi.readthedocs.io/en/stable/setup/browser.html\u003e`_.\n\nTo enable YouTube Premium high quality streaming you must setup the `musicapi_cookiefile`. \n(You also need to use yt-dlp instead of youtube_dl. See `youtube_dl_package` \ndocumentation for how to configure it.) \n\nSetup a `cookies.txt` (Netscape HTTP Cookie File) containing YouTube cookies:\n- Download an extension to dump YouTube cookies. For example:  \n  - Firefox: https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/\n  - Chrome: https://chrome.google.com/webstore/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc\n- Navigate to youtube.com and ensure you are logged in.\n- Open the extension and export cookies using the \"Only for this site\" option.\n- Save the file and reference it in `musicapi_cookiefile`.\n    \nmopidy-youtube can automatically play 'related' tracks after the last track in the play queue\nis played.  If you want mopidy-youtube to autoplay related videos, set autoplay_enabled = true::\n\n\t[youtube]\n\tautoplay_enabled = true\n\t\nIf autoplay is enabled, other options are::\n\n\tstrict_autoplay = [true/false]\n\tmax_autoplay_length = [maximum length of track in seconds or None]  : defaults to 600s\n\tmax_degrees_of_separation = [defaults to 3]\n\nIf the option strict_autoplay is set, the current tracklist is ignored and the\nmost related video automatically played afterwards.\n\nThe max_autoplay_length option sets the maximum length of a track that will be played\nby the autoplayer.  Any interger value is acceptable; the default is 600s.\nIf you don't want a maximum length, include the following in mopidy.conf::\n\n        max_autoplay_length =\n\nMax degrees of separation controls how distantly related to the track that triggered autoplay\n(the 'seed' track) the autoplayed tracks can be. For example, with the value set to the default\nof 3, the first track autoplayed will be related to the seed track (one degree of separation).\nThe second track autoplayed will be related to the first track autoplayed (two degrees of\nseparation). The third track autoplayed will be related to the second track autoplayed (three\ndegrees of separation, the maximum). The fourth track autoplayed will be related to the seed\ntrack (back to one degree of separation).\n\nOther configuration options are::\n\n    [youtube]\n    threads_max = 16            : number of parallel threads to run\n    search_results = 15         : maximum number of search results to return\n    playlist_max_videos = 20    : maximum number of videos in a playlist to return\n\n\nUsage\n=====\n\nSimply use search for filename in your MPD client or add YouTube URL or URI to\nplaylist prefixed by ``yt:`` or ``youtube:``.\n\nExample video::\n\n    [yt|youtube]:\u003curl to youtube video\u003e\n    [yt|youtube]:video:\u003cid\u003e\n    [yt|youtube]:video/\u003ctitle\u003e.\u003cid\u003e\n\nExample for playlist::\n\n    [yt|youtube]:\u003curl to youtube playlist\u003e\n    [yt|youtube]:playlist:\u003cid\u003e\n    [yt|youtube]:playlist/\u003ctitle\u003e.\u003cid\u003e\n\n\nTroubleshooting\n===============\n\nIf the extension is slow, try setting lower values for threads_max, search_results \nand playlist_max_videos.\n\nIf resolving of URIs stops working, always try to update the youtube-dl library\nfirst.\n\n\nProject resources\n=================\n\n- `Source code \u003chttps://github.com/natumbri/mopidy-youtube\u003e`_\n- `Issue tracker \u003chttps://github.com/natumbri/mopidy-youtube/issues\u003e`_\n- `Changelog \u003chttps://github.com/natumbri/mopidy-youtube/blob/master/CHANGELOG.rst\u003e`_\n\n\nCredits\n=======\n\n- Original author: `Janez Troha \u003chttps://github.com/dz0ny\u003e`_\n- Current maintainer: `Nikolas Tumbri \u003chttps://github.com/natumbri\u003e`_\n- `Contributors \u003chttps://github.com/natumbri/mopidy-youtube/graphs/contributors\u003e`_\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatumbri%2Fmopidy-youtube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnatumbri%2Fmopidy-youtube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatumbri%2Fmopidy-youtube/lists"}