Roomba Tones icon Roomba Tones — Deprecated Roomba control; replaced by the iRobot Roomba Movement Panel for updated movement control. Try it →
 
Camera Snapshot Robot Skill

Camera Snapshot

by Synthiam Inc.

Save JPEG or PNG snapshots from any running camera source on demand, in bursts, or on a timer for time-lapse capture.

Requires ARCx v3 (Updated 10/10/2026)
Tags: Camera
Compatible with: Compatible with Microsoft Windows 10 or 11 Windows Compatible with ARM Linux (Raspberry pi, etc) ARM Compatible with Linux Linux Compatible with MacOS MacOS

How to add the Camera Snapshot robot skill

  1. Load the most recent release of ARCx on a compatible operating system (Get ARCx).
  2. Press the + Skills menu from the top menu bar in ARCx.
  3. Choose the Camera category tab.
  4. Press the Camera Snapshot icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Camera Snapshot robot skill.


How to use the Camera Snapshot robot skill

Saves still pictures from any video source in the project to JPEG or PNG files on the computer: one at a time from a button or a script, in quick bursts, or on a timer for a time lapse.

Every snapshot is the next frame the camera delivers after it was asked for, so a script that moves the robot and then takes a snapshot gets a picture of where the robot is now, not a frame that was already on its way.

Requirements

  • A video source in the project - Camera Source (usb) or Camera Source (ezb) - with its video running.

Several instances are allowed, so each camera can have its own snapshot skill with its own folder and settings. One instance can also take snapshots from any camera, because a script can name the source for a single snapshot.

The window

Camera Snapshot  <a href='/Support/Skills/Skills-Overview' target='_top'>robot skill</a> window

Toolbar

  • Snapshot - saves the next frame to a file named with the date and time.
  • Interval - starts interval (time lapse) capture. While it runs the button reads Stop (n), where n is how many snapshots it has taken.
  • Live / Photo switch - shows the live camera instead of the last snapshot, to line up a shot. It only changes the view in your own browser.
  • Download - saves the snapshot being shown to the device you are browsing from. On a phone or tablet this is how a photo taken by the robot ends up in your camera roll.
  • Clear - forgets the recent snapshots shown in the window. The files are kept.

Status line - the video source in use (a green dot when it is running, amber when it is not), how many snapshots were saved this session, the interval while it runs, and a spinner while a snapshot is waiting for its frame.

Preview - the last snapshot, with its filename, size and time. A white flash plays when a new one is saved.

Recent strip - thumbnails of the recent snapshots. Click one to show it in the preview and make it the one Download saves; click the newest to go back to following new snapshots.

Log - every saved file, with its size, and the reason whenever a snapshot fails.

Filenames

A snapshot without a filename is saved in the save folder as

<prefix> <date and time>.jpg, i.e. Snapshot 2026-09-25-14-33-07.jpg

A second snapshot in the same second gets a counter: Snapshot 2026-09-25-14-33-07 (2).jpg.

A script can give its own filename:

  • A name without a folder, such as door.jpg, is saved in the save folder. A relative path such as visitors/door.jpg creates the subfolder.
  • A full path, such as C:\Robot\door.png, is used as it is, and missing folders are created.
  • The extension picks the format: .jpg, .jpeg or .png. A name without one gets the configured format. Any other extension is refused with an error.
  • An existing file of the same name is overwritten.
  • Environment variables such as %USERPROFILE% are expanded.

Every command that saves returns the full path of the file, so a script can use it straight away - attach it to an email, send it to an AI vision service, show it on a Custom UI screen.

Choosing a camera

The configured Video source is used unless a script names another one for a single snapshot. With the source left on (first running source), whichever camera is running is used, which is right for the usual project with one camera.

Names are matched ignoring case. Naming a source that is not running fails with an error that lists the sources that are.

Interval capture

Takes a snapshot straight away, then one every Every (seconds), until it is stopped or has taken Stop after snapshots. It can start by itself when the project loads.

