Browse command reference

Reference

Commands, options and automation

Find a command, its inputs and its limits. For step-by-step tasks, open the user guide.

How to use commands

Run commands from a terminal or an external agent.

Start with capturefab COMMAND --help. Use capturefab COMMAND SUBCOMMAND --help for a nested command.

Running capturefab without a command opens the desktop app. Other commands do not open it.

Camera commands use the only running session automatically. With multiple sessions, select one with --session NAME.

Where supported, a camera command can use a temporary worker when no session runs. Use --direct --camera ID to choose this explicitly.

Local output paths belong to the calling terminal. Named destination paths belong to that destination.

Use one number and unit for durations, such as 30s, 5m or 1.5h. File sizes accept values such as 512MiB and 2GiB.

capturefab gui --name bench
# Run subsequent commands in another terminal:
capturefab --session bench connect sim:0
capturefab --session bench --camera sim:0 capture -o shot.png
capturefab --session bench status --json

JSON and errors

--json returns one {version, ok, result} object, or {version, ok, error} on failure.

Progress and diagnostics go to stderr. Read error.code before deciding whether to retry.

Exit codeMeaning
0Success, including a closed stdout pipe
1Operation or input/output failure
2Invalid arguments or input
3Camera or session unavailable
4Timeout
5Unsupported feature or format
6Storage quota or disk full

For assistant run, exit 0 can also mean needs_user. Read the result before treating the task as finished.

A request timeout can occur after the session accepts a command. Read status before sending the same write again.

Installed builds can have different optional features. Use doctor --json, schema --json and installed help to confirm availability.

Global options

These options apply before or after the command.

Argument or optionPurposeDefault or choices
--jsonWrite one versioned JSON result to stdout. Diagnostics use stderr.—
--camera / -cCamera ID, serial number, IP address or source locator. See Source locators in the user guide.—
--sessionSelect a GUI or headless session. Default: CAPTUREFAB_SESSION, then the only running session.—
--actorName shown beside your actions in the shared activity history.—
--actor-kindCaller type: human or agent. This label does not authenticate the caller.Default: human. Choices: human, agent
--directUse a temporary camera worker. Conflicts with --session and overrides CAPTUREFAB_SESSION.—
--request-timeoutSession request deadline, such as 30s or 5m. Default adapts to the capture count.—
--timeout-msPer-frame or transport timeout: 1–60,000 ms. Use 60,000 for physical scanners.Default: 2000
--simulateInclude the built-in pattern camera in discovery.—
--hwaccelDecoder acceleration for new workers. Existing sessions keep their setting. Default: auto.Default: auto
--efficiencyUse auto, smooth or efficient. See the performance guide for precedence and effects.Choices: auto, smooth, efficient

Boolean flags are off unless supplied. They take no value.

--help or -h shows command help. --version or -V shows the executable version.

Environment defaults: CAPTUREFAB_CAMERA, CAPTUREFAB_SESSION, CAPTUREFAB_ACTOR, CAPTUREFAB_ACTOR_KIND and CAPTUREFAB_HWACCEL.

CAPTUREFAB_EFFICIENCY supplies efficiency mode. For desktop launches, the saved Performance setting follows the environment default.

CAPTUREFAB_DATASET supplies --dataset for GUI, serve, capture and recording commands.

Find cameras and sources

Find available sources and examine their capabilities.

Task guide: Find cameras and sources.

capturefab discover

Find cameras, document scanners and cameras on saved hubs. Aliases: list and cameras.

Aliases: list, cameras.

capturefab network-scan

Examine GigE network paths. In a session, tune connected cameras that are not busy.

capturefab scanners

List document scanners using the platform scanner driver.

capturefab native

List host-driver cameras (AVFoundation, V4L2, DirectShow).

capturefab onvif

Discover/resolve ONVIF camera profiles and RTSP stream URIs.

capturefab onvif discover

Find ONVIF cameras on the network.

capturefab onvif resolve

Resolve an ONVIF media profile to its stream URL.

Argument or optionPurposeDefault or choices
ENDPOINTONVIF endpoint URL.Required
--usernameCamera user name.—
--passwordCamera password. Prefer the CAPTUREFAB_CAMERA_PASSWORD environment variable.—
--profileMedia profile token to resolve. Omit it to resolve every profile with a usable stream URI, in the camera's order.—

capturefab compatibility

Show available connection routes for a camera model, including HDMI capture devices.

Argument or optionPurposeDefault or choices
MODELOptional camera model name to find.—

Read and change camera settings

Control the addressed camera and its live acquisition.

Feature names and ranges come from the camera. Some features are locked during live acquisition.

CLI set writes sequentially. Use RPC set_many for an atomic group with one undo checkpoint.

Task guide: Read and change camera settings.

capturefab info

Show camera identity and readable features.

capturefab features

List camera features, access, values, units and limits.

Argument or optionPurposeDefault or choices
--filterPart of a feature name to match.—

capturefab get

Read the named camera features.

Argument or optionPurposeDefault or choices
FEATURESOne or more exact feature names.Required. Accepts multiple values

capturefab set

Write FEATURE=VALUE assignments in order. A failure can leave earlier assignments applied.

Argument or optionPurposeDefault or choices
ASSIGNMENTSOne or more FEATURE=VALUE assignments.Required. Accepts multiple values

capturefab execute

Execute a camera command, such as TriggerSoftware. Camera commands cannot be undone.

Argument or optionPurposeDefault or choices
FEATUREExact camera feature name.Required

capturefab start

Start live acquisition in a persistent session.

capturefab stop

Stop live acquisition in a persistent session.

capturefab auto

Enable automatic exposure, gain and frame-rate control for the addressed camera.

Argument or optionPurposeDefault or choices
--balanceAuto mode balance: 0 favors image quality. 1 favors frame rate. Named values: quality, balanced, frame-rate.—

capturefab manual

Stop automatic control. Hold current values, or use --revert to restore pre-auto values.

Argument or optionPurposeDefault or choices
--revertRestore every feature auto mode changed to its value from before auto mode.—

capturefab undo

Undo the latest reversible camera change in an existing session.

capturefab redo

Redo the latest undone camera change in an existing session.

capturefab history

Show the next undo and redo labels for the selected or addressed camera.

capturefab xml

Print the GenICam XML from a connected camera.

Argument or optionPurposeDefault or choices
--output / -oNew file for the XML. An existing file is refused.Default: stdout

capturefab memory

Read or write camera registers for protocol debugging. These writes bypass ordinary feature validation.

capturefab memory read

Read the specified camera register range.

Argument or optionPurposeDefault or choices
ADDRESSRegister address in decimal or hexadecimal, such as 0x100.Required
LENGTHNumber of bytes to read, from 1 to 65,536.Default: 4

