selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
yuebing logo

Self-host yuebing

1.4.5

Self-hosted video sharing site with adaptive streaming

ReleaseOpen CoreOther
Updated7 months ago
LanguageJavaScript
Setup difficultyAdvanced
MobileResponsive
Stars
235
Port
3000 (HTTP web server)
Requires
Amazon S3 or Backblaze B2, Redis
Docker
cobbzilla/yuebing
Install with Docker
yuebing screenshot 1yuebing screenshot 2

What is yuebing?

Yuebing is a self-hosted video hosting service built for private family and friend video archives. It automatically converts source videos into adaptive bitrate DASH/MP4 streams that play smoothly on any device regardless of connection quality. All persistent data — configuration, user accounts, transcoded media, and metadata — lives in an Amazon S3 or Backblaze B2 bucket, so the server itself is completely stateless and can be replaced at any time. The platform offers four privacy modes ranging from fully private to fully public, a web-based admin console, video search with tag clouds, commenting, friend invitations, and translations for over 20 languages. It runs on Node.js 16+ with Redis for caching and job queues, and uses ffmpeg and mediainfo for transcoding. Deployment options include Docker, a global npm package, or running from source. Commercial use requires a separate license from Bubble, Inc.; non-commercial use falls under AGPL-3.0.

Should you self-host yuebing?

yuebing scores 44/100 on selfhost.directory (how scoring works) and ranks #27 of 36 in Video Streaming. It has 235 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is Other-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is piped (70/100, 10 293 stars). It scores higher overall, so compare the two before you pick. See yuebing vs piped side by side.

Features

  • Adaptive bitrate video streaming (DASH/MP4)
  • Admin Console
  • Automatic and manual source scanning
  • Comments
  • Configurable output profiles
  • Encrypted Storage
  • Encryption key migration
  • Friend invitations
  • Granular privacy controls
  • Internationalization (20+ languages)
  • Media metadata editing
  • Stateless server with S3/B2 as database
  • User Account Management
  • Video search and tag cloud

yuebing README

How to install yuebing

Install yuebing with Docker

docker run -it cobbzilla/yuebing

Requires environment variables for admin credentials and S3/B2 configuration; mount a volume for YB_WORK_DIR with plenty of space for transcoding.