Interval snapshots pause while any robot skill's configuration window is open, as every robot skill's background work does. A snapshot that fails - the camera was stopped, say - is written to the log and the interval carries on.

For a long running time lapse on a robot with a small disk, set Keep newest files so the oldest snapshots are deleted as new ones arrive.

Custom UI widgets

Three widgets can be placed on your own Custom UI screens.

Snapshot button - a big shutter button filling its box, with the last snapshot behind it and a flash when a new one is saved.

Setting Meaning
Caption The text on the button.
Source A video source for this button only, so a screen can have one button per camera. Empty uses the skill's own.
ShowThumbnail Shows the last snapshot behind the button.
ShowCount Shows how many snapshots were saved this session.

Last snapshot - the most recent snapshot, filling its box.

Setting Meaning
Fit contain shows the whole photo (may leave bars), cover fills the box (may crop).
ShowInfo Shows the time and size in the corner.
ShowDownload Shows a button that downloads the full size file to the phone or computer.
ShowRecent Shows a strip of recent snapshots to flip back through.
TapToCapture Tapping the photo takes a new snapshot, so this one widget is a whole camera panel.

Interval capture - start and stop the time lapse, with the interval and the count.

Setting Meaning
Caption The label above the button.

Scripts

After every snapshot the full path of the file is put in a global variable - SnapshotFilename unless you change it - and the On snapshot script runs if one is set. The variable already holds the new path when the script starts:

var file = getVar("SnapshotFilename");
print("Saved " + file);

With more than one Camera Snapshot skill in a project, give each its own variable name.

A script that is stopped while its snapshot is waiting for a frame stops waiting at once.

Configuration

Camera Snapshot configuration settings

Video

Setting Meaning Default
Video source The camera snapshots are taken from. The list shows each running source's frame rate. first running source
Save processed frame On saves the picture with the boxes and text drawn by tracking and detection skills. Off saves the raw camera image. off
Frame timeout (ms) How long a snapshot waits for the camera's next frame before failing. Raise it for slow network cameras. 3000

File

Setting Meaning Default
Save folder Where snapshots go. The reset button beside it restores the default. My ARCx Robot Pictures in the ARCx data folder
Filename prefix The start of every automatic filename. The field shows an example. Snapshot
Format JPEG (small, lossy) or PNG (larger, lossless) for automatic filenames and names without an extension. JPEG
JPEG quality 1 to 100. 85 to 95 is hard to tell from the original. 90
PNG compression 0 (fast, large) to 9 (slow, small). The picture is identical either way. 3
Resize width / height Scale the saved picture. 0 keeps the camera's size. Set only one to keep the aspect ratio. 0 x 0
Stamp date and time Prints the date and time in the bottom left corner. off
Stamp format The .NET date and time format of the stamp. The field shows what it will look like. yyyy-MM-dd HH:mm:ss
Keep newest files Deletes the oldest automatically named snapshots beyond this many. Only files that start with the prefix and end in .jpg, .jpeg or .png are ever touched; files saved with a script's own filename never are. 0 keeps everything. 0

Interval (time lapse)

Setting Meaning Default
Every (seconds) Time between snapshots. 10
Stop after Stop after this many snapshots. 0 runs until stopped. 0
Start on project load Start interval capture when the project loads. off

Window

Setting Meaning Default
Show preview Show the last snapshot in the window. Off leaves the buttons and log. on
Show recent strip Show thumbnails of the recent snapshots under the preview. on
Recent snapshots kept How many recent snapshots the window and widgets remember, in memory, for this session. 12
Show log Show the log in the window. on

After a snapshot

Setting Meaning Default
Filename variable The global variable that receives each new file's path. Empty sets none. SnapshotFilename
On snapshot script Runs after every snapshot is saved. empty

The Window tab sets the robot skill's window title, its size on the workspace and notes about what it does in this project.