capturefab memory write

Write hexadecimal bytes to the specified camera register. This cannot be undone.

Argument or optionPurposeDefault or choices
ADDRESSRegister address in decimal or hexadecimal, such as 0x100.Required
DATAHex bytes, such as 00000001.Required

Capture images and manage schedules

Save images now or at scheduled times.

Use PNG, JPEG, raw, PGM or PPM. A known filename extension selects the format; folders and stdout default to PNG.

-o - writes one image to stdout. Omit --json for binary output; this capture uses a temporary worker.

Schedules remain active while their GUI, headless session or direct process runs. They are not restored after exit.

Task guide: Capture images and manage schedules.

capturefab capture

Save one or more images. Existing files are never overwritten.

Argument or optionPurposeDefault or choices
--output / -oFile, folder or filename template. With a destination, use a relative name inside it.Required
--count / -nNumber of images, from 1 to 100,000.Default: 1
--format / -fImage format. Inferred from a single file/template extension, otherwise PNG.Choices: png, jpeg, raw, pgm, ppm
--setSet FEATURE=VALUE before acquisition. May be repeated.Accepts multiple values
--atStart at an RFC 3339 timestamp with a time zone. Conflicts with --delay.—
--delayWait for this duration before the first capture. Conflicts with --at.—
--intervalTime between capture slots, such as 10s. Use --count to set the number of captures.—
--destinationSaved destination (see `destination list`). --output is then a name inside it.—
--on-existsUse fail or number when a file exists. The {seq} placeholder always selects a free number.Default: fail. Choices: fail, number
--contextAdd a KEY=VALUE tag. This option accepts multiple uses. Each key must be unique.Accepts multiple values
--max-spaceMaximum owned bytes across outputs. Default: saved policy, initially 10GiB.—
--max-filesMaximum owned files, from 1 to 100,000. Default: saved policy, initially 10,000.—
--delete-oldestDelete the oldest eligible owned files when the storage limit is reached.—
--on-fullAction at the storage limit: stop or delete-oldest.Choices: stop, delete-oldest
--max-ageExpire owned files after this duration. A delete-oldest policy is necessary.—
--no-max-ageRemove the saved file age limit.—
--autoEnable auto mode first so Capturefab tunes exposure, gain and frame rate.—
--balanceAuto mode balance: 0 favors image quality. 1 favors frame rate. Named values: quality, balanced, frame-rate.—
--datasetCatalog output in this .duckdb file. Create the file if it is missing.—

capturefab jobs

List capture schedules in a persistent session.

capturefab cancel

Cancel a scheduled capture job on the selected camera.

Argument or optionPurposeDefault or choices
IDID returned by the corresponding list command.Required

Record and forward video

Record a bounded file or send video to another service.

A file recording defaults to a 512 MiB limit. Set enough space for the requested duration.

With --duration, the CLI waits and the camera worker stops the encoder at the deadline. Ctrl-C stops it early.

Without a duration, session recording returns immediately. Direct recording runs until Ctrl-C. Use status before retrying a timed-out request.

Task guide: Record and forward video.

capturefab forward

Record to a file or send video to a stream URL. The record alias has identical behavior.

Aliases: record.

Argument or optionPurposeDefault or choices
--output / -oFile, filename template or stream URL. With a destination, use a relative name inside it.Required
--codecOutput video codec, such as h264.Default: h264
--encoderFFmpeg encoder name, such as libx264. Default auto tests available encoders.Default: auto
--fpsOutput frames per second.Default: 30
--bitrateVideo bitrate, such as 4M or 800k.Default: 4M
--durationStop after this duration, such as 30s or 5m. The camera worker enforces the deadline.—
--max-file-sizeBounded maximum size of a local recording file.Default: 512MiB
--destinationSaved destination (see `destination list`). --output is then a name inside it.—
--on-existsUse fail or number when a file exists. The {seq} placeholder always selects a free number.Default: fail. Choices: fail, number
--contextAdd a KEY=VALUE tag. This option accepts multiple uses. Each key must be unique.Accepts multiple values
--max-spaceMaximum owned bytes across outputs. Default: saved policy, initially 10GiB.—
--max-filesMaximum owned files, from 1 to 100,000. Default: saved policy, initially 10,000.—
--delete-oldestDelete the oldest eligible owned files when the storage limit is reached.—
--on-fullAction at the storage limit: stop or delete-oldest.Choices: stop, delete-oldest
--max-ageExpire owned files after this duration. A delete-oldest policy is necessary.—
--no-max-ageRemove the saved file age limit.—
--autoEnable auto mode first so Capturefab tunes exposure, gain and frame rate.—
--balanceAuto mode balance: 0 favors image quality. 1 favors frame rate. Named values: quality, balanced, frame-rate.—
--datasetCatalog output in this .duckdb file. Create the file if it is missing.—

capturefab stop-forward

Stop the current recording or forwarded stream on the addressed camera.

capturefab ffmpeg

Inspect bundled FFmpeg, codecs and supported protocols.

Sessions and shared activity

Open a workspace and control it from other processes.

gui and serve run in the foreground. Keep their process open while other CLI calls use the session.

Each camera has its own worker. Set --camera explicitly when multiple people or agents share a session.

Browser access has no separate login. Everyone who can reach the HTTP listener can control its session.

Task guide: Sessions and shared activity.

capturefab gui

Open the desktop app and its local automation session.

Argument or optionPurposeDefault or choices
--nameName for this item.Default: gui
--screenshotSave a real rendered workbench screenshot, then exit (release tooling).—
--screenshot-camerasNumber of simulator cameras in a tooling screenshot, from 0 to 16.Default: 1
--datasetCatalog output in this .duckdb file. Create the file if it is missing.—

capturefab serve

Run a headless session in the foreground. Add --listen to enable the browser client and HTTP API.

Argument or optionPurposeDefault or choices
--nameName for this item.Default: bench
--streamStart live acquisition on startup.—
--listenServe the WASM remote workbench on this address (e.g. 100.64.0.1:8787).—
--web-dirFolder containing the built browser client. Use with --listen.—
--allow-hubsAllow remote clients to open saved hubs with this computer’s hub credentials. Use with --listen.—
--allow-saved-sign-insAllow remote clients to open cameras with sign-ins saved on this computer. The remote API never accepts camera passwords. Use with --listen.—
--autoEnable auto mode first so Capturefab tunes exposure, gain and frame rate.—
--balanceAuto mode balance: 0 favors image quality. 1 favors frame rate. Named values: quality, balanced, frame-rate.—
--datasetCatalog output in this .duckdb file. Create the file if it is missing.—

