docker | ||
js_client | ||
src | ||
.dockerignore | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
client.py | ||
index.html | ||
LICENSE | ||
README.md | ||
test.png |
pict-rs
a simple image hosting service
Usage
Running
pict-rs 0.1.0
USAGE:
pict-rs [OPTIONS] --addr <addr> --path <path>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-a, --addr <addr> The address and port the server binds to, e.g. 127.0.0.1:80
-f, --format <format> An image format to convert all uploaded files into, supports 'jpg' and 'png'
-p, --path <path> The path to the data directory, e.g. data/
-w, --whitelist <whitelist>... An optional list of filters to whitelist, supports 'identity', 'thumbnail', and
'blur'
Example:
Running on all interfaces, port 8080, storing data in /opt/data
$ ./pict-rs -a 0.0.0.0:8080 -p /opt/data
Running locally, port 9000, storing data in data/, and converting all uploads to PNG
$ ./pict-rs -a 127.0.0.1:9000 -p data/ -f png
Running locally, port 8080, storing data in data/, and only allowing the thumbnail
and identity
filters
$ ./pict-rs -a 127.0.0.1:8080 -p data/ -w thumbnail identity
Docker
Run the following commands:
# Create a folder for the files (anywhere works)
mkdir ./pict-rs
cd ./pict-rs
mkdir -p volumes/pictrs
sudo chown -R 991:991 volumes/pictrs
wget https://git.asonix.dog/asonix/pict-rs/raw/branch/master/docker/prod/docker-compose.yml
sudo docker-compose up -d
Docker Development
Run the following to develop in docker:
git clone https://git.asonix.dog/asonix/pict-rs
cd pict-rs/docker/dev
docker-compose up --build
API
pict-rs offers four endpoints:
-
POST /image
for uploading an image. Uploaded content must be valid multipart/form-data with an image array located within theimages[]
keyThis endpoint returns the following JSON structure on success with a 201 Created status
{ "files": [ { "delete_token": "JFvFhqJA98", "file": "lkWZDRvugm.jpg" }, { "delete_token": "kAYy9nk2WK", "file": "8qFS0QooAn.jpg" }, { "delete_token": "OxRpM3sf0Y", "file": "1hJaYfGE01.jpg" } ], "msg": "ok" }
-
GET /image/download?url=...
Download an image from a remote server, returning the same JSON payload as thePOST
endpoint -
GET /image/{file}
for getting a full-resolution image.file
here is thefile
key from the/image
endpoint's JSON -
GET /image/{transformations...}/{file}
get a file with transformations applied. existing transformations includeidentity
: apply no changesblur{float}
: apply a gaussian blur to the filethumbnail{int}
: produce a thumbnail of the image fitting inside an{int}
by{int}
square An example of usage could be
GET /image/thumbnail256/blur3.0/asdf.png
which would create a 256x256px thumbnail and blur it
-
DELETE /image/{delete_token}/{file}
orGET /image/{delete_token}/{file}
to delete a file, wheredelete_token
andfile
are from the/image
endpoint's JSON
Contributing
Feel free to open issues for anything you find an issue with. Please note that any contributed code will be licensed under the AGPLv3.
License
Copyright © 2020 Riley Trautman
pict-rs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
pict-rs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. This file is part of pict-rs.
You should have received a copy of the GNU General Public License along with pict-rs. If not, see http://www.gnu.org/licenses/.