Skip to main content

Cloudflare R2-based video hosting

Keep sources and streaming files in Cloudflare R2 while NULX runs upload, HLS transcoding, captions and protected playback around them. NULX adds no delivery markup to playback traffic.

Customer-owned R2 · HLS/DASH · Signed playback · No NULX playback markup

NULX / Library All systems normal

Just uploaded

launch-film.mp4

Ready to play
  1. 1 Connect storage Guided setup
  2. 2 Upload video Made watchable automatically
  3. 3 Share the link On your site or to members
Your storageVideo piles up here
Every screenLooks right on phone and desktop
CaptionsOnly where you need them

Three steps, that is it

Connect, upload, share.

Built so your team can follow it without a developer on hand.

  1. 01 Connect storage

    Connect the space that holds your video once, following the on-screen steps.

  2. 02 Upload video

    Once uploaded, it is prepared to look right on a phone or a desktop.

  3. 03 Share the link

    Put the link on your site or send it to your members.

Putting it on your site

Hand over one link.

Every video gets a link like this. It opens on the sites you approve and stays shut everywhere else.

nulx.dev/video/company-intro

What your company keeps

The video stays yours.

Move to another service later and the video is still sitting in your own storage.

It piles up in your storage

The original and the watchable version both stay on your side.

Watched more, billed the same

NULX adds nothing to the bill for the number of plays.

Leave and keep the video

No downloading everything back before you can move.

What one video costs

Upload one 1m 40s video

Upload and preparation
included in the monthly fee
One month of storage (about 500MB)
about $0.01 · paid to the storage provider
100,000 plays
no extra NULX charge
NULX bill
Monthly fee only

An example. Put your own numbers into the calculator below for a real figure.

When you need numbers Work out a month for our usage

See the price first

What would your video usage cost each month?

Choose viewing time and library size to see the estimated monthly cost.

Library size

Estimated monthly total for the included items

$91.75

Estimated NULX bill
$67.00
Estimated cloud storage and delivery
$24.75
Estimated monthly total
$91.75

For this setup, 85% lower than CF Stream $538.25/mo saved Based on the selected viewing, library, and caption settings

NULX and your selected cloud provider bill these amounts separately. Request operations and tax are additional.

More detail See how the estimate was calculated

Based on 8,000 hours of monthly viewing

Cloudflare Stream Bunny Stream NULX NULX + Cloudflare R2
Platform & processing $19.00
Storage $150.00 $16.50
Delivery $480.00 $60.00
Captions $240.00 $48.00
Your cloud (storage + delivery) $24.75
Total cost of ownership $630.00 $316.50 $91.75

Break-even: about ~2,000 monthly viewing hours vs. CF Stream
About ~8,000 vs. Bunny Stream (captions off; turning captions on brings this forward. Varies with your primary viewer region)

Currency USD $ All prices and payments are in US dollars (USD)

          
        
How we calculated this

These use each provider's publicly listed pricing, checked 2026-08, not a quote. Verify against your own Cloudflare and vendor bill.

  • Watching an hour at 1080p uses about 1.5GB.
  • Storage is billed on source + renditions combined, using a 2.2x multiplier for a 1080p rendition ladder. Archiving originals and trimming renditions can cut this by roughly 30–40%.
  • All prices and payments are in US dollars (USD). Displayed amounts are not converted into other currencies.

NULX + your cloud

  • Platform + encoding: $19/mo flat, includes 40 encoding hours; overage is billed at $0.60/hour for NULX managed encoding and quoted on request for customer-cloud or desktop encoding
  • Captions: $0.02/min transcription
  • Your cloud: storage + delivery at your chosen provider's list rates (operations excluded)

Cloudflare Stream

  • Storage: $5 per 1,000 minutes stored
  • Delivery: $1 per 1,000 minutes streamed
  • Captions: not offered by CF Stream

CF Stream bills stored minutes of source video, not source+rendition GB like the other columns; shown as published, not adjusted.

Bunny Stream

  • Storage: $0.01/GB-month (source + renditions)
  • Delivery: $0.005/GB (EU/NA) · $0.03 (Asia/Oceania) · $0.045 (South America). Bunny's published per-region rates, checked 2026-08-03
  • Captions: $0.10/min

