npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@krx3d/tizentube2

v1.30.110

Published

TizenTube is an ad-free and sponsor-free solution for your favourite streaming website on your Tizen (Samsung) TVs.

Readme

TizenTube

TizenTube is a TizenBrew module that enhances your favourite streaming websites viewing experience by removing ads and adding support for Sponsorblock.

Looking for an app for Android TVs? Check out TizenTube Cobalt. It offers everything TizenTube has for Android TVs. Download the latest release here.

Discord Server Invite

Telegram Channel

How to install

  1. Install TizenBrew from here and follow the instructions.

  2. TizenTube is installed to TizenBrew by default. It should be in the home screen. If not, add @krx3d/tizentube2 as a NPM module in TizenBrew module manager.

Standalone Mode

TizenTube can also run as its own installable Tizen app, without needing TizenBrew at all. It bundles a small local proxy service that loads YouTube TV through http://localhost:8099, injecting TizenTube automatically.

  • The .wgt is built and signed by the Build TizenTube Standalone and Release GitHub Actions workflow — see below for setting it up.
  • Once built, install the .wgt the same way you'd install any other Tizen app (e.g. via TizenBrewInstaller's "Install from GitHub"/"Select file to install", or sideloaded directly).
  • The standalone app always loads TizenTube from https://cdn.jsdelivr.net/npm/@krx3d/tizentube2/dist/userScript.js, so it stays in sync with whatever this repo last published to npm — no separate rebuild needed when only the mod itself changes.
  • Its version is kept in lockstep with the userscript: once the build workflow above has the required secrets, it builds automatically right after every successful npm publish (triggered by build-publish-cleanup.yml completing), reading the just-bumped package.json version and writing it into standalone/config.xml before packaging — so "installed version" always matches the userscript version, no matter which of the two you're running.
  • The TV's Developer Mode "Host PC IP" setting picks between standalone's two internal paths, and both have known problems — there is no simply-correct setting.
    • 127.0.0.1/localhost → the CDP/SDB-based injection path (standalone/service/injector.js, connects to the real youtube.com directly). Extensively tested and found unreliable at the connection level on both Tizen 5.5 and 6.5 (works once, then fails on every subsequent launch until the app's cache is cleared) — see AGENTS.md "Known unresolved issues" for the full investigation and the fixes attempted so far.
    • Anything else (a real PC IP, or unset) → the local-proxy path (standalone/service/index.js, rewrites and proxies YouTube's traffic through localhost:8099). Connects reliably, but carries a real, confirmed-on-device risk: YouTube's own servers can detect the proxied traffic pattern as suspicious and throw up a verification challenge that stops video playback entirely — sometimes not immediately, but after the app's already been working for a while. This is not a bug we can straightforwardly fix: it's why upstream added the CDP injector in the first place (commit c497c059, "Since fixing #555 and #561 would be starting a cat and mouse game between me and YT, I think it's better to do it the old way") rather than continuing to patch the proxy path directly.
    • This also has a practical side effect: 127.0.0.1 is the same setting TizenBrew and TizenBrewInstaller need for their own local SDB-based mechanisms (module injection, package installs), so a TV configured for standalone's proxy path can't use those without switching back and forth.

Building a signed Standalone .wgt (GitHub Actions)

The build workflow needs a Tizen author certificate to sign the package. This is a one-time setup:

  1. Install the baseline Tizen Studio installer from download.tizen.org/sdk/Installer/tizen-studio_6.1 — the newer Web CLI/IDE package-manager-based installer doesn't include Certificate Manager, so it has to be the baseline one.
  2. Open Certificate Manager directly: C:\tizen-studio\tools\certificate-manager\certificate-manager.exe.
  3. Author tab → + → create a new, dedicated author certificate — don't reuse one that's already been used to install a different app on the TV(s) you're targeting. A reused cert has been observed to sign successfully but fail (or behave unreliably) at install time on-device, seemingly because Tizen ties certificate identity to whatever app it was already registered against there. Fill in a name, organization/email, and a password — remember the password, you'll need it below. This produces a .p12 and .pwd file under C:\tizen-studio-data\keystore\author\.
  4. Base64-encode the .p12 with no line wrapping:
    • Linux/macOS: base64 -w0 author.p12
    • Windows (PowerShell): [Convert]::ToBase64String([IO.File]::ReadAllBytes("author.p12"))
  5. In this repo, go to Settings → Secrets and variables → Actions → New repository secret and add:
    • TIZEN_AUTHOR_KEY — the base64 string from step 4
    • TIZEN_AUTHOR_KEY_PWthe plain-text certificate password from step 3, not base64-encoded. Only the .p12 file itself needs base64 (it's binary); the password is already text. Pasting a base64-encoded password here fails the build with PKCS#12 MAC could not be verified. Invalid password?.

Once both secrets are set, the workflow builds automatically after every successful npm publish — no further action needed. To trigger an ad-hoc build without publishing first, either push a version tag:

git tag v1.0.0
git push origin v1.0.0

or run it manually from the Actions tab (Build TizenTube Standalone and ReleaseRun workflow). The signed .wgt is attached to the resulting GitHub Release either way.

If a run failed because of a bug in the workflow file itself and that's since been fixed, use Run workflow (or a new tag) to test the fix — not Re-run failed jobs. A re-run stays pinned to the workflow file as it existed at that run's original commit, so it won't pick up any fix merged afterward.

Features

Everything below is toggleable from the in-app settings menu (green button on the remote, or G / F2 / 2 when testing in Chrome). This fork carries a number of features that upstream TizenTube does not — those are marked (fork).

Each row is one settings-menu entry; where an entry has its own sub-menu, its options are described in the row rather than listed separately.

Blocking and filtering

| Feature | What it does | | --- | --- | | Ad Block | Removes video ads, ad slots, and the masthead/banner ad on Home | | SponsorBlock | Skips sponsor, intro, outro, self-promo, interaction, filler, preview and non-music segments. Each category can be set to auto-skip, skip manually, or ignore, with optional toasts. Highlights (jump to the video's main point) can be enabled separately | | Hide End Screen Cards | Removes the suggested-video cards overlaid at the end of a video | | "Includes paid promotion" overlay | Toggle the paid-promotion banner | | Hide Members-Only Videos (fork) | Filters videos you can't watch without a channel membership out of shelves and grids | | Hide Channel Shelves (fork) | Removes whole channel-recommendation shelves from feeds | | Hide Feedback Surveys (fork) | Removes YouTube's in-feed "help us improve" survey cards | | Hide Special Playlists (fork) | Hides Liked Videos and/or Watch Later from the Library and Playlists pages | | Enable Shorts | Off by default — Shorts shelves and Shorts tiles are stripped from every surface |

Watched-video handling

| Feature | What it does | | --- | --- | | Hide Watched Videos | Hides videos you've already watched. Configurable watched-percentage threshold, and per-page control over where it applies (Home, Search, Subscriptions, Channel pages, Library, individual playlists, History, Music, Gaming, More, Watch) | | Playlist Batch Load (fork) | Loads a playlist's later batches up front instead of only as you scroll, so hide-watched can act on the whole playlist rather than the first ~30 items. The number of batches fetched is capped by a configurable limit |

Video player

| Feature | What it does | | --- | --- | | Preferred Video Quality | Locks playback to a chosen quality (or the next best available) instead of letting YouTube pick | | Preferred Video Codec | Prefer VP9, AV1 or AVC1 when the video offers a choice | | Auto Frame Rate | Matches the TV's output frame rate to the video, with a configurable pause duration while it switches (Tizen only) | | Spoof Viewport Resolution (fork) | Reports a different screen resolution to YouTube. Useful when the TV reports a lower resolution to the browser than it can actually decode. Requires an app restart | | Speed Settings Increments | Sets the step size used by the playback-speed control | | Picture-in-Picture / Mini Player | Both available from the player options popup; the two buttons can be swapped | | Screen Off | Blanks the screen while audio keeps playing — for using the TV as a music player | | Hide Related Videos in Player | Removes the related/suggested-videos rail that slides in over the player, so a nudge on the D-pad during playback doesn't cover the video with recommendations | | Number Keys Jump to Percentage | Pressing 19 jumps to that percentage of the video, 0 jumps to the start | | Reload Player After TV Wakes (fork) | Rebuilds the player after standby, fixing the frozen first frame | | Player UI patching | Optional Previous/Next, Super Thanks, Ask, and Speed Controls buttons |

Thumbnails and titles

| Feature | What it does | | --- | --- | | DeArrow | Community-sourced, non-clickbait titles, with optional DeArrow thumbnails | | High Quality Thumbnails | Upgrades tile thumbnails to hqdefault/sddefault | | Video Previews | Hover/focus previews on tiles | | Disable Enlarged Thumbnails | Stops the focused tile from scaling up | | Enable Shrinked Thumbnails | Shrinks unfocused tiles instead |

Interface

| Feature | What it does | | --- | --- | | Customizable Themes | Custom focus-container and route colouring (red button) | | Clock | On-screen clock, 12/24-hour, optional seconds, and an option to hide it while a video is playing | | Screen Dimming | Dims the screen after a configurable idle timeout, at a configurable opacity | | Disable Sidebar Contents | Choose which sidebar entries to hide | | Disable Channels on Sidebar | Removes subscribed-channel entries from the sidebar | | Launch To on Startup | Choose which page the app opens to | | Reload Home on Startup | Forces a fresh Home feed on launch | | Library Tabs Buttons to Hide (fork) | Hides individual Library tabs (Music, Movies & Shows, Podcasts, My Videos, History, Watch Later, Playlists) | | Sort Subscriptions Alphabetically | Alphabetical instead of YouTube's own ordering | | Long Press Actions | Long-press a tile for Play, Watch Later, Save to Playlist and Add to Queue | | Who's Watching Menu | Control whether the profile picker appears, including on app exit, and whether it stays permanently enabled | | "Are you still watching?" prompt | Toggle YouTube's idle-playback interruption | | Show Guest Sign In Reminder | Toggle the prompt asking a signed-out viewer to sign in | | Show TT Welcome Message | Toggle the TizenTube toast shown on launch | | Fix UI | Layout corrections for TVs that render the YouTube TV UI incorrectly |

Subtitles

| Feature | What it does | | --- | --- | | Show Local Subtitle | Surfaces subtitles in your own language | | Show Hidden Subtitles | Exposes tracks YouTube hides from the picker | | Remember Caption Style (fork) | Persists caption font/size/colour settings across sessions and restarts |

Maintenance and diagnostics

| Feature | What it does | | --- | --- | | Updater | Checks for TizenTube updates, optionally on startup | | Debug Console (fork) | On-screen log console (yellow button), with configurable corner position and height | | Remote Log Server (fork) | Streams logs to a PC receiver for on-device debugging, with a built-in connection test |

Missing something? Request it.

Tampermonkey local debugging helpers (Windows + Chrome)

Use this when you want to test TizenTube locally in Chrome instead of on-device.

Tampermonkey runs the userscripts, while a User-Agent switcher extension makes Chrome present itself as a TV browser so https://www.youtube.com/tv stays on the TV UI.

Scripts in this repository

Tampermonkey scripts are stored in:

  • scripts/tampermonkey/tizentube-loader.user.js (loads dist/userScript.js via @require)
  • scripts/tampermonkey/tizentube-log-button.user.js (adds floating TT Logs button that calls window.downloadTizenTubeLogs())

Full setup steps

  1. Install Tampermonkey in Chrome.

  2. Open chrome://extensions/:

    • Enable Developer mode (top-right).
    • Open Tampermonkey details and enable Allow in Incognito.
    • If you use a User-Agent extension, also enable Allow in Incognito for it.
  3. Install a User-Agent switching extension (for TV UA testing).

  4. Set a TV-like User-Agent for YouTube. Example that usually works:

    Mozilla/5.0 (SMART-TV; Linux; Tizen 6.5) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 TV Safari/537.36

    Real TV User-Agent examples captured from your devices:

    • Tizen 5.0 TV - TV Model UE75RU7099UXZG: Mozilla/5.0 (SMART-TV; LINUX; Tizen 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/5.0 TV Safari/537.36
    • Tizen 6.5 TV - TV Model LS32BM500EUXEN: Mozilla/5.0 (SMART-TV; LINUX; Tizen 6.5) AppleWebKit/537.36 (KHTML, like Gecko) 108.0.5359.1/6.5 TV Safari/537.36 UWE/0.2.27108
  5. In Tampermonkey, create/import scripts/tampermonkey/tizentube-loader.user.js (configured for youtube.com/tv* only).

  6. In Tampermonkey, create/import scripts/tampermonkey/tizentube-log-button.user.js (configured for youtube.com/tv* only).

  7. In Tampermonkey script settings, set Sandbox mode = ALL for these scripts.

  8. Open https://www.youtube.com/tv and sign in if needed.

  9. Verify TizenTube loaded:

    • Open DevTools Console and run typeof window.toggleDebugConsole (should return "function").
  10. Click TT Logs (bottom-right corner of the page, floating above the YouTube TV UI) to download logs without typing console commands.

Keyboard shortcuts for Windows testing (no TV remote)

When testing in Chrome on desktop, TizenTube maps TV color-button actions to normal keys:

  • GREEN (open TizenTube settings): G, F2, or 2
  • RED (open theme settings): R, F1, or 1
  • YELLOW (toggle debug console): Y, F3, or 3
  • BLUE: B, F4, or 4

Where should I see the button?

After both userscripts are enabled and /tv has loaded, the TT Logs button appears in the bottom-right corner as a small black/green floating button.

If you do not see it:

  • confirm tizentube-log-button.user.js is enabled in Tampermonkey,
  • refresh the page once,
  • and verify Tampermonkey script sandbox is set to ALL.

Notes

  • These helper scripts are intentionally limited to /tv URLs so they do not affect normal desktop YouTube pages.
  • In Tampermonkey, you can force-refresh @require files via TizenTube Loader → Externals → Requires → Update.
  • If Tampermonkey seems stale in Incognito, open script dashboard and use Utilities → Check for userscript updates, then hard-refresh YouTube TV.
  • Tampermonkey only refreshes @require when it checks script updates; bumping loader @version and running update check forces newest bundle.
  • If /tv redirects back to desktop YouTube, re-check User-Agent override and extension scope.
  • Keep both scripts enabled: loader + log-button.
  • The log button is external (Tampermonkey UI helper), not an in-app visual-console button.