How to configure yuebing

  • YB_ADMIN_EMAILadmin@local.localInitial admin user # REQUIRED: Initial admin email address

    Initial admin user # REQUIRED: Initial admin email address

  • YB_ADMIN_LOCALEadmin locale

    admin locale

  • YB_ADMIN_OVERWRITEOverwrite the initial admin user even if it already exists

    Overwrite the initial admin user even if it already exists

  • YB_ADMIN_PASSWORDREQUIRED: Initial admin password

    REQUIRED: Initial admin password

  • YB_ADMIN_USERNAMEAdmin username

    Admin username

  • YB_ALLOW_REGISTRATIONIf this is true, visitors will be able to register for an account on the site

    If this is true, visitors will be able to register for an account on the site

  • YB_AUTOSCAN_ENABLEDAutoscan and Indexing # Set to true to enable autoscan When autoscan is disabled, you can still manually scan sources from the web admin console

    Autoscan and Indexing # Set to true to enable autoscan When autoscan is disabled, you can still manually scan sources from the web admin console

  • YB_AUTOSCAN_INITIAL_DELAYInitial scan after startup, delay is in milliseconds

    Initial scan after startup, delay is in milliseconds

  • YB_AUTOSCAN_XFORM_CONCURRENCYHow many transformations can be done concurrently This setting is persisted, but can be overridden in the runtime environment

    How many transformations can be done concurrently This setting is persisted, but can be overridden in the runtime environment

  • YB_BCRYPT_ROUNDSFor password hashing

    For password hashing

  • YB_BUILD_SEARCH_INDEX_AT_STARTUPSet to true to create the search index when yuebing starts You can rebuild the index on-demand using the web admin

    Set to true to create the search index when yuebing starts You can rebuild the index on-demand using the web admin

  • YB_DATA_ENCRYPTION_ALGOIV and algorithm are optional export YB_DATA_ENCRYPTION_IV="a random IV, this is optional. If omitted an IV will be generated from the key"

    IV and algorithm are optional export YB_DATA_ENCRYPTION_IV="a random IV, this is optional. If omitted an IV will be generated from the key"

  • YB_DEFAULT_LOCALEThe default locale

    The default locale

  • YB_DEST_B2_PART_SIZEFor B2 only: part size for large uploads, default is autodetect the `recommendedPartSize` See: https://www.backblaze.com/b2/docs/b2_authorize_account.html

    For B2 only: part size for large uploads, default is autodetect the `recommendedPartSize` See: https://www.backblaze.com/b2/docs/b2_authorize_account.html

  • YB_DEST_BUCKETREQUIRED: bucket name (S3) or bucket ID (B2) For S3, use the bucket name. For B2, use the bucket ID (not the name!)

    REQUIRED: bucket name (S3) or bucket ID (B2) For S3, use the bucket name. For B2, use the bucket ID (not the name!)

  • YB_DEST_KEYREQUIRED: cloud "key" credential For s3: AWS Access Key for Yuebing system storage (s3) For b2: Key ID

    REQUIRED: cloud "key" credential For s3: AWS Access Key for Yuebing system storage (s3) For b2: Key ID

  • YB_DEST_PREFIXoptional prefix, all writes to dest bucket will be under this prefix Do not end the prefix with a slash

    optional prefix, all writes to dest bucket will be under this prefix Do not end the prefix with a slash

  • YB_DEST_S3_REGIONFor S3 only: the AWS region

    For S3 only: the AWS region

  • YB_DEST_SECRETREQUIRED: cloud "secret" credential For s3: AWS Secret Key for Yuebing system storage (s3) For b2: Application Key

    REQUIRED: cloud "secret" credential For s3: AWS Secret Key for Yuebing system storage (s3) For b2: Application Key

  • YB_DEST_TYPEs3REQUIRED: the cloud storage type The value here can be s3, S3, b2 or B2

    REQUIRED: the cloud storage type The value here can be s3, S3, b2 or B2

  • YB_EMAIL_FROMEmails sent from this system will appear to come from this address

    Emails sent from this system will appear to come from this address

  • YB_EMAIL_HOSTIf you're using Gmail as an SMTP server, you'll need an app-specific password See: https://support.google.com/mail/?p=InvalidSecondFactor

    If you're using Gmail as an SMTP server, you'll need an app-specific password See: https://support.google.com/mail/?p=InvalidSecondFactor

  • YB_EMAIL_PASSWORD
  • YB_EMAIL_PORT
  • YB_EMAIL_SECURE
  • YB_EMAIL_USER
  • YB_FAVICON_DIRThis environment variable is relative to the `static` directory and should not end in a slash See static/README.md for more info on setting a custom favicon If not set, default favicons are loaded from `static`

    This environment variable is relative to the `static` directory and should not end in a slash See static/README.md for more info on setting a custom favicon If not set, default favicons are loaded from `static`

  • YB_INVITE_FRIENDS_ENABLEDtrueIf this is true, logged-in users will see an "invite friends" feature in page footer

    If this is true, logged-in users will see an "invite friends" feature in page footer

  • YB_LIMIT_REGISTRATIONIf this is set, then YB_ALLOW_REGISTRATION is ignored If set, it specifies an object on the destination bucket containing a list of email addresses to allow registration from. The contents of this file can be a JSON array, or a flat text file with one email address per line Note that this path will still be relative to YB_DEST_PREFIX

    If this is set, then YB_ALLOW_REGISTRATION is ignored If set, it specifies an object on the destination bucket containing a list of email addresses to allow registration from. The contents of this file can be a JSON array, or a flat text file with one email address per line Note that this path will still be relative to YB_DEST_PREFIX

  • YB_LOG_FILEWrite Yuebing server logs here. The default behavior is to log to console This only controls Yuebing's server-side logging Output from Nuxt and redis will still go to the console

    Write Yuebing server logs here. The default behavior is to log to console This only controls Yuebing's server-side logging Output from Nuxt and redis will still go to the console

  • YB_LOG_LEVELLogging # Yuebing uses winston for logging, using the `npm` log-level described here: https://www.npmjs.com/package/winston#logging-levels

    Logging # Yuebing uses winston for logging, using the `npm` log-level described here: https://www.npmjs.com/package/winston#logging-levels

  • YB_MANIFEST_CACHE_EXPIRATIONCache manifests, default 1 minute

    Cache manifests, default 1 minute

  • YB_PUBLICIf this is true, anyone can browse and view media If this is false, you must be a logged-in user to browse or view media

    If this is true, anyone can browse and view media If this is false, you must be a logged-in user to browse or view media

  • YB_REDIS_FLUSH_AT_STARTUP
  • YB_REDIS_HOSTRedis and cache expirations #

    Redis and cache expirations #

  • YB_REDIS_PORT
  • YB_REINDEX_CONCURRENCYHow many indexes can be done concurrently This setting is not persisted, it can only be set in the runtime environment

    How many indexes can be done concurrently This setting is not persisted, it can only be set in the runtime environment

  • YB_SITE_URLBase URL, outbound emails will point back here

    Base URL, outbound emails will point back here

  • YB_TITLEMain site configuration # Title of the site, shown in <title> tag and on homepage

    Main site configuration # Title of the site, shown in <title> tag and on homepage

  • YB_WORK_DIRYB_WORK_DIR is where temporary files are written When running in docker, this directory is bind-mounted on the host, NOT in the container Within the docker container, YB_WORK_DIR is always /usr/src/scratch The default is '/tmp/yuebing_workdir' If you'll be transforming a lot of files, change this! Ensure this directory is on a spacious volume. This directory should be OUTSIDE the yuebing source tr

    YB_WORK_DIR is where temporary files are written When running in docker, this directory is bind-mounted on the host, NOT in the container Within the docker container, YB_WORK_DIR is always /usr/src/scratch The default is '/tmp/yuebing_workdir' If you'll be transforming a lot of files, change this! Ensure this directory is on a spacious volume. This directory should be OUTSIDE the yuebing source tr

  • YB_WORK_MAX_LOADYB_WORK_MAX_LOAD is the maximum system load before jobs start delaying themselves Our job queue management has some issues where too many jobs get spawned This setting provides a ceiling to prevent the system from grinding to a stop The default value is 2 * (number of CPUs)

    YB_WORK_MAX_LOAD is the maximum system load before jobs start delaying themselves Our job queue management has some issues where too many jobs get spawned This setting provides a ceiling to prevent the system from grinding to a stop The default value is 2 * (number of CPUs)

  • YB_WORK_SYS_REDIS_PORTWhen YB_WORK_SYS_REDIS_PORT is defined and Yuebing is running in a docker container, don't start redis inside the container; instead, connect to this host port from within the container. This will overwrite the YB_REDIS_PORT setting. When setting YB_WORK_SYS_REDIS_PORTm, also set YB_REDIS_HOST to the IP address of docker host as seen from your docker container (for example, 172.17.0.1)

    When YB_WORK_SYS_REDIS_PORT is defined and Yuebing is running in a docker container, don't start redis inside the container; instead, connect to this host port from within the container. This will overwrite the YB_REDIS_PORT setting. When setting YB_WORK_SYS_REDIS_PORTm, also set YB_REDIS_HOST to the IP address of docker host as seen from your docker container (for example, 172.17.0.1)

  • YB_WORK_UPLOADS_CONCURRENCYWhen processing a very large media library, the upload step can take a long time Things you can do: Set YB_WORK_UPLOADS_CONCURRENCY to a larger number to process more uploads concurrently - If this is too high, you might get rate-limit errors from your cloud storage provider Set YB_WORK_UPLOADS_CONCURRENCY to zero, and uploads will be disabled. You can process all the media faster when you skip th

    When processing a very large media library, the upload step can take a long time Things you can do: Set YB_WORK_UPLOADS_CONCURRENCY to a larger number to process more uploads concurrently - If this is too high, you might get rate-limit errors from your cloud storage provider Set YB_WORK_UPLOADS_CONCURRENCY to zero, and uploads will be disabled. You can process all the media faster when you skip th

More in Video Streaming

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…