capturefab sessions

List local GUI and headless sessions.

capturefab connect

Connect the named camera in a running session.

Argument or optionPurposeDefault or choices
CAMERACamera ID, serial number, IP address or source locator. See Source locators in the user guide.Default: --camera or CAPTUREFAB_CAMERA

capturefab select

Set the session default camera for CLI calls that omit --camera.

Argument or optionPurposeDefault or choices
CAMERAConnected camera to make the default.Default: --camera or CAPTUREFAB_CAMERA

capturefab disconnect

Disconnect the addressed camera in a running session.

capturefab status

Show the state of an existing persistent session.

capturefab activity

Read shared session activity. Optionally wait for its revision to change.

Argument or optionPurposeDefault or choices
--afterRevision from a previous activity result. Omit for immediate history.—
--waitWait up to this duration for changes (maximum 25s. Default: no wait).—

capturefab rpc

Send a SessionCommand JSON object from stdin to an existing session.

Datasets and exports

Catalog captured files, add notes and export analysis data.

One session holds one open dataset. Close it before switching files or changing its size policy.

--file reads a dataset outside the session. Use it only when another process does not hold that file.

Task guide: Datasets and exports.

capturefab dataset

Catalog captures and recordings in a DuckDB dataset and export analysis bundles.

capturefab dataset open

Open or create the session's dataset; existing files are never overwritten.

Argument or optionPurposeDefault or choices
PATHFile or folder path.Required
--newCreate a new file. Fail if it exists.—
--existingOpen an existing dataset. Fail if it is missing.—
--max-bytesLargest size the dataset file may grow to, e.g. 8GiB.—

capturefab dataset close

Checkpoint and close the session's dataset.

capturefab dataset status

Show the session's dataset, or summarize --file.

Argument or optionPurposeDefault or choices
--fileInput file path.—

capturefab dataset note

Add a timestamped note (shift handover, defect, setup change).

Argument or optionPurposeDefault or choices
TEXTNote text.Required
--contextAdd a KEY=VALUE tag. This option accepts multiple uses. Each key must be unique.Accepts multiple values

capturefab dataset query

Run one read-only SELECT; --file reads a dataset no session holds.

Argument or optionPurposeDefault or choices
--fileInput file path.—
SQLOne read-only SELECT statement.Required
--limitMaximum returned rows, from 1 to 10,000.Default: 1000

capturefab dataset export

Write data files, manifest.json and README.md into a new folder.

Argument or optionPurposeDefault or choices
--fileInput file path.—
--output / -oNew folder for the export bundle. Existing folders are refused.Required
--formatExport format. Multiple values use commas. Builds without Parquet support default to csv.Default: parquet,csv. Choices: csv, parquet, json, jsonl. Accepts multiple values
--tablesTable names to export. Multiple names use commas.Accepts multiple values
--mediaCopy saved files into the export: images copies captures into images/, all also copies recordings into videos/. media.csv lists each copy.Choices: none, images, all. Default: none
--group-byWith --media, one folder per value of this capture tag, such as images/A-100/; untagged files go in _unlabeled.—
--sinceOnly rows at or after this time (RFC 3339 with timezone).—
--untilOnly rows at or before this time (RFC 3339 with timezone).—
--max-spaceMaximum owned bytes across outputs. Default: saved policy, initially 10GiB.—
--max-filesMaximum owned files, from 1 to 100,000. Default: saved policy, initially 10,000.—
--delete-oldestDelete the oldest eligible owned files when the storage limit is reached.—
--on-fullAction at the storage limit: stop or delete-oldest.Choices: stop, delete-oldest
--max-ageExpire owned files after this duration. A delete-oldest policy is necessary.—
--no-max-ageRemove the saved file age limit.—

Saved destinations

Save folder destinations for captures and recordings.

Choose a folder on your disk, a removable drive or a mounted network drive. Removing a destination leaves its files in place.

Task guide: Saved destinations.

capturefab destination

Manage saved folders on your disk, removable drives or mounted network drives.

Aliases: destinations.

capturefab destination list

List saved destinations.

capturefab destination add-folder

Save a folder destination, such as a directory on an external drive or network share.

Argument or optionPurposeDefault or choices
NAMEName for this item.Required
PATHFile or folder path.Required

capturefab destination remove

Remove a saved destination.

Argument or optionPurposeDefault or choices
NAMEName for this item.Required

capturefab destination test

Test whether a destination is reachable and writable.

Argument or optionPurposeDefault or choices
NAMEName for this item.Required

capturefab volumes

List mounted external, removable and network volumes. On macOS and Linux, read-only volumes, such as mounted disk images, are omitted; Windows lists every drive.

Saved setups

Save a tuned camera's settings by name and restore them later, with a preview of what changes.

A setup is kept on this computer in setups/ in the state directory. Restoring one is a single camera change that undo reverts, and a failed restore puts every value back. Setups never read or write the camera's own user sets.

Task guide: Saved setups.

capturefab setup

Save, list, preview, restore, delete and import saved setups. save, diff and apply need --camera or --session.

Aliases: setups.

capturefab setup save

Save the camera's current writable settings under a name. Values a firmware auto drives, network and user-set settings are left out and listed under skipped.

Argument or optionPurposeDefault or choices
NAMESetup name: 1–64 letters, digits, ., - and _.Required
--noteA short note, such as the lighting it was tuned for: one line, at most 512 characters.None
--replaceOverwrite a saved setup with the same name.Off

capturefab setup list

List saved setups with their camera, date and value count, and the folder that holds them (dir). A file that cannot be read, such as a damaged one, one from a newer Capturefab or a copy named differently from its file, is listed under its file name with status (unreadable or newer_version) and reason. A newer_version file needs a newer Capturefab: using it exits 5 (unsupported). Using an unreadable one exits 3, and setup delete removes it.

capturefab setup show

Show a saved setup's values. With --json it prints the setup document; redirect it to a file to back up or share the setup.

Argument or optionPurposeDefault or choices
NAMESaved setup name.Required

capturefab setup diff

Compare a setup with the camera and print what restoring it would change, what it cannot apply and whether the stream restarts. Changes nothing.

Argument or optionPurposeDefault or choices
NAMESaved setup name.Required unless --file
--fileCompare a setup document from a file instead.None
--allow-other-modelLeave out the note that setup apply needs --allow-other-model; a diff always compares the settings both cameras share.Off

capturefab setup apply

Restore a setup as one camera change. It previews first; changes to settings outside the known image settings, such as triggering and I/O lines, need --yes. A setup changed after its preview is refused.

