Skip to content

Repository files navigation

Osmosis — Android media client for DJI Osmo cameras

Third-party Android client to download videos and photos from DJI Osmo action / gimbal cameras, as well as some DJI drones. No DJI SDK dependencies, no logins, no bloatware, no activation.

Works with the DJI Osmo Nano, Osmo Pocket 3 / 4 and DJI Action 5 Pro / 6, ongoing work happening to support the rest of the DJI Osmo lineup (see Supported cameras). Also tested with the Xtra Edge Pro, a rebadged DJI Osmo Action 5 Pro made by DJI front company Xtra.

Drones: offload over QuickTransfer is verified working only on the DJI Mavic 3. Work is ongoing to support more DJI airframes.

Read The Verge's review of an early version of the app:

image

Features

  • Media grid with thumbnails, pulled straight off the camera.
  • Low-res streaming preview — scrub any clip without downloading it first.
  • In-preview trimming — set in/out points and download just that slice of the high-res clip. Keyframe-accurate stream copy in original quality.
  • Resumable download queue — high-res downloads straight into your phone's gallery.
  • Live status — battery, shooting mode, and storage (internal / SD) shown in a status pill. More to come (recording indicator, resolution, fps, etc...)
  • DNG file download if JPEG+DNG mode is enabled, Mimo doesn't do this.
  • Multi-camera — remembers your cameras and shows which are currently in range.
  • Favorite/delete your videos/photos from the app, and view previously hearted media
  • Sync GPS with your Osmo: Uses R-SDK Osmo GPS controller commands to send GPS from the phone to your camera. Useful to add stats later using Telemetry Overlay.

Supported cameras

Camera Status
Osmo Nano Verified on hardware
Osmo Action 5 Pro / Xtra Edge Pro Verified on hardware
Osmo Action 6 Verified on hardware
Osmo Pocket 3 Verified on hardware
Osmo Pocket 4 / 4 Pro Verified on hardware
Xtra Atto / Edge / Muse Untested, should work
Osmo Action 1 Started want this camera supported? raise an issue
Osmo Action 4 Started want this camera supported? raise an issue
Osmo 360 Unplanned (needs Mimo to render 360 content)
Osmo Action 2/3 Started want this camera supported? raise an issue
DJI Mavic 3 (QuickTransfer) Verified on hardware
DJI Neo 2 (QuickTransfer) Started
DJI Mini 3 (QuickTransfer) Started
Any other DJI drone Unverified, might work

Want to help adding support for an unsupported camera? Open an issue to begin help me add support for it.

Xtra rebadges. Xtra is a DJI front company that sells rebadged Osmo cameras US-only to sidestep the DJI ban:

  • Edge Pro = Action 5 Pro
  • Atto = Nano
  • Edge = Action 4
  • Muse = Pocket 3.

Actively trying to support, raise an issue if you have these cams and would like to help:

  • Osmo Action 4
  • Osmo Action 3
  • Osmo Action 2
  • Osmo Action (1)
  • DJI Neo 2.

Debugging / supporting new cameras:

Start the app, enable Save Logs, try and connect to the camera, anything that is being sent and received is being logged to an internal location only accessible by the app. Tap Save Logs again to disable the logging + gzip it to share it with me.

Reverse engineered command list:

If you want to build your own app or program that interfaces with DJI Osmo cameras, this document will help:

./MEDIA_PROTOCOL.md

This is the most extensive documentation of DJI's undocumented DUML protocol for Osmo cameras to date. It is derived using DJI Mimo wifi/ble captures.

Covers both BLE/WiFi transport routes.

Commands reverse engineered not found anywhere else:

  • Parsing media list 0x26 and it's response 0x00/0x27
  • Pagination for querying older media
  • Highlights, delete file

How it works

No DJI SDK — Osmosis speaks DJI's DUML protocol directly. Each session:

  1. BLE pair with the camera (requires approving on the camera itself once).
  2. Read the WiFi credentials over BLE (SSID + passphrase).
  3. Wake and join the camera's WiFi access point.
  4. List the media via the DUML file-list command over UDP.
  5. Download the high-res files over HTTP from the camera's 192.168.2.1 server.

The full reverse-engineered protocol — BLE pairing, WiFi handoff, the DUML file-list format, and more — is documented in docs/01-protocol-map.md.

Privacy

Osmosis talks to only your camera (192.168.2.1). No analytics, no accounts, no activation servers, no cloud. Your media never leaves your phone and camera.

Contrast the official apps, which require a login and phone home to activation and telemetry backends (the Xtra companion app even bundles ByteDance analytics). Osmosis has none of that — the network security config restricts it to the camera's local address.

Requirements

  • Android 10+ (API 29).
  • Bluetooth LE.
  • Permissions:
    • Nearby devices (Bluetooth scan/connect) on Android 12+, or Location on older versions
    • WiFi state/change.
    • No internet permission is needed for anything but the camera's local AP.
    • No storage permission needed due to the use of Android's media APIs to save content.

Getting started

  1. Turn on Bluetooth and WiFi, and open Osmosis; grant the permission prompts.
  2. Power on the camera, wait a few seconds and tap it in the Cameras list. Should show as "NEW".
  3. Approve the pairing prompt on the camera screen (will read: OSMO).
  4. Approve the Android "join WiFi" dialog when it appears.
  5. Browse the grid. Tap a clip to preview, trim, and add it to the queue.
  6. Tap Download — files land in your phone's gallery.

Download

Build from source

Standard Gradle Android build:

./gradlew assembleDebug

Plain Android Views (no Jetpack Compose). Built with AGP 8.5.2 / Gradle 8.7 / JDK 17 (JDK 17–21 work); compileSdk 34, minSdk 29.

Roadmap

Planned work and reverse-engineering notes live in ROADMAP.md.

Projects using Osmosis references:

Credits

The monumental task of reverse engineering DJI's DUML protocol was initially done by the DJI OGs. DJI never released an SDK for their Osmo camera line, forcing users onto the DJI Mimo app. Thankfully several folks on GitHub open-sourced their reverse-engineering efforts to interact with DJI cameras over BLE and WiFi:

DJI's own official Osmo-GPS-Controller-Demo was also a useful reference for the accessory (R-SDK) pairing protocol.

This application couldn't have been built without the work above. That said, much of it didn't work for the Osmo Nano and Edge Pro, so a significant additional reverse-engineering effort went into making Osmosis fully compatible with the DJI Osmo Nano, as well as fully reverse engineering the responses to unsupported DUML commands.

Also, credit where is due to the testers who provided early feedback and helped me develop this for cameras I don't own:

License

MIT.

Disclaimer

Independent third-party project — not affiliated with, authorized, or endorsed by DJI. "DJI" and "Osmo" are trademarks of their respective owners. Use at your own risk; deleting or offloading media is your responsibility.

About

Thirs party Android client for DJI Osmo (Action, Pocket, Nano) cameras and DJI drones. Offload media to your device wirelessly.

Resources

Stars

69 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages