Skip to main content

Overview

When cameras are used in mixed-mode environments — where both SDK-driven automation and hands-on photographer operation happen simultaneously — unwanted shutter actuations or setting changes can disrupt a shoot. Guardrail commands let you programmatically lock down camera operations to prevent accidental captures during setup, review, or transitions. This is especially valuable for:
  • Volume photography studios where cameras fire on automated triggers
  • Tethered shooting setups where an assistant may accidentally press the shutter
  • Multi-camera rigs where only specific cameras should be active at a given time
  • Training environments where inexperienced operators share access to the camera

Shutter Lock (shooting-enable)

The shooting-enable property allows you to completely disable or enable the shutter via the SDK. When disabled, the camera will not fire — neither from SDK commands nor from the physical shutter button.
This property requires a Volume Photography Commands license from Sony, installed on the camera. Without the license, the property will not appear.License information: Sony Volume Photography Commands

Reading the current state

curl http://localhost:8080/api/cameras/{id}/properties/shooting-enable
{
  "data": {
    "property": "shooting-enable",
    "value": "0x1",
    "formatted": "Enabled",
    "writable": "true",
    "available_values": [
      { "value": "0x1", "formatted": "Enabled" },
      { "value": "0x2", "formatted": "Disabled" }
    ]
  }
}
If the response returns empty available_values and writable: "false", the license is not active on this camera.

Disabling the shutter

curl -X PUT .../properties/shooting-enable \
  -H "Content-Type: application/json" \
  -d '{"value": "0x2"}'
// Lock the shutter
await cam(cameraId).setProperty('shooting-enable', '0x2');

Re-enabling the shutter

curl -X PUT .../properties/shooting-enable \
  -H "Content-Type: application/json" \
  -d '{"value": "0x1"}'
// Unlock the shutter
await cam(cameraId).setProperty('shooting-enable', '0x1');

Practical Workflows

ISO limit enforcement

In a tethered studio, a photographer may be adjusting settings on the camera body between shots. If they accidentally push ISO above your quality threshold, the shutter locks until the setting is corrected. This prevents noisy images from entering the pipeline.
1

Connect and set initial exposure

Connect the camera, set your baseline exposure. The shutter starts unlocked — the photographer can shoot immediately.
2

Monitor ISO via SSE

Listen for propertyChanged events on iso. When ISO changes, check if it exceeds your limit.
3

Lock if ISO exceeds limit

If the photographer dials ISO above 800 on the camera body, immediately set shooting-enable to 0x2. The shutter is blocked — no capture is possible until corrected.
4

Unlock when corrected

When the photographer brings ISO back to 800 or below, set shooting-enable to 0x1. Shooting resumes.
const MAX_ISO = 800;
const cam = manager.camera(cameraId);

// Start unlocked — photographer can shoot immediately
await cam.setProperty('shooting-enable', '0x1');

// Monitor ISO changes from the camera body
cam.events.on('propertyChanged', async (event) => {
  if (event.property !== 'iso') return;

  const isoValue = parseInt(event.value, 16);

  if (isoValue > MAX_ISO) {
    await cam.setProperty('shooting-enable', '0x2');
    console.log(`ISO ${isoValue} exceeds limit ${MAX_ISO} — shutter locked`);
  } else {
    await cam.setProperty('shooting-enable', '0x1');
    console.log(`ISO ${isoValue} within limit — shutter unlocked`);
  }
});

Scan & Tag subject tracking

In volume photography workflows using Sony’s Scan & Tag system, each subject is identified by an image-id-string scanned from a QR code or barcode. The shutter should be locked when no subject is tagged, or when the tag is stale (too many shots taken for the same subject).
1

Start with shutter locked

Camera connects with shooting-enable = Disabled. No captures until a valid subject ID is present.
2

Scan subject ID

The operator scans a QR code. Your application writes the ID via PUT /properties/image-id-string. The shutter unlocks.
3

Track shot count per subject

Each time a capture completes (via downloadComplete or transferProgress SSE event), increment the count for the current subject ID.
4

Lock when limit reached

After the defined number of shots per subject (e.g. 5), lock the shutter. The operator must scan a new subject ID to continue.
5

Lock on empty or cleared ID

If the image ID is cleared (empty string) or the session resets, lock the shutter immediately.
const MAX_SHOTS_PER_SUBJECT = 5;
const cam = manager.camera(cameraId);

let currentSubjectId = '';
let shotCount = 0;

// Start locked — no subject tagged
await cam.setProperty('shooting-enable', '0x2');

// Called when operator scans a new subject QR code
async function onSubjectScanned(subjectId: string) {
  // Write the ID to the camera's MakerNote field
  await cam.setProperty('image-id-string', subjectId);

  currentSubjectId = subjectId;
  shotCount = 0;

  if (subjectId) {
    // Valid subject — unlock shutter
    await cam.setProperty('shooting-enable', '0x1');
    console.log(`Subject "${subjectId}" tagged — shutter unlocked (${MAX_SHOTS_PER_SUBJECT} shots allowed)`);
  } else {
    // Empty scan — keep locked
    await cam.setProperty('shooting-enable', '0x2');
    console.log('No subject ID — shutter locked');
  }
}

// Track completed captures
cam.events.on('downloadComplete', async () => {
  shotCount++;
  console.log(`Shot ${shotCount}/${MAX_SHOTS_PER_SUBJECT} for "${currentSubjectId}"`);

  if (shotCount >= MAX_SHOTS_PER_SUBJECT) {
    await cam.setProperty('shooting-enable', '0x2');
    console.log(`Limit reached for "${currentSubjectId}" — shutter locked, scan next subject`);
  }
});

SSE Events

When shooting-enable changes, a propertyChanged SSE event is emitted:
{
  "property": "shooting-enable",
  "value": "0x2",
  "formatted": "Disabled"
}
Listen for this event to keep your UI in sync with the actual shutter lock state.

Compatibility

The shooting-enable property requires:
  1. A camera that supports CrDeviceProperty_ShootingEnableSettingLicense
  2. An active Volume Photography Commands license installed on the camera
Without the license, the property returns empty/not writable. The camera body shutter button always works regardless of this setting — the lock applies to SDK-initiated and physical shutter operations.
The license is a one-time purchase per camera body. See Sony Volume Photography Commands for pricing, compatible models, and installation instructions.