Argument or optionPurposeDefault or choices
NAMESaved setup name.Required unless --file
--fileRestore a setup document from a file instead.None
--dry-runPrint what would change and change nothing. With --strict, fails as the strict restore would.Off
--strictFail, changing nothing, if any saved value cannot be applied to this camera.Off
--allow-other-modelApply to a camera of another model; only settings both share change.Off
--yesConfirm changes to settings outside the known image settings, such as trigger, I/O line and acquisition rate settings.Off

capturefab setup delete

Delete a saved setup, including one setup list shows as unreadable. The camera is not changed.

Argument or optionPurposeDefault or choices
NAMESaved setup name.Required

capturefab setup import

Save a setup document from a file, such as one written by setup show NAME --json.

Argument or optionPurposeDefault or choices
FILESetup document, at most 256 KiB.Required
--nameSave it under this name instead of the one in the file.Name in the file
--replaceOverwrite a saved setup with the same name.Off

Storage and retention

Set file retention limits and inspect storage usage.

The default policy allows 10 GiB and 10,000 owned files, then stops new output. Reservations count toward these limits.

Delete-oldest affects eligible Capturefab-owned files. Existing unrelated files and modified files are not deleted.

Storage task workspaces contain a database and its write-ahead log. Copy both together before removing an orphan workspace.

Task guide: Storage and retention.

capturefab storage

Show owned file usage and reserved recording space.

capturefab storage status

Show global policy, owned files and reservations.

capturefab storage task-data

Review or remove retained task workspaces, including after a restart.

capturefab storage task-data list

List durable workspaces and whether their owner has released them.

capturefab storage task-data copy

Save the database and WAL together into a new ordinary folder.

Argument or optionPurposeDefault or choices
IDID returned by the corresponding list command.Required
OUTPUTNew folder for the database and write-ahead log. Existing folders are refused.Required

capturefab storage task-data remove

Permanently remove one orphan workspace and release its reservation.

Argument or optionPurposeDefault or choices
IDReservation ID from storage task-data list. Never a path.Required
--confirmed-by-userUse only after the user approves removing this workspace.—

capturefab storage configure

Persist the global storage ceiling for all cameras and future sessions.

Argument or optionPurposeDefault or choices
--max-spaceMaximum owned bytes across outputs. Default: saved policy, initially 10GiB.—
--max-filesMaximum owned files, from 1 to 100,000. Default: saved policy, initially 10,000.—
--delete-oldestDelete the oldest eligible owned files when the storage limit is reached.—
--on-fullAction at the storage limit: stop or delete-oldest.Choices: stop, delete-oldest
--max-ageExpire owned files after this duration. A delete-oldest policy is necessary.—
--no-max-ageRemove the saved file age limit.—

Resource limits

Set local CPU and camera-buffer limits.

These limits apply across local Capturefab processes. They are separate from the disk storage policy.

Thread changes affect future image work and new codecs. Ongoing recordings keep running.

Task guide: Resource limits.

capturefab resources

Show resource use or change CPU and camera-buffer limits.

capturefab resources status

Show the current limits, use and remaining capacity.

capturefab resources configure

Change the named limits. Omitted limits keep their values.

Argument or optionPurposeDefault or choices
--cpu-threadsMaximum image and codec threads per camera worker. Use auto or 1–64.—
--camera-buffersShared camera-buffer limit: auto, or 64MiB–64GiB.—

capturefab resources reset

Restore automatic CPU and camera-buffer limits.

Camera hubs

Save hub connections and discover their cameras.

Save Home Assistant, Frigate, go2rtc or UniFi Protect access here. Credentials belong to the process that opens the camera.

With remote browser control, hub cameras also need serve --allow-hubs. Removing a hub does not remove its secret unless requested.

Task guide: Camera hubs.

capturefab hub

Save Home Assistant, Frigate, go2rtc and UniFi Protect servers and open their cameras as hub:NAME/CAMERA.

Aliases: hubs.

capturefab hub list

List saved hubs.

capturefab hub cameras

List cameras on one saved hub, or on all of them; each ID is a --camera selector.

Argument or optionPurposeDefault or choices
NAMEA saved hub. Every saved hub when omitted.—

capturefab hub test

Examine that a saved hub answers and accepts its secret.

Argument or optionPurposeDefault or choices
NAMEA saved hub.Required

capturefab hub add-home-assistant

Save a Home Assistant hub. Camera IDs use hub:NAME/camera.ENTITY.

Aliases: hub add-ha.

Argument or optionPurposeDefault or choices
NAMEA name for the hub: letters, digits, '.', '-' and '_'.Required
--urlThe server's address, such as http://homeassistant.local:8123.Required
--secret-stdinRead one secret from stdin into the OS credential store. Use the token, password or API key for that service.—
--secret-envName of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.—
--certificateExpected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.—
--accept-certificateTrust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.—
--tls-server-nameExamine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).—
--no-checkSave without checking that the server answers and accepts the secret.—

capturefab hub add-frigate

Save a Frigate NVR. Use port 5000 without authentication, or port 8971 with a user.

Argument or optionPurposeDefault or choices
NAMEA name for the hub: letters, digits, '.', '-' and '_'.Required
--userThe Frigate user to sign in as (port 8971).—
--rtsp-portThe port of Frigate's RTSP restream.Default: 8554
--urlThe server's address, such as http://homeassistant.local:8123.Required
--secret-stdinRead one secret from stdin into the OS credential store. Use the token, password or API key for that service.—
--secret-envName of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.—
--certificateExpected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.—
--accept-certificateTrust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.—
--tls-server-nameExamine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).—
--no-checkSave without checking that the server answers and accepts the secret.—

capturefab hub add-go2rtc

Save a go2rtc hub. Camera IDs use hub:NAME/STREAM.

Argument or optionPurposeDefault or choices
NAMEA name for the hub: letters, digits, '.', '-' and '_'.Required
--userThe go2rtc API user name, when it has one.—
--urlThe server's address, such as http://homeassistant.local:8123.Required
--secret-stdinRead one secret from stdin into the OS credential store. Use the token, password or API key for that service.—
--secret-envName of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.—
--certificateExpected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.—
--accept-certificateTrust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.—
--tls-server-nameExamine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).—
--no-checkSave without checking that the server answers and accepts the secret.—

capturefab hub add-unifi-protect

Save a UniFi Protect snapshot source. Create its API key in the console’s integration settings.

Aliases: hub add-unifi.

Argument or optionPurposeDefault or choices
NAMEA name for the hub: letters, digits, '.', '-' and '_'.Required
--urlThe server's address, such as http://homeassistant.local:8123.Required
--secret-stdinRead one secret from stdin into the OS credential store. Use the token, password or API key for that service.—
--secret-envName of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.—
--certificateExpected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.—
--accept-certificateTrust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.—
--tls-server-nameExamine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).—
--no-checkSave without checking that the server answers and accepts the secret.—

