Spinnaker Cameras

This device allows control of FLIR scientific cameras via the Spinnaker SDK with the PySpin wrapper. In order to use this device, both the SDK and the python wrapper must be installed.





First ensure that the Spinnaker SDK is installed.

The python wrapper is available via FLIR. It must be installed separately and pointed to the correct conda environment during install.

For GigE cameras, ensure that the network interface card (NIC) on the computer with the BLACS controlling the camera has enabled Jumbo Frames. The maximum allowed value (typically 9000) is preferable to avoid dropped frames.


Like the IMAQdxCamera device, the bulk of camera configuration is performed using a dictionary of kwargs, where the key names and values mirror those provided by the Spinnaker SDK interface. Which parameters can/need to be set depend on the communication interface. Discovery of what parameters are available can be done in three ways:

  1. Careful reading of the Spinnaker SDK docs.

  2. Mirroring the SpinView parameter names and values.

  3. Connecting to the camera with a minimal configuration, viewing the current parameters dictionary, and copying the relevant values to the connection table (preferred).

Below is a generic configuration.

from labscript import *

from labscript_devices.SpinnakerCamera.labscript_devices import SpinnakerCamera

CCT_global_camera_attributes = {
   'AnalogControl::GainAuto': 'Off',
   'AnalogControl::Gain': 0.0,
   'AnalogControl::BlackLevelEnabled': True,
   'AnalogControl::BlackLevel': 0.0,
   'AnalogControl::GammaEnabled': False,
   'AnalogControl::SharpnessEnabled': False,
   'ImageFormatControl::Width': 1008,
   'ImageFormatControl::Height': 800,
   'ImageFormatControl::OffsetX': 200,
   'ImageFormatControl::OffsetY': 224,
   'ImageFormatControl::PixelFormat': 'Mono16',
   'ImageFormatControl::VideoMode': 'Mode0',
   'AcquisitionControl::TriggerMode': 'Off',
   'AcquisitionControl::TriggerSource': 'Line0',
   'AcquisitionControl::TriggerSelector': 'ExposureActive',
   'AcquisitionControl::TriggerActivation': 'FallingEdge',
CCT_manual_mode_attributes = {
   'AcquisitionControl::TriggerMode': 'Off',
   'AcquisitionControl::ExposureMode': 'Timed',
CCT_buffered_mode_attributes = {
   'AcquisitionControl::TriggerMode': 'On',
   'AcquisitionControl::ExposureMode': 'TriggerWidth',

            serial_number=1234567, # set to the camera serial number
            minimum_recovery_time=36e-6, # the minimum exposure time depends on the camera model & configuration




Detailed Documentation

class labscript_devices.SpinnakerCamera.labscript_devices.SpinnakerCamera(name, parent_device, connection, serial_number, orientation=None, trigger_edge_type='rising', trigger_duration=None, minimum_recovery_time=0.0, camera_attributes=None, manual_mode_camera_attributes=None, stop_acquisition_timeout=5.0, exception_on_failed_shot=True, saved_attribute_visibility_level='intermediate', mock=False, **kwargs)[source]

Bases: labscript_devices.IMAQdxCamera.labscript_devices.IMAQdxCamera

A camera to be controlled using NI IMAQdx and triggered with a digital edge.

  • name (str) – device name

  • parent_device (IntermediateDevice) – Device with digital outputs to be used to trigger acquisition

  • connection (str) – Name of digital output port on parent device.

  • serial_number (str or int) – string or integer (integer allows entering a hex literal) of the camera’s serial number. This will be used to idenitfy the camera.

  • orientation (str, optional) – <name> Description of the camera’s location or orientation. This will be used to determine the location in the shot file where the images will be saved. If not given, the device name will be used instead.

  • trigger_edge_type (str) – 'rising' The direction of the desired edges to be generated on the parent devices’s digital output used for triggering. Must be ‘rising’ or ‘falling’. Note that this only determines the edges created on the parent device, it does not program the camera to expect this type of edge. If required, one must configure the camera separately via camera_attributes to ensure it expects the type of edge being generated. Default: 'rising'

  • trigger_duration (float or None) – None Duration of digital pulses to be generated by the parent device. This can also be specified as an argument to expose() - the value given here will be used only if nothing is passed to expose().

  • minimum_recovery_time (float) – 0 Minimum time between frames. This will be used for error checking during compilation.

  • camera_attributes (dict, optional) – Dictionary of camera attribute names and values to be programmed into the camera. The meaning of these attributes is model-specific. Attributes will be programmed in the order they appear in this dictionary. This can be important as some attributes may not be settable unless another attrbiute has been set first. After adding this device to your connection table, a dictionary of the camera’s default attributes can be obtained from the BLACS tab, appropriate for copying and pasting into your connection table to customise the ones you are interested in.

  • manual_mode_camera_attributes (dict, optional) – Dictionary of attributes that will be programmed into the camera during manual mode, that differ from their values in camera_attributes. This can be useful for example, to have software triggering during manual mode (allowing the acquisition of frames from the BLACS manual mode interface) but hardware triggering during buffered runs. Any attributes in this dictionary must also be present in camera_attributes.

  • stop_acquisition_timeout (float) – 5.0 How long, in seconds, to wait during transition_to_buffered for the acquisition of images to complete before giving up. Whilst all triggers should have been received, this can be used to allow for slow image download time.

  • exception_on_failed_shot (bool) – True. If acquisition does not complete within the given timeout after the end of a shot, whether to raise an exception. If False, instead prints a warning to stderr (visible in the terminal output pane in the BLACS tab), saves the images acquired so far, and continues. In the case of such a ‘failed shot’, the HDF5 attribute f[‘images’][orientation/name].attrs[‘failed_shot’] will be set to True (otherwise it is set to False). This attribute is acessible in the lyse dataframe as df[orientation/name, 'failed_shot'].

  • saved_attribute_visibility_level (str or None) – ‘intermediate’ The detail level of the camera attributes saved to the HDF5 file at the end of each shot. If None, no attributes will be saved. Must be one of 'simple', 'intermediate', 'advanced', or None. If None, no attributes will be saved.

  • mock (bool, optional) – False For testing purpses, simulate a camera with fake data instead of communicating with actual hardware.

  • **kwargs – Further keyword arguments to be passed to the __init__ method of the parent class (TriggerableDevice).

description = 'Spinnaker Camera'
class labscript_devices.SpinnakerCamera.blacs_tabs.SpinnakerCameraTab(notebook, settings, restart=False)[source]

Bases: labscript_devices.IMAQdxCamera.blacs_tabs.IMAQdxCameraTab

worker_class = 'labscript_devices.SpinnakerCamera.blacs_workers.SpinnakerCameraWorker'
class labscript_devices.SpinnakerCamera.blacs_workers.SpinnakerCameraWorker(*args, **kwargs)[source]

Bases: labscript_devices.IMAQdxCamera.blacs_workers.IMAQdxCameraWorker

Spinnaker API Camera Worker.

Inherits from IMAQdxCameraWorker.


alias of labscript_devices.SpinnakerCamera.blacs_workers.Spinnaker_Camera

class labscript_devices.SpinnakerCamera.blacs_workers.Spinnaker_Camera(serial_number)[source]

Bases: object

Initialize Spinnaker API camera.

Serial number should be of string(?) type.


Spinnaker image buffers require significant formatting. This returns what one would expect from a camera. configure_acquisition must be called first to set image format parameters.

configure_acquisition(continuous=True, bufferCount=10)[source]
get_attribute(name, stream_map=False)[source]

Return current values dictionary of attribute of the given name


Grab and return single image during pre-configured acquisition.

grab_multiple(n_images, images)[source]

Grab n_images into images array during buffered acquistion.

set_attribute(name, value, stream_map=False)[source]
set_stream_attribute(name, value)[source]

Acquire a single image and return it


Execute software trigger