Window configuration tab

Notes and limitations

  • The recent snapshots, the strip and the widgets remember only this session. The files on disk are the permanent record.
  • The download button serves only the snapshots this skill took this session; it cannot reach any other file on the computer.
  • When Keep newest files is on, a path returned to a script can be deleted by a later snapshot's cleanup. Copy a file somewhere else if the script needs to keep it.
  • Pictures are taken at the camera's own resolution unless Resize is set.

Troubleshooting

Symptom Cause
"There is no video source in the project" No camera skill is running. Add one and start its video.
"There is no video source named ..." The name does not match a running source. The message lists the ones that are running.
"No frame arrived ... within ... ms" The camera is added but its video is not started, or it is too slow. Start it, or raise Frame timeout.
"... is not a supported image type" The filename ends in something other than .jpg, .jpeg or .png.
The status dot is amber The configured source is not running.
No boxes or labels in the picture Turn on Save processed frame.
Old snapshots are disappearing Keep newest files is set.
Interval capture is not taking pictures A configuration window is open somewhere; interval snapshots pause until it is closed.

See also

  • Camera Source (usb) / Camera Source (ezb) - the video sources
  • Video Recorder - records video to a file instead of stills

Control Commands for the Camera Snapshot robot skill

There are Control Commands available for this robot skill which allows the skill to be controlled programmatically from scripts or other robot skills. These commands enable you to automate actions, respond to sensor inputs, and integrate the robot skill with other systems or custom interfaces. If you're new to the concept of Control Commands, we have a comprehensive manual available here that explains how to use them, provides examples to get you started and make the most of this powerful feature.

Control Command Manual

This robot skill has 17 control commands, listed below. Send them from a JavaScript or Python script, from Blockly, or from another robot skill.

The first value is always the window title, which is the name in the title bar of the robot skill on your workspace. It starts out as Camera Snapshot, which is what every example below uses. If you rename the robot skill, or add a second copy of it to the project, use the title as it appears on that window instead.

ControlCommand() can be shortened to CC(), and both spellings work in JavaScript and in Python. The examples are JavaScript; Python is the same call, except that true and false are written True and False.

ClearRecent

Clear the recent snapshots shown in the robot skill window and widgets. The files are not deleted.

Syntax

ControlCommand("Camera Snapshot", "ClearRecent")

Returns: nothing

Example

ControlCommand("Camera Snapshot", "ClearRecent");

GetLastFilename

The full path of the last snapshot saved, or an empty string when none has been saved this session.

Syntax

ControlCommand("Camera Snapshot", "GetLastFilename")

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "GetLastFilename");

GetSnapshotCount

How many snapshots this robot skill has saved this session.

Syntax

ControlCommand("Camera Snapshot", "GetSnapshotCount")

Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example

var result = ControlCommand("Camera Snapshot", "GetSnapshotCount");

GetSources

The names of the video sources running in the project, any of which can be passed to SnapshotFromSource or SetSource.

Syntax

ControlCommand("Camera Snapshot", "GetSources")

Returns: Array of String

Example

var result = ControlCommand("Camera Snapshot", "GetSources");

IsIntervalRunning

Whether interval capture is running.

Syntax

ControlCommand("Camera Snapshot", "IsIntervalRunning")

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "IsIntervalRunning");

SetFolder

Change the folder snapshots are saved in. It is created when it does not exist. Returns the full folder path.

Syntax

ControlCommand("Camera Snapshot", "SetFolder", (String)folder)

Parameters

# Name Type What to pass
1 folder Text Your text, in quotes

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "SetFolder", "folder");

SetFormat

Change the image format of automatically named snapshots: jpg or png. Returns true.

Syntax

ControlCommand("Camera Snapshot", "SetFormat", (String)format)

Parameters

# Name Type What to pass
1 format Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "SetFormat", "format");

SetInterval

Set the number of seconds between interval snapshots (1 to 86400). Takes effect at once if interval capture is running. Returns the seconds set.

