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 option
Purpose
Default or choices
NAME
Name for this item.
Required
PATH
File or folder path.
Required
capturefab destination remove
Remove a saved destination.
Argument or option
Purpose
Default or choices
NAME
Name for this item.
Required
capturefab destination test
Test whether a destination is reachable and writable.
Argument or option
Purpose
Default or choices
NAME
Name 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.
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 option
Purpose
Default or choices
NAME
Setup name: 1–64 letters, digits, ., - and _.
Required
--note
A short note, such as the lighting it was tuned for: one line, at most 512 characters.
None
--replace
Overwrite 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 option
Purpose
Default or choices
NAME
Saved 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 option
Purpose
Default or choices
NAME
Saved setup name.
Required unless --file
--file
Compare a setup document from a file instead.
None
--allow-other-model
Leave 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 option
Purpose
Default or choices
NAME
Saved setup name.
Required unless --file
--file
Restore a setup document from a file instead.
None
--dry-run
Print what would change and change nothing. With --strict, fails as the strict restore would.
Off
--strict
Fail, changing nothing, if any saved value cannot be applied to this camera.
Off
--allow-other-model
Apply to a camera of another model; only settings both share change.
Off
--yes
Confirm 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 option
Purpose
Default or choices
NAME
Saved setup name.
Required
capturefab setup import
Save a setup document from a file, such as one written by setup show NAME --json.
Argument or option
Purpose
Default or choices
FILE
Setup document, at most 256 KiB.
Required
--name
Save it under this name instead of the one in the file.
Name in the file
--replace
Overwrite 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.
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 option
Purpose
Default or choices
NAME
A saved hub. Every saved hub when omitted.
—
capturefab hub test
Examine that a saved hub answers and accepts its secret.
Argument or option
Purpose
Default or choices
NAME
A 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 option
Purpose
Default or choices
NAME
A name for the hub: letters, digits, '.', '-' and '_'.
Required
--url
The server's address, such as http://homeassistant.local:8123.
Required
--secret-stdin
Read one secret from stdin into the OS credential store. Use the token, password or API key for that service.
—
--secret-env
Name of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.
—
--certificate
Expected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.
—
--accept-certificate
Trust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.
—
--tls-server-name
Examine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).
—
--no-check
Save 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 option
Purpose
Default or choices
NAME
A name for the hub: letters, digits, '.', '-' and '_'.
Required
--user
The Frigate user to sign in as (port 8971).
—
--rtsp-port
The port of Frigate's RTSP restream.
Default: 8554
--url
The server's address, such as http://homeassistant.local:8123.
Required
--secret-stdin
Read one secret from stdin into the OS credential store. Use the token, password or API key for that service.
—
--secret-env
Name of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.
—
--certificate
Expected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.
—
--accept-certificate
Trust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.
—
--tls-server-name
Examine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).
—
--no-check
Save 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 option
Purpose
Default or choices
NAME
A name for the hub: letters, digits, '.', '-' and '_'.
Required
--user
The go2rtc API user name, when it has one.
—
--url
The server's address, such as http://homeassistant.local:8123.
Required
--secret-stdin
Read one secret from stdin into the OS credential store. Use the token, password or API key for that service.
—
--secret-env
Name of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.
—
--certificate
Expected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.
—
--accept-certificate
Trust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.
—
--tls-server-name
Examine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).
—
--no-check
Save 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 option
Purpose
Default or choices
NAME
A name for the hub: letters, digits, '.', '-' and '_'.
Required
--url
The server's address, such as http://homeassistant.local:8123.
Required
--secret-stdin
Read one secret from stdin into the OS credential store. Use the token, password or API key for that service.
—
--secret-env
Name of a CAPTUREFAB_HUB_… environment variable in the process that opens the hub camera.
—
--certificate
Expected TLS certificate fingerprint, starting SHA256:. A different certificate is refused.
—
--accept-certificate
Trust the currently presented TLS certificate. Confirm its fingerprint with the server administrator.
—
--tls-server-name
Examine the certificate against NAME instead of the URL's host (for a certificate issued to a domain name reached by IP).
—
--no-check
Save 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 option
Purpose
Default or choices
NAME
A saved hub.
Required
--forget-secret
Also 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.
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 option
Purpose
Default or choices
--check
Read 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.
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.
Argument
Meaning
discover
Search for cameras for about 3 s first (needs a session).
include_simulated
Also 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.
Argument
Meaning
camera
A 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.
Argument
Meaning
camera
A connected camera's ID or name.
names
Exact feature names; null for the imaging controls.
search
Part 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.
Argument
Meaning
camera
A 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.
Argument
Meaning
allow_other_model
Use a setup saved from another camera model; false refuses one.
camera
A connected camera ID or exact friendly name.
name
A 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.
Argument
Meaning
camera
A connected camera's ID or name.
fresh
New frames to wait for, 0..10; null for 1.
include_image
Send the image when images are allowed; null for true.
max_dimension
The image's longest edge: 0 for measurements only, else 256..1568; null for 1024.
region
An 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.
Argument
Meaning
camera
A connected camera's ID or name; required for frames, auto_settled and recording_stopped.
frames
New frames to wait for, 1..1000, with until frames; else null.
job_id
The job to wait for, with until job_done; else null.
timeout
The longest wait, 1s..10m, such as 30s or 2m.
until
What 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.
Argument
Meaning
limit
1..1000 rows, default 100
sql
One read-only SELECT
timeout
1s..30s
open_dataset
Open or create a .duckdb catalog inside the capture folder. Existing databases are never overwritten.
Minimum risk class: bounded. Session: necessary.
Argument
Meaning
file_name
Relative .duckdb file inside capture folder
max_bytes
Positive dataset-wide size policy in bytes; allocation can overshoot; minimum 16 MiB
mode
auto 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.
A 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.