#image #capturing #macos #cli #🖼️ #📷 #📸

bin+lib imagesnap

A CLI for capturing images 📷 📸 🖼️

1 unstable release

0.0.1 May 13, 2021

#25 in #capturing

MIT/Apache

18KB
291 lines

imagesnap

A CLI for capturing images on macOS 📷 📸 🖼️

This crate also doubles as a Rust library. 🦀

Installing

via Homebrew

brew install smudge/smudge/imagesnap

via Cargo

Set up Rust/Cargo and install from crates.io by running:

cargo install imagesnap

Usage

Command-Line Interface

Run the command without any arguments to output snapshot.jpg, captured from the default camera:

$ imagesnap
Capturing image from device "iSight"..................snapshot.jpg

The filename can be changed by specifying an argument. Only JPG files are currently supported:

$ imagesnap shot1.jpg
Capturing image from device "iSight"..................shot1.jpg

Use the -l flag to list all available image capture devices:

$ imagesnap -l
iSight
DV

Use the -d flag to use a specific device:

$ imagesnap -d DV
Capturing image from device "DV"..................snapshot.jpg

Use the -w flag to specify a warmup period (default is 0.5), allowing the camera to perform light balancing and/or focus before taking a shot:

$ imagesnap -w 2.5
Capturing image from device "iSight"...........................snapshot.jpg

Use the -q flag to silence the status and progress output.

Lastly, run the command with -h/--help to see usage instructions.

Rust API

In addition to a CLI, imagesnap can be pulled-in as a dependency for other Rust crates:

imagesnap = "0.0.1"

To snap an image with the default camera, use Camera::default:

let camera = Camera::default();
camera.snap("snapshot.jpg").await;

Note that snap is an async function.

If more than one camera is attached, use Camera::new and specify a device:

let camera = Camera::new(Device::find("FaceTime"), None);

To discover all devices, use Device::all().

An optional warmup period may also be specificied (in seconds):

let camera = Camera::new(Device::default(), 1.5);

If left unspecified, it will default to 0.5 seconds.

Todo:

  • Basic functionality working (snap image to file)
  • Add additional opts like 'quiet' and 'warmup'
  • Get device selection working
  • Clean up code, work on generic lib interface
  • Update README with library usage
  • Support additional file types? (png, tif, etc?)
  • Add Linux support (via rscam)
  • Add Windows support (via escapi)
  • Get STDOUT and pipe detection working (macOS/linux)

Thanks To:

Contributing

  • Check the issue tracker and consider creating a new issue.
  • Fork the project and create a new branch for your contribution.
  • Write, commit, and push your contribution to your branch.
  • Make sure the project builds (cargo build) and functionality still works as expected.
  • Submit a pull request.

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~0.8–1.4MB
~30K SLoC