Free, open-source (MIT) camera workbench

Industrial and network camera capture.

For manufacturing, process and vision engineers. GigE Vision and USB3 Vision are built in, plus webcams, RTSP/ONVIF streams and hub cameras. Captures are cataloged and export to Parquet or CSV, from the desktop app, scripts or AI agents.

Download Capturefab

Free and open source (MIT). macOS, Windows and Linux.
App and CLI in one download. See it in action

  • No vendor SDK, Aravis, libusb or FFmpeg to install.
  • The CLI returns JSON for scripts and coding agents.
  • Simulator cameras let you start without hardware.
Capturefab desktop with a simulator camera preview, focus and exposure scopes and the camera's Features inspector
The real desktop app running built-in simulator cameras. Select the image to enlarge it.

Camera support depends on the device, connection and operating system. Read the connection guide →

See the controls and the result

See Capturefab in action.

These short clips show the desktop app with simulator cameras. Each clip plays in a loop without sound. Use the controls to pause it.

01 / Live settings

Change a setting, watch the image respond

CLI commands raise the simulator camera's exposure, then restore it. The live preview and the Exposure control update while the stream keeps running.

8-second loop, played at the recorded speed. One simulator camera. Read about live previews →

Examine before you capture

Keep the image and its controls together.

Use camera features, image scopes and capture settings in the same app.

Features inspector with Quick controls for exposure, gain and frame rate, plus collapsed groups for additional camera settings

Adjust camera settings

Read feature names, values and limits. If the camera supports the controls, set exposure, gain and image dimensions.

Camera features →
Capture inspector with manual capture controls first, followed by options, scheduling, storage and shell access

Set the output

Save one image or a sequence. Select the format, frame count and storage limits before capture.

Capture settings →

Real app captures with simulator data, recorded from Capturefab 0.4.0 source. Details can differ slightly in your release.

Choose how to control the cameras.

People, scripts and agents can share a camera session. The preview and Activity log let you review actions and take control.

Your coding agent

Use Claude Code, Codex, Antigravity or another agent that runs CLI commands. Capturefab supplies camera tools and JSON results.

Your agent manages its model access. Capturefab provider settings are unnecessary for this method.

Set up an external agentDownload agent instructions

The built-in assistant

Choose a provider in Settings → AI assistant. Supported Macs can use Apple Intelligence for local text assistance.

Review a plan before execution, or run a task with limits. Image sharing and dataset sharing have separate permissions.

Set up the AI assistantUse Apple Intelligence

You, at the controls

Connect a camera and capture directly. Use the preview, image scopes and settings to guide or take over the work.

Start with sim:0 before connecting hardware. Provider credentials are unnecessary for direct capture.

Try a manual capture

Desktop and CLI in one session

See what your agent does.

Pin a named session and camera. Give the agent a recognizable name. Activity shows its actions, saved files and errors.

# Not installed? Use the one-line installer under Download, or ./capturefab (.\capturefab.exe on Windows) from the extracted folder. On macOS, the command is /Applications/Capturefab.app/Contents/MacOS/capturefab.

# Open a named desktop session
capturefab gui --name bench

# Use another terminal for these commands
capturefab --session bench --actor capture-agent --actor-kind agent connect sim:0 --json
capturefab --session bench --actor capture-agent --actor-kind agent --camera sim:0 capture -o 'shot-{seq}.png' --json
capturefab --session bench status --json
Capturefab terminal commands for simulator discovery, feature changes and image capture with JSON results
Actual command output from the simulator. The CLI supplies JSON results and exit codes for scripts.

Capture, store and analyze

Keep files and capture data together.

Save capture times and tags with each cataloged image. Use saved destinations to save files on your disk, removable drives or mounted network folders.

Build an image dataset in three commands

Capture tagged images into a DuckDB catalog, query it with SQL and export the tables for pandas, Polars or a notebook.

# Not installed? Use the one-line installer under Download, or ./capturefab (.\capturefab.exe on Windows) from the extracted folder. On macOS, the command is /Applications/Capturefab.app/Contents/MacOS/capturefab.

# Capture 3 tagged images, 500 ms apart, into a catalog
capturefab --camera sim:0 capture -n 3 --interval 500ms --context part=A-100 --dataset parts.duckdb -o 'parts/{camera}-{seq}.png'

# Query the catalog with SQL
capturefab dataset query --file parts.duckdb "SELECT path, wall_ms, context FROM captures"

# Export Parquet and CSV tables with manifest.json and README.md
capturefab dataset export --file parts.duckdb -o export
  • parts/
    • Pattern-camera-SIM0-0001.png
    • Pattern-camera-SIM0-0002.png
    • Pattern-camera-SIM0-0003.png
  • parts.duckdb catalog
  • export/
    • captures.parquet, captures.csv
    • events.parquet, events.csv
    • recordings.parquet, recordings.csv
    • manifest.json
    • README.md
The files these commands create. The export holds the catalog tables, with each image's path, time and tags. The images stay in parts/.

Datasets and exports

Catalog images, recordings, timestamps and tags in DuckDB. Export Parquet or CSV tables with a manifest for analysis tools.

Catalog capturesExport camera data

Camera hubs

Save a Home Assistant, Frigate, go2rtc or UniFi Protect server. Its cameras then open as usual sources.

Open hub cameras

Folders and drives

Save to folders on your disk, removable drives or mounted network drives.

Set up destinations

Try it without a camera

Capture your first simulator image.

The built-in simulator supplies test images. Use it to learn the app or test a script.

  1. 1

    Open Capturefab

    Install the desktop download: open the .dmg or extract the archive. Open the app. Select Try a simulated camera on the welcome screen.

  2. 2

    Connect a Pattern camera

    The app connects a Pattern camera. Start its stream. Open Features to examine its settings.

  3. 3

    Capture an image

    Open Capture. Set an output name and image format. Capture a frame.

