I built this tool to help manage and process photo albums for my website, and for other things ...
Extras:
- Includes a command that enables you to securely browse a Private or Public S3 Bucket in your browser.
- Capable of snapping a webcam image using
ffmpeg
, and / or a screenshot.
Everything works on Linux and Mac computers.
Everything except upload
and webcam
works on Windows.
To successfully run this code, you need a file at the project root named .env
, and yes, it can be blank.
After building, you will no longer need the .env
file.
For the environment variables specified in the .env
file, after building, they will no longer be overridable at runtime, except by use of another .env
file or by explicitly available command line flag(s).
If a variable is not set, then it can be overriden at runtime.
See default.env
for an example env config file, and the required env variable names.
For boolean inputs, the following inputs count as true:
1
true
TRUE
True
To use a different file, like .prod.env
, see the Build
section (below).
Upon building, the environment is compiled into the binary.
After building, you will no longer need the .env
file.
You will need the pkger
cli to embed files in the binary:
go get github.com/markbates/pkger/cmd/pkger
pkger -h
Run this file to build all binaries in the bin folder:
sh build-all-platforms.sh
To run tests to test the functionality of command scripts:
go test
The test will create a temp directory to run test commands in, and then clean up once done.
To run just the snap
command tests:
go test -run=1
To run just the upload
command tests:
go test -run=2
The --public
flag is not included in automated tested.
To test a combination of the snap
and upload
commands:
go test -run=3
The serve
command is not currently tested.
The following may be overridden via command line for any command
:
--s3-bucket=abc
--s3-region=bca
--s3-token=xyz
--s3-secret=yzx
To snap
a webcam or screenshot photo:
snapr snap
snapr snap --help
snapr snap --dir=my/base/dir
snapr snap --dir=my/base/dir --device=/dev/video1
snapr snap --dir=my/base/dir --extra-dir=my/sub/dir
snapr snap --dir=my/base/dir --users
To trigger the photo(s) & upload to an S3 bucket at the same time:
snapr snap --dir=my/base/dir --format=png --upload
snapr snap --file test.jpg --upload --cleanup
snapr snap --file test.jpg --screen --upload --cleanup
snapr snap --file test.jpg --camera --screen --upload --cleanup
Please feel free to combine options.
Review the code to discover environment variables related to this command.
To download
from a bucket to your computer:
snapr download --s3-key=path/to/origs --s3-is-dir
snapr download --s3-key=path/to/origs/original.ext --work-dir /home/my/desktop
Review the code to discover environment variables related to this command.
To upload
a file or directory to an AWS bucket:
snapr upload --file=my/in/file.ext
snapr upload --file=my/in/file.ext --s3-dir dir/in/s3
snapr upload --file=my/in/file.ext --cleanup
snapr upload --dir=my/base/dir
snapr upload --dir=my/base/dir --s3-is-public
snapr upload --dir=my/base/dir --limit=10
snapr upload --dir=my/base/dir --limit=10 --formats=png,jpg
If --formats
is not specified, then all files are uploaded.
If --s3-is-public
is not specified, then all files are private
.
Review the code to discover environment variables related to this command.
To delete
a file or directory from an AWS bucket:
snapr delete --s3-key=path/to/object.ext
snapr delete --s3-key=path/to/dir --is3-s-dir
Review the code to discover environment variables related to this command.
To rename (or copy)
from one bucket to another (or same bucket):
snapr rename --s3-src-key=path/to/original.ext --s3-dest-key=path/to/dest.ext
snapr rename --s3-src-key=path/to/original.ext --s3-dest-key=path/to/dest.ext --s3-dest-bucket other-bucket --copy
snapr rename --s3-src-key=path/to/orig --src-is-dir --s3-dest-key=path/to/dest
snapr rename --s3-src-key=path/to/orig --src-is-dir --s3-dest-key=path/to/dest --s3-dest-bucket other-bucket --copy
snapr rename --copy --s3-src-key=originals --s3-dest-bucket=my.public.bucket --s3-dest-key=originals --s3-dest-is-public --s3-src-is-dir
Review the code to discover environment variables related to this command.
Rebuild all assets:
snapr process --s3-dest-key=processed --s3-is-public --s3-src-key=originals --sizes=640,728,1024
Rebuild new assets (based on scanning of the output dirs):
snapr process --s3-dest-key=processed --s3-is-public --s3-src-key=originals --sizes=640,728,1024
snapr process --s3-dest-key=processed --s3-is-public --s3-src-key=originals --sizes=640,728,1024 --rebuild-new
Review the code to discover environment variables related to this command.
WORK IN PROGRESS
Used to view files from a public or private S3 Bucket in the browser on your local computer, and also to manage files in multiple buckets.
Use it like this:
snapr serve --port=8081
snapr serve --work-dir=/Users/me/Desktop
Then, in a browser, go to the address the CLI indicates. BE VERY CAREFUL what you click :) With great power comes great responsibility! Adding more functions soon ...
Review the code to discover environment variables related to this command.
Can run this as sudo
, but also as other users.
If a user is not iin the video
group, then they need to be added:
sudo adduser <user> video
Also, this can help with regards to storage direcory permissions when potentially multiple users:
sudo chmod -R 0777 /output/dir
Also helps tp have all your directories set up before hand with proper permissions.