Course video that stays cheap as the catalogue grows.
Lessons are recorded once and watched for years. That makes stored hours grow steadily while viewing stays broad and predictable - the workload where per-minute pricing hurts most.
Short answer
Keep lessons in your own bucket and pay for storage, not plays.
A course catalogue accumulates. Every cohort adds recordings that are never deleted, and every enrolled student watches them. With storage-based pricing and $0 delivery, the bill tracks the catalogue instead of enrolment, so a successful launch does not produce a surprise invoice.
Signed playback matters here too: course video is paid content, and expiring links stop a shared URL from becoming free access.
Estimate this workload in the calculator See how BYO storage works
What courses need
Three requirements this workload always has.
Course platforms tend to converge on the same short list.
Members-only playback
Lessons must play for enrolled students and not from a link pasted elsewhere. Expiring signed URLs with domain restrictions handle that.
Captions per lesson
Accessibility and search both want transcripts, but only for lessons that need them. Captions are billed per minute rather than bundled.
Embedding in your LMS
Playback has to sit inside your own course pages, on your own domain, not on a vendor's watch page.
Example
A 300-lesson catalogue with 800 students.
| Input | Value | Monthly cost |
|---|---|---|
| Catalogue | 300 lessons x 25 min = 125 hours | - |
| R2 storage | 125h x 1.5 GB x 2.2 = 413 GB | about $6.19 |
| Viewing | 800 students x 4 hours = 3,120 hours | $0 delivery |
| New lessons | 20 hours recorded this month | within the 60 included |
| NULX platform | Flat | $19.00 |
| Total | about $25.19 |
Storage uses Cloudflare's published R2 rate and an estimated 2.2x rendition multiplier. Delivery is $0 because R2 does not charge for standard internet egress, so the 3,200 viewing hours add nothing.
Common questions
Course-specific questions.
Can students download the lessons?
Signed URLs make casual downloading impractical and links expire, but a determined viewer can capture what they are authorised to watch. We do not claim otherwise.
What happens when a cohort ends?
Nothing changes in storage terms - the lessons stay in your bucket. You are not paying per active student.
Does it work with my LMS?
If your LMS accepts an embed or an HLS URL, yes. Playback is a standard player on your own domain.
Is there a limit on lesson length?
No hard limit. The desktop uploader exists for long recordings on unreliable connections, and resumes interrupted transfers.
Sources
Rates checked September 10, 2026 · Page updated September 10, 2026
Next step
Price your catalogue.
Enter lesson hours and expected viewing to see what a month costs at your scale.