capturefab hub remove

Remove a saved hub; --forget-secret also deletes its saved secret.

Argument or optionPurposeDefault or choices
NAMEA saved hub.Required
--forget-secretAlso remove the saved secret from the OS credential store.—

Camera sign-ins

Save user names and passwords for password-protected RTSP and ONVIF cameras.

Sign-ins are saved in the OS credential store under service capturefab-camera; camera-logins.json in the state directory lists addresses and user names only. The camera worker uses a saved sign-in for any credential-free camera with that address. A camera that asks for a sign-in fails with auth_required and one that refuses it with auth_rejected, both exit 1. Builds without the credential store refuse add and remove with exit 5.

Task guide: Camera and media source locators.

capturefab login

Save user names and passwords for rtsp://, rtsps:// and ONVIF cameras in the OS credential store.

Aliases: logins.

capturefab login add

Check a camera sign-in, then save it in the OS credential store.

Argument or optionPurposeDefault or choices
ADDRESSA credential-free rtsp://, rtsps://, onvif:http://… or onvif://HOST address, or with --session the ID or serial of a discovered ONVIF camera.Required
--userCamera user name.Required
--password-stdinRead the password from stdin (an empty line is an empty password); otherwise CAPTUREFAB_CAMERA_PASSWORD.—
--no-checkSave without connecting to the camera first.—

capturefab login list

List saved camera sign-ins (never their passwords).

capturefab login remove

Forget a saved camera sign-in and delete its password.

Argument or optionPurposeDefault or choices
ADDRESSThe saved camera address.Required

Virtual camera servers

Serve test images through GigE Vision, RTSP or ONVIF.

Presets: gige (640 × 480, 30 fps), rtsp (1920 × 1080, 30 fps), onvif (1280 × 720, 15 fps), vision (640 × 480, 60 fps).

H.264 dimensions must be even. A media folder is read one level deep, in filename order, without following symlinks.

Task guide: Virtual camera servers.

capturefab simulate

Host virtual GigE Vision, RTSP or ONVIF cameras using looping test data.

capturefab simulate presets

Show camera presets and their integration use cases.

capturefab simulate run

Host a virtual camera until Ctrl-C (or --duration).

Argument or optionPurposeDefault or choices
--presetVirtual camera preset.Default: onvif. Choices: gige, rtsp, onvif, vision
--sourceImage, video file or one-level media folder. Sources loop in filename order.—
--bindLocal IPv4 address. Use a LAN address for remote clients.Default: 127.0.0.1
--advertiseReachable camera IPv4 address. Necessary when --bind is 0.0.0.0.—
--gige-portGigE Vision UDP port.Default: 3956
--rtsp-portRTSP TCP port.Default: 8554
--onvif-portONVIF HTTP port.Default: 8080
--nameName shown in camera discovery, from 1 to 128 bytes.Default: Capturefab virtual camera
--widthOutput width in pixels, from 64 to 1,920.—
--heightOutput height in pixels, from 64 to 1,080.—
--fpsDelivered frame rate, from 1 to 120. Source video timing is resampled.—
--bitrateH.264 bitrate, e.g. 2M or 800k.—
--durationStop the virtual camera after this duration, such as 30s or 5m.—

Tools for external agents

Read tool schemas and execute checked tool calls.

Use a file for the plan or arguments when --secret-stdin reads a secret. Both inputs cannot share stdin.

Use the catalog below for every tool. Read its schema with tools describe NAME --json before constructing arguments.

Every argument key is necessary. Use JSON null where the schema permits a default.

Set the camera inside args.camera; omit global --camera and CAPTUREFAB_CAMERA for tool calls.

The CLI writes inspection images to private temporary files by default. Use --image-out for a budgeted saved file.

Action dry runs return normalized commands without executing them. Plans hold 1–64 calls and at most 256 KiB.

Calls run in order. A failure stops the plan; earlier effects remain. Human approval must cover the exact disruptive action.

Task guide: Tools for external agents.

capturefab tools

List, examine and run shared image and data tools for people and external agents.

capturefab tools list

List shared image and data tools, risks and portable argument schemas.

Argument or optionPurposeDefault or choices
--compactReturn just names, titles, risks and capability flags. Use describe for each schema.—

capturefab tools describe

Read one tool's description and argument schema without a session.

Argument or optionPurposeDefault or choices
NAMETool name from tools list.Required

capturefab tools call

Read session facts or examine and run one image or data tool.

Argument or optionPurposeDefault or choices
NAMETool name from tools list.Required
--argsJSON object containing every argument. Use null for defaults.—
--args-fileRead the JSON argument object from this file, or - for stdin.—
--dry-runValidate and show the normalized call and commands without executing.—
--secret-stdinRead one stream password from stdin. A stream password is not saved.—
--confirmed-by-userUse only after the user approves the exact action or all actions in the plan.—
--image-outSave an inspect_frame image at this new path. The storage budget applies. Existing files are refused.—
--inline-imageInclude inspect_frame image bytes as base64 in the JSON result.—

capturefab tools apply

Examine and run a version 1 image and data tool plan in order.

Argument or optionPurposeDefault or choices
FILEVersion 1 tool plan file. Use - for stdin.Required
--dry-runValidate and show normalized calls and commands without executing.—
--secret-stdinRead one stream password from stdin. A stream password is not saved.—
--confirmed-by-userUse only after the user approves the exact action or all actions in the plan.—

Built-in assistant

Set provider access, plan tasks and run tasks within limits.

The optional ai build feature provides these commands. Provider setup is separate from an external agent’s own model access.

ask returns a plan. run performs a task and enforces its camera scope and limits.

Images and dataset rows have separate permissions. Supervised mode asks before each change; autonomous mode allows routine changes within limits.

Ctrl-C stops new work. Already accepted camera commands can finish; read the task report for remaining work.

Task guide: Built-in assistant.

capturefab assistant

Configure an AI provider, plan captures or run a bounded camera task.

Apple Intelligence

Select apple_foundation_models to use the fixed on-device system model. No API key, endpoint or reasoning-effort setting applies.

The provider needs macOS 26 or later, an eligible Mac, Apple Intelligence enabled and its model ready. The build must include the native helper.

Use assistant test apple_foundation_models to test it. Camera-image input and test --vision are unsupported.

Requests stay local with no remote fallback. Existing tool approvals, task scopes and limits still apply.

See local model setup and troubleshooting.

capturefab assistant providers

List providers, credential readiness and image support without making a request.

Argument or optionPurposeDefault or choices
--check-keychainRead saved keys from the OS credential store. The OS can display a permission prompt.—

