iPhone VFX

Shooting VFX on an iPhone

Apple Log, ProRes, a fixed frame rate and a 180° shutter: what to set, which apps to use and how to get the clips into Nuke

An iPhone can shoot plates good enough for visual effects: a feature film, 28 Years Later, was shot mostly on iPhones. But the phone is designed to make a nice video on its own, not a plate for compositing: it changes frame rate, exposure, lens and colour by itself, sharpens, stabilises and compresses. Every one of those helps a holiday video and hurts a track, a key or a match. This page is the list of what to set before you press record, which apps give you the controls the native Camera hides, what to shoot on set besides the take, and how to get the clips into Nuke without losing frames. The Nuke parts I tested in Nuke 17.0v1: what it reads, what it doesn't, and what a variable frame rate clip does to a Read node.



Index



01. Can you really shoot VFX on an iPhone?

Yes, with the right settings and with a clear idea of where the phone is weaker than a cinema camera. The best known example is 28 Years Later (2025): Danny Boyle and the cinematographer Anthony Dod Mantle shot it with the iPhone 15 Pro Max as the main camera, in cages with cinema lenses and filters, together with other cameras and drones. For some shots they built rigs of 8, 10 and 20 iPhones side by side, firing together, a "poor man's bullet time" that lets the editor pick the angle or sweep around the action.

28 Years Later: Danny Boyle on shooting with the iPhone, Apple TV28 Years Later: Danny Boyle on shooting with the iPhone (Apple TV)
The arc of iPhone 15 Pro Max cameras on the set of 28 Years Later, all pointed at an infected in the woods, with a monitor showing the take
The multi-iPhone rig on set: a row of phones in cages on an arc, all recording the same action, so the editor can choose the angle or sweep around it. Frame from Apple TV's behind-the-scenes video, via 9to5Mac
Danny Boyle and Anthony Dod Mantle with an iPhone rigged onto a long telephoto lens, a table of iPhone cages and drones in front of them
Danny Boyle and Anthony Dod Mantle with an iPhone mounted on a telescope lens; on the table, iPhones in cages with matte boxes and lenses. Apple TV video, via Digital Camera World

What the phone gives you, and what it costs in comp:

