October 2025 - March 2026
I was interested in making some Street View imagery of some local trails, so I rented an Insta360 X3 camera from a local rental shop to figure out how the process worked. I didn't want to supply the imagery solely to Google, so I looked into how to upload the imagery to open source projects like Panoramax too. A lot of the documentation for Panoramax assumes that you're using GoPro Max 360 cameras, but the Insta360 is more common, and the rental place I went to only had Insta360s.
According to other users who have tried Insta360 cameras, the cameras only have gyroscopic sensors on them, so you have to be careful with how you capture your imagery. You must capture all your images through an app on a cellphone so that your cellphone can transfer GPS data to the Insta360 camera. GPS is properly recorded when taking photos and doing normal video recording. Timelapse recording does not record GPS properly.
I tried using the interval photographs feature where photos would be taken every 3s, but the camera made a loud shutter click when taking each photo, which was very intrusive. I was also concerned that many of the photographs might be ruined with motion blur from my jostling while walking around, and there wouldn't be enough photos to choose from with a 3s interval.
Instead, I just used a normal 360 video recording of my walk. I simply mounted the Insta360 on a selfie stick, put the selfie stick into a shoulder bag that I clipped to my belt to ensure it stayed vertical, and then walked the trails while recording. I suppose one of those cylindrical poster/drawing tubes that artists and architects use might have also worked instead of a shoulder bag. The process of capturing the video was mostly uneventful and problem-free except that in places where the trees were low, the camera was sticking a foot above my head and would hit some of the branches. The high camera angle also expose any thinning hair on the top of your head, so definitely wear a hat.
The low-light performance of the Insta360 x3 isn't great, so the quality of the video in the darkness of the forest trails was mediocre. The slow shutter speed meant many of the shots suffered from motion blur. There was also a lot of lens flare and light blooming in places where the sun shined through the trees. I had thought that the Golden Hour would be the best time to capture images, but the low sun ruined many shots due to excessive lens flare. Probably a cloudy midday might have been better. It also might have made sense to get one of Insta360's higher end cameras for this task, but I was just experimenting, so I wanted to keep costs low.
After recording a video of my walk along the trail, I removed the microSD card from the camera, and opened the files in the Insta360 Studio application to export a 360 video. During the export, I specified that the GPS data be exported in a GPX track file as well.
The resulting mp4 video was quite large and it took a while to do all the processing and video encoding. I found my laptop to be too slow, and I needed to use my desktop computer to complete the exporting more quickly. The video file contained no positioning information. The GPX file contained latitude, longitude, and elevation readings taken every second or two but no compass or orientation information. It's possible that Insta360 automatically adjusted the video to account for orientation and compass direction, but I didn't test for that.
Since the mp4 video files were so large, it seemed a little cumbersome to upload them directly to Google. Google suggests that videos at 1fps are fine, so I used ffmpeg to reduce the frame rate of the video to reduce its size.
Here is the command I used. It takes an mp4 video file, removes the audio, reduces the frame rate to 2fps, and reencodes the video using the av1 format. Metadata about when the video was recorded and about how it's a 360 video will also be preserved.
ffmpeg -i [input.mp4] -map_metadata 0 -strict unofficial -filter:v fps=2 -c:v libsvtav1 -an [output.mp4]
I was then able to take the GPX file and this smaller video, upload them both to Google Street View, and my imagery was available on Google Maps soon after.
Panoramax only accepts uploads of images and not videos. I wasn't sure if there were any easy utility programs for chopping up Insta360 videos into images. I didn't think there were or I would have seen them mentioned on the Panoramax website or elsewhere. In the end, I decided to make my own utilities. Fortunately, the new webcodecs standard means it's not overly difficult to do all the video processing from within a web browser using some existing (though under-documented) libraries. Unfortunately, I became cocky and decided to write my own EXIF parsing library after seeing how existing libraries seemed to use an ancient coding style, and that took a lot longer than I was planning. Really, anything involving standardized file formats always takes longer than expected. All the conversion of a video to images can be done entirely on the client-side in the browser, but you have to use a Chrome browser to save all those images out to disk again after.
After creating my sequence of images, I tried uploading them to Panoramax, and I found that Panoramax assumes that the middle of each image is the direction of travel. Unfortunately, my heading kept changing in my images. I think I either jostled my camera a lot while walking around, or the Insta360 processing was automatically holding the orientation of video fixed regardless of which way the camera was facing. Regardless, Panoramax didn't attempt to align the images at all, so the orientation of the uploaded images kept jumping around as you traveled along the path. A some of the frames of my video had problems with motion blur and light blooming, and I felt I should try to pick the best frames to upload to Panoramax and skip over the bad ones. So I wrote another utility that lets you walk through your images, manually adjust the facing of the images, and select the best ones to upload. This utility also only works in Chrome browsers because it needs to load and save out lots of images from your disk, and Chrome is the only browser that supports working with lots of files.
I was then able to go to OpenStreetMap France's Panoramax instance to upload my JPEG images, and they were accessible from their map seconds later.
So the utilities I made are below. I release all of my code under an open source CC0 license. It makes use of mp4box.js for mp4 parsing, and I also borrowed a few lines of code from Mozilla MDN though, and those projects have their own licenses.
This utilty takes an Insta360 video and a GPX file of GPS information. It then saves out image frames from this video with GPS information encoded into the JPEG image files. This utility only works properly on Chrome-based browsers.
This utility lets you walk through a folder of JPEG files and select some of them to save out to another folder. It can be used to quickly discard bad images from your collection and to make corrections for travel direction. This utility only works properly on Chrome-based browsers.