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 🙏

© 2024 – Pkg Stats / Ryan Hefner

yuebing

v2.0.10

Published

Yuebing 🥮 ========== Yuebing is open-source software for running video hosting sites.

Downloads

282

Readme

Yuebing 🥮

Yuebing is open-source software for running video hosting sites.

Yuebing automatically prepares your source videos for streaming using modern formats, playable on any device over any connection.

Yuebing can use either Amazon S3 or Backblaze B2 for backend storage, and has many advanced features.

Source

Read this in another language

This README.md document has been translated, via hokeylization, into many languages.

I'm certain it's not perfect, but I hope it's better than nothing!

   🇸🇦 Arabic    🇧🇩 Bengali    🇩🇪 German    🇺🇸 English    🇪🇸 Spanish    🇫🇷 French    🇹🇩 Hausa    🇮🇳 Hindi    🇮🇩 Indonesian    🇮🇹 Italian    🇯🇵 Japanese    🇰🇷 Korean    🇮🇳 Marathi    🇵🇱 Polish    🇧🇷 Portuguese    🇷🇺 Russian    🇰🇪 Swahili    🇵🇭 Tagalog    🇹🇷 Turkish    🇵🇰 Urdu    🇻🇳 Vietnamese    🇨🇳 Chinese

Contents

Inspiration

Last year my mom spent a ton of time (and money!) to organize and digitize an archive of old family videos. Some of these were quite old, going back to the 1940's. Really beautiful, classic stuff.

We wanted to privately share these with family, but not with big tech. Going with "free" video hosting from a major provider was off the table.

What we were looking for:

  • Self-hosted, but totally hands-off easy to run and maintain
  • Streams in modern video formats, including adaptive bitrate
  • Videos play on any device, desktop or mobile
  • With a high-bandwidth connection, video quality is awesome; as good as it gets
    • Even with a bad connection, playback is decent quality and doesn't skip or buffer
  • Encrypted storage, thus able to use public cloud storage solutions with some confidence
  • Stateless server: persist anything important to storage that is highly resilient
    • I don't want to worry about backups!
    • This was a nice to have. As it turns out nothing out there has anything like this. Yuebing does!
  • After running a beefy instance to transcode everything, tear it down and run something cheaper for the long-run
    • You can run Yuebing for under $10/month; and hopefully even less down the road as we optimize Yuebing's footprint

I took a couple of weeks to survey what was out there. I started to greatly relax my requirements, and still could find nothing decent. I looked at several open source projects, I'm not saying which because they all had multiple glaring flaws.

So, I decided, how hard could it be? You wire up S3 to ffmpeg, put a decently modern frontend on it, and you're done, right? ... well, uh, the bulk of the work took a couple of months, but it was too much fun to stop! I hope you enjoy it too!

Let's make self-hosting video sites super-easy!

Features

  • Transform an S3 (or B2) bucket of videos into a private video site for friends and family!
  • Connect one or more source buckets providing raw media files
  • Yuebing automatically transcodes source videos into the latest and most widely supported format for adaptive bitrate streaming (DASH/mp4)
  • ALL data is stored in the destination bucket; you can destroy the server whenever you want
    • Useful for running initially on a CPU-optimized instance for the initial transcoding, then run
      on a much cheaper instance for 24/7/365 service.
    • Supports fully encrypted storage (app-side encryption, only you have the key)
    • Always read-only from source, never change source content
    • Automatic and manual scanning for new media files
  • How private or public do you want things? Yuebing supports:
    • Totally private: no media shown to anonymous users, only approved email addresses can create accounts
    • Semi-private: no media shown to anonymous users, but anyone can create a user account
    • Public with limited registration: media shown to everyone, but only approved email addresses can create accounts
    • Totally public: media shown to everyone, and anyone can create a user account
  • Fully internationalized! All user-visible text (and other locale-specific stuff) comes from localized resources
  • Full-featured admin console
  • Search videos by keywords, or from tag cloud
  • Coming soon with your support:
    • Support for more media types (audio, images, etc)
    • User-uploaded media
    • Likes, shares, and push notifications
    • New "source type": Another Yuebing instance!
      • Federation between friendly instances: unified search, user accounts, etc

Anonymous user feature (if the site has been configured to allow anonymous visitors)

  • Browse media
  • Watch media!
  • Create account (if the site has been configured to allow account registration)

Logged-in user features

  • Browse media
  • Watch media!
  • Add a comment, edit your comment, delete your comment!
  • Invite friends
  • Edit account info
  • Delete account, deletes everything that's yours including all your comments

Admin user features

  • Edit media metadata, view thumbnails, change selected thumbnail
  • View media transform queue and job status
  • Start new scans and indexes of source media

Server/backend features

  • Transient-friendly, ZERO persistent/important data is stored within the container.
    • All durable data is persisted in the destination bucket; essentially, we use S3 as our database
  • Automatic periodic scanning of source bucket for new media
  • Add and change media metadata; edits are stored on the destination bucket, source media is never modified
  • Configurable output profiles. Default is DASH-mp4 with multiple sub-profiles
  • User account info is also stored on the destination bucket, optionally encrypted
    • If encryption key is changed, admin can migrate users to the new key with web admin console

Installation

You can install and run yuebing via docker, npm or directly from source.

Docker

If you have docker, you can get started with Yuebing quickly:

docker run -it cobbzilla/yuebing

npm package

# install globally with npm
npm i -g yuebing

# install globally with yarn
yarn global add yuebing

# Now the 'yuebing' command should be on your PATH
yuebing

From source

To run from source, you'll need nodejs v16+ and yarn

# Clone source and install dependencies
git clone https://github.com/cobbzilla/yuebing.git
cd yuebing
yarn install

# Use the 'yuebing' command from the git repo
./yuebing

# Or, since you have the source, run any of the `yarn` scripts
yarn docker-run-dev    # Fastest build & startup, dev docker image
yarn docker-run        # Faster at runtime, production docker image
yarn dev               # Run yuebing locally in dev mode
yarn build             # Build yuebing locally for production mode
yarn start             # Start yuebing locally in production mode

See the developer docs for more info

Configuration

To play around with Yuebing, it's fine to start it without configuring anything. Run yuebing and you'll be prompted to enter the minimal config when it starts.

If you plan on running Yuebing for a while, see the configuration docs for more info on how to set things up.

nginx config

Yuebing is a Nuxt app, and expects that you'll put nginx (or some other web server) in front of it to handle SSL, rate limiting if needed, etc.

If you're using nginx, here is a sample config you can use.

Why the name yuebing?

Oolong the rabbit was an adorable and famous early internet meme. Oolong died in 2003, two years before a certain massively popular video service even existed!

Oolong's successor was named Yuebing. Yuebing wasn't nearly as famous as Oolong, but did that even matter? Yuebing succeeded nonetheless.

Perhaps more interestingly, yuebing means mooncake (Chinese: 月饼, Japanese: 月餅); mooncakes are very tasty and can be found in a wide variety of flavors and styles. Enjoy a time-honored regional style, or try an exotic cake from contemporary bakers who are exploring deliciously uncharted territory! There is truly a yuebing for everyone!