the phonewhy it matters for VFXwhat to do
A small sensorMore noise in the shadows, less dynamic range than a cinema camera, and almost everything in focus.Expose well (don't rescue it later), shoot Log, degrain before keying, and add defocus in comp when you need depth.
A fixed apertureUp to the 17 Pro the phone can't close the iris: in daylight the only way to get less light is a faster shutter, which kills the motion blur. The 18 Pro main camera can stop down to f/4, about 2.3 stops: it helps, it doesn't replace the ND.Use ND filters to keep a 180° shutter (section 04).
A rolling shutterThe sensor is read line by line: fast pans lean verticals, and flashes or strobes light only part of the frame.Move the camera slower, and know that the tracker has to deal with it; mention it to the matchmove artist.
Heavy processingSharpening adds halos to every edge, noise reduction smears fine detail and grain: both make keys and edge work harder.Shoot Log and ProRes, and lower sharpening and noise reduction where the app lets you.
Automatic everythingExposure, white balance, focus, lens and even frame rate change during the take.Lock all of them, or use an app that does (sections 03 and 05).
Electronic stabilisationIt crops, moves and warps every frame differently: the lens distortion is no longer the same from frame to frame, so tracks and undistorts don't hold.Turn it off, put the phone on a tripod or a gimbal.
Compressed filesHEVC and H.264 throw detail away, have 8 or 10 bits and, the iPhone way, can have a variable frame rate.ProRes 422 HQ for anything that goes to VFX, and convert the others before comp (section 12).
Always with youThe best camera for reference: HDRIs, textures, set photos, LiDAR scans, Gaussian splats, witness cameras.Even on a shoot with a cinema camera, a phone on set saves the comp (sections 07 to 10).


02. Which iPhone does what

For VFX the line is the Pro models: only they record ProRes and Log. The non-Pro iPhones record HEVC and H.264 only; they can still shoot good reference and tracking data, but a plate from them is a compressed, processed video.

modelProResApple Logrecord to an external SSDProRes RAW, Apple Log 2, genlock
iPhone 13 Pro / 14 ProYes, internalNoNo (Lightning port)No
iPhone 15 ProYes, internal; 4K60 only to an external driveYesYes, USB-C (USB 3)No
iPhone 16 ProYesYesYesNo
iPhone 17 ProYes, up to 4K120 to an external driveYes, and Apple Log 2YesYes: ProRes RAW, Apple Log 2, genlock with compatible hardware
iPhone 18 Pro (2026)Yes, up to 4K120 to an external driveYes, Apple Log 2YesYes, plus ACES and a variable aperture on the main camera
Close-up of the iPhone 17 Pro camera plateau with its three 48MP cameras and the LiDAR scanner
The iPhone 17 Pro cameras: ultra wide, main and telephoto, all 48MP, with the LiDAR scanner and the flash beside them. Image: Apple, Newsroom

The iPhone 17 Pro has three 48MP cameras: the 13mm ultra wide (f/2.2), the 24mm main (f/1.78, with a 48mm crop) and the 100mm telephoto (f/2.8, with a 200mm crop). The focal lengths Apple gives are 35mm equivalents, not the real focal lengths of these tiny lenses (section 14 has the real ones, and why it matters in the tracker).

The iPhone 18 Pro keeps the 13mm ultra wide and the 100mm telephoto, and has a new main camera: a new sensor behind a 24mm lens with the first iris on an iPhone. Six blades, four stops: f/1.48, f/1.8, f/2.8 and f/4. The 48mm crop shares it.

Render of the iPhone 18 Pro main camera with the six-blade iris open
The 18 Pro main camera with the iris open: f/1.48, half a stop brighter than the 17 Pro. Image: Apple, iPhone 18 Pro
Render of the iPhone 18 Pro main camera with the six-blade iris closed down to a small hexagon
Stopped down: a small six-sided opening, f/4 at the end. That's 2.9 stops from wide open. Image: Apple
  • Storage. ProRes is big: Apple says ProRes files are up to 30 times larger than HEVC. On the 128 GB models Apple limits internal ProRes to 1080p at 30 or 25 fps, whatever the model. Record to an external SSD (from the 15 Pro), which also keeps the phone cooler.
  • The iris on the 18 Pro is for exposure more than for depth of field: on a sensor this small, f/4 against f/1.48 changes the depth of field only a little, and f/4 is about where diffraction starts to soften. What it gives you is 2.9 stops less light without an ND, and sunstars with six points. Lock it for plates, and keep the same f-stop for a whole setup: the lens grid and the bokeh must match.
  • Apple Log 2 (17 Pro, 18 Pro) uses the same curve as Apple Log with a new, wider colour space, Apple Wide Gamut. Before you shoot it for VFX, check that your colour pipeline has it (section 16): the configs in Nuke 17.0 only have Apple Log.
  • ProRes RAW (17 Pro and 18 Pro, external recording) keeps the sensor data before most of the processing: white balance and ISO can be changed later. It needs software that reads it: Nuke lists ProRes RAW as a format it reads, but check your version, and many pipelines convert it to EXR first.
  • Genlock (17 Pro and 18 Pro, with compatible hardware such as Blackmagic's dock) syncs the sensor to an external signal: needed for LED walls and for several phones shooting together.


03. The settings that matter

In order of importance. The native Camera app hides some of these in Settings > Camera, and doesn't have others at all (shutter speed, ISO, Kelvin white balance): for those you need one of the apps in section 05.

1. Log, not HDR or SDR

  • Apple Log records the image flat, with the highlights the sensor can hold and without the tone curve and the "look" the phone normally burns in. It's the closest the iPhone gets to a cinema camera file: the same image you can grade later, or convert to linear in Nuke.
  • The default HDR video (Dolby Vision, HLG) is a format for HDR screens, with a tone curve and a look already applied. It's not made to be converted back to linear: avoid it for plates.
  • In the native app: Settings > Camera > Formats, turn on Apple ProRes and set the ProRes Encoding to Log. On the 15 and 16 Pro the native app records Log only in ProRes.
  • Log looks grey and flat on the phone screen. That's normal: judge exposure with the tools of the app (false colour, zebras) or with a viewing LUT, not by eye on the flat image.

2. ProRes 422 HQ, not HEVC or H.264

  • ProRes is an intra-frame codec: every frame is stored on its own, 10 bits, with little compression. Nuke reads it directly and quickly.
  • HEVC (H.265) is what the iPhone records by default. Nuke 17.0 doesn't read it: I tested 8-bit and 10-bit HEVC in .mov and .mp4, and every Read gives "unsupported codec". You have to convert it first.
  • H.264 ("Most Compatible" in the settings) is read by Nuke, but it's 8-bit and very compressed: fine for reference, not for a plate.

3. A fixed frame rate

  • Choose the frame rate of the project: 24 (or 23.976) for film, 25 in countries with 50 Hz mains, 30 or 29.97 in countries with 60 Hz.
  • Turn off Settings > Camera > Record Video > Auto FPS. With it on, the phone drops to 24 fps in low light by itself.
  • Phone video can be VFR, variable frame rate: the time between frames changes during the clip. A VFR clip read in Nuke loses frames and gives errors; section 15 shows what I measured and the command that fixes it. ProRes from a good camera app is constant; check anyway.

4. A 180° shutter, and the ND to get it

  • The shutter angle says how long each frame is exposed, as a fraction of the frame: 180° is half the frame, 1/48 s at 24 fps, 1/50 at 25. It's the motion blur audiences are used to, and the blur you will have to match on every CG element.
  • The native app chooses the shutter by itself: in daylight it goes to 1/1000 s or faster, and moving things become sharp and stuttering. A plate like this is hard to match: CG with the right motion blur looks wrong next to it.
  • Because the iPhone has a fixed aperture, the only way to have a slow shutter in the sun is an ND filter. Outside, count on 6 to 8 stops. The lab in section 04 computes it.
  • The 18 Pro is the exception: its main camera (and the 48mm crop) has an iris with four stops, f/1.48, f/1.8, f/2.8 and f/4. Lock it like exposure: in automatic the phone opens it by itself when the light drops, and an aperture change in the middle of a take changes exposure and depth of field together. At f/4 you need about 2.3 stops less ND than at the 17 Pro's f/1.78.
  • Use the same shutter for the whole sequence, and write it down: the comp needs it.

5. No flicker

  • Many lights pulse twice per mains cycle: 100 times a second in countries with 50 Hz, 120 with 60 Hz. If the exposure isn't a whole number of pulses, the brightness changes from frame to frame, and with a rolling shutter you also get bands rolling through the image.
  • Flicker is very expensive to remove in comp and impossible to remove perfectly. Choose the shutter for the lights: the lab tells you which one.
  • LED panels and screens can flicker at other frequencies. Shoot a test and look at it on a big screen before the take.

6. Lock exposure, white balance, focus and lens

  • Exposure and focus: in the native app, press and hold on the screen until AE/AF LOCK appears; drag the sun icon to correct the exposure. A plate where the exposure breathes can't be matched with one grade.
  • White balance: Settings > Camera > Record Video > Lock White Balance (iOS 17 and later) locks it while you record. The camera apps let you set it in Kelvin: choose it once for the scene and leave it.
  • Lens: the iPhone changes camera by itself, for example to the ultra wide when you get close (macro) or to the main camera in low light when you're on the tele. Turn on Settings > Camera > Record Video > Lock Camera, and turn on Settings > Camera > Macro Control so you can stop the automatic switch to macro with the flower button. A lens change in the middle of a take is a new lens, new distortion and a new track.

7. Stabilisation off

  • Enhanced Stabilization (on by default in recent iOS versions) crops the image and moves it: turn it off. So does Action mode, which crops much more.
  • Electronic stabilisation corrects every frame with a different crop and warp, also to hide the rolling shutter. The lens distortion and the optical centre move from frame to frame: undistortion and 3D tracking don't hold any more.
  • The optical stabilisation of the sensor (sensor-shift) still works and can't be switched off in the native app: on a tripod it's quiet, but don't count on a perfectly locked frame.
  • Want a steady shot? Tripod or gimbal, with the electronic stabilisation off.

8. The rest

  • Resolution: 4K. More pixels help tracking, keying and stabilising in comp. If your app has an open gate mode (the whole 4:3 sensor; on the 17 Pro in ProRes RAW, and in Blackmagic Camera at 1920×1440 in Apple Log), it gives room to reframe and to stabilise.
  • Lens correction: the phone corrects the distortion of its lenses, especially the ultra wide. Whatever you choose, keep the same setting for the whole shoot, and shoot a grid with that setting.
  • Sharpening and noise reduction: lower them where the app lets you. Grain and noise can be removed in comp; halos and smeared detail can't be put back.
  • Cinematic mode: no. The depth of field is fake and burned into the image, with errors around hair and edges that you would have to fix.
  • Heat and battery: ProRes 4K heats the phone; when it's too hot it lowers the screen brightness and can stop recording. Shade, a cage that lets it breathe, a power bank, an external SSD.
  • Airplane mode and Do Not Disturb: a call in the middle of the take stops the recording.


04. Lab: shutter, flicker and ND

Choose the frame rate, the lights you shoot under and the scene. The lab gives the 180° shutter, tells you if it flickers under those lights (and the closest shutter that doesn't), and how much ND you need with the aperture of the lens you chose (on the 18 Pro, the f-stop you set).

Shutter, flicker and ND

Exposure in EV at ISO 100, the photographers' scale: the numbers are typical, use a light meter app for the real scene. The ND is rounded to the nearest stop.

  • The tricky pairs are 24 or 23.976 fps under 50 Hz lights (1/48 is 2.08 pulses: use 1/50, 172.8°) and 25 fps under 60 Hz (use 1/60, 150°). With 25 fps in Europe and 30 fps in the US, 180° is always safe.
  • A variable ND is quick, but at the strong end (6 stops and more) many show a dark cross or colour shifts, worst on the ultra wide. For plates, fixed NDs are cleaner.
  • Raising the ISO in the dark adds noise that you'll then have to remove before keying: a light is better.


05. Camera apps: the native one and the others

The native Camera app is simple and reliable, but it has no shutter, ISO or Kelvin control. For plates, a camera app that works like a cinema camera is worth it. The two free ones, Blackmagic Camera and Final Cut Camera, are the best place to start. I shoot with Blackmagic Camera and ProCam.

apppricewhat it gives yougood for
Camera (Apple)Built inProRes, Apple Log, locks for exposure, white balance and lens. No shutter, ISO or Kelvin.Reference, quick plates when you can't install anything. Use AE/AF lock and the locks in Settings.
Blackmagic CameraFreeThe controls of a Blackmagic cinema camera: shutter in degrees or speed (with lock), ISO, Kelvin and tint, manual focus with focus assist, zebras, false colour, histogram. ProRes 422 HQ to Proxy, ProRes RAW to external storage, HEVC, H.264, a 1080p proxy alongside. Rec.709, Rec.2020, P3, Apple Log and Apple Log 2. Stabilisation off, lens correction, noise reduction and sharpening options, open gate, anamorphic desqueeze, timecode with Tentacle Sync, slate metadata (scene, take, lens), LUTs, recording to an external drive, Blackmagic Cloud. From version 3.5, manual iris on the 18 Pro.The best free choice for plates. The metadata (shutter, ISO, lens, take) goes into the file, and the comp will thank you.
Final Cut Camera (Apple)FreeManual shutter, ISO and white balance; Apple Log 2 in ProRes or HEVC; ProRes RAW and open gate on the 17 Pro; Live Multicam with up to four devices; timecode and genlock with compatible hardware; manual aperture on the 18 Pro (version 2.4). Some features need iOS 26 or a 17 Pro or later.Apple's own manual app, and multicam if you edit in Final Cut Pro.
ProCam (Tinkerworks)One-time purchase, no subscriptionManual shutter, ISO, focus and white balance in every mode. Video in ProRes with a Log profile (its record screen shows 4K ProRes Log at 24 fps), frame rates from 24 to 240 fps; focus peaking, zebras, a live histogram and audio meters. Photos in RAW (DNG) and TIFF, exposure bracketing in RAW, and a Zero mode that skips Apple's processing.The one I use with Blackmagic Camera: one app for plates and reference photos, and RAW brackets for HDRIs and chrome balls (section 08).
ProCamera (Cocologics)Subscription, 7-day trialNot ProCam: a different app with a similar name. ProRes with Log and, on the 17 Pro and later, Log 2 and ProRes RAW; recording to a USB-C drive; RAW exposure bracketing; manual focus with peaking, zebras.A photo app first, with a serious video mode.
Kino (Lux, the makers of Halide)One-time purchaseSimple manual controls with automatic 180° shutter, Apple Log and Apple Log 2, ProRes, preset looks.Quick manual shooting with good defaults.
Filmic ProSubscriptionFor years the reference manual app. It was bought in 2022 and the team was laid off at the end of 2023: development has slowed down.Only if you already use it; the free apps above now do more.
Blackmagic Camera recording: lens, frame rate, shutter, iris, ISO, white balance and tint across the top, histogram and audio meters at the bottom
Blackmagic Camera: everything a plate needs is on the top bar, like on a cinema camera: lens, fps, shutter, ISO, white balance in Kelvin and tint. Tap one to set it and lock it. Screenshot: Blackmagic Design, App Store
Blackmagic Camera with manual focus: a focus slider on the right and green focus peaking on the edges in focus
Manual focus with focus assist: the edges in focus turn green. Set it once and the phone stops hunting during the take. Screenshot: Blackmagic Design, App Store
The Blackmagic Camera slate: reel, scene and take numbers, interior or exterior, day or night
The slate: reel, scene, take, interior or exterior, day or night. It goes into the metadata of the clip, where the comp can read it. Screenshot: Blackmagic Design, App Store
Final Cut Camera with the Monitoring panel open: histogram or waveform, peaking, false colour, zebra and clipping; recording 4K 30 HEVC in Apple Log 2 to an SSD
Final Cut Camera: shutter 180°, ISO, manual focus and 5600K on the left; the monitoring tools in the panel; recording Apple Log 2 to an external SSD. Screenshot: Apple, App Store
Final Cut Camera with false colour on: the image painted in colours by exposure level, with the scale from 20 to 80 percent
False colour: every exposure level gets a colour, so you can judge a flat Log image without trusting the phone screen. Screenshot: Apple, App Store
ProCam recording video: the top bar reads LOG, 24 fps, 4K ProRes, with stereo audio meters on the left
ProCam recording: Log, 24 fps, 4K ProRes, with the audio meters on the side. Tinkerworks, App Store
ProCam photo mode with RAW, TIFF, SMRT and AEB along the top and the exposure values at the bottom
Photo mode: RAW, TIFF and AEB, the bracketing you need for an HDRI or a chrome ball. Tinkerworks, App Store
ProCam processing options: Zero direct sensor capture, standard Apple processing, or Apple Smart HDR and Deep Fusion
Zero: the photo straight from the sensor, without Smart HDR and Deep Fusion. Better for textures and reference. Tinkerworks, App Store
ProCam with focus peaking highlighting the edges in focus on a chameleon
Focus peaking: set the focus by hand and lock it. Tinkerworks, App Store
Master Blackmagic iPhone Camera App, full guide, Simon HorrocksBlackmagic Camera: the full guide (Simon Horrocks)
How to use Final Cut Camera, Tyler StalmanHow to use Final Cut Camera (Tyler Stalman)
  • Whatever app you choose, test it first: record 30 seconds, copy the file to the computer and read it in Nuke. Check frame rate, number of frames, colour space and metadata before the shoot, not after.
  • Use one app for a whole sequence: different apps process the image differently, even with the same settings.


06. Tracking, LiDAR and scanning apps

The iPhone knows where it is: ARKit tracks the movement of the phone with the camera and the motion sensors, and the Pro models have a LiDAR scanner that measures depth. Some apps record this together with the video, so the camera move comes already tracked. It's not a replacement for a proper matchmove on a final shot, but it's a very good start, it's perfect for previs and virtual production, and the scans are great reference.

appwhat it recordsexportsnotes
Lightcraft JetsetVideo with the live camera track and scans of the set; shows CG in the viewfinder.With Autoshot: Nuke, Blender, Unreal, SynthEyes, Resolve; USD cameras.Free tier with a watermarked 1080p H.264; paid subscriptions for full quality. Made for virtual production.
OmniscientVideo, camera track and a scan of the space.Alembic, USD, FBX cameras, OBJ scans, .mov video.Imports into Nuke through Alembic or FBX (no dedicated plugin).
CamTrackAR (FXhome)Video with the camera track and anchor points.HitFilm and Blender for free; more formats in the paid tier.Easy way to get a camera into Blender.
SkyglassVirtual production with LiDAR and cloud rendering.Camera data and video.Real-time CG backgrounds on the phone.
ScaniverseLiDAR and photo scans of objects and spaces, also Gaussian splats.FBX, OBJ, GLB, USDZ, STL, PLY, LAS.Free, with good exports: my first choice for set scans.
PolycamLiDAR and photogrammetry scans.Free: glTF; paid: OBJ, FBX and more.Very good scans; most exports need a subscription.
Lightcraft Jetset showing an actress composited live into a CG forest in the phone viewfinder
Jetset: the actor in front of the phone and the CG set behind, composited live in the viewfinder while the phone tracks itself. Screenshot: Lightcraft, App Store
Lightcraft Jetset showing a CG spaceship placed in the room through the viewfinder, with the scan, comp and review tabs
A CG model placed in the real room: the scale is real, so you frame the shot on set as it will be in comp. Screenshot: Lightcraft, App Store
Scaniverse showing a 3D scan of a stone lion statue
Scaniverse: a scan of a statue. Niantic, App Store
The Scaniverse export menu with the mesh and splat formats
The export menu: meshes and splats. Niantic, App Store
Polycam measuring a scanned room in 3D
Polycam: measuring a scanned room. Polycam, App Store
Polycam generating a floor plan from a LiDAR room scan
A floor plan from the LiDAR scan. Polycam, App Store
Lightcraft Jetset Cine: turn your iPhone into a virtual production camera tracker, VP LandJetset Cine: the iPhone as a camera tracker (VP Land)
Scaniverse tutorial to get the best meshes and splats, Niantic SpatialScaniverse: the best meshes and splats (Niantic)
  • The AR track is noisy on fine detail and drifts on long takes: refine it in the tracker or use it as a starting point.
  • The LiDAR scan is coarse (a few centimetres) and ranges about 5 metres: good to place a ground plane, walls and big objects, not for small detail.
  • Scale is real: AR tracks and scans are in metres. In Nuke, a scene in the right scale makes lights, defocus and depth effects behave.
  • More: scanning a single object in section 10; a full matchmove of the plate, with the lens numbers and the distortion, in section 14.


07. What to shoot on set besides the take

A plate without reference is a guess. These take a few minutes on set and save days in comp. Most of them a phone can do, even when the main camera is a cinema camera.

  • A clean plate: the same move or the same locked frame without actors, for every setup. It's the first thing you need for paint, cleanup and removing rigs.
  • A colour chart and a grey card at the start of each setup, in the light of the scene. They tell the comp, and the CG lighting, what neutral and 18% grey are on this plate.
  • A grey ball and a chrome ball where the CG will be: the grey ball shows the direction and softness of the light, the chrome ball reflects the whole environment.
  • An HDRI of the environment, from the position of the CG, with bracketed exposures. A normal phone panorama isn't HDR: use an HDRI app, a 360° camera or a camera with bracketing (section 08).
  • A lens grid (a checkerboard or distortion chart) for every lens and setting you use, with the same lens correction and resolution as the plates. This is what lets you undistort and redistort: no chart? Print my checkerboard (section 14, and my STMap page).
  • A LiDAR scan of the set and measurements: heights, distances between landmarks, the height of the camera from the ground. Matchmove will ask for them.
  • Tracking markers on flat surfaces and on green screens, if the shot will be tracked. Remove them in comp later: it's easier than tracking a plain wall.
  • Reference photos in ProRAW at 48MP: textures, set details, the light rig, the actors' costumes in the light of the scene.
  • A slate or at least metadata in the file: scene, take, lens, shutter, ISO, white balance, frame rate. Blackmagic Camera writes them into the clip.
A colour checker chart standing in sunlight on stone steps under arches, shot as reference for an HDRI
A colour chart in the light of the scene, shot by Greg Zaal next to one of his Poly Haven HDRIs. One frame like this at the start of each setup tells the comp and the CG what neutral is. Photo: Greg Zaal, Poly Haven, CC0, via Wikimedia Commons


08. HDRIs and 360° images with the iPhone

An HDRI is a 360° photo saved in floating point, with the real brightness of everything in it, the sun and the lamps included. CG uses it to light and reflect the scene; in comp it gives the reflections, an environment for the 3D and a reference of where the light comes from. It needs two things: the whole sphere (a 2:1 lat-long, or equirectangular, image) and the whole range of light, from the shadows to the sun (several exposures merged into a 32-bit EXR). A normal phone panorama does the first badly and the second not at all. Some apps now do both with the iPhone alone; a 360° camera does them faster and better.

Why one exposure isn't enough: measured in Nuke

A lat-long HDRI of a dry grassland above a lake under a clear sky, with the sun circled and the label: the sun, 0.03 percent of the sphere, 91 percent of the light on the ground
Qwantani Afternoon, a 22-stop HDRI by Greg Zaal (tonemapped preview). I measured the 1K EXR in Nuke 17.0v1: the sun is a few pixels, and almost all the light. HDRI: Greg Zaal and Jarod Guest, Poly Haven, CC0

I exposed the HDRI so that its average sits at 0.18, like a camera on auto would, and then measured what a single exposure keeps. The light on the ground is the light on an upward-facing surface, weighted the way a diffuse surface sees it.

0%25%50%75%100% Full HDRI, sun includedClipped at 16 (4 stops more)Clipped at 1.0 (one exposure) Full HDRI: 100% of the light Clipped at 16: 9.8% of the light Clipped at 1.0: 9.1% of the light 100%9.8%9.1%
Light on an upward-facing surface from Qwantani Afternoon, measured in Nuke 17.0v1 with the HDRI exposed so its average reads 0.18. Without the sun, a CG object gets a tenth of the light and no sun shadow.
  • 25 stops from the darkest to the brightest pixel. A phone exposure holds about 10 to 12.
  • The sun reads 22,400, 16.9 stops above 0.18. It covers 0.03% of the sphere and gives 91% of the light on the ground.
  • Clipped at 1.0, as one exposure would be, the HDRI keeps 9.1% of the light. Four more stops of brackets (clipped at 16) keep 9.8%: to light with the sun you have to reach the sun, or replace it with a CG light.
  • For reflections and fill light the clipped sun matters much less: the sky, the ground and the shapes around are all there.

Apps that shoot an HDRI with the iPhone alone

appwhat it doesoutputnotes
HDReyeGuides you through a bracketed panorama: you choose the range (it suggests ±4 EV) and follow the prompts; stitched online.32-bit EXR, JPEG.Free to shoot; $2.99 per HDRI or $6.99 a month (US prices). About 90 seconds a sphere. Reviews are mixed on seams and resolution: good for reflections and quick lighting.
HDRI Studio18 dots to follow (26 in tight spaces): at each one the ultra wide shoots a RAW bracket. One extra photo of the ground removes your feet. Rendered online.32-bit EXR, scene-linear Rec.709, exact 2:1, 4K or 8K.New in 2026: test it before a job. Two renders free, then credits or Pro; Pro also exports the original RAW brackets. Needs iOS 17 and a RAW-capable ultra wide.
Teleport: 360° CameraFrom the makers of HDReye: guided 360° photo spheres.360° JPEG, not HDR.Backgrounds, location reference, VR and Street View.
360 Photo CamA few photos, a sphere in seconds.360° JPEG, not HDR.Quick location reference.
ProCam and a stitcherAEB bracketing in RAW on a tripod with a nodal clamp, every position by hand.DNG brackets: merge and stitch in PTGui (paid) or Hugin (free).Full control and the highest resolution from a phone, but slow, and anything that moves ghosts.
HDReye capture screen: a name for the HDRI and an exposure slider set to plus or minus 4 EV
HDReye: choose the range before you shoot. ±4 EV around the metered exposure is 8 stops more than one shot. HDReye, App Store
HDReye preview: a chrome torus lit and reflected by the captured HDRI of a soccer field, with exposure, metalness and roughness sliders
The result on a chrome torus in AR before you leave the set: check the reflections and the seams. HDReye, App Store
HDRI Studio: a phone in front of a mirror sphere showing the capture screen with the dots to follow
HDRI Studio: follow the dots, hold still, and the ultra wide shoots a RAW bracket at each. Gianluca Gatto, App Store
Bracket 360 HDRI: a nine-shot sequence on an Insta360 X5, shutter from 1/1000 to 1/8 at ISO 400 and incandescent white balance
Bracket 360 HDRI drives an Insta360 X5 from the phone: nine shots, only the shutter changes, ISO and white balance locked. App Store

Do you need a 360° camera?

For reflections, fill and a lighting reference now and then, no: an app or a chrome ball is enough. If you shoot an HDRI on every setup, yes: a 360° camera has two fisheye lenses back to back, so every bracket covers the whole sphere in one shot. A full set takes under a minute, nothing to stitch by hand, and the result is the same every time. For hero lighting in full sun, a stills camera with a fisheye still gives the most range and resolution.

routeresolutionrange and suntimegood for
iPhone app (HDReye, HDRI Studio)4K to 8K lat-longBracketed; the sun usually clips1.5 to 3 minutesReflections, fill, quick lighting, previs
iPhone and a chrome ballAbout 2K usable; the back of the sphere is stretchedRAW brackets with ProCam; you're in the reflection1 minuteThe direction and colour of the light, on every setup
360° camera (Insta360 X series, Ricoh Theta)Insta360 X5: 72MP photos, 11904×5952, DNGBrackets in the camera or from an app; very bright suns still clipUnder a minuteHDRIs on every setup, location 360s, splats
Camera, fisheye and nodal head16K and more7 to 9 brackets 2 EV apart, plus an ND for the sun5 to 10 minutesHero lighting, HDRI libraries
Three 360-degree cameras: an Insta360 X4 lying on a table, a Ricoh Theta Z1 on a selfie stick in a garden, and a Ricoh Theta X
Left to right: Insta360 X4 (the X5 looks the same), Ricoh Theta Z1 with two 1-inch sensors, popular on set for HDRIs, and Ricoh Theta X. One lens on each side, one shot for the whole sphere. Photos: ItzANormalFioko (CC BY-SA 4.0), 之乎 (CC BY-SA 4.0), A.BourgeoisP (CC BY 4.0), Wikimedia Commons

How to shoot it

  • Where the CG will be, at the height of the CG object (or of the camera, for reflections). An HDRI shot ten metres away lights from the wrong place.
  • Lock everything but the shutter: lowest ISO, white balance in Kelvin (5600K for daylight), focus. Only the shutter changes between brackets.
  • Brackets 2 EV apart, from the exposure where the darkest shadow has detail to the one where the brightest light no longer clips. Check the darkest frame: no white pixels on the lamps.
  • The sun: with a phone it will clip. Either shoot one more exposure through an ND 3.0 (10 stops), or let it clip and put a directional CG light where the shadows point. The HDRI gives the sky and the bounce, the light gives the sun.
  • Turn around the lens, not around your hand: the apps tell you, a nodal clamp does it for you. Nobody walking through.
  • Grey ball, chrome ball and colour chart in the same spot (section 07): they let you check the HDRI against the plate.
  • Write down the time and where north is: the CG team will match the sun.

In Nuke

  • Read: the EXRs of the phone apps are scene-linear Rec.709. In the studio config that's Linear Rec.709 (sRGB); Nuke converts it to ACEScg.
  • SphericalTransform converts between Lat Long map, Mirror Ball, Cube, Angular map 180 and 360, Sphere and 180° Fisheye. For a chrome ball: input Mirror Ball, output Lat Long map, in a 2:1 format.
  • In 3D: the classic EnvironmentLight takes the lat-long on its input; the GeoDomeLight of the new 3D system takes it as its texture file.
  • Check it before you hand it over: exposure it so the grey ball, or a grey card in the HDRI, reads 0.18, the same as on the plate.
HDReye app: creating an HDRI with your phone, Dimitris KatsafourosHDReye: an HDRI with your phone (Dimitris Katsafouros)
Create HDRIs with your phone, Nik KottmannCreate HDRIs with your phone (Nik Kottmann)
Fastest HDRI for VFX, Ricoh Theta Z1, part 1, Alex PearceThe fastest HDRI for VFX: Ricoh Theta Z1 (Alex Pearce)
Creating HDRIs with the Insta360 X5, bdsCoveredCreating HDRIs with the Insta360 X5 (bdsCovered)

Helper: your HDRI, route and brackets

Your HDRI, step by step

The answer below updates as you click. The range of each scene is a typical value; the sun is the one I measured above.

1 What is it for?

2 What light?

3 What do you have?

    Python: paste it in the Script Editor, then point the Read at your file



    09. Gaussian splats with the iPhone

    A Gaussian splat is a 3D capture made of hundreds of thousands, or millions, of small, soft, coloured and semi-transparent blobs, trained from photos or a video of a place or an object. It isn't a mesh: there are no surfaces, no UVs, and the light is baked in. But it renders the look of the real thing, fine detail, hair, leaves, glass and shine that changes with the angle, where a photogrammetry mesh falls apart. For VFX it means set and prop reference you can look around, environments and set extensions for moves close to the path you captured, previs and layout, and, since Nuke 17.0, renders straight in comp.

    The apps

    appwhere it trainsexportsnotes
    Scaniverse (Niantic Spatial)On the phone for phone captures; larger areas and 360° cameras in the cloud.PLY, SPZ (Niantic's open format); USDZ on the paid plans.Free for phone splats; commercial rights with Pro. The easiest start.
    PolycamCloud.PLY.LiDAR, photogrammetry and splats in one app; most exports need a subscription.
    KIRI EngineCloud.PLY.Crop and delete splats in the app; very good on objects.
    Luma 3D CaptureCloud.PLY; plugins for Unreal, Unity and Blender.Camera moves rendered in the app. Luma now works on AI video and the app was last updated in January 2026: fine for tests, not for a pipeline.
    Teleport (Varjo)Cloud.View on the phone, in the browser and on the desktop.Made for whole rooms and spaces.
    On the computerPostshot (Jawset: Windows, NVIDIA GPU), Brush (open source: Windows, macOS, Linux).PLY.Train from your own iPhone photos or video, with cameras from COLMAP or RealityScan. The most control. Clean up in SuperSplat, free in the browser.
    KIRI Engine editing a Gaussian splat of a toy car: brush size, insert and delete tools
    KIRI Engine: editing a splat on the phone, deleting the floaters around a toy car. KIRI Innovations, App Store
    Luma 3D Capture: a camera path with keyframes drawn through a splat of a street with a red car
    Luma: a camera path through a captured street, rendered from the splat. Luma AI, App Store
    Teleport by Varjo recording a capture of a motorcycle workshop, with the frame counter at the top
    Teleport: recording a workshop; the counter shows the frames it will train on. Varjo, App Store
    Teleport by Varjo showing the finished capture of the workshop with the options explore in 3D and play video fly-through
    The finished capture: explore it in 3D or play a fly-through. Varjo, App Store

    How to shoot a splat: the opposite of a plate

    • A fast shutter, 1/250 or faster. A plate wants motion blur (180°); a splat wants every frame sharp. Blackmagic Camera or ProCam lock it.
    • Lock exposure, white balance, focus and lens. If the phone changes them during the capture, the colours flicker across the splat and the lens switch breaks the cameras.
    • Slowly, with overlap: two or three loops around an object at different heights; in a space, walk a path looking both inwards and outwards.
    • Nothing moving, soft light (overcast is best), and watch your own shadow.
    • Photos beat video on sharpness: RAW or 48MP photos with lots of overlap. From 4K video, 2 or 3 frames a second are enough.
    • Measure something: a splat trained from photos has no real scale, unless the app uses LiDAR or ARKit.

    Splats in Nuke 17

    A Gaussian splat of a knitted toy moose on a wooden sled, rendered on black by Nuke's SplatRender
    A splat rendered by SplatRender in Nuke 17.0v1, headless on my PC: 281,498 splats, 1920×1080 in 2.2 seconds, with a GeoTransform to stand it upright. Splat: the plush sample of the open-source antimatter15 WebGL splat viewer

    Nuke 17.0 reads splats natively in the new 3D system, and 17.1 adds animated splats, SPLAT export and basic relighting. I loaded a public splat and a test PLY I wrote, and rendered both headless. This is what I found.

    • GeoImport reads .ply and .splat. In the interface, the Import Scene Graph dialog opens; from Python, setting the file is enough.
    • SplatRender has three inputs: bg, cam and scn. The cam input takes a Camera node (Camera4, or the camera from your track); it refuses a GeoCamera, and a GeoCamera added to the scene doesn't drive the render. The splat goes into scn.
    • Upside down: scans trained with COLMAP-style cameras come in with y pointing down. A GeoTransform with rotate x 180 stands them up.
    • Out of SplatRender: rgba and depth.Z, in ACEScg by default (output_colorspace), with motion blur and deep options. With depth you can ZDefocus and hold out like any CG render.
    • Cleanup: a FieldShape into GeoDeletePoints removes the floaters (or everything outside, with Invert); GeoGrade grades the splat; GeoMerge puts several together.
    • The limits: the light is baked in, and the splat gets worse the further the render camera goes from the views you shot.

    Python, tested in Nuke 17.0v1: a splat, stood upright and rendered through a camera

    import nuke
    scan = nuke.nodes.GeoImport()
    scan['file'].setValue('/path/to/scan.ply')     # .ply or .splat
    fix = nuke.nodes.GeoTransform(inputs=[scan])
    fix['rotate'].setValue([180, 0, 0])             # COLMAP-style scans come in upside down
    cam = nuke.nodes.Camera4()                       # or the camera from your track
    render = nuke.nodes.SplatRender()
    render.setInput(1, cam)                          # cam
    render.setInput(2, fix)                          # scn
    Nuke 17.0: intro to Gaussian splats, FoundryNuke 17.0: intro to Gaussian splats (Foundry)
    Your phone is a 3D camera: Gaussian splatting with a phone, Radiance FieldsYour phone is a 3D camera (Radiance Fields)
    How to create a Gaussian splat using only your iPhone, Dmitry KuzA Gaussian splat with only your iPhone (Dmitry Kuz)
    Generate 3D from any video: Gaussian splatting tutorial with Postshot, Black MixtureGaussian splatting from video with Postshot (Black Mixture)


    10. Scanning objects in 3D with the iPhone

    A prop, a rock, a costume piece, the hero object that CG has to replace or extend: a scan gives the comp a mesh with the real shape and a texture with the real colours. You use it to project cleanups, catch shadows, hold out CG, build a CG double, and as geometry for an object track. A phone scan doesn't replace a scanning studio, but on a set with no scanning budget it's what you have, and it's often enough.

    There are three ways to do it. LiDAR is fast and has real scale, but it's coarse (a few centimetres): rooms and big objects. Photogrammetry builds the mesh from many photos around the object: much more detail and a good texture, but it needs a surface with detail on it, and it has no scale of its own. Neural reconstruction (KIRI's Featureless Object Scan) is for the shiny and plain objects that photogrammetry can't solve.

    apphow it scansexportspricenotes
    RealityScan Mobile (Epic Games)Photogrammetry with AR guidance: it shows you which parts already have enough photos. Processed in the cloud.Uploads to Sketchfab, where you download the model.FreeFrom the team behind RealityCapture, now RealityScan on the desktop: for big or difficult scans, shoot with the phone and process on the computer.
    Reality Composer (Apple)Object Capture: guided photogrammetry, processed on the phone. Needs an iPhone 12 Pro or later (LiDAR).USDZFreeVery clean on small objects, and the scale is real. Only USDZ, which Nuke 17 reads (below).
    KIRI EnginePhoto Scan (photogrammetry), Featureless Object Scan (neural, for shiny or plain objects), LiDAR and splats.OBJ, FBX, glTF, GLB, USDZ, STL, PLYFree with at least 3 exports a week; Pro subscriptionAuto masking, so the object can move during the capture; quad mesh and PBR textures on export.
    3d Scanner AppLiDAR, TrueDepth (the front camera, for small objects up close) and a photo mode.USDZ, OBJ, glTF, GLB, DAE, STL; point clouds in PLY, PTS, PCD, XYZ, LASFreeExports the raw photos too, for photogrammetry on the desktop.
    Polycam and ScaniverseLiDAR, photos and splats (section 06).See section 06Free tiersBetter at spaces than at small objects.
    RealityScan Mobile capturing a pumpkin: small photo frames float in AR around the object where photos were taken
    RealityScan: every photo you take stays in AR around the object, so you see where the gaps are. Epic Games, App Store
    Reality Composer Object Capture: a bounding box drawn around a wooden chess rook on a table, with the Start Capture button
    Reality Composer: first a box around the object, then the capture starts. Apple, App Store
    Reality Composer Object Capture in progress: a point cloud growing on the rook, with a ring of ticks around it and the counter at 28 of 120 photos
    During the capture: the point cloud grows on the object, the ring shows which angles are done, 28 of 120 photos. Apple, App Store
    KIRI Engine export settings for a scanned sneaker: generate quad mesh, target quad count and PBR materials, with albedo, normal, roughness and displacement maps
    KIRI Engine: export with a quad mesh and PBR maps (albedo, normal, roughness, displacement). KIRI Innovations, App Store

    How to shoot an object scan

    • Soft, even light: overcast outside, big diffuse sources inside. Hard shadows and highlights end up painted in the texture. The light of the set goes in the HDRI (section 08), not on the scan.
    • A matte surface with detail. Shiny, transparent, black or plain surfaces break photogrammetry: use KIRI's featureless mode, or a temporary scanning spray if the owner of the prop agrees.
    • Move around the object, not the object: three rings (low, middle, high) and a few from above, with a lot of overlap between photos. For the underside, scan it again on its side; Object Capture asks you to flip it.
    • Lock exposure, white balance and focus, and use the main 24mm: the ultra wide has less detail, and a lens switch in the middle confuses the solve. Photos are sharper than video: 48MP or RAW.
    • Scale and colour: a ruler or a measured edge in some photos, and the colour chart in one. Write down one real measurement. LiDAR apps and Object Capture give real scale; photo-only apps don't.

    The scan in Nuke 17

    I tested which files open where, headless in Nuke 17.0v1, with a small OBJ and a USD cube I wrote (as .usda and packed as .usdz):

    • GeoImport, the new 3D system, reads USD: the .usda and the .usdz opened without errors. The .obj didn't: "Cannot determine file format". So a USDZ from Reality Composer or KIRI goes straight into GeoImport.
    • ReadGeo, the classic 3D system, read the OBJ (and the USD files too). For an OBJ in the new system, convert it to USD first, for example in Blender.
    • Check the scale against your measurement, and fix it with a transform: a scan in metres sits correctly in a camera track solved in metres.
    • Object tracks: the same scan is the geometry for a geometry track in 3DEqualizer, PFTrack or SynthEyes, when you have to track the object instead of the camera.
    Best practices for using RealityScan Mobile, RealityScanBest practices for RealityScan Mobile (RealityScan)
    WWDC23: Meet Object Capture for iOS, Apple DeveloperMeet Object Capture for iOS (Apple Developer)
    Reality Composer tutorial: convert physical objects to digital in minutes, Jacob's QuickTipsReality Composer: objects to 3D in minutes (Jacob's QuickTips)
    Introduction to Photo Scan mode in KIRI EnginePhoto Scan mode in KIRI Engine (KIRI Engine)


    11. Rig and accessories

    • A cage with a phone clamp: it holds the ND, the SSD, the microphone and the handles, and lets the phone breathe.
    • ND filters: magnetic or screw-in filters with a mount for the phone. Fixed NDs (ND 0.6, 0.9, 1.2, 1.8, 2.4) are cleaner than variable ones.
    • An external SSD on USB-C, with a fast cable (USB 3, 10 Gb/s): needed for ProRes 4K60, ProRes RAW and long takes. Format it as exFAT or APFS. Test it with your app before the shoot.
    • Timecode: a Tentacle Sync E with Blackmagic Camera writes the same timecode as the sound recorder and the other cameras.
    • The Blackmagic Camera ProDock (iPhone 15 Pro to 17 Pro, iOS 26 and later): HDMI out to a monitor, two USB-C ports for recording, timecode in, 12V power, and genlock on the 17 Pro. It turns the phone into a studio camera.
    • A tripod and a gimbal: the gimbal with the electronic stabilisation off.
    • Power: a power bank or a dummy battery on the cage. ProRes recording drains the battery quickly.
    An iPhone 17 Pro in a cage on the Blackmagic Camera ProDock, with HDMI, genlock, timecode, USB-C and power cables plugged in
    The Blackmagic Camera ProDock under an iPhone in a cage: HDMI to the monitor, genlock and timecode in, USB-C to the SSD, 12V power. Image: Blackmagic Design, via PetaPixel
    A SmallRig cage for the iPhone 17 Pro with two side handles
    A cage with two handles: mounting points for the ND, the SSD, the microphone and a monitor. Image: SmallRig, via PetaPixel
    Left, an iPhone in a cage with two handles, a magnetic filter on the lens and a cooler on the back, on a grip; right, an iPhone with a filter on a gimbal
    Left: the cage on a grip, with a magnetic filter on the lens and a cooler on the back (ProRes 4K heats the phone). Right: a phone with a filter on a gimbal; with a gimbal, keep the phone's electronic stabilisation off. Image: SmallRig, via PetaPixel


    12. From the phone to Nuke

    Copy the original files

    • From an external SSD: copy the files as they are. From the phone: a cable and the Files app, Image Capture on a Mac, or AirDrop with Options > All Photos Data turned on.
    • Never through messaging apps, emails or cloud services that "optimise" videos: they recompress them and sometimes change the frame rate.
    • Keep the originals untouched and work on converted copies.

    Check the frame rate before anything else

    A variable frame rate clip (VFR) looks fine in a player and breaks in Nuke. The quickest check is ffmpeg: it prints two numbers, fps (the average) and tbr (the base rate). If they are different, the clip is VFR. My test clip of 30 frames, with longer gaps between frames in the second half like a phone in low light, gave:

    Check a clip: if fps and tbr are different, it's variable frame rate

    ffmpeg -i clip.mov
    # ...
    # Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 23.68 fps, 30 tbr

    Convert it: constant frame rate and ProRes in one step

    This is the command I tested: it converts a VFR clip, H.264 or HEVC, into a constant 30 fps ProRes 422 HQ. Where frames are missing in time, ffmpeg repeats the previous one; no frame of the original is lost. Change fps=30 to the frame rate the clip was meant to have.

    VFR or HEVC to constant frame rate ProRes 422 HQ, 10-bit

    ffmpeg -i clip.mov -vf fps=30 -c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le -c:a copy clip_prores.mov

    Every .mov in a folder (PowerShell, on Windows)

    New-Item -ItemType Directory -Force prores | Out-Null
    Get-ChildItem *.mov | ForEach-Object {
        ffmpeg -i $_.Name -vf fps=30 -c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le -c:a copy ("prores\" + $_.BaseName + "_prores.mov")
    }

    The same on macOS or Linux

    mkdir -p prores
    for f in *.mov; do
        ffmpeg -i "$f" -vf fps=30 -c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le -c:a copy "prores/${f%.mov}_prores.mov"
    done
    • profile:v 3 is ProRes 422 HQ (0 Proxy, 1 LT, 2 422, 4 4444). yuv422p10le keeps 10 bits. Converting to ProRes doesn't add quality, but it gives Nuke a file it can read frame by frame.
    • Colour isn't touched: the converted clip is still Apple Log (or whatever it was). Don't add LUTs at this step.
    • For a long project, convert to EXR sequences instead: in Nuke, read the ProRes and write ACEScg EXR (16-bit half). Frames on disk are safer than a movie file, and every artist reads exactly the same pixels.

    The Read node

    • Frame range: check that the Read has the number of frames you expect. A VFR clip gives a wrong number (section 15).
    • Colour space: with an ACES config (in Nuke 17, the studio config), choose Apple Log as the colour space of the Read. The cg configs don't have camera colour spaces. More in section 16.
    • YCbCr matrix: ProRes and H.264 store colour as YCbCr, and the Read has to know which matrix converts it back to RGB. In Nuke 17 the knob is ycbcr matrix in the mov options, with Rec 709 (the default), Rec 601 and Rec 2020. iPhone Log clips are tagged Rec. 2020: if the metadata says so, set Rec 2020, otherwise the colours shift.
    • Video levels: next to it, decode video levels chooses full or video range. If the blacks look lifted or crushed compared to the player, this is the first knob to check.
    • HEVC: Nuke 17.0 doesn't read it ("unsupported codec"): convert it first, as above.

    What the clip itself tells you is in the next section; focal length, film back and lens distortion for the tracker in section 14.



    13. The metadata of an iPhone clip

    Before trusting a table of lens numbers, look at what the file says. I downloaded three original .MOV files shot on iPhones, never re-encoded, and read every metadata key in them: a clip from the Camera app of an iPhone 12 Pro (HEVC, HDR), the video of a Live Photo from an iPhone 15 Pro, and an H.264 clip from an iPhone X. All the values below are read from those files.

    A vertical frame of a street in Zurich seen through a window, next to the list of metadata in the clip: make and model, iOS version, date, GPS, the lens model iPhone 12 Pro back camera 4.2mm f/1.6, a 35mm equivalent of 27, HEVC with HLG and Dolby Vision, a variable frame rate, and no lens distortion
    A real iPhone 12 Pro clip from the Camera app and the metadata I read from it. The video track says 27mm equivalent; a photo taken with the same lens says 26mm in its EXIF: the video is a little tighter than the photo. Clip: train.mov from the Immich test assets (AGPL-3.0); metadata read with my script below
    key (com.apple.quicktime…)wherevalue in the files I readwhat it's for
    make, model, softwarefileApple, iPhone 12 Pro, 17.3.1 (iOS)Which phone and which iOS: the processing changes between versions.
    creationdatefile2024-04-13T19:03:00+0200Date and time with the time zone: shot logs, and lining up with other cameras.
    location.ISO6709, location.accuracy.horizontalfile+47.3764+008.5446+433.724/, 14.9 mLatitude, longitude and altitude: with the date, the position of the sun for the CG light. Remove it before you share a clip.
    camera.lens_modelvideo trackiPhone 12 Pro back camera 4.2mm f/1.6Which lens shot it, with its real focal length.
    camera.focal_length.35mm_equivalentvideo track27The field of view of this clip: the best starting focal length for the tracker, with the equivalent film back (section 14).
    live-photo.auto, content.identifier, live-photo.vitality-scorefile1, a UUID, 0.93884 (15 Pro Live Photo)Only in Live Photos: it links the video to its photo.
    Timed tracks (mebx): video-orientation, detected-face, live-photo-info; in Live Photos still-image-time and live-photo-still-image-transformtheir own tracks, frame by frameOrientation, face bounds and angles, Apple's private dataNot much for comp. The face boxes can seed a roto or a track.
    • What is not there: no lens distortion, no camera intrinsics, no focal length per frame, and no readable ISO or shutter in the Camera app clips. So the metadata can't give you an STMap: that comes from a grid or from the solve (section 14).
    • The 35mm equivalent is per clip, and it's the one to use: Apple's 26mm (24mm on newer models) is the photo; the video can be cropped for stabilisation or the mode. The iPhone 15 Pro Live Photo had no lens keys at all.
    • The stream tells you more: the iPhone 12 Pro clip is HEVC Main 10 in HLG with a Dolby Vision 8.4 layer, recorded vertical (rotate 90), and it's VFR: 56.54 fps on average against a base of 59.94 (section 15).
    • Converting can lose it. I converted the clip to ProRes with ffmpeg, copying the metadata: the file keys survived, the lens keys on the video track didn't. Read them from the original.

    Reading it

    ffmpeg (4.3) printed the file keys but not the lens keys of the track. I wrote a small PowerShell script that reads the QuickTime boxes directly and prints everything above, tested on the three files. It only reads the file, it doesn't change it.

    Windows: download iphone_mov_metadata.ps1 and run it on a clip

    powershell -ExecutionPolicy Bypass -File iphone_mov_metadata.ps1 -Path IMG_0001.MOV
    # track 1  com.apple.quicktime.camera.lens_model = iPhone 12 Pro back camera 4.2mm f/1.6
    # track 1  com.apple.quicktime.camera.focal_length.35mm_equivalent = 27
    # file     com.apple.quicktime.model = iPhone 12 Pro
    # ...

    On a Mac or Linux, exiftool reads the same keys (exiftool -a -G1 IMG_0001.MOV). In Nuke 17 the Read shows the file keys, not the lens keys: on the converted ProRes and on the iPhone X H.264 clip it listed quicktime/apple/quicktime/make, model, software, creationdate and location. The HEVC original doesn't open in Nuke 17.0 at all.

    Python, tested in Nuke 17.0v1: print the Apple metadata of the selected Reads

    import nuke
    for r in nuke.selectedNodes('Read'):
        md = r.metadata()
        print(r.name())
        for k in sorted(md):
            if k.startswith('quicktime/apple/'):
                print('   ', k, md[k])


    14. Matchmoving iPhone footage

    On an iPhone shot the hard part is usually the 3D track, not the colour. The plate is sharp and clean, but the camera behind it isn't a normal camera: a lens and a sensor a few millimetres wide, rolling shutter, a sensor that moves to stabilise, and software that straightens the image before you see it. This section works for the tracker you use, 3DEqualizer, PFTrack, SynthEyes, Nuke's CameraTracker or Blender: the rules are the same, only the names of the fields change.

    What makes an iPhone plate hard to track

    problemwhat it does to the trackwhat to do
    Electronic stabilisationIt crops the frame and warps it differently on every frame. No single lens explains that, so the solve error goes up and the CG slides.Off for every plate you will track: a setting in Blackmagic Camera and Final Cut Camera. The Camera app always stabilises a little, and Action mode crops hard: for tracked plates, use another app, and a gimbal for smooth moves.
    Sensor-shift stabilisation (OIS)The sensor moves under the lens to cancel the shake, so the optical centre wobbles by a few pixels.It can't be turned off. On a tripod or a gimbal it stays still; handheld, track more points and expect a slightly higher error.
    Rolling shutterThe sensor is read from top to bottom: in fast pans vertical lines lean, and the solve slides.Slower moves, and the rolling shutter correction of the tracker. Apple doesn't publish the readout time: let the tracker estimate it, or measure it.
    Lens switchingClose up or in low light, the Camera app moves to another lens in the middle of the take: a different focal, centre and distortion.Settings > Camera > Record Video > Lock Camera, and Macro Control on. Camera apps like Blackmagic Camera use one lens until you change it.
    Autofocus and breathingThe field of view changes a little with the focus distance.Focus locked; shoot the grid at the focus distance of the shot.
    Distortion fixed in the phoneApple's processing straightens the image, but not perfectly, and differently for each lens and mode; the ultra wide most.Assume some distortion is left: shoot a grid or let the tracker estimate it (below). Keep Settings > Camera > Lens Correction the same for the grid and the plates.
    Variable frame rateFrames missing in time: the camera seems to jump.Convert to a constant frame rate first (section 15).

    The numbers: real focal length, sensor and crop factor

    Apple gives 35mm equivalents: 13, 24, 48, 100, 120mm. The EXIF of a photo gives the real focal length of the lens, and the ratio between the two is the crop factor. From it comes the size of the sensor. I took the real focal lengths from the EXIF of photos taken with each model; the sensor sizes are computed, so the last digit is approximate.

    lens35mm equivalentreal focal (EXIF)crop factorsensor, 4:3 (computed)horizontal field of view, 16:9
    Ultra wide, 15 Pro to 18 Pro13mm2.22mm5.865.9 × 4.4 mm106.2°
    Main, 15 Pro to 17 Pro24mm6.765mm3.559.8 × 7.3 mm71.6°
    Main 2x (a crop of the main)48mm6.765mm7.104.9 × 3.7 mm, the centre39.7°
    Telephoto 3x, 15 Pro77mm9mm8.564.0 × 3.0 mm25.3°
    Telephoto 5x, 15 Pro Max, 16 Pro and 16 Pro Max120mm15.66mm7.664.5 × 3.4 mm16.4°
    Telephoto 4x, 17 Pro and 18 Pro100mmabout 17mm *5.865.9 × 4.4 mm19.6°
    Telephoto 8x (a crop), 17 Pro and 18 Pro200mmabout 17mm *11.73.0 × 2.2 mm, the centre9.9°
    Main, 18 Pro (new, variable aperture)24mmcheck the EXIF––71.6°

    * Not from EXIF: computed from the 1/2.55" sensor of the 17 Pro telephoto. Check yours on a photo: exiftool -LensModel -FocalLength -FocalLengthIn35mmFormat IMG_0001.HEIC. The field of view assumes the video uses the full width of the sensor; the 35mm equivalent is measured on the diagonal, as EXIF does.

    There are two correct ways to type this into a tracker, and both give the same field of view:

    • Real: the real focal length with the real sensor. Main camera: 6.765mm on a sensor 9.76mm wide.
    • Equivalent: the 35mm equivalent with an equivalent film back, the full-frame diagonal (43.27mm) cut to the shape of the phone sensor: 34.62 × 25.96 mm for 4:3, 34.62 × 19.47 mm for 16:9. Main camera: 24mm on 34.62mm.
    • Never mix them. 24mm on a 9.76mm sensor gives a field of view 3.5 times too narrow. Even the classic 36 × 24 back is a little off: with 24mm it gives 73.7° instead of 71.6°.
    • Better than the table: the clip. Camera app clips carry the 35mm equivalent of the video on the video track (section 13). My iPhone 12 Pro clip says 27mm where the photo says 26mm. Use that number with the equivalent film back.
    • Stabilisation and some modes crop the sensor, so the real field of view of a clip can be narrower. Set the focal length as approximate and let the solver refine it, or measure it on the grid.

    Helper: your iPhone in the tracker

    Choose the phone, the lens and the tracker: the numbers and the fields to fill update as you click.

    1 Which iPhone?

    2 Which lens? The one in the EXIF of a photo, or the one you chose in the camera app.

    3 Shape of the frame and stabilisation

    4 Which tracker?

      Python, tested in Nuke 17.0v1: sets a CameraTracker and a Camera with these numbers

      Lens distortion and STMaps: where they come from

      Apple doesn't put the distortion of the lens in the video file: none of the original clips I read has it (section 13), and the ProRAW DNG I opened (an iPhone 12 Pro sample) has no distortion data either: the image is already corrected. What's left is different for every lens and mode, can change from phone to phone, and stabilisation changes it on every frame. So there's no honest "ready" STMap for every iPhone: you make it from your phone, in one of three ways.

      • A printed grid. Download my checkerboard for A3 (PNG at 300 dpi, 24 × 17 squares of about 16 mm, 61 KB), print it on matte paper and glue it flat on a rigid board, like foam board: a wavy sheet adds its own distortion. No printer? Show the 4K version full screen on a 4K TV at 100%, without scaling. Shoot it with the same lens, format, stabilisation and focus as the plates: straight on and filling the frame, then a few frames turned and tilted. In NukeX, LensDistortion with the detection set to Grids: Detect, then Solve, and write the STMap as below. I don't give a ready STMap: without a grid shot on your phone, it would be a guess.
      • No grid: straight lines in the shot. Edges of buildings, door frames, tiles. In LensDistortion you draw lines along them, and it solves the distortion that makes them straight.
      • Nothing at all: the solve. CameraTracker with Lens Distortion: Unknown Lens, or the distortion parameters in 3DEqualizer, PFTrack and SynthEyes, estimate it from the shot itself. Less precise than a grid, but it needs nothing on set.
      Three panels: a checkerboard with a test lens distortion, the STMap as a red and green gradient, and the checkerboard straightened through the STMap with grey corners
      My test in Nuke 17.0v1: a test distortion (not one measured on an iPhone), the STMap that LensDistortion writes for it, and the grid straightened through that STMap. The grey corners are image that the undistort pulled inside the frame. Rendered headless in Nuke 17.0v1
      • Two maps in one file. LensDistortion with Mode set to STMap writes forward.u, forward.v and backward.u, backward.v. In an STMap node, UV channels forward undistorts the plate, backward redistorts the CG. In my test the backward map gave exactly the same image as LensDistortion's own Redistort (difference 0.0 on 280 samples).
      • 32-bit float, always. Written as 16-bit half, my UHD map was off by up to 0.93 pixels on the right half of the frame: half float has steps of 1/2048 between 0.5 and 1.0, almost 2 pixels at 3840. In 32-bit float the error was 0.
      • Overscan. Undistorting pulls the corners in: render the CG with overscan, then redistort it back to the plate format.
      • One STMap per lens, format and stabilisation setting, and name it so: iphone17pro_24mm_uhd_stabOff_stmap.exr. How STMaps work inside: my STMap page.

      Python, tested in Nuke 17.0v1: write the STMap of a solved LensDistortion as a 32-bit EXR

      import nuke
      ld = nuke.selectedNode()                         # the LensDistortion you solved on the grid
      ld['output'].setValue('STMap')
      keep = nuke.nodes.Remove(inputs=[ld], operation='keep', channels='forward', channels2='backward')
      w = nuke.nodes.Write(inputs=[keep], file='/path/to/iphone_24mm_uhd_stmap.exr', file_type='exr')
      w['channels'].setValue('all')
      w['datatype'].setValue('32 bit float')
      nuke.execute(w, 1, 1)
      # then: an STMap node, uv = forward to undistort the plate, backward to redistort the CG
      How to shoot distortion grids, Matchmove machineHow to shoot distortion grids (Matchmove machine)
      Why do you need a lens distortion grid? VFX on-set supervision, Hugo's DeskWhy you need a lens distortion grid (Hugo's Desk)
      3DEqualizer4 R4 advanced: lens distortion pipeline, export distortion data to NukeLens distortion pipeline, export to Nuke (3DEqualizer)
      Nuke quick tip: using an STMap for a simple lens distortion workflow, VFXLUNCHBOXSTMap lens distortion workflow in Nuke (VFXLUNCHBOX)


      15. Lab: a variable frame rate clip in Nuke

      I built a test clip like a phone in low light: 30 frames, the first 11 at 1/30 s, then 1.5 times further apart. ffmpeg reads it as "23.68 fps, 30 tbr". Each frame has its number written into the pixels, so after rendering every frame from Nuke 17.0v1 I could read which source frame it shows. These are the real results.

      What Nuke shows, frame by frame

      Nuke frames 1 to 39: the number is the source frame you see. Red: error.

      The 30 frames of the source: faded ones never appear in Nuke.


      • Read straight, the clip had a frame range of 1 to 38, longer than the real 30. Frames 1 to 12 were right; after that only every third frame rendered, and the 18 frames in between gave errors. 10 real frames, including the last two, were never shown. A render farm would fail on this clip, or worse, a comp would be built on the wrong frames.
      • After the conversion, the clip has 39 frames at a constant 30 fps, all the 30 source frames are there in order, and 9 frames are repeated to fill the gaps in time. That's the right answer: those repeats were in the original timing, the phone just didn't record them.
      • The repeated frames are where the original had a gap. If you need smooth motion there, it's a retime job (with Kronos or VectorGenerator), not something to hide.


      16. Apple Log in Nuke

      Apple Log is a log curve, like the ones of cinema cameras: it stores the scene in a flat image where every stop of light gets about the same number of code values. In Nuke you don't grade it: you convert it to linear with the colour space of the Read, comp in linear, and look at it through a display transform. Move the line on the image.

      A frame encoded in Apple Log and viewed without any conversion: flat and grey
      The same frame read as Apple Log and viewed through the ACES 2.0 SDR display transform
      Apple Log, viewed rawRead as Apple Log, ACES 2.0 view

      A frame of Viscount 1920, my CG model integrated into live action, converted to Apple Log in Nuke 17 with the studio config (not a phone clip), to show the same pixels both ways. Left: the log codes as they are, what the phone screen shows without a LUT. Right: the Read set to Apple Log, viewed through "ACES 2.0 - SDR 100 nits (Rec.709)", the default view of the config.

      • The config: in Project Settings > Color, choose the studio config (in Nuke 17: fn-nuke_studio-config-v3.0.0_aces-v2.0, or the v2.2.0 one with ACES 1.3). It has the colour spaces of the cameras, Apple Log included, with the Rec.2020 primaries. The working space is ACEScg.
      • The numbers I measured: 18% grey is stored as 0.488 in Apple Log, a much higher code than ARRI LogC4 (0.278) or ACEScct (0.414). Black is 0.151. The top code, 1.0, becomes 12.0 in ACEScg: about 6 stops above grey. The lab below shows the whole curve.
      • Apple Log 2 has the same curve but a different colour space, Apple Wide Gamut. The Nuke 17.0 configs don't have it: reading Log 2 as Apple Log gives the right brightness but the wrong colours. If you shoot Log 2, ask the colour pipeline for a config or a conversion that has it, or shoot Apple Log for VFX.
      • Write: render the plates as EXR in ACEScg (or in the colour space the show asks for). Never write Apple Log back to EXR "by mistake": an EXR is expected to be linear. My ACES FAQ has the rules for Read and Write.


      17. Lab: Apple Log against the other log curves

      Every camera brand has its own log curve. They all do the same job, but they put grey, black and the highlights at different code values. I measured these curves in Nuke 17, converting from scene linear to each log space with the studio config. Move the slider: it's the exposure in stops above or below 18% grey. Click the names to hide or show a curve.

      From scene linear to log code values

      Horizontal: stops from 18% grey. Vertical: the code value in the file, from 0 to 1. A curve that reaches 1 earlier clips the highlights sooner.


        • Apple Log reaches the top early: at about +6 stops above grey it's at code 1.0, where LogC4 still has room for several stops. The phone's sensor doesn't hold more anyway, so it uses the codes for the range it has.
        • The shadows start high: black is 0.151 in Apple Log, 0.093 in LogC4 and LogC3, 0.073 in ACEScct. That's why log images look grey: nothing is near 0.
        • Grey is where you expose: if your app shows the code value at the centre, a grey card at the right exposure reads about 0.49 in Apple Log (about 500 in 10-bit). Lower means underexposed, and noise.


        18. The checklist before you press record

        Tick them on set. The page remembers your ticks in this browser only; nothing is sent anywhere.

        iPhone VFX plate checklist



        19. Helper: your iPhone clip in Nuke

        You have the clips from the phone and a Nuke script to start. Tell the helper what the clips are and how you comp. It tells you whether to convert them first (and gives you the exact command), how to set the project and the Read, what numbers you should see in the Viewer, and how to write the plates. At the end there's a Python snippet that sets your selected Reads. Every name and every number comes from Nuke 17.0v1.

        Not sure what the clip is? This prints the codec, the frame rates, the number of frames and the colour tags

        ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,profile,r_frame_rate,avg_frame_rate,nb_frames,color_transfer,color_primaries -of default=nw=1 clip.mov

        Your clip, step by step

        The answer below updates as you click.

        1 How was it recorded? The Camera app: Settings > Camera > Formats > ProRes Encoding. In ffprobe, color_transfer=arib-std-b67 is HLG (HDR video).

        2 Which codec? ffprobe: codec_name is prores, hevc or h264.

        3 Is the frame rate constant? ffprobe: if r_frame_rate and avg_frame_rate are different, it's variable (VFR).

        4 Which config is the Nuke script in? Project Settings > Color > OCIO config.

        5 What is the clip for?

          Python: select the Read nodes of the clips, paste it in the Script Editor and run it

          • Why Rec 2020 in the YCbCr matrix: ProRes stores the colour as YCbCr, and the Read needs the matrix the camera used to go back to RGB. iPhone Log and HDR clips use the Rec.2020 one; Nuke's default is Rec 709. The wrong matrix shifts the colours a little (skin, skies) without anything looking broken.
          • Data Range: in Nuke 17 the mov reader defaults to Full Range. If the blacks look lifted or the whites look dull compared to QuickTime or the phone, try Video Range, and check a black and a white patch.
          • The numbers to expect: with the Read in Apple Log, a grey card exposed right reads 0.18 in the Viewer (it's 0.488 in the file), and the brightest code becomes 12.0. If the grey card reads 0.49, the Read is still on the wrong colour space.


          Questions about this tutorial?

          Write me directly: I read every message. You can also find me on LinkedIn.