capturefab assistant use

Select a provider and save its non-secret settings.

Argument or optionPurposeDefault or choices
PROVIDERProvider ID from assistant providers.Required
--modelModel ID. Uses the provider default when no model is saved.—
--base-urlHTTPS API origin, or a local HTTP origin for Ollama or Custom.—
--account-idCloudflare account ID.—
--gateway-idCloudflare AI Gateway ID.—
--regionAWS region for Bedrock.—
--profileAWS shared-config profile for Bedrock.—
--projectGoogle Cloud project ID for Vertex AI.—
--locationGoogle Cloud location for Vertex AI.—
--endpointAzure AI Foundry endpoint.—
--effortReasoning effort sent only when this provider has a documented control.Choices: low, medium, high
--visionUse auto, on or off for provider image support.Choices: auto, on, off

capturefab assistant key

Save or remove a provider key in the OS credential store.

capturefab assistant key set

Read one key from stdin and save it in the OS credential store.

Argument or optionPurposeDefault or choices
PROVIDERProvider ID from assistant providers.Required
--key-stdinRead the key from stdin, preserving all bytes except one final newline.Required

capturefab assistant key remove

Remove the saved key; environment credentials are unchanged.

Argument or optionPurposeDefault or choices
PROVIDERProvider ID from assistant providers.Required

capturefab assistant test

Send a small tool round trip to the selected provider.

Argument or optionPurposeDefault or choices
PROVIDERProvider ID. Defaults to the selected provider.—
--visionAlso send a generated 64 × 64 image to test image support.—

capturefab assistant ask

Read observations and return an editable plan. Changes run only with --apply and the allowed tools.

Argument or optionPurposeDefault or choices
PROMPTRequest text. Omit when using --prompt-file.Accepts multiple values
--prompt-fileRead UTF-8 request text from this file. Use - for stdin. Omit the positional prompt.—
--providerOverride the selected provider for this request.—
--modelOverride this provider's model for this request.—
--applyRun the plan only if every step is allowed and all output stays local.—
--allow-toolsComma-separated tools that --apply may execute. Remote output remains excluded.Accepts multiple values
--plan-outExport the version 1 plan to a new private file. Never overwrite.—
--allow-dataPermit dataset query results to reach the provider.—

capturefab assistant run

Run a camera task inside the specified camera scope, approval policy and limits.

Argument or optionPurposeDefault or choices
PROMPTRequest text. Omit when using --prompt-file.Accepts multiple values
--prompt-fileRead UTF-8 request text from this file. Use - for stdin. Omit the positional prompt.—
--cameraAllowed camera ID. This option accepts comma-separated values or multiple uses, up to eight cameras.Accepts multiple values
--datasetExact open dataset slot ID from tools call get_dataset --json.—
--allow-dataPermit camera metadata, notes and dataset rows to reach the provider.—
--destinationAllowed saved destination name. This option accepts comma-separated values or multiple uses.Accepts multiple values
--see-imagesAllow inspected camera images to be sent to the provider.—
--modeAsk before each change, or run routine changes without asking.Default: supervised. Choices: supervised, autonomous
--approvalsUse ask with a terminal, or deny. Default: ask in a terminal, deny otherwise.Choices: ask, deny
--max-roundsMaximum model rounds, from 1 to 1,000.—
--max-timeMaximum task wall time, from 1m to 24h. Waiting counts.—
--max-costEstimated US-dollar limit, from 0 to 500. Remote providers need saved prices. Apple Intelligence has zero provider cost.—
--max-input-tokensMaximum input tokens, including replayed history, from 1 to 50,000,000.—
--max-output-tokensMaximum output tokens, including reasoning, from 1 to 5,000,000.—
--max-imagesMaximum newly sent observation images, from 0 to 2,000.—
--max-capturesMaximum still captures, from 0 to 100,000. Zero also disables schedules.—
--max-sizeLimit reserved output bytes. Includes images, recordings and twice each export bundle limit.—
--max-recordingsMaximum file recordings, from 0 to 32. Streams require separate exact approval.—
--max-recordingMaximum duration of one recording or stream, from 1s to 7d.—
--approval-timeoutApproval deadline, from 1s to 24h. The task wall limit still applies.—
--max-data-sizeLimit data-export reservations. Each export reserves twice its bundle limit. 0 disables exports.—
--on-human-changePause, inform the model, or stop after a person changes a scoped camera or dataset.Default: pause. Choices: pause, inform, stop
--eventsWrite action-log JSONL to a new private file. Use - for stderr.—

capturefab assistant runs

List local assistant action logs, including unfinished tasks.

capturefab assistant log

Read one local assistant action log.

Argument or optionPurposeDefault or choices
RUN_IDRun ID from assistant runs.Required

Workflows

Validate or run ordered session commands from a JSON file.

Files use version 1 with 1–256 steps and a 1 MiB limit. All steps are validated before execution.

Apply needs a running session. A failure stops later steps; earlier effects remain.

Relative paths resolve beside the workflow file. For stdin, paths resolve from the calling terminal’s folder.

Task guide: Workflows.

capturefab workflow

Validate and apply repeatable multi-camera setup, capture and recording plans.

capturefab workflow validate

Validate every step and show the resolved plan without contacting cameras.

Argument or optionPurposeDefault or choices
FILEVersion 1 workflow file. Use - for stdin.Required

capturefab workflow apply

Apply ordered steps to a persistent session; stop on the first failure.

Argument or optionPurposeDefault or choices
FILEVersion 1 workflow file. Use - for stdin.Required
--dry-runValidate and print the plan without making changes.—

Diagnostics and command help

Read capabilities, the automation schema and shell help.

Task guide: Diagnostics and command help.

capturefab doctor

Report this computer’s camera, storage and acceleration capabilities. Each warning includes a suggested action.

capturefab version

Print this build's version and what the last update check found, without a network request. capturefab version --check reads https://capturefab.com/releases.json once and reports the newest release, its download for this computer and its SHA-256. It never changes the desktop app's automatic setting or skipped version.

Argument or optionPurposeDefault or choices
--checkRead the public release list now. Exits 5 when CAPTUREFAB_UPDATE_CHECK=off or a policy file turns checks off, 3 when offline, 4 on a timeout and 2 for an invalid CAPTUREFAB_UPDATE_URL.Off

capturefab schema

Emit the versioned CLI and session automation contract as JSON.

capturefab completions

Generate completion definitions for bash, zsh, fish, PowerShell or Elvish.

Argument or optionPurposeDefault or choices
SHELLShell to generate completions for.Required. Choices: bash, elvish, fish, powershell, zsh

capturefab help

Print this message or the help of the given subcommand(s).

