GoPro has just announced a new open API for 3rd party companies/apps to use, called Open GoPro, allowing them to integrate with their cameras, starting with the GoPro Hero 9. The API (Application Programming Interface) allows a slew of functions over wireless interfaces, including control as well as transfer of media. Most notably, the API is not ‘gated’ behind some corporate partnership deal, instead, anyone can get to work creating apps to integrate with it.
If a GoPro API sounds familiar to you, it might be. It was a mere half a decade ago that GoPro announced their GoPro Developer Program. In theory, it covered many of the same features as today’s program. But in practice, it wasn’t open. So we saw some companies, like Polar, actually implement it in their products (ok, a handful of products). So did some drone companies, including 3DR & AirDog. But it required GoPro to set up a partnership there with all the complexities that brought with it. Other companies, such as Wahoo though, couldn’t get into the program (they tried, hoping to integrate it with the Wahoo bike computers).
Whereas, this new open program resolves that, as there’s no longer a gatekeeper to the program. It’s just an open interface anyone can use.
And the potential is massive for people wanting to develop Really Cool Stuff™. For example, in reading through all the documents, in the sports realm, one could develop:
– A Garmin Connect IQ App for your bike computer or watch to control the GoPro
– A desktop app to automatically connect wirelessly to your GoPro and offload all the content to a local computer or NAS device
– FPV drone control integration, without having to hack things apart
And in fact, at launch, there are five specific scenarios that are being lit-up by 3rd party companies:
– Amazfit watches will have GoPro camera control from the wrist.
– Sena cycling helmets will have voice control of your GoPro
– Centurion Boats: wirelessly control a GoPro from the boat’s helm control screen
– Orqa: FPV goggle control (drones) to see camera status in goggles
– Pixellot: They do sports broadcasting, this controls all the GoPro’s and handles content transfer
However, there are some limitations that, at least in this first iteration, mean the world isn’t entirely your oyster. There’s no support for capturing the video stream live, nor is there any API connectivity into GoPro’s online platform, formerly known as GoPro Plus (to access your stored media there). Still, maybe later.
For the geeks in the crowd, press on. For everyone else, fear not, I’ll circle back when I find some cool apps down the road worth mentioning (after developers have a chance to develop them).
A Quick Explainer:
Obviously, this is gonna get geeky…really geeky. But not as geeky as it could be. I’ll leave it to you to dive into the full code examples and demos, as well as actual API documentation. Instead, I figured I’d get the highlights out of the way. Invariably though, like any development project, it takes a bit of coding to really start to understand the potential (and limitations).
GoPro says that for this iteration, they’re focused on these key camera areas, all at the device layer. Meaning, talking directly to the camera (versus talking to the GoPro app or GoPro cloud):
– Wireless connectivity
– Camera status
– Camera command and control
– SD card access
At present, this is launching on the Hero 9, but I’m gonna take a guess we’ll see it expand backwards to other cameras, just like they did with GoPro Labs (now supported on the Hero 7, Hero 8, Hero 9, and Max). It makes sense to start small. Plus, they even have a table in their documentation that lists just a single entry. No point in having a table for listing one item.
Now GoPro’s media e-mail states both wired and wireless connectivity, though all the documentation just mentioned wireless. So my guess is wired is coming soon too. For the wireless side, there’s two ways to interact with the camera:
– Via Bluetooth Smart
– Via WiFi
However, in order to get access to WiFi, you’ll need to enable it via Bluetooth Smart. This is how GoPro cameras have worked for years, in that your phone typically initializes the connection via BLE, turning on the WiFi (thus, saving battery). Back in the ‘old school days’, pre-BLE, WiFi was just on all the time (and, then, the cause of some interference issues with certain bike computers too…). As usual, a GoPro keeps its BLE service running in the background for 8 hours after the last button press/going to sleep (meaning, even after you power it off, it’s still sending BLE advertisements for 8 hours, which is how you can find it when you lose it).
In order to connect to BLE, your app (or device, like watch) will establish a pairing with the camera, in the same way you pair the GoPro app. It’ll save this pairing for subsequent pairings.
Meanwhile, for the WiFi side, authentication to the camera merely requires inputting the GoPro’s unique WiFi SSID & password, making it relatively easy to connect to for apps and/or devices. However, based on everything I can understand right now in the documentation, the limitation is that you can’t have the GoPro connect directly to your own home network and leverage the API that way. That would have been very useful for offloading footage directly onto your network (akin to what it does for GoPro’s cloud solution, but to them). With the way it’s implemented today (assuming I’ve understood everything correctly), an app connects directly to the GoPro, and then pulls data via that direct WiFi connection over a small HTTP server that the GoPro runs.
Once connected, there’s a number of umbrella operations, which are as follows:
- Capture photo/video media
- Get media list
- Change settings
- Set date/time
- Get camera status
- Get media metadata (file size, width, height, duration, tags, etc)
However, within those, you can access tons of settings or file operations. For example, there’s a table of some 113 different status codes at present that you can query to find the state of the camera. Here’s a small snippet of those:
The proper snarky answer to status code 6 is always ‘1’. I kid, I kid…mostly.
Now, in a nutshell, all the comments that GoPro has exposed essentially allow you to pretend to be a user on the device itself. That means you can change settings, start/stop recording, change resolutions, look at file properties (like videos or photos), and even download those videos. In fact, you can even trigger so-called ‘Turbo’ mode for faster WiFi downloads of media.
The company has published all of this over on GitHub, including walk-through tutorials in Python and Bash. And then demos in C/C++, C#, Python, and Swift.
The tutorials especially are very well made, chunked first into chapters:
And then they dive through each step of what’s going on, and are chunked into different chapters. Here’s a tiny snippet of one chapter:
Lastly, for fun, it’s worth noting that in the documentation there’s plenty of cleverly worded implications about what a GoPro Hero 10 might look like feature-wise (assumed for ~September). For example, in the ‘Chapters’ section, there’s this seemingly innocuous tidbit:
Except, as one that has written plenty of technical documentation on how things work when you know the next version will change it (but want this document to still be valid when you forget about it later), you say stuff like this. Otherwise, you’d simply say “All GoPro Cameras limit file sizes…”, which is true, till today anyway.
Of course, even that’s a bit untrue, as one of the GoPro Labs options is to tweak this setting and do far larger file sizes, which is available on a number of past cameras. In any case, my suspicion here is that the Hero 10 will finally do away with requiring 4GB file chunking, which is frankly just a solid annoyance in 2021.
Oh, and remember you’ll need to ensure your Hero 9 is on the latest firmware, which just came out today, in order to support this.
This is awesome. Simply put. Sure, I’d love to see it on more cameras (hopefully soon, as the documents seem to imply), but having this at all is a huge step forward for the company. While GoPro labs was great for power users last year (and some of those features grew up to normal features, and new Labs features in 2021 too), this API is actually great for normal consumers too – even if they don’t realize it yet. With GoPro launching today with companies like Amazfit doing watch control, and even a boat company (Centurion Boats) enabling GoPro control directly from the boat’s helm, these are real-world solutions that people will actually use.
My two personal hit-list of apps that I’d love to see are:
A) Garmin Connect IQ app to control a GoPro (or, even better, native integration): Sure, native integration is great since it appears Garmin is done with their VIRB foray. But Connect IQ wouldn’t require any Garmin intervention at all, any random developer could do this. Hit me up if you do, and I’ll write about it, pronto! This would be killer within the newer GoPro Hindsight feature on the Hero 9, since it’s doing a rolling 30-second buffer, so that I could tap something on my bike computer to grab whatever crazy event just happened.
B) File offloading to a NAS: Within their press kit, they mention that Pixellot is using this for offloading of content into their sports broadcasting platform. I want basically that, but at my office. I want to be able to walk into the DCR Cave with a pile of GoPro’s, plug them in, and have the content offload quickly via WiFi to my NAS server. Or at worst, a directory on a computer. I don’t want to use my phone to do this. A Mac or PC driven app is where this would live (well, ideally it’d automatically do this without any app driving it, but that’s not plausible here).
I’m sure other folks will have other ideas. But those are the big ones for me, especially the file offloading bit. Even right now, coming back from a run, I’m sitting here wishing the videos from that run were already accessible to my Mac & PC, rather than dealing with fiddling with the GoPro app to get them synced over to my phone (taking up space, where the GoPro app currently occupies 80GB of storage on my phone), then duplicating that content into the phone’s Photos, and having my phone be preoccupied while it’s doing all that.
Of course, I probably could just write this app myself. Or, I could eat ice cream. Both are valid choices.
With that – thanks for reading!
Found This Post Useful? Support The Site!
At the end of the day, I’m an athlete just like you looking for the most detail possible on a new purchase. These posts generally take a lot of time to put together, so if you're shopping for the GoPro Hero 9 Black or any other accessory items, please consider using the affiliate links below! As an Amazon Associate I earn from qualifying purchases. It doesn’t cost you anything extra, but your purchases help support this website a lot. Even more, if you use Backcountry.com or Competitive Cyclist with coupon code DCRAINMAKER, first time users save 15% on applicable products! Or, with TPC (The Pro's Closet), you'll save $40 on purchases over $200 with coupon code DCRAIN40!
And of course – you can always sign-up to be a DCR Supporter! That gets you an ad-free DCR, access to the DCR Quarantine Corner video series packed with behind the scenes tidbits...and it also makes you awesome. And being awesome is what it’s all about!
Does this mean the parts and pieces are finally in place to have a Garmin Radar unit turn on (a rear-facing) GoPro?
Hi John, I had the same question 🙂
How about the following: when the Varia radar sees a rear object (usually a car, but could be a faster cyclist or a train) approaching from the rear to be within 75 meters distance, start the Go-Pro recording. After the radar’s “all clear” signal, wait for 5 seconds, and if there are no objects within 75 meters after that, stop recording. This would create short recordings of all cars trying to overtake.
Ray, do you think this would this be possible? Cheers!
Yes. Should be possible. With Smart Bike Lights CIQ app I’ve configured Radar light to be off by default and just switch on blinking when car approaches at 75 meters distance. Saves battery of Radar.
So there are triggers from Radar and you just need to add the GoPro commands.
Maybe someone can hit up the developer of smart bike lights CIQ app…
I’d rather it just turned on and sent an image to your bike computer so you can see what’s coming like a rear view mirror (suitably flipped of course, so you know without having to think whether something is actually on your right). I’m sure some of the later edges, wahoos, karoos etc could do a reasonable resolution image, even in black and white. I’d prefer to avoid if at all possible rather than have others sue for me while I am in a hospital bed or deep in the dirt.
@Tom, thanks for the heads up on the Smart Bike Lights CIQ app.
Slightly off topic, but has Garmin ever said/explained as to why they left the VIRB foray?
Can’t wait to script kiddie my GOPRO in bash!
I think a Raspberry Pi either connect to LAN or with a second WiFi adapter could be a good device to run as an ingest station. It could just sit there looking for GoPro’s to ingest footage from. When it finds one it could use WiFi to connect to the GoPro and then a second network connection to connect to a NAS. If you only had one network adapter you’d just want the RPi to have enough local storage to act as a buffer until it could rsync the files to a NAS or cloud service.
I might want to give this a go. I don’t really need something like this, but tech like this is pretty cool.
Ohh…smart idea, that would work. That’d be awesome. To be fair, even my main studio Mac’s are all wired, so it could light up the BT/WiFi connection to the GoPro, and then offload to NAS using Ethernet.
I dream of the day…
Should be pretty straightforward and no need caching locally you can stream both ways, just maybe some chunks in memory to pass though it but RPI4 has some beefy memory for such small device.
not sure if there is a push API tho on gopro side, so this is going to be pull based detecting by MAC address or something to get to the API and grab the files,
“ A Garmin Connect IQ App for your bike computer or watch to control the GoPro”
Great news. Because Garmin left (?) the action cam market, I was hoping that this would happen one day and I could use an up to date go pro cam with my Fenix or Edge. My old virb (non elite) needs an up to date successor.
Once my Hero 7 is supported I will make an app that allows me to have profiles and switch them easily. Just like the newer cameras have.
Labs even works on the Hero5 Session – if this thing trickles all the way down to that, I’d be so happy. Probably a stretch. Probably the biggest draw for “upgrading” out of the Session form factor for me.
Or GoPro could just have another go at that form factor. That’d work for me as well. Hear that GoPro? I’d instantly by a couple of Hero9 Sessions… I don’t care how you price them.
I second that – a Hero9 Session (or would it be Hero10 Session by then) would be awesome. Please bring it back.
That form factor is the best for the bike. If the integration with the Varia Radar ever happened, I think most would prefer a session size under the saddle than a full sized GoPro.
The first thing that comes to my mind is all kinds of nifty Arduino projects that use the BLE access to the API to do all kinds of smart control of the camera.
It would be cool to get an app to drive the Hero9 directly from the HH Karoo 2 device. Hope this gives some ideas to some app developers…
I suggested it on the official Karoo forum. If people go there and write a comment or click the “Yes” button, it might get attention.
Here’s my post: link to support.hammerhead.io
How about telemetry integration with a Garmin or other cycling computer? If the GoPro is on your bike and it’s recording and your Garmin is recording a workout, have the Garmin insert telemetry (speed, power, altitude, etc.) into the metadata of the video (like GoPro currently does with GPS).
A few years ago shimano launched a camera on the market with a “magic” feature that went unnoticed and seemed fantastic to me. This consisted in that you programmed your camera through the ant+ sensors so that the camera would start recording when you passed X watts, exceeded a certain heart rate or exceeded a certain speed. And many other options to start recording. It seems to me that this opens up an option for this to be possible in the near future.
I would just be happy with a half decent piece of software to use the GoPro as a webcam. The official one is a joke
Hi Ray, I was also thinking about automatic recording when start a certain segment (which you can define when loading a roite for example) or just based on heart rate or certain sspeed/decline etc. I will have a look in the API documentation if I can make a POC in my Jepster app. (If I can find someone with a Go Pro to borrow). Best regards, Tom
It’s been two weeks and I’m really upset that I’ve seen no developments yet! 😉
Seriously though,I agree it would be a great feature to allow one’s Garmin Edge to control a GoPro camera in a similar way to how the Edge units were able to control the Garmin VIRB cameras. If you look on DC Rainmaker’s web page he has an article about this as well.
My preference would be for Garmin to add this native capability to a future set of firmware updates for the Edge units however, I’d also be happy if someone uses the Open GoPro API’s to create a Connect IQ app or set of data fields.
I’d love to be able to:
1) Control turning my GoPro On and Off like we could do with the old VIRB units
2) Within such an app or native environment or via a separate data field be able to see the GoPro’s battery status
3) Be able to control multiple GoPro’s via the same app or data screen on my Garmin Edge.
I keep looking in Connect IQ and on the web and haven’t seen anything yet but it is just two weeks since GoPro made the Open GoPro announcement so, as noted above, perhaps I’m just being impatient!
If there are any Connect IQ app developers who were interested in giving this a go this is an app I’d be willing to pay for if it was of decent quality. However, like I said, I really hope that Garmin will add this capability to the native Edge units via firmware. It would really increase the value proposition of the Edge units for a lot of people I think and I can’t see any downside for Garmin for what would probably not be too much effort given that they had already built the Edge API’s to control the Virb units. If Garmin aren’t going to take the Virb product line any further – which seems to be the case given when the last Virb was released and the fact that they can no longer be bought new – then why not add the capability do this for GoPro’s via these Open GoPro API’s?
Here’s what I don’t understand. You can stream live with your phone without a hotspot using data to Facebook or Youtube, but you can’t use a GoPro because it somehow uses more data than cell phones these days? The unlimited plan I’m on now would cost an extra $10 per month for hotspot access, and even then the cell data is still capped at 15gb for whatever reason. If you aren’t using a hotspot, you can easily exceed this limit. So why doesn’t GoPro allow the cellular data option in the Quik app instead of just wifi? We’re pushing 5G here pretty hard. What would it take to get this implemented into the app?
Is there meanwhile a Garmin IQ app available for a GoPro 9?
Anyone tackle a garmin gopro remote app yet? It looks totally possible. I may spin it out if nobody has made any progress, I don’t see anthing on the connectIQ store at least. I see “Garmpro” in the store but it hasn’t been updated in years and doesn’t look like it uses this API, I tested it and it doesn’t seem to work.
I’m not aware of anyone. But if ya do give it a whirl, I’d love to hear about it (or try testing it)!
Yeah, I would also be interested, and I’m sure there are many others. The closer you could get to the behavior of a VIRB, the better. If you could start the GoPro recording when I hit the start activity button on my Edge 830 or my Fenix 5+, that would be outstanding, but just being able to manually start the camera from my Edge or Fenix would be great.
I started writing a connect IQ widget app just to replicate a remote control functionality. My goal was to get everything working over BTLE, but unfortunately my Fenix 5 doesn’t support the BTLE API, I need a Fenix 5 plus or newer. I have a vivoactive3 but you need at least a vivoactive3 music or newer. Also you need a special devkit to run BTLE apps in the simulator ($50). Would be nice to use a generic BT dongle or even a general purpose SDR. Also worth mentioning the Bluetooth control API
Worth mentioning the Garmin ConnectIQ SDK tools on Linux don’t work at all, I had to run everything in a Windows instance. Also the current version of the vscode plugin doesn’t work (1.0.0 was released a week ago, older versions seem ok).
I’ll probably revisit this at some point but I just don’t have the hardware to continue development.
So I bit and bought the nordic RF dongle and experimented with connecting to a gopro Hero 10 using the connectIQ BluetoothLowEnergy API. My goal was to create a simple widget that could toggle modes and shutter. Unfortunately I couldn’t get past the pairing stage, and other people have reported something very similar on the Garmin Developer forum. Basically the pairing process doesn’t support whatever requirements the GoPro needs, possibly an encryption issue.
here is a link to a discussion on it.
link to forums.garmin.com
Its definitely an issue with Garmin, I was able to use the nRF Connect Bluetooth low energy tool to pair to my GoPro10 and was able to turn on the shutter, etc just with that generic app. Until Garmin supports the pairing process with their SDK its unlikely to happen.
I’m also disappointed that there is no development on this – I see that @Aaron has tried, but it hasn’t been successful.
Ultimately, I have a few GoPros that I use on my motorcycle. It would be nice to use my Fenix 6 rather than the GoPro remotes, but I’ve got both the remotes now, so I’ll continue to use them. Still, it would be great to control my Hero 9 and Hero 10 from my watch, or my connected GPS.
Has anyone created at Connect IQ app?
Once in a while, when I use my GoPro, I remember to Google in search of a remote solution….unfortunately nothing yet…so many versions of GoPro, so many versions of FÉNIX/EDGE…nothing yet…crap.
I used to own an shimano camera and was amazed to find that I could control it using the DI2 buttons on the rod shifters…very nice integration until shimano abandoned the camera market…
still no solution for the first two comments here?
(varia radar controlling gopro?)