BENCHMARKS
Public compositions, measured end to end.
Every workload below is one of Remotion's official templates, uploaded unchanged as a Remotion site. Each was rendered on a stock Remotion Lambda 4.0.523 function in eu-central-1 (arm64, 2048 MiB memory and disk, H.264, Remotion's default frames per Lambda) and then on a second function created from the same code, with only the BlitzFrames install value added. Measured 11 September 2026.
End to end
Seconds from before the render call until progress polling, every 200 ms, observed completion. "First" is the first render on a freshly created function, where every Lambda starts cold. "Warm" is the median of three renders that followed.
| Template | Video | Lambda first | Lambda warm | BlitzFrames first | BlitzFrames warm | Faster by |
|---|---|---|---|---|---|---|
| Hello World title animation, logo | 5 s, 1920×1080 150 frames, 8 chunks | 12.8 s | 5.6 s | 6.7 s | 3.5 s | 1.6× |
| Skia Skia canvas drawing | 5 s, 1920×1080 150 frames, 8 chunks | 62.4 s | 44.1 s | 8.0 s | 4.1 s | 10.9× |
| Code Hike animated code transitions | 12 s, 1106×1080 360 frames, 18 chunks | 17.6 s | 7.4 s | 10.7 s | 6.7 s | 1.1× |
| React Three Fiber 3D phone with video texture | 10 s, 1280×720 300 frames, 15 chunks | 16.0 s | 8.3 s | 7.3 s | 4.0 s | 2.1× |
| TikTok captions vertical video with word captions | 12 s, 1080×1920 358 frames, 18 chunks | 23.8 s | 13.5 s | 9.3 s | 5.8 s | 2.3× |
| Audiogram podcast waveform and captions | 27 s, 1080×1080 814 frames, 41 chunks | 15.1 s | 5.7 s | 7.7 s | 4.5 s | 1.3× |
| Music visualization audio-reactive visualizer | 239 s, 1080×1080 7165 frames, 104 chunks | 34.6 s | 25.1 s | 17.8 s | 14.5 s | 1.7× |
Cost per render
AWS cost is the billed duration of every start, launch and renderer invocation of the render, from its CloudWatch report lines, at the eu-central-1 arm64 Lambda prices with Remotion's own cost formula. Progress-polling invocations are excluded. BlitzFrames usage is the renderer seconds the relay reported for billing, at US$0.00005 per second. Warm medians, before tax. With BlitzFrames, AWS still runs the start, launch and combine steps, so a smaller AWS charge remains.
| Template | Lambda billed | Lambda cost | AWS with BlitzFrames | Renderer seconds | BlitzFrames usage | Total with BlitzFrames | Cost ratio |
|---|---|---|---|---|---|---|---|
| Hello World | 39.2 s | US$0.0011 | US$0.0001 | 18.8 s | US$0.0009 | US$0.0010 | 1.0× |
| Skia | 295.2 s | US$0.0079 | US$0.0001 | 21.1 s | US$0.0011 | US$0.0012 | 6.8× |
| Code Hike | 66.4 s | US$0.0018 | US$0.0002 | 51.8 s | US$0.0026 | US$0.0028 | 0.6× |
| React Three Fiber | 108.3 s | US$0.0029 | US$0.0001 | 40.2 s | US$0.0020 | US$0.0021 | 1.4× |
| TikTok captions | 213.6 s | US$0.0057 | US$0.0002 | 76.1 s | US$0.0038 | US$0.0040 | 1.4× |
| Audiogram | 151.9 s | US$0.0041 | US$0.0001 | 120.9 s | US$0.0060 | US$0.0062 | 0.7× |
| Music visualization | 1936.7 s | US$0.0518 | US$0.0004 | 1096.7 s | US$0.0548 | US$0.0552 | 0.9× |
Across the 7 templates, one render of each costs US$0.0752 on Lambda and US$0.0724 with BlitzFrames. Renders finished 1.1× to 10.9× sooner. 4 of 7 cost less with BlitzFrames, up to 6.8× less; Code Hike, Audiogram, Music visualization cost more: for them a renderer second at this rate costs more than the Lambda seconds it replaces. The cost ratio column is Lambda cost divided by the total with BlitzFrames; below 1 means Lambda was cheaper.
Output checks
The last BlitzFrames output of each template was compared frame by frame with the last stock output using ffmpeg's SSIM. GPU rendering and hardware H.264 encoding change pixels and compression, so identical bytes are not expected; a mean above 0.98 means the frames match. Remote chunks lists, for each BlitzFrames render, how many of the chunks completed on BlitzFrames servers. A fallback is a chunk the relay sent to AWS instead.
| Template | Frames | Mean SSIM | Lowest frame | Remote chunks | Fallbacks |
|---|---|---|---|---|---|
| Hello World | 150 | 0.9981 | 0.9970 | 8 / 8 / 8 / 8 of 8 | 0 |
| Skia | 150 | 0.9946 | 0.9877 | 8 / 8 / 8 / 8 of 8 | 0 |
| Code Hike | 360 | 0.9990 | 0.9970 | 18 / 18 / 18 / 18 of 18 | 0 |
| React Three Fiber | 300 | 0.9994 | 0.9982 | 15 / 15 / 15 / 15 of 15 | 0 |
| TikTok captions | 358 | 0.9833 | 0.9809 | 18 / 18 / 18 / 18 of 18 | 0 |
| Audiogram | 814 | 0.9923 | 0.9861 | 41 / 41 / 41 / 41 of 41 | 0 |
| Music visualization | 7165 | 0.9930 | 0.5286 | 104 / 104 / 104 / 104 of 104 | 0 |
The music visualization's lowest frame is a stock Lambda artifact, not a BlitzFrames one: on the first frame of some chunks, stock Lambda rendered the bars without the background layer. Two stock renders of it compared with each other reach a minimum frame SSIM of 0.41 with 21 frames below 0.95; two BlitzFrames renders compared with each other reach 0.90 with 2 frames below 0.95.
By frame count
Six compositions rendered at 50, 100, 200, 400 frames each: the Skia, TikTok captions, Code Hike and Music visualization templates from above, plus two public projects, the ZurichJS scenes conference opener and GitHub Unwrapped. Each composition is wrapped unchanged in a Remotion Loop so that every length exists: frame N is frame N modulo the loop period. The period is the composition's own length for the four templates and 200 frames for the two projects, whose later scenes fail at 400 frames without BlitzFrames involved: ZurichJS scenes runs a 2048 MB stock Lambda out of memory, and GitHub Unwrapped hits a null path point in its own top-languages scene with its sample props at Remotion 4.0.523. Both reproduce on the original, unlooped compositions at frames 200 to 399. A size is the frame range from 0 to that count, with Remotion's default frames per Lambda, so the chunk count grows with the size. Same functions, region and settings as above. The first render on each fresh function is excluded; the sizes were rendered one after another on the same functions, modes alternating, and the table shows the median of the warm renders, two at the first size and three at the others. Measured 11 September 2026.
| Composition | Frames | Chunks | Lambda warm | BlitzFrames warm | Faster by | Lambda cost | Total with BlitzFrames | Cost ratio | Remote chunks | Fallbacks |
|---|---|---|---|---|---|---|---|---|---|---|
| Skia Remotion template, 1920×1080 | 50 | 3 | 24.9 s | 4.8 s | 5.2× | US$0.0022 | US$0.0005 | 4.3× | 3/3 3/3 | 0 |
| 100 | 5 | 43.9 s | 4.0 s | 11.0× | US$0.0051 | US$0.0008 | 6.3× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 45.4 s | 4.0 s | 11.2× | US$0.0092 | US$0.0015 | 6.2× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 46.4 s | 4.3 s | 10.7× | US$0.0179 | US$0.0030 | 5.9× | 20/20 20/20 20/20 | 0 | |
| TikTok captions Remotion template, 1080×1920 | 50 | 3 | 12.0 s | 6.2 s | 1.9× | US$0.0011 | US$0.0007 | 1.5× | 3/3 3/3 | 0 |
| 100 | 5 | 14.3 s | 6.0 s | 2.4× | US$0.0020 | US$0.0012 | 1.6× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 14.8 s | 5.4 s | 2.7× | US$0.0035 | US$0.0021 | 1.6× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 15.5 s | 5.7 s | 2.8× | US$0.0064 | US$0.0044 | 1.4× | 20/20 20/20 20/20 | 0 | |
| Code Hike Remotion template, 1106×1080 | 50 | 3 | 7.8 s | 7.5 s | 1.0× | US$0.0005 | US$0.0006 | 0.8× | 3/3 3/3 | 0 |
| 100 | 5 | 9.9 s | 6.8 s | 1.5× | US$0.0007 | US$0.0009 | 0.8× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 8.0 s | 6.8 s | 1.2× | US$0.0011 | US$0.0016 | 0.7× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 8.3 s | 6.7 s | 1.2× | US$0.0020 | US$0.0030 | 0.7× | 20/20 20/20 20/20 | 0 | |
| Music visualization Remotion template, 1080×1080 | 50 | 3 | 10.8 s | 5.3 s | 2.0× | US$0.0009 | US$0.0005 | 1.7× | 3/3 3/3 | 0 |
| 100 | 5 | 12.3 s | 4.5 s | 2.7× | US$0.0014 | US$0.0009 | 1.7× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 9.8 s | 4.4 s | 2.3× | US$0.0022 | US$0.0015 | 1.4× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 10.2 s | 4.5 s | 2.3× | US$0.0042 | US$0.0031 | 1.4× | 20/20 20/20 20/20 | 0 | |
| ZurichJS scenes conference opener, first 200 frames looped, 1920×1080 | 50 | 3 | 14.5 s | 5.7 s | 2.5× | US$0.0014 | US$0.0006 | 2.3× | 3/3 3/3 | 0 |
| 100 | 5 | 17.1 s | 4.7 s | 3.6× | US$0.0019 | US$0.0009 | 2.0× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 16.1 s | 4.8 s | 3.3× | US$0.0033 | US$0.0016 | 2.0× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 18.3 s | 5.3 s | 3.5× | US$0.0058 | US$0.0032 | 1.8× | 20/20 20/20 20/20 | 0 | |
| GitHub Unwrapped Remotion’s year-in-review video, first 200 frames looped, 1080×1080 | 50 | 3 | 12.6 s | 4.7 s | 2.7× | US$0.0011 | US$0.0005 | 2.1× | 3/3 3/3 | 0 |
| 100 | 5 | 17.6 s | 4.5 s | 3.9× | US$0.0019 | US$0.0009 | 2.2× | 5/5 5/5 5/5 | 0 | |
| 200 | 10 | 26.4 s | 3.9 s | 6.8× | US$0.0042 | US$0.0015 | 2.9× | 10/10 10/10 10/10 | 0 | |
| 400 | 20 | 19.7 s | 3.9 s | 5.0× | US$0.0069 | US$0.0028 | 2.5× | 20/20 20/20 20/20 | 0 |
Remote chunks lists, for each BlitzFrames render of that size, how many chunks completed on BlitzFrames servers. Costs as in the table above: AWS from CloudWatch billed durations at the region's arm64 prices, BlitzFrames usage at US$0.00005 per renderer second, the ratio is Lambda cost divided by the total with BlitzFrames.
Every sample
| Template | Mode | First | Warm renders |
|---|---|---|---|
| Hello World | Lambda | 12.8 s | 5.7 s / 5.6 s / 5.4 s |
| Hello World | BlitzFrames | 6.7 s | 3.5 s / 5.8 s / 3.3 s |
| Skia | Lambda | 62.4 s | 41.9 s / 54.0 s / 44.1 s |
| Skia | BlitzFrames | 8.0 s | 6.2 s / 3.9 s / 4.1 s |
| Code Hike | Lambda | 17.6 s | 9.6 s / 7.3 s / 7.4 s |
| Code Hike | BlitzFrames | 10.7 s | 8.5 s / 6.7 s / 6.0 s |
| React Three Fiber | Lambda | 16.0 s | 8.0 s / 8.9 s / 8.3 s |
| React Three Fiber | BlitzFrames | 7.3 s | 6.1 s / 4.0 s / 3.7 s |
| TikTok captions | Lambda | 23.8 s | 18.2 s / 13.5 s / 13.4 s |
| TikTok captions | BlitzFrames | 9.3 s | 8.0 s / 5.8 s / 5.7 s |
| Audiogram | Lambda | 15.1 s | 7.0 s / 5.7 s / 5.6 s |
| Audiogram | BlitzFrames | 7.7 s | 7.1 s / 4.3 s / 4.5 s |
| Music visualization | Lambda | 34.6 s | 25.1 s / 25.0 s / 25.7 s |
| Music visualization | BlitzFrames | 17.8 s | 16.5 s / 14.5 s / 14.0 s |
Method
One benchmark harness created the functions, ran every render one after another, read the render hosts' journals and CloudWatch, compared the outputs and removed everything it created. The BlitzFrames function used a temporary token that the billing endpoint refuses, so no subscription was charged; the relay's usage reports were captured on one host instead. The relay was preloaded from the function package, so the two-second bootstrap download a real cold start performs is not in these numbers. Three repeats are a small sample and not a guarantee; the same harness and templates can be rerun at any time. Nothing in the templates was changed, and the AWS side ran Remotion's published Lambda code without modification.
AWS, storage, data transfer and Remotion licence costs are separate from BlitzFrames usage. Prices in USD, excluding applicable taxes.