Syntax

ControlCommand("Camera Snapshot", "SetInterval", (Number)seconds)

Parameters

# Name Type What to pass
1 seconds Number A number, without quotes

Returns: Integer [-2,147,483,648 to 2,147,483,647]

Example

var result = ControlCommand("Camera Snapshot", "SetInterval", 0);

SetProcessed

True saves the processed frame with the overlays drawn by tracking robot skills; false saves the raw camera image. Returns the value set.

Syntax

ControlCommand("Camera Snapshot", "SetProcessed", (Bool)processed)

Parameters

# Name Type What to pass
1 processed True or false true or false, without quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "SetProcessed", true);

SetSource

Change the configured video source that snapshots are taken from. An empty name uses the first running source. Returns true.

Syntax

ControlCommand("Camera Snapshot", "SetSource", (String)sourceName)

Parameters

# Name Type What to pass
1 sourceName Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "SetSource", "sourceName");

Snapshot

Save the next frame of the configured video source to the save folder, named with the date and time. Waits for the file to be written and returns its full path.

Syntax

ControlCommand("Camera Snapshot", "Snapshot")

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "Snapshot");

SnapshotBurst

Save several snapshots in a row from the configured video source, each from a new frame, waiting delayMS milliseconds between them (0 for as fast as the camera delivers frames). Returns the full paths.

Syntax

ControlCommand("Camera Snapshot", "SnapshotBurst", (Number)count, (Number)delayMS)

Parameters

# Name Type What to pass
1 count Number A number, without quotes
2 delayMS Number A number, without quotes

Returns: Array of String

Example

var result = ControlCommand("Camera Snapshot", "SnapshotBurst", 0, 0);

SnapshotFromSource

Save the next frame of the named video source instead of the configured one, named with the date and time. The configured source is not changed. Returns the full path.

Syntax

ControlCommand("Camera Snapshot", "SnapshotFromSource", (String)sourceName)

Parameters

# Name Type What to pass
1 sourceName Text Your text, in quotes

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "SnapshotFromSource", "sourceName");

SnapshotFromSourceToFile

Save the next frame of the named video source to the given file (.jpg, .jpeg or .png). Returns the full path.

Syntax

ControlCommand("Camera Snapshot", "SnapshotFromSourceToFile", (String)sourceName, (String)filename)

Parameters

# Name Type What to pass
1 sourceName Text Your text, in quotes
2 filename Text Your text, in quotes

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "SnapshotFromSourceToFile", "sourceName", "filename");

SnapshotToFile

Save the next frame of the configured video source to the given file (.jpg, .jpeg or .png). A name without a folder is saved in the save folder, and one without an extension gets the configured format. An existing file is overwritten. Returns the full path.

Syntax

ControlCommand("Camera Snapshot", "SnapshotToFile", (String)filename)

Parameters

# Name Type What to pass
1 filename Text Your text, in quotes

Returns: String

Example

var result = ControlCommand("Camera Snapshot", "SnapshotToFile", "filename");

StartInterval

Start interval (time lapse) capture: a snapshot now and then one every configured number of seconds, until stopped or the configured count is reached.

Syntax

ControlCommand("Camera Snapshot", "StartInterval")

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "StartInterval");

StopInterval

Stop interval capture.

Syntax

ControlCommand("Camera Snapshot", "StopInterval")

Returns: Boolean [true or false]

Example

var result = ControlCommand("Camera Snapshot", "StopInterval");

This list is read out of the robot skill itself each time its package is uploaded, so it matches the published version (v3).


ARC Pro

Upgrade to ARC Pro

Harnessing the power of ARC Pro, your robot can be more than just a simple automated machine.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

This robot skill has been updated to v1.

What has changed

This is the first upload of this robot skill.

I am a customer support AI and still learning. Please verify important answers in our support documentation. For advanced AI features, use the AI Script Agent built into ARC.