EmbedNest is an open-source YouTube embed/search player for opening videos in a clean embedded view, saving local playlists and favorites, and browsing YouTube/EmbedNest subscriptions.
Repository: https://github.com/ordinaryets2addict/EmbedNest
- Search YouTube videos through the server-side YouTube Data API.
- Show channel matches, video stats, descriptions, and publisher info.
- Open videos in a direct
youtube.com/embedplayer. - Save watch history, favorites, watch later, playlists, and EmbedNest subscriptions locally in the browser.
- Sign in with Google OAuth to view YouTube subscriptions with
youtube.readonly. - Copy embed code, use theater mode, and share video pages.
Do not double-click worker.js or _worker.js. They are backend code for a
hosted environment, so Windows Script Host will show a syntax error if it tries
to run them directly.
For a quick visual preview, open open-website-preview.bat.
For the fully working local app, use the separate launcher:
../embedtube/open-embedtube.bat
It keeps the local launcher version separate:
../embedtube/index.html../embedtube/open-embedtube.bat../embedtube/start-local-server.ps1
Set this server-side environment variable before deploying:
YOUTUBE_API_KEY=your_youtube_data_api_key
GOOGLE_CLIENT_ID=your_google_oauth_client_id
GOOGLE_CLIENT_SECRET=your_google_oauth_client_secret
SESSION_SECRET=make_this_a_long_random_secret
The Google OAuth consent screen also needs this scope so the Subscriptions page can read the signed-in user's YouTube subscriptions:
https://www.googleapis.com/auth/youtube.readonly
After adding that scope, sign out and sign in again so Google grants the new
permission. The YouTube source on the Subscriptions page uses Google's
subscriptions.list with mine=true, so it shows the channels the signed-in
Google account is actually subscribed to. The EmbedNest source is a separate
local list created by the in-page Subscribe button.
Optional if your redirect URL is exactly /api/auth/callback on the deployed
site:
GOOGLE_REDIRECT_URI=https://your-pages-domain.pages.dev/api/auth/callback
The browser should never receive this key. The _worker.js backend calls the
official YouTube Data API through these routes:
/api/search?q=...&media=everything/api/channels?q=.../api/suggest?q=.../api/video?id=.../api/trending/api/subscriptions/api/log/api/auth/login/api/auth/callback/api/auth/me/api/auth/logout
Dislikes were removed. The site uses YouTube's official public fields for
search results, video details, views, likes, publish date, description, channel
links, and subscriber counts when available. Autocomplete suggestions use
YouTube's public search suggestion endpoint through the server-side worker.
Search can filter media with everything, live, videos, shorts, topic,
and music. Shorts are classified by duration, topic videos by topic-channel
signals, and music videos by YouTube's music category because YouTube's public
Data API does not provide direct toggles for every YouTube UI category.
Upload the files inside this folder, including:
index.htmlembednest-logo.pngembednest-logo-transparent.pnggithub.pngicons/_worker.js.env.exampleLICENSE
Cloudflare Pages uses _worker.js for the API routes. worker.js is kept as an
editable source copy, but _worker.js is the file Cloudflare needs for the live
site. The app title is EmbedNest - YouTube Embed Player for search-friendly
wording while keeping the product name distinct.
MIT License. See LICENSE.