All rates above are publicly listed pricing, checked 2026-08.

Why BYOC

Three things that change when the bucket is yours.

Your library stays yours

Sources and renditions are written to your own Cloudflare R2 bucket. Cancel NULX and the files do not move - they were never in our custody.

No NULX playback markup

We bill the platform and encoding. Delivery is Cloudflare billing you directly, so a viral month raises your R2 line, not ours.

Move without rebuilding your library

HLS output sits in standard object storage behind your own domain. Switching tools later means repointing a URL, not re-encoding an archive.

How it works

Three steps to a playable URL.

No infrastructure to stand up. Connect the bucket once, then upload.

  1. 1

    Connect Cloudflare R2

    Paste a scoped API token. NULX verifies read, write and playback access before saving.

  2. 2

    Upload or ingest by API

    Drop files in the browser, use the desktop uploader for long jobs, or POST to the API.

  3. 3

    Embed or sign playback

    Copy the embed snippet, or issue expiring signed URLs for members-only video.

Who uses it

Built for libraries that keep growing.

Online courses

Lesson libraries that are watched for years after they are recorded.

Membership VOD

Subscriber-only catalogues that need expiring links, not public URLs.

SaaS product video

Onboarding and feature video embedded inside your own application.

Enterprise archive

Long-retention footage where storage cost matters more than bursty delivery.

Short, clear pricing

Choose the plan that fits your library.

Pick by how much video you keep and how much you upload each month. The calculator above has the exact figures.

Signing up gets you a look without a card: 2 hours of video preparation a month and up to 1 connected storage. Run out and new uploads pause instead of adding charges, and that is when you move up to a plan above.

Honest fit

When NULX is the wrong choice.

Two lists, not one. Reading the right-hand column and leaving is a better outcome than a refund.

Good fit

  • Already using Cloudflare, or willing to open an R2 account
  • Enough monthly viewing that delivery cost is a real line item
  • Ownership of the master files matters
  • You want API and infrastructure control

Not a fit

  • Very small video usage, where a flat bundled plan is cheaper
  • You do not want to manage a cloud account at all
  • You need a full OTT CMS with merchandising and apps
  • You want one vendor accountable for every layer

Technical proof

What is actually implemented.

  • HLS and DASH packaging
  • S3-compatible ingestion
  • Signed, expiring playback URLs
  • Webhooks on job state changes
  • REST API for upload and asset management
  • Automatic captions (optional, per video)
  • Customer-owned Cloudflare R2 storage
  • Desktop uploader with resumable transfers

Read the architecture guide

FAQ

The questions that decide the purchase.

Can video play straight out of R2?

Yes, once HLS output exists in the bucket and your own domain sits in front of it. R2 serves manifests and segments like any other object; it will not create them, so encoding has to happen first.

How is this different from Cloudflare Stream?

Stream stores and bills the video for you, priced per stored and delivered minute. NULX leaves the files in your bucket and bills a flat platform fee plus encoding, so delivery stays on your own Cloudflare bill.

What happens to my video if I cancel NULX?

Nothing moves. Sources and renditions are already in your bucket under your Cloudflare account. Revoke the API token and the files stay exactly where they are.

What can NULX see in my bucket?

Only the prefixes the token you issue allows. During managed encoding a worker temporarily reads the source through a limited signed URL and writes the output back. Credentials are encrypted server-side and never displayed again after saving.

If viewing grows, does the NULX bill really stay flat?

The NULX side does. Delivery is billed by Cloudflare directly to you, and R2 internet egress is $0. More viewing raises encoding only if you upload more video.

Is protected playback DRM?

No. It issues short-lived signed URLs that expire, and can restrict domains. It is not Widevine or FairPlay and it cannot stop screen recording. We do not call it DRM.

Can I migrate video that is already on Vimeo, Mux or Bunny?

Yes, by re-uploading the masters. There is no one-click importer today; for large archives ask us and we will scope it.

Who bills me for R2?

Cloudflare does, directly. NULX never resells storage or delivery and adds no markup to either.

Available now

Sign in and pay for what you use.

An email address is all it takes. No card, nothing to install.