Capture from the terminalCLI
# Not installed? Use the one-line installer under Download, or ./capturefab (.\capturefab.exe on Windows) from the extracted folder. On macOS, the command is /Applications/Capturefab.app/Contents/MacOS/capturefab.

# Find cameras, including the built-in simulator
capturefab discover --simulate

# Save a simulator image; run it again for first-0002.png
capturefab --camera sim:0 capture -o 'first-{seq}.png'

# Read camera features
capturefab --camera sim:0 features

Get Capturefab

Download Capturefab.

Free. No account. One download includes the app and the CLI.

Latest release: see all downloads

Choose your operating system and processor. Every download includes the app and the CLI.

Published downloads

Select a build, or open all downloads below.

Install from a terminal

One command picks the build for this computer, checks its SHA-256 and installs it for your account, without sudo or administrator rights.

curl -fsSL https://capturefab.com/install.sh | sh
irm https://capturefab.com/install.ps1 | iex

The first line is for macOS and Linux, the second for Windows PowerShell. To read the script first: curl -fsSLO https://capturefab.com/install.sh; less install.sh; sh install.sh. Read install.sh or install.ps1.

Capture with clear limits

Keep control of files and storage.

Each camera runs in a separate process. Live previews use the newest frame. Capture and recording use storage limits.

Read about the architecture →
Protect existing files
Capturefab does not replace an existing file when its name matches the output name.
Set storage limits
The default storage budget is 10 GiB and 10,000 files. Capture stops at the limit. Deleting eligible old files is optional.
Run locally
Capturefab has no telemetry. The desktop app reads the public release list once a day to look for new versions; you can turn that off. You can capture camera images without a cloud account.

Before you download

Which cameras can I connect?

Capturefab supports GigE Vision, USB3 Vision, host cameras, network streams and other sources. Support depends on the device and operating system. This is an initial implementation with less feature coverage than some vendor SDKs. Read the connection guide and camera compatibility notes for device requirements.

Do I need a vendor SDK or FFmpeg?

No. Published downloads include FFmpeg for host cameras, streams and video encoding. You must supply the operating system's graphics, USB and camera drivers. USB3 Vision cameras on Windows must use WinUSB; the first-launch steps say how to set it and undo it. Read the installation instructions.

Windows says the app is unrecognized. Is that expected?

If a Windows download is listed as Unsigned, Microsoft Defender SmartScreen may warn the first time you open capturefab.exe. Check the SHA-256 checksum or the GitHub attestation first, then choose More info → Run anyway. The download list shows each file's signature.

How do I check that my computer is ready?

Run ./capturefab doctor from the extracted folder, or /Applications/Capturefab.app/Contents/MacOS/capturefab doctor on macOS. It lists checks for the GPU, settings storage and capture efficiency. capturefab doctor --json adds compiled features and network interfaces. Read the troubleshooting guide for what each check means.

Can I use Capturefab for commercial work?

Yes. Capturefab uses the MIT license. The separate FFmpeg executable uses GPLv3. Each release includes the corresponding source and license notices. Read the licensing details before redistribution.

Does Capturefab send my images to a cloud service?

Capture saves images to files. Stream forwarding sends video to the receiver you configure. The assistant sends prompts and session details to the selected provider. Apple Intelligence runs locally and accepts text only. Other providers share images and dataset rows only with separate permission.

Prompt-driven video analytics sends sampled images when you start collection. External agents control their own data sharing. Read about the assistant, destinations and video analytics.

Can a script control an open desktop session?

Yes. Camera commands automatically use the only desktop or headless session that is open. Use capturefab sessions to list sessions. Use --session NAME to select one when several sessions are open. Read about sessions and automation.

Where are captures saved, and what happens at the storage limit?

The desktop app saves to a Capturefab folder in your home folder by default. CLI output names are relative to the terminal's current folder. Add a saved destination to use another folder or drive. Capturefab never overwrites an existing file.

At the storage limit, Capturefab stops capture or recording. It returns exit code 6 and a message that identifies the limit. Capturefab disables automatic deletion by default. --delete-oldest permits deletion of unchanged Capturefab files.

How do I verify a download?

The download selector shows a command with the file name and its SHA-256 filled in. Run it in your Downloads folder: it prints OK when the file matches. The full download list has the same command under each build, and the install script checks the checksum before it installs anything. You can verify GitHub build provenance with gh attestation verify FILE --repo capturefab/capturefab.

Upgrading from 0.3 or earlier?

Version 0.4.0 removed built-in S3, FTP and SFTP uploads and signal sources. Read the upgrade notes before replacing an existing installation.

Start with the simulator

Capture your first frame.

Download the app. Try a simulator camera. Then connect your own source.

Build Capturefab from source

Build requirements

Use a stable Rust toolchain, a C compiler and CMake. For x86 builds, NASM is also necessary for libjpeg-turbo. FFmpeg is necessary for webcams, streams and recording. Download the source code of a release. It includes every Rust dependency, so the build works offline. Read the FFmpeg build guide for configuration.

tar -xzf capturefab-VERSION-source.tar.gz
cd capturefab-VERSION
# Desktop app and CLI
cargo --config .cargo/vendor-config.toml build --release --offline --locked
# Without the GUI: cameras, scanners, images and exports
cargo --config .cargo/vendor-config.toml build --release --offline --locked --no-default-features --features usb,scanner,jpeg,nvjpeg,vaapi,videotoolbox,parquet,hubs,updates
target/release/capturefab --camera sim:0 capture -o first.png