Open source app to connect with popular action cameras, replacing your vendor's closed source app system.
Switch branches/tags
Nothing to show
Clone or download
Latest commit e5a7249 Oct 7, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Added settings activity May 29, 2018
Logo Add files via upload Oct 7, 2018
gradle/wrapper Add readme May 13, 2017
mobile Switched GoPro API to retrofit. Jun 17, 2018
.gitignore Further work on basic GoPro command API Jan 18, 2018
LICENSE Create LICENSE May 29, 2018 Update Oct 7, 2018
build.gradle Move APIs to Retrofit. Jun 17, 2018 Initial commit Jan 2, 2017
gradlew Initial commit Jan 2, 2017
gradlew.bat Add readme May 13, 2017
settings.gradle Work on GoPro Wifi cameras. May 31, 2017
sketch.png Redesign of UI May 27, 2018

Action Cam Control App for Android


Open source vendor agnostic client application to interface with most popular sports cameras (eg: GoPro, Garmin, Yi, SJCam, etc...).


  • Open source and login-free
  • Virtually permissionless
  • Support most action cameras
  • Have all the features from the vendor's client
  • Run without Google Play Services

Mockup of the app UI:

Disclaimer: Not a designer.

Works with:

  • GoPro - API
  • Xiaomi Yi


  • Sony ActionCam
  • Garmin
  • SJcam
  • Other ChinaPro to be added


The app must at least have the following features regardless of camera used:

  • Preview live stream
  • Control basic features eg: record, take picture, change modes, turn on or off
  • Get camera status messages
  • Get videos and photos off memory
  • Camera detection


I maintain the GoPro Wifi API and I will be doing the GoPro support, if you want to add support for your action camera:

  • See the /camera/goproAPI folder, this is what provides the app with instructions and assets on how to connect to a GoPro camera, add a new folder inside /camera/ named camera nameAPI, inside you'll need to place the following files:
    • Details about the camera(s) itself: model_name array, ip_address as a string, baseURL, statusURL, settingsURL, commandURL as string (with :port if needed), connectionMsg array as string (this is to check if the camera is connected, first item should be a URL and second item should be a string), info array with information from the vendor (eg: vendor name, vendor country, vendor website)
    • Host your commands in this file, I tend to follow a Video/Photo/MultiShot/Setup/Command structure which is easy to understand and use. Other cameras are different but try to stick to that structure.
    • This should have a function called getStream that returns a Uri or a Video that ExoPlayer can play.
    • Many cameras have a media front end in their IP addresses with port 8080, you'll need the URL the vendor app uses, for GoPro for instance its a JSON. It should have a mediaURL Uri and a function called getMedia() which returns an array with the URLs of the photos and videos.
    • Should be a list of Strings or integers with an appropiate Status name.

License & Libaries used

Patreon & PayPal: