Accessing the Theta Z1 Camera Settings for an iOS App

Hi, I’m trying to make an iOS App for the Theta Z1 that allows the user to make sets of brackets. This is for use in VFX where we need to access different bracket setups for different locations and situations quickly and repeatedly. (I couldn’t find an app that does this already so if one is known about, happy to look at it).

To that end I have downloaded the Ricoh Theta Sample for iOS and have been trying to figure it out. I know SwiftUI but not Objective-C or HTML so I am attempting to bridge them enough to update the variables of the camera settings I need.

The issue I am having is that I can’t find in the sample code where or how to modify the settings. Specifically I need to change the ISO, Shutter Time, White Balance, and Stop.

Any help pointing me in the right direction to control these aspects of the camera would be appreciated. Thanks,

1 Like

Options are set with an HTTP request.

There is a basic overview here:


Options are set here.


Authyrdra can produce the HDR file inside the camera.

If you want a mobile app, see this:

1 Like

Thank you very much for this.

HDRI looks interesting but I have decided to proceed with building my own app to suit my needs.

I’ve gotten pretty far (considering I don’t actually know Objective-C) but am running into a problem. I want to pre-assemble an NSArray for feeding to “_bracketParameters” but it doesn’t appear to work. I don’t know if this is the right place to get this help but here’s what I’m doing:

NSMutableArray *bracketSettings = [NSMutableArray array];
[bracketSettings removeAllObjects];
for (int a = 1; a <= count; a++) {
    [bracketSettings addObject:@{
        @"aperture": aperture,
        @"_colorTemperature": colorTemperature,
        @"exposureCompensation": @0,
        @"exposureProgram": @1,
        @"iso": iso,
        @"shutterSpeed": @(1 / [shutter doubleValue]),
        @"whiteBalance": @"auto"
    shutter = @([shutter doubleValue] * 2.0);

And then feeding to the Theta Z1 like this:

[self setOptions:@{
    @"_autoBracket": @{
        @"_bracketNumber": bracketCount,
        @"_bracketParameters": bracketSettings}];

What happens is that when I request any number of “_bracketNumber” I only get 2 photos taken which I assume is the defaults for “_bracketParameters” because when I hardcode more than 2 sets into “_bracketParameters” I get the correct number of photos.


I’m not sure if exposureCompensation works if the exposureProgram is set to manual. If you take a single shot, do the settings work as expected?

When you set the options, do you either have a delay of a few hundred milliseconds or use status to check if the camera is ready to take the pictures?

I don’t need exposureCompensation. I copied that from the example actually and left it in just in case it was looking for it. Was planning on stripping it out along with whiteBalance.

Re: delay or status check, I’m not doing either of those I don’t believe. Though that is an example of my lack of knowledge in this area (just sort of figuring it out as I go). I was trying to assemble the array before setOptions was triggered and then just hand _bracketParameters that NSArray.

If I hard code my settings into _bracketParameters it works correctly.

If you’re taking the picture immediately before you set the options, insert a 500ms delay between the setOptions (brackets) and the camera.takePicture. This might help.

Another potential issue is the floating point numbers like 2.1.

See this discussion.

If you read the thread, you can see the ultimate solution was to insert a delay. However, keep in mind that at the time of the discussion, the bracket option was new and the developer was originally taking individual pictures.

If there is any error in the debug console, that would be useful.

It looks like it was an issue with my calculated shutterSpeed. There are only specific shutter speeds allowed and I didn’t realize that I though it was any value in the range. Got it working now Thanks for all your help! I’ll let you know if there are further developments.

Thanks for sharing your solution. This helps other people.

The documentation for the shutterSpeed could be improved. Other people have been stuck with very similar problems. For example, it’s also not clear from the documentation if strings would work.

Even more confusing is that on some firmware, both strings and floats worked at some point in the past. Now, I believe that only these specific number values works.

There may be other issues serializing to JSON and back as JSON just has a number and no separation of integers and floating point values, which may be made worse by the lack of a clear error message. Maybe the response was just no response?

The documentation would benefit from additional examples of payloads.

If the problem is really common, I can try and push for a change in the documentation. However, I’m hoping that people can get by with help from the community that augments the documentation.

Several other professional mobile app developers encountered the same problem that you encountered.

BTW, developer @pixel on this forum has this reasonably-priced mobile app. You might want to give it a look. It’d be interesting to write down what need for your specific workflow.

1 Like

Yeah, I checked that out. My main issue is that it’s taking each image of the bracket separately rather than using the bracket mode of the Z1 which makes it much much slower. On set that’s critical.

It’s also a bit of a bear of an interface. You have to set each bracketed image setting individually like you do in the Theta official app. Usually you set the aperture, ISO, and color temp to be the same for all images and then do an exposure bracket with the shutter speed. You also usually do a standard number of stops above and below your ideal exposure. So it makes more sense to build an interface for that.

I’d also like to manage them easier like duplicate existing brackets and group them by project.

Speed on set is so important, especially when taking HDRIs as you often have to make the whole crew sit around waiting for you. I also prefer that the settings for the HDRI match the production camera settings as close as possible and be quickly recallable on the day.

At this point I’ve got all of that worked out and working. I’m now shifting to viewing, downloading and managing the images on the camera. We’ll see how that goes, but in a pinch the official Theta app can handle that just fine.

Wow, this is great information. Coincidentally, I had a discussion with a manager at RICOH about the settings for VFX and we both thought that bracket settings in the RICOH THETA official mobile app were not optimized for VFX workflows. However, we both didn’t know how VFX professionals used the settings.