Tool catalog

Read the purpose and arguments of every shared camera and data tool.

Each row below documents a tool and every top-level argument. The installed schema gives nested fields, permitted values and numeric limits.

Tool argument limits can be stricter than CLI limits. Do not reuse CLI limits without reading the tool schema.

A call can have a higher risk class when it affects other work. Read its dry-run result before execution.

Observe tools read state. Reversible tools change settings. Bounded tools create limited output. Disruptive and HumanOnly actions ask for approval.

inspect_frame accepts fresh 0–10, a preview edge of 0 or 256–1,568, and an optional normalized region.

wait_for accepts timeouts from 1s to 10m. It reports whether the condition was met.

query_dataset accepts 1–1,000 rows and 1–30s. Model results have a 16 KiB limit.

Model queries first use a private snapshot of standard tables. Snapshots over 100,000 rows or 16 MiB fail explicitly.

get_overview

Read session state, cameras, destinations, storage and recording defaults. Works without a session.

Minimum risk class: observe. Session: not always necessary.

Arguments: {}.

list_cameras

List connected and discovered cameras. Set discover to true for a new search in a running session.

Minimum risk class: observe. Session: not always necessary.

ArgumentMeaning
discoverSearch for cameras for about 3 s first (needs a session).
include_simulatedAlso list simulator cameras (sim:N).

list_destinations

Read destination names, folders and availability. Works without a session.

Minimum risk class: observe. Session: not always necessary.

Arguments: {}.

get_storage

Read the file budget, reservations and free space. Works without a session.

Minimum risk class: observe. Session: not always necessary.

Arguments: {}.

list_jobs

Read schedules, recordings and streams. A null camera lists all cameras.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
cameraA camera ID or name; null lists every camera.

get_camera_features

Read imaging controls, limits and access. Set search or names to narrow the result.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
cameraA connected camera's ID or name.
namesExact feature names; null for the imaging controls.
searchPart of a feature name, such as Exposure; null for the imaging controls.

list_camera_setups

List the camera setups the user saved. A camera adds how each setup matches it. No tool saves or deletes a setup. Works without a session.

Minimum risk class: observe. Session: not always necessary.

ArgumentMeaning
cameraA connected camera ID or name to match the setups against; null lists them only.

preview_camera_setup

Compare a saved setup with a connected camera without changing it. Lists at most 40 changes and 20 values the camera cannot take; setup diff shows all.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
allow_other_modelUse a setup saved from another camera model; false refuses one.
cameraA connected camera ID or exact friendly name.
nameA saved setup's name, from list_camera_setups.

inspect_frame

Read a fresh camera image and exposure or focus measurements. A stopped camera acquires one frame and stays stopped. Document scanners are refused.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
cameraA connected camera's ID or name.
freshNew frames to wait for, 0..10; null for 1.
include_imageSend the image when images are allowed; null for true.
max_dimensionThe image's longest edge: 0 for measurements only, else 256..1568; null for 1024.
regionAn object with x, y, width and height fractions from 0 to 1; null selects the whole frame.

wait_for

Wait for time, frames, stable auto exposure, job completion, recording stop or another participant’s action.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
cameraA connected camera's ID or name; required for frames, auto_settled and recording_stopped.
framesNew frames to wait for, 1..1000, with until frames; else null.
job_idThe job to wait for, with until job_done; else null.
timeoutThe longest wait, 1s..10m, such as 30s or 2m.
untilWhat to wait for.

get_dataset

Read dataset identity, standard tables, row counts, size, limits and errors without reading rows.

Minimum risk class: observe. Session: necessary.

Arguments: {}.

query_dataset

Run one read-only SELECT against the reviewed dataset. Model access to data must be allowed separately.

Minimum risk class: observe. Session: necessary.

ArgumentMeaning
limit1..1000 rows, default 100
sqlOne read-only SELECT
timeout1s..30s

open_dataset

Open or create a .duckdb catalog inside the capture folder. Existing databases are never overwritten.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
file_nameRelative .duckdb file inside capture folder
max_bytesPositive dataset-wide size policy in bytes; allocation can overshoot; minimum 16 MiB
modeauto opens or creates; create refuses an existing file; open refuses a missing file.

close_dataset

Close the exact reviewed dataset instance. Approval is necessary because other work can use it.

Minimum risk class: disruptive. Session: necessary.

Arguments: {}.

annotate_dataset

Save a timestamped note of up to 4,096 bytes in the reviewed dataset.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
textTimestamped note, at most 4096 bytes

export_dataset

Export selected data to a new analysis folder. Each attempt reserves twice the maximum bundle size.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
folderNew relative folder inside capture root
formatExport format
max_bytesMaximum complete bundle bytes; reserves twice this amount for staged and published copies
since_msInclusive start time
tablesSelected tables
timeout1s..10m
until_msInclusive end time

connect_camera

Connect a source without starting live view. Size and fps arguments apply only to host webcams.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.
fpsHost webcam frame rate 0.1..240; null for the source default.
sizeHost webcam size WxH, each side 16..8192; null for the source default.

start_live_view

Start acquisition on a connected camera. For a scanner, this arms acquisition and asks for approval; an explicit capture requests a page.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.

stop_live_view

Stop acquisition. First stop recordings and streams, and cancel active capture schedules.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.

set_camera_features

Apply 1–16 feature values atomically. Optional expected values prevent overwriting a changed setting.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.
restart_streamAllow a safe Stop, SetMany, Start for stream-locked features.
values1–16 objects with feature, value and expect. Values are strings; expect can be null. All entries are validated before writing.

set_camera_roi

Set sensor offsets and dimensions within camera limits. Use full to restore the full sensor area.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.
fullUse the full sensor and zero offsets.
heightHeight in sensor pixels; null keeps the current value.
widthWidth in sensor pixels; null keeps the current value.
xLeft sensor offset in pixels; null keeps the current value.
yTop sensor offset in pixels; null keeps the current value.

set_auto_exposure

Select auto, hold or revert. A balance from 0 to 1 favors quality or frame rate.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
balance0–1, from image quality to frame rate. Applies only to auto; null keeps the current or default balance.
cameraA camera ID or exact friendly name.
modeChoose automatic control, hold current values, or restore pre-auto values.

run_camera_command

Run an allowed camera command, such as TriggerSoftware. Commands cannot be undone.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.
commandAn existing allowlisted camera command.

undo_camera_change

Undo the specified camera_change token. A null token uses this caller’s last change.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
cameraA camera ID or exact friendly name.
tokenA camera_change token, or null for this caller's latest token.

apply_camera_setup

Restore a saved setup as one camera change with one undo token. The step pins the setup's digest. Restores that may change values other than image quality are human_only.

