Skip to content

Commit 68b1b25

Browse files
Willem Slaghekkejudomuliuquanhao0xflotusmmoeller
authored
Merge upstream (#2)
* Fixed Timeout in readme, 30 ~> 60 (h2non#340) * Fix invalid parameters "-path-prefix" (h2non#344) * fix: small errors in docs (h2non#346) * fix: use proper formatter for usage template (h2non#347) Co-authored-by: Mads Moeller <[email protected]> * Add Cloud Run Button (h2non#362) * Delete app.json * Update README.md * Update README.md * updated docker builder OS to go version 1.17 (h2non#371) * fix(readme): remove gocard obsolete badge * feat(readme): update placeholder description * fix(readme): update fly deploy tutorial * fix(docs): allowed-origins examples h2non#333 * memory leak issue fixed with jemalloc (h2non#381) * exposed palette from GET endpoints (h2non#380) * Updated Dockerfile (h2non#384) 1. Changed base image to bullseye 2. The updated base image contains an updated version of libjemalloc too, so building from source is no longer necessary 3. Updated libvips version too * Added dev container (h2non#385) * Added dev container * Removed irrelevant lines * allow speed from get (h2non#383) * allow speed from get * updating the version to use effor param in libvips * Return with and heigh of the generated images (h2non#382) * Return with and heigh of the generated images Use case: When using the fit image transformation, it is helpful to know the size of the resulting image without having to either read the image locally or do another request to the info endpoint. Used in: nextcloud/server#24166 Signed-off-by: Carl Schwan <[email protected]> * Make mimetype support always return true * Add command line option to enable this feature Signed-off-by: Carl Schwan <[email protected]> * refactor: remove deprecated X- prefix in response headers Co-authored-by: Tom <[email protected]> * Decompression exploit check (h2non#404) * Bump bimg version to 1.1.7 * Add decompression bomb exploit check * Update README with new flag * Fix tests * Fix typos (h2non#405) Found via `codespell -S .git`. --------- Co-authored-by: Julian <[email protected]> Co-authored-by: liuxu <[email protected]> Co-authored-by: 0xflotus <[email protected]> Co-authored-by: Mads Moeller <[email protected]> Co-authored-by: Mads Moeller <[email protected]> Co-authored-by: James Ward <[email protected]> Co-authored-by: Angelo Girardi <[email protected]> Co-authored-by: Tom <[email protected]> Co-authored-by: Vaibhav Sharma <[email protected]> Co-authored-by: Alessandro (Ale) Segala <[email protected]> Co-authored-by: Vaibhav Sharma <[email protected]> Co-authored-by: Carl Schwan <[email protected]> Co-authored-by: SeaaaaaSharp <[email protected]> Co-authored-by: Kian-Meng Ang <[email protected]>
1 parent f66c217 commit 68b1b25

19 files changed

Lines changed: 269 additions & 122 deletions

.devcontainer/Dockerfile

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.217.4/containers/go/.devcontainer/base.Dockerfile
2+
3+
# [Choice] Go version (use -bullseye variants on local arm64/Apple Silicon): 1, 1.16, 1.17, 1-bullseye, 1.16-bullseye, 1.17-bullseye, 1-buster, 1.16-buster, 1.17-buster
4+
ARG VARIANT="1.17-bullseye"
5+
FROM mcr.microsoft.com/vscode/devcontainers/go:0-${VARIANT}
6+
7+
# Versions of libvips and golanci-lint
8+
ARG LIBVIPS_VERSION=8.12.2
9+
ARG GOLANGCILINT_VERSION=1.29.0
10+
11+
# Install additional OS packages
12+
RUN DEBIAN_FRONTEND=noninteractive \
13+
apt-get update && \
14+
apt-get install --no-install-recommends -y \
15+
ca-certificates \
16+
automake build-essential curl \
17+
procps libopenexr25 libmagickwand-6.q16-6 libpango1.0-0 libmatio11 \
18+
libopenslide0 libjemalloc2 gobject-introspection gtk-doc-tools \
19+
libglib2.0-0 libglib2.0-dev libjpeg62-turbo libjpeg62-turbo-dev \
20+
libpng16-16 libpng-dev libwebp6 libwebpmux3 libwebpdemux2 libwebp-dev \
21+
libtiff5 libtiff5-dev libgif7 libgif-dev libexif12 libexif-dev \
22+
libxml2 libxml2-dev libpoppler-glib8 libpoppler-glib-dev \
23+
swig libmagickwand-dev libpango1.0-dev libmatio-dev libopenslide-dev \
24+
libcfitsio9 libcfitsio-dev libgsf-1-114 libgsf-1-dev fftw3 fftw3-dev \
25+
liborc-0.4-0 liborc-0.4-dev librsvg2-2 librsvg2-dev libimagequant0 \
26+
libimagequant-dev libheif1 libheif-dev && \
27+
cd /tmp && \
28+
curl -fsSLO https://github.com/libvips/libvips/releases/download/v${LIBVIPS_VERSION}/vips-${LIBVIPS_VERSION}.tar.gz && \
29+
tar zvxf vips-${LIBVIPS_VERSION}.tar.gz && \
30+
cd /tmp/vips-${LIBVIPS_VERSION} && \
31+
CFLAGS="-g -O3" CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0 -g -O3" \
32+
./configure \
33+
--disable-debug \
34+
--disable-dependency-tracking \
35+
--disable-introspection \
36+
--disable-static \
37+
--enable-gtk-doc-html=no \
38+
--enable-gtk-doc=no \
39+
--enable-pyvips8=no && \
40+
make && \
41+
make install && \
42+
ldconfig
43+
44+
# Installing golangci-lint
45+
RUN curl -fsSL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "${GOPATH}/bin" v${GOLANGCILINT_VERSION}
46+
47+
# [Optional] Uncomment the next lines to use go get to install anything else you need
48+
# USER vscode
49+
# RUN go get -x <your-dependency-or-tool>

.devcontainer/devcontainer.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2+
// https://github.com/microsoft/vscode-dev-containers/tree/v0.217.4/containers/go
3+
{
4+
"name": "Go",
5+
"build": {
6+
"dockerfile": "Dockerfile",
7+
"args": {
8+
// Update the VARIANT arg to pick a version of Go: 1, 1.16, 1.17
9+
// Append -bullseye or -buster to pin to an OS version.
10+
// Use -bullseye variants on local arm64/Apple Silicon.
11+
"VARIANT": "1.17-bullseye"
12+
}
13+
},
14+
"runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
15+
16+
// Set *default* container specific settings.json values on container create.
17+
"settings": {
18+
"go.toolsManagement.checkForUpdates": "local",
19+
"go.useLanguageServer": true,
20+
"go.gopath": "/go",
21+
"go.goroot": "/usr/local/go"
22+
},
23+
24+
// Add the IDs of extensions you want installed when the container is created.
25+
"extensions": [
26+
"golang.Go"
27+
],
28+
29+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
30+
"forwardPorts": [9000],
31+
32+
// Use 'postCreateCommand' to run commands after the container is created.
33+
// "postCreateCommand": "go version",
34+
35+
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
36+
"remoteUser": "vscode",
37+
"features": {
38+
"docker-from-docker": "latest"
39+
}
40+
}

.dockerignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
**/*~
2+
.devcontainer
3+
.github
24
.git
5+
Dockerfile
6+
docker-compose.yml

Dockerfile

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
ARG GOLANG_VERSION=1.14
2-
FROM golang:${GOLANG_VERSION} as builder
1+
ARG GOLANG_VERSION=1.17
2+
FROM golang:${GOLANG_VERSION}-bullseye as builder
33

44
ARG IMAGINARY_VERSION=dev
5-
ARG LIBVIPS_VERSION=8.10.0
5+
ARG LIBVIPS_VERSION=8.12.2
66
ARG GOLANGCILINT_VERSION=1.29.0
77

88
# Installs libvips + required libraries
@@ -51,7 +51,7 @@ RUN go mod download
5151
COPY . .
5252

5353
# Run quality control
54-
RUN go test -test.v -test.race -test.covermode=atomic .
54+
RUN go test ./... -test.v -race -test.coverprofile=atomic .
5555
RUN golangci-lint run .
5656

5757
# Compile imaginary
@@ -60,7 +60,7 @@ RUN go build -a \
6060
-ldflags="-s -w -h -X main.Version=${IMAGINARY_VERSION}" \
6161
github.com/h2non/imaginary
6262

63-
FROM debian:buster-slim
63+
FROM debian:bullseye-slim
6464

6565
ARG IMAGINARY_VERSION
6666

@@ -79,15 +79,17 @@ COPY --from=builder /etc/ssl/certs /etc/ssl/certs
7979
RUN DEBIAN_FRONTEND=noninteractive \
8080
apt-get update && \
8181
apt-get install --no-install-recommends -y \
82-
procps libglib2.0-0 libjpeg62-turbo libpng16-16 libopenexr23 \
82+
procps libglib2.0-0 libjpeg62-turbo libpng16-16 libopenexr25 \
8383
libwebp6 libwebpmux3 libwebpdemux2 libtiff5 libgif7 libexif12 libxml2 libpoppler-glib8 \
84-
libmagickwand-6.q16-6 libpango1.0-0 libmatio4 libopenslide0 \
85-
libgsf-1-114 fftw3 liborc-0.4-0 librsvg2-2 libcfitsio7 libimagequant0 libheif1 imagemagick ghostscript && \
84+
libmagickwand-6.q16-6 libpango1.0-0 libmatio11 libopenslide0 libjemalloc2 \
85+
libgsf-1-114 fftw3 liborc-0.4-0 librsvg2-2 libcfitsio9 libimagequant0 libheif1 imagemagick ghostscript && \
86+
ln -s /usr/lib/$(uname -m)-linux-gnu/libjemalloc.so.2 /usr/local/lib/libjemalloc.so && \
8687
apt-get autoremove -y && \
8788
apt-get autoclean && \
8889
apt-get clean && \
8990
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
9091
sed -i 's/<policy domain="coder" rights="none"/<policy domain="coder" rights="read|write"/g' /etc/ImageMagick-6/policy.xml
92+
ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so
9193

9294
# Server port to listen
9395
ENV PORT 9000

History.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ v0.1.26 / 2016-09-06
392392
* feat(docs): update CLI usage and help
393393
* feat: forward authorization headers support
394394
* Fix description for URL source, and allowed origins server options (#83)
395-
* fix(version): ups, editting from iPad
395+
* fix(version): ups, editing from iPad
396396
* fix(version): unresolved conflict
397397
* merge: fix History conflicts
398398
* Merge branch 'develop'
@@ -750,7 +750,7 @@ v0.1.24 / 2016-04-21
750750
==================
751751

752752
* feat(#18): http docs
753-
* fix(travis): another attemp
753+
* fix(travis): another attempt
754754
* fix(travis)
755755
* fix(docs)
756756
* fix(travis)

README.md

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# imaginary [![Build Status](https://travis-ci.org/h2non/imaginary.svg)](https://travis-ci.org/h2non/imaginary) [![Docker](https://img.shields.io/badge/docker-h2non/imaginary-blue.svg)](https://hub.docker.com/r/h2non/imaginary/) [![Docker Registry](https://img.shields.io/docker/pulls/h2non/imaginary.svg)](https://hub.docker.com/r/h2non/imaginary/) [![Go Report Card](http://goreportcard.com/badge/h2non/imaginary)](https://goreportcard.com/report/h2non/imaginary) [![Fly.io](https://img.shields.io/badge/deploy-fly.io-blue.svg)](https://fly.io/launch/github/h2non/imaginary)
1+
# imaginary [![Build Status](https://travis-ci.org/h2non/imaginary.svg)](https://travis-ci.org/h2non/imaginary) [![Docker](https://img.shields.io/badge/docker-h2non/imaginary-blue.svg)](https://hub.docker.com/r/h2non/imaginary/) [![Docker Registry](https://img.shields.io/docker/pulls/h2non/imaginary.svg)](https://hub.docker.com/r/h2non/imaginary/) [![Fly.io](https://img.shields.io/badge/deploy-fly.io-blue.svg)](https://fly.io/launch/github/h2non/imaginary)
22

33
**[Fast](#benchmarks) HTTP [microservice](http://microservices.io/patterns/microservices.html)** written in Go **for high-level image processing** backed by [bimg](https://github.com/h2non/bimg) and [libvips](https://github.com/jcupitt/libvips). `imaginary` can be used as private or public HTTP service for massive image processing with first-class support for [Docker](#docker) & [Fly.io](#flyio).
44
It's almost dependency-free and only uses [`net/http`](http://golang.org/pkg/net/http/) native package without additional abstractions for better [performance](#performance).
@@ -10,7 +10,7 @@ with additional optional features such as **API token authorization**, **URL sig
1010

1111
`imaginary` is able to output images as JPEG, PNG and WEBP formats, including transparent conversion across them.
1212

13-
`imaginary` also optionally **supports image placeholder fallback mechanism** in case of image processing error or server error of any nature, therefore an image will be always returned by the server in terms of HTTP response body and content MIME type, even in case of error, matching the expected image size and format transparently.
13+
`imaginary` optionally **supports image placeholder fallback mechanism** in case of image processing error or server error of any nature, hence an image will be always returned by imaginary even in case of error, trying to match the requested image size and format type transparently. The error details will be provided in the response HTTP header `Error` field serialized as JSON.
1414

1515
`imaginary` uses internally `libvips`, a powerful and efficient library written in C for fast image processing
1616
which requires a [low memory footprint](https://github.com/libvips/libvips/wiki/Benchmarks)
@@ -27,6 +27,7 @@ To get started, take a look the [installation](#installation) steps, [usage](#co
2727
- [Docker](#docker)
2828
- [Fly.io](#flyio)
2929
- [Cloud Foundry](#cloudfoundry)
30+
- [Google Cloud Run](#google-cloud-run)
3031
- [Recommended resources](#recommended-resources)
3132
- [Production notes](#production-notes)
3233
- [Scalability](#scalability)
@@ -162,7 +163,7 @@ services:
162163
163164
Deploy imaginary in seconds close to your users in [Fly.io](https://fly.io) cloud by clicking on the button below:
164165
165-
<a href="https://fly.io/launch/github/h2non/imaginary">
166+
<a href="https://fly.io/docs/app-guides/run-a-global-image-service/">
166167
<img src="testdata/flyio-button.svg?raw=true" width="200">
167168
</a>
168169
@@ -200,6 +201,12 @@ Start the application
200201
cf start imaginary-inst01
201202
```
202203

204+
### Google Cloud Run
205+
206+
Click to deploy on Google Cloud Run:
207+
208+
[![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run)
209+
203210
### Recommended resources
204211

205212
Given the multithreaded native nature of Go, in terms of CPUs, most cores means more concurrency and therefore, a better performance can be achieved.
@@ -222,7 +229,7 @@ $ imaginary -concurrency 20
222229

223230
### Memory issues
224231

225-
In case you are experiencing any persistent unreleased memory issues in your deployment, you can try passing this environemnt variables to `imaginary`:
232+
In case you are experiencing any persistent unreleased memory issues in your deployment, you can try passing this environment variables to `imaginary`:
226233

227234
```
228235
MALLOC_ARENA_MAX=2 imaginary -p 9000 -enable-url-source
@@ -330,8 +337,8 @@ Options:
330337
-key <key> Define API key for authorization
331338
-mount <path> Mount server local directory
332339
-http-cache-ttl <num> The TTL in seconds. Adds caching headers to locally served files.
333-
-http-read-timeout <num> HTTP read timeout in seconds [default: 30]
334-
-http-write-timeout <num> HTTP write timeout in seconds [default: 30]
340+
-http-read-timeout <num> HTTP read timeout in seconds [default: 60]
341+
-http-write-timeout <num> HTTP write timeout in seconds [default: 60]
335342
-enable-url-source Enable remote HTTP URL image source processing (?url=http://..)
336343
-enable-placeholder Enable image response placeholder to be used in case of error [default: false]
337344
-enable-auth-forwarding Forwards X-Forward-Authorization or Authorization header to the image source server. -enable-url-source flag must be defined. Tip: secure your server from public access to prevent attack vectors
@@ -340,6 +347,7 @@ Options:
340347
-url-signature-key The URL signature key (32 characters minimum)
341348
-allowed-origins <urls> Restrict remote image source processing to certain origins (separated by commas). Note: Origins are validated against host *AND* path.
342349
-max-allowed-size <bytes> Restrict maximum size of http image source (in bytes)
350+
-max-allowed-resolution <megapixels> Restrict maximum resolution of the image [default: 18.0]
343351
-certfile <path> TLS certificate file path
344352
-keyfile <path> TLS private key file path
345353
-authorization <value> Defines a constant Authorization header value passed to all the image source servers. -enable-url-source flag must be defined. This overwrites authorization headers forwarding behavior via X-Forward-Authorization
@@ -422,7 +430,7 @@ This feature is particularly useful to protect against multiple image operations
422430
imaginary -p 8080 -enable-url-signature -url-signature-key 4f46feebafc4b5e988f131c4ff8b5997
423431
```
424432

425-
It is recommanded to pass key as environment variables:
433+
It is recommended to pass key as environment variables:
426434
```
427435
URL_SIGNATURE_KEY=4f46feebafc4b5e988f131c4ff8b5997 imaginary -p 8080 -enable-url-signature
428436
```
@@ -477,13 +485,13 @@ imaginary can be configured to block all requests for images with a src URL this
477485

478486
| `allowed-origins` setting | image url | is valid |
479487
| ------------------------- | --------- | -------- |
480-
| `--allowed-origins s3.amazonaws.com/some-bucket/` | `s3.amazonaws.com/some-bucket/images/image.png` | VALID |
481-
| `--allowed-origins s3.amazonaws.com/some-bucket/` | `s3.amazonaws.com/images/image.png` | NOT VALID (no matching basepath) |
482-
| `--allowed-origins s3.amazonaws.com/some-*` | `s3.amazonaws.com/some-bucket/images/image.png` | VALID |
483-
| `--allowed-origins *.amazonaws.com/some-bucket/` | `anysubdomain.amazonaws.com/some-bucket/images/image.png` | VALID |
484-
| `--allowed-origins *.amazonaws.com` | `anysubdomain.amazonaws.comimages/image.png` | VALID |
485-
| `--allowed-origins *.amazonaws.com` | `www.notaws.comimages/image.png` | NOT VALID (no matching host) |
486-
| `--allowed-origins *.amazonaws.com, foo.amazonaws.com/some-bucket/` | `bar.amazonaws.com/some-other-bucket/image.png` | VALID (matches first condition but not second) |
488+
| `-allowed-origins https://s3.amazonaws.com/some-bucket/` | `s3.amazonaws.com/some-bucket/images/image.png` | VALID |
489+
| `-allowed-origins https://s3.amazonaws.com/some-bucket/` | `s3.amazonaws.com/images/image.png` | NOT VALID (no matching basepath) |
490+
| `-allowed-origins https://s3.amazonaws.com/some-*` | `s3.amazonaws.com/some-bucket/images/image.png` | VALID |
491+
| `-allowed-origins https://*.amazonaws.com/some-bucket/` | `anysubdomain.amazonaws.com/some-bucket/images/image.png` | VALID |
492+
| `-allowed-origins https://*.amazonaws.com` | `anysubdomain.amazonaws.comimages/image.png` | VALID |
493+
| `-allowed-origins https://*.amazonaws.com` | `www.notaws.comimages/image.png` | NOT VALID (no matching host) |
494+
| `-allowed-origins https://*.amazonaws.com, foo.amazonaws.com/some-bucket/` | `bar.amazonaws.com/some-other-bucket/image.png` | VALID (matches first condition but not second) |
487495

488496
### Authorization
489497

@@ -565,6 +573,7 @@ Image measures are always in pixels, unless otherwise indicated.
565573
- **areaheight** `int` - Width area to extract. Example: `300`
566574
- **quality** `int` - JPEG image quality between 1-100. Defaults to `80`
567575
- **compression** `int` - PNG compression level. Default: `6`
576+
- **palette** `bool` - Enable 8-bit quantisation. Works with only PNG images. Default: `false`
568577
- **rotate** `int` - Image rotation angle. Must be multiple of `90`. Example: `180`
569578
- **factor** `int` - Zoom factor level. Example: `2`
570579
- **margin** `int` - Text area margin for watermark. Example: `50`
@@ -751,6 +760,7 @@ Resize an image by width or height. Image aspect ratio is maintained
751760
- field `string` - Only POST and `multipart/form` payloads
752761
- interlace `bool`
753762
- aspectratio `string`
763+
- palette `bool`
754764

755765
#### GET | POST /enlarge
756766
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -780,6 +790,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
780790
- minampl `float`
781791
- field `string` - Only POST and `multipart/form` payloads
782792
- interlace `bool`
793+
- palette `bool`
783794

784795
#### GET | POST /extract
785796
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -813,6 +824,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
813824
- field `string` - Only POST and `multipart/form` payloads
814825
- interlace `bool`
815826
- aspectratio `string`
827+
- palette `bool`
816828

817829
#### GET | POST /zoom
818830
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -844,6 +856,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
844856
- field `string` - Only POST and `multipart/form` payloads
845857
- interlace `bool`
846858
- aspectratio `string`
859+
- palette `bool`
847860

848861
#### GET | POST /thumbnail
849862
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -873,6 +886,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
873886
- field `string` - Only POST and `multipart/form` payloads
874887
- interlace `bool`
875888
- aspectratio `string`
889+
- palette `bool`
876890

877891
#### GET | POST /fit
878892
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -905,6 +919,7 @@ The width and height specify a maximum bounding box for the image.
905919
- field `string` - Only POST and `multipart/form` payloads
906920
- interlace `bool`
907921
- aspectratio `string`
922+
- palette `bool`
908923

909924
#### GET | POST /rotate
910925
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -942,6 +957,7 @@ Returns a new image with the same size and format as the input image.
942957
- field `string` - Only POST and `multipart/form` payloads
943958
- interlace `bool`
944959
- aspectratio `string`
960+
- palette `bool`
945961

946962
#### GET | POST /flip
947963
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -970,6 +986,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
970986
- field `string` - Only POST and `multipart/form` payloads
971987
- interlace `bool`
972988
- aspectratio `string`
989+
- palette `bool`
973990

974991
#### GET | POST /flop
975992
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -998,6 +1015,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
9981015
- field `string` - Only POST and `multipart/form` payloads
9991016
- interlace `bool`
10001017
- aspectratio `string`
1018+
- palette `bool`
10011019

10021020
#### GET | POST /convert
10031021
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -1025,6 +1043,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
10251043
- field `string` - Only POST and `multipart/form` payloads
10261044
- interlace `bool`
10271045
- aspectratio `string`
1046+
- palette `bool`
10281047

10291048
#### GET | POST /pipeline
10301049
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -1148,6 +1167,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
11481167
- minampl `float`
11491168
- field `string` - Only POST and `multipart/form` payloads
11501169
- interlace `bool`
1170+
- palette `bool`
11511171

11521172
#### GET | POST /watermarkimage
11531173
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -1178,6 +1198,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
11781198
- minampl `float`
11791199
- field `string` - Only POST and `multipart/form` payloads
11801200
- interlace `bool`
1201+
- palette `bool`
11811202

11821203
#### GET | POST /blur
11831204
Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
@@ -1206,6 +1227,7 @@ Accepts: `image/*, multipart/form-data`. Content-Type: `image/*`
12061227
- field `string` - Only POST and `multipart/form` payloads
12071228
- interlace `bool`
12081229
- aspectratio `string`
1230+
- palette `bool`
12091231

12101232
## Logging
12111233

0 commit comments

Comments
 (0)