Skip to content

Latest commit

 

History

88 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emby YouTube Plugin

An Emby channel plugin for browsing YouTube content with the official YouTube Data API v3.

The plugin adds a YouTube entry to Emby and lets you browse saved channels, playlists, Watch Later-style playlists, trending videos, categories, and Shorts from one place.

Highlights

  • Add YouTube channels by @handle or channel ID.
  • Add playlists as their own Emby folders.
  • Add search folders for occasional YouTube searches.
  • Create Watch Later-style folders from playlist IDs.
  • Show Trending and category folders for a selected region.
  • Split channels into Videos and Shorts when those folders have content.
  • Hide Shorts globally if you prefer a long-form-only view.
  • Hide empty playlists, categories, and Shorts folders.
  • Optionally show YouTube root folders at the top level and, on Emby 4.10+, add one latest-videos home row per saved channel while reversibly hiding both forms of combined YouTube-latest row.
  • Track estimated daily YouTube API quota usage.

Screenshots

Setup Guide

Setup guide 1


Setup guide 2


Setup guide 3


Setup guide 4


Setup guide 5

Emby Root Folder

Emby root folder

Channel Folders

Channel folder layout

Video Listing

Trending video listing

Requirements

  • An Emby Server.
  • A YouTube Data API v3 key from Google Cloud. The built-in Setup Guide walks you through creating one.
  • .NET 8 SDK, only if you want to build the plugin from source.

The API key only needs access to public YouTube data. After installation, open the plugin settings and use the built-in Setup Guide to create and restrict the key.

Installation

  1. Download the latest Emby.YouTubePlugin.dll release.
  2. Copy the DLL into Emby's programdata/plugins folder.
  3. Restart Emby.
  4. Open the YouTube plugin settings.
  5. Use the Setup Guide tab to create a YouTube Data API v3 key.
  6. Paste the API key into the Settings tab.
  7. Add at least one channel, playlist, or search entry.
  8. Save the settings.

Useful Google Cloud pages:

Saved Content

The My YouTube Content field accepts:

  • @handle, for example @MrBeast
  • Channel IDs starting with UC...
  • Playlist IDs starting with PL...
  • Plain search text

Handles, channel IDs, and playlist IDs are the best options because they avoid the separate daily search.list limit. Plain search text works too, but each result page uses one Search Queries call.

The Watch Later Playlists field accepts playlist IDs. Each playlist becomes its own top-level folder and can be checked regularly for new videos.

Browsing Behavior

Saved channels open in the cleanest layout the plugin can provide:

  • If a channel only has normal videos, Emby opens the video list directly.
  • If Shorts exist, the channel shows subfolders.
  • Empty Shorts folders are hidden.
  • Empty playlists and empty category folders are hidden.

By default, Emby shows one top-level YouTube entry and keeps saved channels inside it. Enable Show saved YouTube channels on Emby's home screen to expose the YouTube root folders at Emby's top level. On Emby 4.10 and newer, the same option also creates one latest-videos home row per saved channel for every user who can access YouTube. Playlists, searches, Trending, and Categories are not turned into home rows. Once all channel rows are confirmed, the option also hides mixed latest-video rows so the same videos are not shown again in one combined YouTube row.

After all per-channel rows have been created and confirmed, the plugin can temporarily remove the old combined Neueste YouTube-Videos row. This happens only when a fresh HomeSections read finds exactly one row with the verified legacy signature: an items section with no parent, Episode items sorted by DateCreated descending, and an excluded-folder set containing every current non-YouTube view (including Live TV when present) and no current YouTube channel root. Extra stale or no-longer-materialized exclusions are tolerated because they can only narrow the row. The stored name must match exactly; CustomName may be absent but must also match when present. The name alone is never sufficient, ambiguous matches are left unchanged, and resume rows such as YouTube weiterschauen are never touched. Before removal, the complete per-user section and its original position are saved durably. Turning the option off restores the exact original section id and uses Emby's optional move API to return it to the saved position. If a server lacks that move API, the restored row safely remains appended. If another similarly shaped aggregate row already exists, the plugin does not create a duplicate and retains the snapshot for a later safe restore.

Emby's standard latestmediablock can independently expand the top-level YouTube provider into another mixed row, usually named Latest YouTube or Neueste YouTube. While the option is enabled, the plugin keeps that block and all of its movie/TV expansions but adds only the YouTube provider id to its ExcludedFolders. A durable per-user journal records only ids actually added by the plugin. Turning the option off removes only those journalled ids, preserving user exclusions, concurrent edits, row order, movie/TV latest rows, and all continue-watching rows.

Emby 4.9 keeps only the top-level-folder behavior. Its API cannot write HomeSections, so it neither creates per-channel rows nor suppresses or restores the legacy combined row.

Shorts detection uses YouTube metadata such as tags, #shorts, and vertical player dimensions. It does not rely on video length alone, because many normal videos are short without being YouTube Shorts.

Quota

Most browsing uses low-cost YouTube API endpoints:

Action Endpoint Typical cost
Channel uploads playlistItems.list 1 unit
Playlist videos playlistItems.list 1 unit
Video details videos.list 1 unit per batch
Categories videoCategories.list 1 unit
Search folders search.list 1 Search Queries call

The plugin caches responses on disk. Search results are cached longer because search.list has a separate default limit of 100 calls per day, while most other endpoints share the regular 10,000-unit daily bucket.

Notes

  • This plugin uses the official YouTube Data API v3.
  • Playback stays on official YouTube watch/embed players. The plugin clears stale Emby audio-track selections so the YouTube player can choose the video's own source track, but YouTube's official IFrame API does not expose a command for selecting the "original" audio track. For signed-in YouTube players, add the languages you normally watch under YouTube's Preferred languages setting; YouTube then keeps original audio when it matches one of those languages.
  • YouTube may serve ads in its official embedded player; the plugin does not suppress them. In Emby's server-loaded Windows WebView path, the YouTube controls remain available and the embedded player is removed deterministically when playback stops or ends, so it cannot remain over the next library item. If Chromium blocks the first unmuted autoplay attempt, that WebView path retries once muted; use the visible YouTube controls to restore sound. Bundled Theater/Xbox/Windows player code may not use this server-side compatibility path.
  • The plugin does not download, expose, or pass through YouTube caption tracks. During plugin playback, the patched server web players keep the official YouTube IFrame caption module disabled, and Emby subtitle-selection commands cannot enable it. The native Emby Android app uses its own bundled player, which a server plugin cannot patch; use Emby Web or its PWA on Android when server-side caption suppression is required. YouTube's own Audio track menu is available only where the client exposes YouTube's controls.
  • Private YouTube account data is not supported. Use playlists that your API key can read.
  • If the settings page looks stale after an update, restart Emby and clear the browser cache for the Emby web app.

License

This project is licensed under the MIT License. See LICENSE for details.

Support the Developer

This plugin is free and open-source, maintained with a lot of love in my spare time. If it brings value to your Emby setup, a small donation would mean the world to me.

Donate with PayPal

About

YouTube plugin for Emby — imports channels, playlists and shorts into your library.

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages