THETA X firmware 2.20.1 - Improved Battery Life, New API features for Web, Plugin, and Bluetooth Developers

THETA X firmware v2.20.1 (2023.07.25)

THETA X firmware 2.20.1 is now available. The update adds improved battery life due to power consumption reduction during interval shooting and changes to power consumption based on shooting settings.

Changes For Developers

For developers, there are new features to the WebAPI, Bluetooth-API and Plugin API.

Upgrade Methods

There are three ways to update the firmware:

  1. directly from the body of the camera
  2. using desktop app and a USB cable
  3. using official mobile app from RICOH and WiFi

The easiest upgrade in my experience is to use the touchscreen on the body of the camera. The camera needs to be connected to the Internet with Client Mode.

Example Upgrade Process Using Body of Camera

When the camera is connected in client mode, you will see a blue dot next to Update firmware.


Pressing on Update firmware checks if a firmware update is available. It looks like my camera is behind.


The installation process took several minutes. An progress bar supplied me with a status of the upgrade process.


The camera will eventually indicate that the update is completed.


Download - Firmware | RICOH THETA X

  • The camera operation during interval shooting has been reviewed to reduce power consumption.
  • The degree of power consumption reduction varies depending on the shooting settings.


  • State : Update new options “_externalGpsInfo”, “_internalGpsInfo”, “_boardTemp”, and “_batteryTemp”



  • Broadcast Intent : Update new intent com.theta360.plugin.ACTION_BATTERY_CHARGING_SUSPEND(RESUME)

Testing API

curl --request GET \


New Temperature Readings

curl --request POST \


It’s interesting that the battery temp is 2 degree C hotter than the board.

New GPS Info

With GPS disabled.

		"_externalGpsInfo": {},
		"_function": "normal",
		"_internalGpsInfo": {},

With GPS enabled and GPS satellite searching (GPS arrow is outline)

		"_externalGpsInfo": {},
		"_function": "normal",
		"_internalGpsInfo": {
			"gpsInfo": {
				"_altitude": 0,
				"_dateTimeZone": "",
				"_datum": "",
				"lat": 65535,
				"lng": 65535

With GPS satellite locked

		"_internalGpsInfo": {
			"gpsInfo": {
				"_altitude": -7.199999999999999,
				"_dateTimeZone": "2023:07:25 13:01:14-04:00",
				"_datum": "WGS84",
				"lat": 37.xx6856,
				"lng": -122.xx887833333334

Checking File Format


curl --request POST \
  --url \
  --header 'Content-Type: application/json;charset=utf-8' \
  --data '{
	"name": "camera.getOptions",
	"parameters": {
		"optionNames": [


	"results": {
		"options": {
			"videoStitching": "ondevice",
			"captureMode": "video",
			"fileFormat": {
				"_codec": "H.264/MPEG-4 AVC",
				"_frameRate": 10,
				"height": 3840,
				"type": "mp4",
				"width": 7680
	"name": "camera.getOptions",
	"state": "done"

As the camera cannot take 8K video using the WiFi API, the camera state shows an error. This is working as expected.

		"_cameraError": [

Battery Temp After about 15 Minutes


Heat Test Using Streaming

Streaming on Linux

After about 10 minutes, the battery temp went up to 46C (114F)