News

28 Years Later is getting everything out of the iPhone camera

I don't know if I'm more excited for this movie as an iPhone nerd or a film nerd

the iPhone camera rig used for some shots in 28 days later

To help modernize the themes of 28 Days Later, the team behind the third movie in the trilogy, 28 Years Later, shot on iPhones in all kinds of impressive ways.

You may hear “It’s a movie shot on iPhone” and think it’s going to look like a low-end YouTube video, but as more information comes out about the film we can see that it’s pulling all the stops to give the movie a unique look that’s not weighed down by the iPhone’s lens.

For comparison, the original 28 Days Later was shot on a 480p video camera. Writer Alex Garland says it was because it was the most prevalent form of camera during that time, and it gave the film a found footage appeal.  While not exactly the same, the iPhone is the ubiquitous camera of the 2020s, so thematically it felt like the next evolution of the original’s thesis.

The film was shot on the iPhone 15 Pro Max with an astounding setup of various lenses and rigs. The newest rig that was revealed in a recent IGN story shows off 20 iPhones linked together in a semi-circle to achieve some sort of “bullet time effect” according to the film’s director. While it remains to be seen how cool this is, the large rig does outline one of the advantages of using a camera that’s this small and smart.

It’s hard to tell exactly how the iPhones are set up, but if I had to guess based the distance they’re being used in the picture above, suggests that the crew is only using filters on the default iPhone lens to make sure they can control their shutter speed. The phones themselves also appear to be in robust cases that are designed for fitting camera accessories and filters onto.

28 years later iPhone

The article says that there are also rigs with eight and ten iPhones, along with standard, single-iPhone camera shots. However, when alone, the camera is rigged out with a traditional Cinema lens, which can cost upwards of $10,000. Regardless, seeing this on the big screen will be a major test for iPhones since they use much smaller camera sensors than the usual crop of optics you’d find on a Hollywood set.

There’s no mention in the story of what app they used to film, but from what I can see it looks like the obvious choice of the Black Magic Camera. However, it’s on an earlier update since this movie was shot in the summer of 2024, so it looks a tiny bit different than the version out today. Or that could just be messy pixels since you need to zoom in so much to see it.

It should also be noted that while Steven Soderbergh and Sean Baker have shot smaller films on iPhones in the past, this is the first blockbuster with a budget of US$75 million (roughly, C$103 million). This will be the real test of how the iPhone holds up as a cinema camera, and if it can wow audiences in the theatre. That’s not to say more movies will fully be shot on it, but even if this can establish it as a consistent B camera on a lot of sets, that’s a big win for iPhone.

Image source: Sony

Source: IGN, Wired

MobileSyrup may earn a commission from purchases made via our links, which helps fund the journalism we provide free on our website. These links do not influence our editorial content. Support us here.

Related Articles

Fatal error: Uncaught Aws\S3\Exception\PermanentRedirectException: Encountered a permanent redirect while requesting https://ms-staging-baselayer-static-assets.s3.ca-central-1.amazonaws.com/?list-type=2&delimiter=%2F&prefix=uploads%2Fwpcf7_uploads%2F. Are you sure you are using the correct region for this bucket? in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php:49 Stack trace: #0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(209): Aws\S3\PermanentRedirectMiddleware->Aws\S3\{closure}(Object(Aws\Result)) #1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, Object(Aws\Result), NULL) #2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(163): GuzzleHttp\Promise\TaskQueue->run() #4 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(189): GuzzleHttp\Handler\CurlMultiHandler->tick() #5 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Handler\CurlMultiHandler->execute(true) #6 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn() #7 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #8 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #9 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #10 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #11 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending() #12 /var/www/html/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(58): GuzzleHttp\Promise\Promise->wait() #13 /var/www/html/vendor/aws/aws-sdk-php/src/ResultPaginator.php(151): Aws\AwsClient->execute(Object(Aws\Command)) #14 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(52): Aws\ResultPaginator->valid() #15 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(69): Aws\map(Object(Aws\ResultPaginator), Object(Closure)) #16 [internal function]: Aws\flatmap(Object(Aws\ResultPaginator), Object(Closure)) #17 /var/www/html/wp-content/plugins/s3-uploads/inc/class-stream-wrapper.php(695): Generator->valid() #18 [internal function]: S3_Uploads\Stream_Wrapper->dir_readdir() #19 /var/www/html/wp-content/plugins/contact-form-7/includes/file.php(362): readdir(Resource id #734) #20 /var/www/html/wp-includes/class-wp-hook.php(322): wpcf7_cleanup_upload_files() #21 /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #22 /var/www/html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #23 /var/www/html/wp-includes/load.php(1280): do_action('shutdown') #24 [internal function]: shutdown_action_hook() #25 {main} thrown in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php on line 49