Minimum risk class: reversible. Session: necessary.

ArgumentMeaning
allow_other_modelUse a setup saved from another camera model; false refuses one.
cameraA connected camera ID or exact friendly name.
nameA saved setup's name, from list_camera_setups.

capture_photos

Save 1–1,000 images; default 1. Default format is PNG. Scanners consume pages.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
cameraCamera ID or exact friendly name.
count1..1000 photos; default 1.
destinationSaved destination name; null for the capture folder.
file_nameSingle file name or template; no folders.
formatPNG by default.
tagsAt most 16 tags; null for none.

start_recording

Record video with a duration or a 512 MiB default reservation. Keep the session open and the computer awake.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
bitrateVideo bitrate such as 4M; Video settings by default.
cameraCamera ID or exact friendly name.
codecVideo settings by default; h265 normalizes to hevc.
destinationSaved destination; null for local capture folder.
durationDuration with units, at least 1 second.
file_nameRecording template; default MP4.
fps0.1..240; Video settings by default.
tagsAt most 16 tags; null for none.

stop_recording

Finish the current recording or stream. Stopping another participant’s work asks for approval.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
cameraCamera ID or exact friendly name.

schedule_captures

Save images at an interval. Set exactly one end condition: duration, count or until.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
cameraCamera ID or exact friendly name.
count1..100000 photos.
destinationSaved destination name; null for the capture folder.
durationDuration with units, at least 1 second.
everyPositive interval with units, such as 5m.
file_nameSingle file name or template; no folders.
formatPNG by default.
start_atHH:MM locally or RFC3339 with offset; null for now.
tagsAt most 16 tags; null for none.
untilHH:MM locally or RFC3339 with offset.

cancel_job

Cancel the specified schedule. Existing output stays saved. Cancelling another participant’s job asks for approval.

Minimum risk class: bounded. Session: necessary.

ArgumentMeaning
cameraConnected camera.
job_idSchedule ID from list_jobs.

stream_to_url

Send video to RTSP, RTMP or SRT. Approval is always necessary. Supply passwords separately.

Minimum risk class: disruptive. Session: necessary.

ArgumentMeaning
bitrateVideo bitrate such as 4M; Video settings by default.
cameraConnected camera.
codecVideo settings by default; h265 normalizes to hevc.
durationDuration with units, at least 1 second.
fps0.1..240; Video settings by default.
urlRTSP, RTMP or SRT destination without credentials.

create_folder_destination

Create a new named folder destination. Human approval is necessary.

Minimum risk class: human_only. Session: not always necessary.

ArgumentMeaning
nameA new destination name, 1..64 letters, digits, dots, underscores or hyphens.
pathAn absolute capture folder; ~/ expands to the home folder.

RPC operations

Use structured JSON to control a running session.

Send a JSON object to capturefab --session NAME rpc through stdin. Set op to the operation below.

For HTTP, use POST /api/command with {version:1, camera:ID, command:{op:…}}.

Private local IPC uses an authentication token. The HTTP listener uses network access controls and has no separate login.

Use schema --json for runnable request examples, response fields and errors. Private IPC requests have a 1 MiB size limit.

printf '%s\n' '{"op":"frame","fresh":1,"max_dimension":1024}' | capturefab --session bench --camera sim:0 rpc --json

RPC frame format is auto, jpeg or png. Auto selects JPEG when supported, otherwise PNG.

RPC frame accepts fresh 0–10 and timeout_ms 1–10,000. The default timeout is 3,000 ms.

Its longest preview edge is 64–2,048 pixels, default 1,024. Use 0 for measurements only; encoded images have a 1.5 MiB limit.

Use normalized [x,y,width,height] for a region. A stopped camera acquires one frame and remains stopped; scanners are refused.

OperationPurpose and inputs
discoverFind cameras. Inputs: timeout_ms and simulated.
network_scanExamine GigE paths and tune connected cameras. Input: timeout_ms.
optimize_networkApply a byte-per-second budget to the addressed camera. Prefer network_scan for shared interfaces.
connectConnect camera with timeout_ms.
selectSet the CLI default camera.
disconnectDisconnect the addressed camera.
getRead feature.
setWrite one feature and value.
set_manyWrite values atomically. Each entry contains feature and value; 1–32 entries share one undo checkpoint.
executeExecute a camera command named by feature.
startStart acquisition.
stopStop acquisition.
undoUndo the latest reversible camera change.
redoRedo the latest undone camera change.
read_setupRead the writable configuration values a new setup would save. Read-only.
setup_diffCompare a setup, by name or as an inline setup document, with the camera. Optional allow_other_model. Read-only.
apply_setupRestore a setup by name or inline as one camera change. Optional digest, allow_other_model, strict and confirmed_disruptive.
replay_camera_changeReplay the supplied token with undo true or false. Refuse stale or conflicting camera state.
autoEnable automatic control. Optional balance: 0–1.
manualHold current values. Set revert true to restore pre-auto values.
captureSave output with count, timeout_ms and format. Optional storage, destination, on_exists and context match CLI capture.
scheduleSchedule captures with first_at_ms and interval_ms. Other fields match capture.
jobsRead capture jobs.
cancel_jobCancel the job named by id.
statusRead session and camera state.
frameRead measurements and a bounded preview. Inputs: fresh, timeout_ms, max_dimension, format and optional region.
activityRead session activity. Optional after and timeout_ms wait for a newer revision.
featuresRead camera features.
xmlRead the GenICam XML.
read_memoryRead length bytes at address.
write_memoryWrite the byte array data at address. This cannot be undone.
forwardStart video output with codec, encoder, fps and bitrate. Optional duration_ms enforces a stop deadline.
stop_forwardStop the current encoder.
stop_forward_ifStop only when forwarding_id matches the current instance.
dataset_openOpen path with mode auto, create or open. Optional max_bytes sets the dataset growth limit.
dataset_closeClose the dataset.
dataset_statusRead dataset state.
dataset_noteAdd text, optional context and optional camera attribution.
dataset_queryRun read-only sql with limit and timeout_ms.
dataset_exportExport output with formats, tables, optional since_ms and until_ms, and storage policy.
dataset_open_ifOpen only if expected_slot_id still matches. Other fields match dataset_open.
dataset_close_ifClose only the supplied slot_id.
dataset_note_ifAdd a note only to the supplied slot_id.
dataset_query_ifQuery only the supplied slot_id. max_result_bytes bounds the response.
dataset_model_query_ifQuery a private metadata-filtered snapshot of the supplied slot_id. Bounds also apply to results.
dataset_export_ifExport only the supplied slot_id. approved_root pins the output root; max_bytes and timeout_ms bound the operation.