-
Notifications
You must be signed in to change notification settings - Fork 0
Pricing
Cloudflare rates read 2026-08-03, sources at the bottom. Onelight-specific usage numbers are marked measured or unmeasured.
Workers
| Free | Paid ($5/mo base) | |
|---|---|---|
| Requests | 100,000/day | 10M/mo, then $0.30/M |
| CPU time | 10 ms per request | 30M CPU-ms/mo, then $0.02/M |
| Memory | 128 MB | 128 MB |
| Subrequests | 50/request | 1,000/request |
R2
| Free | Beyond | |
|---|---|---|
| Storage | 10 GB-mo | $0.015/GB-mo |
| Class A (writes) | 1M/mo | $4.50/M |
| Class B (reads) | 10M/mo | $0.36/M |
| Egress | unlimited | $0 |
D1
| Free | Paid | |
|---|---|---|
| Rows read | 5M/day | 25B/mo, then $0.001/M |
| Rows written | 100,000/day | 50M/mo, then $1.00/M |
| Storage | 5 GB | 5 GB, then $0.75/GB-mo |
Containers (Workers Paid only), if you encode on Cloudflare. See Encoding.
| Included | Beyond | |
|---|---|---|
| vCPU | 375 vCPU-min/mo | $0.000020/vCPU-s |
| Memory | 25 GiB-hr/mo | $0.0000025/GiB-s |
| Disk | 200 GB-hr/mo | $0.00000007/GB-s |
| Egress (NA/EU) | 1 TB | $0.025/GB |
Serving video is what this application does most, and R2 does not charge for it. On S3 plus CloudFront, egress is typically the largest line. Here it is zero at any volume.
1 TB stored costs $15/month. Serving all of it costs nothing.
Both blob stores return an app-relative /api/v1/media/<key>, and the API
streams the object back. Playback spends Worker requests, not only R2 Class B
reads.
This is deliberate: one code path for both deployment targets, and access control that cannot be bypassed by holding a URL. The consequence is that request volume scales with viewers while storage scales with footage. R2 can issue presigned URLs directly if this becomes the binding cost, at the price of that shared code path.
Stored per version: the original, plus renditions.
Originals are kept. A proxy is not a master, and the master is what is under review.
Renditions for a video version: proxy_1080, proxy_540, poster, sprite, waveform data. A 4K source adds proxy_2160. An HDR source adds hdr_av1 and hdr_hevc. Audio and image versions get smaller sets.
Renditions are small next to the original, so the original dominates.
Assumption: 100 GB of masters per month, retained 12 months, renditions adding 10%.
| Month | Stored | R2 storage |
|---|---|---|
| 1 | 110 GB | $1.50 |
| 6 | 660 GB | $9.75 |
| 12 | 1.32 TB | $19.80 |
Plus $5/month for Workers Paid, plus encoding (Encoding).
Frame.io prices per seat and bundles storage with each one. Onelight prices storage and nothing else: there is no per-seat cost, because there is no licence to enforce.
Frame.io plans, read 2026-08-03:
| Plan | Price | Seats | Storage |
|---|---|---|---|
| Free | $0 | 2 | 2 GB |
| Pro | $15/member/mo | up to 5 | 2 TB + 2 TB per extra member |
| Team | $25/member/mo | up to 15 | 3 TB + 2 TB per extra member |
Onelight on Cloudflare is $5 + $0.015/GB-mo + encoding. So the comparison
turns on one thing: Onelight's advantage grows with seats, and its
disadvantage grows with storage.
Storage volumes below are what people actually keep online, not what a plan permits. The bundled allowances are generous enough that almost nobody reaches them.
| Scenario | Onelight on R2 | Onelight on B2 | Frame.io |
|---|---|---|---|
| Solo, 500 GB | $12.50 | $8.50 | $15 (Pro) |
| Solo, 2 TB | $35 | $19 | $15 (Pro) |
| 5 seats, 2 TB | $35 | $19 | $75 (Pro) |
| 15 seats, 5 TB | $80 | $40 | $375 (Team) |
| 15 seats, 20 TB | $305 | $144 | $375 (Team) |
Encoding compute is extra for Onelight and included for Frame.io. Add it before deciding.
Onelight is cheaper while stored bytes stay under
(seats x plan price - 5) / storage rate:
| on R2 ($0.015/GB) | on B2 ($0.00695/GB) | |
|---|---|---|
| 1 seat vs Pro | 670 GB | 1.4 TB |
| 5 seats vs Pro | 4.7 TB | 10 TB |
| 15 seats vs Team | 24.7 TB | 53 TB |
Frame.io's marginal storage is $7.50/TB, since a $15 seat brings 2 TB. R2 standard is $15/TB. On R2, storage is not where Onelight wins -- seats, free egress and owning the bucket are. On B2 at $6.95/TB it wins on storage too, narrowly.
Frame.io includes encoding, a CDN, support, camera-to-cloud ingest and an ecosystem of integrations. Onelight expects you to run a worker somewhere and support yourself. A post house with fifteen seats saves several hundred a month; a solo operator with a lot of footage and no appetite for running anything probably should not switch.
Frame.io includes encoding, a CDN, support, camera-to-cloud ingest and an ecosystem of integrations. Onelight expects you to run a worker somewhere and support yourself. A post house with fifteen seats and moderate storage saves several hundred dollars a month; a solo operator with a lot of footage and no appetite for running anything probably should not switch.
Storage is the term that grows, so it is the one worth attacking. In rough order of value:
The blob store is a port, not a hard dependency on R2. Any S3-compatible backend can serve it.
| Storage | Egress to Cloudflare | API calls | |
|---|---|---|---|
| R2 Standard | $15/TB-mo | free | $4.50/M writes, $0.36/M reads |
| R2 Infrequent Access | $10/TB-mo | free | $9.00/M writes, $0.90/M reads, plus $0.01/GB retrieval |
| Backblaze B2 | $6.95/TB-mo | free (Bandwidth Alliance) | free |
B2 is 54% cheaper than R2 standard, its Class A/B/C calls are free, and egress to or through Cloudflare is free under the Bandwidth Alliance. The first 10 GB is free.
Not implemented yet: R2BlobStore uses the Workers R2 binding rather than the
S3 API. An S3-compatible store means SigV4 signing from a Worker, which is the
same work as presigning R2, so one implementation covers both.
Originals dominate stored bytes and are read almost never: reviewers watch proxies, not masters. Infrequent Access is a third cheaper.
The catch is a $0.01/GB retrieval fee and a 30-day minimum duration. Reading a 40 GB master back costs $0.40, which is two months of the savings on that same object.
So the transition has to be on a lifecycle rule rather than at upload: keep originals in Standard while ingest and transcode read them, then move them to Infrequent Access after 30 days. Renditions stay in Standard, since they are read constantly.
Anything that re-reads originals later -- a ladder backfill, a re-kind sweep -- pays retrieval, so this needs measuring against how often those actually run.
Version content hashes are already computed for the matcher. The same master uploaded to two projects is currently stored twice. Deduplicating on content hash is free storage for any house that re-cuts the same material.
Some workflows only need the proxy. Discarding the original after a successful transcode removes the term that dominates the bill. It has to be explicit and per-project, because for most people the master is the point.
Multipart parts are 16 MiB and each part is one Class A operation. A 40 GB master is about 2,560 operations, or $0.012.
Possible for a small deployment. Not confirmed, for one reason.
The free plan allows 10 ms of CPU per request. The most frequent request here is streaming media back through the Worker. Streaming waits on the network rather than computing, and waiting is not billed as CPU, so it probably fits. Not measured. See Benchmarks.
Quotas likely to bind before CPU does:
- 100,000 requests/day for the whole deployment. Every media range request spends one, and one reviewer scrubbing a timeline issues many.
- 10 GB R2 storage, roughly one camera master.
Containers require Workers Paid, so encoding on Cloudflare rules out the free tier regardless.
Needed before request and CPU costs can be stated:
- CPU-ms per media request
- requests per review session
- GB per hour of footage, by codec and resolution
- encoding throughput
All four are on Benchmarks.
The Docker deployment has no per-request cost. You pay for the machine and the disk. The same build serves both targets: the job protocol names storage by key and does not assume a filesystem.