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

seamless-vid-player

v1.0.4

Published

YouTube-style React video player with HLS, DASH, scrubbing previews, theater mode, and a polished settings UI.

Readme

seamless-vid-player 📺

A highly polished, seamless, and fully responsive video player component for Next.js and React. Built with precision to replicate the premium animations, layout, and UX of high-end video platforms.

npm version

✨ Features

  • Seamless UI: Butter-smooth animations and transitions.
  • Adaptive Bitrate Streaming: Built-in support for HLS (.m3u8) and DASH (.mpd) via hls.js and dashjs.
  • Dynamic Quality Selector: Automatic resolution detection and manual quality switching menu.
  • Efficient Scrubbing: High-performance timeline scrubbing using WebVTT Sprite Sheets.
  • Keyboard Mastery: Standard shortcuts out of the box (Space, K, M, F, J, L, C, etc.).
  • Next.js & SSR Ready: Fully optimized for Next.js 13/14 App Router.

🚀 Installation

npm install seamless-vid-player lucide-react hls.js dashjs

🛠 Usage

1. Implementation

Import the global styles and the component into your page:

import "seamless-vid-player/styles.css";
import { YouTubePlayer } from 'seamless-vid-player';

export default function VideoPage() {
  return (
    <div className="max-w-5xl mx-auto p-4">
      <YouTubePlayer 
        src="https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8" 
        title="Video Demo"
        eyebrow="Streaming Test"
        description="Experience seamless playback with dynamic quality switching."
        badges={["4K", "HLS"]}
        defaultTheaterMode
      />
    </div>
  );
}

2. Controlled Theater Mode

import { useState } from "react";
import "seamless-vid-player/styles.css";
import { YouTubePlayer } from "seamless-vid-player";

export default function VideoPage() {
  const [isTheaterMode, setIsTheaterMode] = useState(false);

  return (
    <YouTubePlayer
      src="/video.mp4"
      title="Programmable Theater Mode"
      theaterMode={isTheaterMode}
      onTheaterModeChange={setIsTheaterMode}
    />
  );
}

3. Local Test App

A ready-to-run consumer scaffold lives in test-scaffold/. It installs the package from the parent folder so you can test the published API or local changes without touching the demo app.

cd test-scaffold
npm install
npm run dev

📖 Props

| Prop | Type | Required | Description | | :--- | :--- | :---: | :--- | | src | string | Yes | Path or URL to the video file (.mp4, .m3u8, .mpd). | | title | string | Yes | The primary title of the video. | | description | string | No | A longer description text shown below the title. | | eyebrow | string | No | Small uppercase text shown above the title. | | badges | string[] | No | Array of tags (e.g. ['HD', 'CC']) shown next to the title. | | thumbnailTrackSrc| string | No | Path to a .vtt file for sprite-sheet based hover previews. | | captionsSrc | string | No | Path to a .vtt captions file. | | theaterMode | boolean | No | Controlled theater mode state. When provided, the component becomes externally controlled. | | defaultTheaterMode | boolean | No | Initial theater mode value for uncontrolled usage. | | onTheaterModeChange | (isTheaterMode: boolean) => void | No | Fired whenever theater mode is toggled from keyboard or UI. |


⌨️ Keyboard Shortcuts

| Key | Action | | :---: | :--- | | Space / K | Play / Pause | | M | Mute / Unmute | | F | Toggle Fullscreen | | T | Toggle Theater Mode | | C | Toggle Captions | | J / Left Arrow | Skip Backward 5s | | L / Right Arrow | Skip Forward 5s | | I | Open Miniplayer (PiP) |


🖼 Generating Thumbnails (WebVTT)

For efficient scrubbing, use the included process-video.sh script or your own ffmpeg command to generate a sprite sheet and VTT coordinates:

# Example ffmpeg command for a 5x5 sprite grid
ffmpeg -i video.mp4 -vf "fps=1/10,scale=160:90,tile=5x5" sprite.jpg

📜 License

MIT © [Your Name]