Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 40 million developers.Sign up
- Fixed the health-check endpoint (at
- Fixed error responses when encountering empty request headers. (Thanks to @RRMoelker)
- Fixed incorrect URIs in
Linkheader values in certain IIIF Image API v2 image endpoint responses.
?response-content-dispositionquery argument correctly handles filenames containing spaces.
- Image endpoints return HTTP 403 instead of 500 in response to AccessDeniedExceptions from the underlying Source.
- Fixed two separate bugs in KakaduNativeProcessor that both caused empty regions to appear in certain images.
- Fixed overly restrictive signature verification in KakaduDemoProcessor and OpenJpegProcessor that could cause errors with some valid images.
- Fixed TurboJpegProcessor not respecting the
- Fixed the
PurgeItemFromCacheAPI method not working with S3Cache and AzureStorageCache.
- When using
AutomaticSelectionStrategy, processor initialization errors are logged at debug-level rather than error-level.
- Added an undocumented
HttpSource2source which works the same as
HttpSource, and uses the same configuration keys and delegate method, but
is backed by a different HTTP client library. If you are having problems with
HttpSource, try this one instead. The current implementation of
HttpSourcewill probably be replaced by this one in the next major version.
- Fixed a missing
resulting_sizekey in the delegate script's
introduced in 4.1.
- Fixed a bug in KakaduNativeProcessor that could cause requests for certain
scales to fail (or possibly even crash the JVM).
- Fixed the behavior of
- Fixed failing to source-cache non-selectively-readable images when using
Java2dProcessor or JaiProcessor with the source cache enabled and a source
for which chunking is enabled.
- The Jetty client used by HttpSource has been downgraded to the version used
in 4.1.1 due to a bug in the version used in 4.1.2.
- Fixed the behavior of the
in the context of certain unrecoverable errors.
- Fixed incorrect
@idvalues in information responses when a query argument
is present in the URI.
- Fixed a potential failure to fall back to the next candidate processor when
TurboJpegProcessor is in the candidate chain but libjpeg-turbo is not
- Fixed a potential IIOException when reading certain JPEG images with
- Fixed newlines (
\n) appearing literally in string overlays.
- Updated the Jetty dependency to address the following security vulnerability:
- Updated the PDFBox dependency to address the following security
NoSuchMethodErrors from various processors when running in Java 8.
- Fixed failure to locate the delegate script when
is set to a relative path outside of the current working directory.
- Fixed a regression in the handling of the
- Fixed breakage in manual processor selection from the Control Panel.
- Fixed an error from Java2dProcessor when downscaling TIFF source images to a
very small size.
- Fixed improper codestream access in KakaduNativeProcessor that could cause
cause degraded output for certain images.
- Improved resilience when reading certain oddly-encoded GIFs in
Java2dProcessor and JaiProcessor.
- Configuration values can be obtained from the environment. See the user manual for more information.
authorized?()delegate methods have been merged into a new
authorize()method, which enables a superset of their functionality, including challenge responses and redirects to "virtual" quality-limited versions. Authorization can also be set up to align with the IIIF Authentication API 1.0's "all or nothing access" or "tiered access" schemes.
endpoint.public.auth.*keys that controlled global HTTP Basic protection have also been replaced by the
- The maximum allowed scale can set in the configuration.
- Running tasks are displayed in the Control Panel.
- Added HTTP API endpoints for status and health checks.
- In the IIIF Image API 2.x endpoint, the
Access-Control-Allow-Originresponse header is always included in the information response regardless of whether an
Originheader was sent in the request, in order to align more closely with the IIIF Image API.
- Improved handling and documentation of the
/iiifURI path no longer redirects to a specific Image API version, and now returns HTTP 404.
- Bug fixes related to cropping-by-percent of EXIF-rotated images.
- During image requests,
authorize()is called earlier in the setup process, for better efficiency.
- Removed the Restlet dependency.
- HttpSource, S3Source, and AzureStorageSource are able to request chunks of resources on demand, which can improve performance when reading images in selectively-readable encodings like JPEG2000 and multi-resolution TIFF.
- HttpSource sends initial
HEADrequests instead of ranged
- The hash returned from the
httpsource_resource_info()delegate method may include custom request headers.
HttpSource.trust_invalid_certsconfiguration key has been renamed
HttpSource.allow_insecure. When enabled, insecure cipher suites are accepted as well as insecure certificates.
- S3Source uses a Minio client instead of the AWS Java SDK client, to work around a possible thread-starvation bug in the AWS Java SDK when S3Source and S3Cache are in use at the same time.
- Added configurable processor selection strategies, one of which uses the existing
processor.*configuration keys, and the other of which uses an automatic strategy that attempts to choose a "best" processor on a per-request basis.
- Added TurboJpegProcessor.
- Added the
repeatposition for image overlays.
- Efficiency improvements in KakaduNativeProcessor.
- KakaduNativeProcessor supports
- Java2dProcessor and PdfBoxProcessor can preserve XMP metadata across most source and output formats.
- KakaduNativeProcessor respects the
processor.metadata.preserveconfiguration key for XMP metadata.
- Worked around a bug in the GraphicsMagick
gmcommand that causes occasional "broken pipe" errors from GraphicsMagickProcessor when reading images from a FileSource.
- KakaduDemoProcessor has been deprecated, as it has been made more-or-less redundant by KakaduNativeProcessor.
- Updated the PDFBox dependency.
- Removed normalization.
- S3Cache uses last-accessed rather than last-modified times.
- Changed the S3Cache and AzureStorageCache key naming schemes to improve organization and avoid problems with edge cases.
- The change log has moved from the website to this file.
- Java 11 is supported.
- Fixed a scaling-related regression in PdfBoxProcessor.
- Streams consumed from S3Source are drained fully before closure, which makes its connection pool more efficient and fixes a warning-level error message from its internal HTTP client.
- Fixed inability to use
ScriptLookupStrategywith AzureStorageSource. (Thanks to @marc-sensenich)
- Fixed a potential math error when cropping certain images with an embedded EXIF Orientation tag.
- Improved exception handling in S3Source and S3Cache.
- Fixed inability of S3Cache and AzureStorageCache to recognize a
cache.server.derivative.ttl_secondskey value greater than 2^31.
- Worked around an issue in OpenJPEG that could cause OpenJpegProcessor to fail when reading certain images from the source cache.
- Corrected the
greyin the IIIF Image API 1.x endpoint.
- Updated the Tika dependency to address the following security vulnerability: CVE-2018-17197.
- Updated the Jackson dependency to address several security vulnerabilities.
- Updated the PDFBox dependency.
- The exploded application is more reliably cleaned up at shutdown when running in standalone mode.
- KakaduNativeProcessor supports JPEG2000-compatible JPX source images.
- Fixed an error from KakaduDemoProcessor in Windows when using a system locale that uses characters other than periods as decimal separators.
- Fixed incorrect redaction positioning when scaling.
- Fixed an error from processors that use a Java 2D processing pipeline when attempting to scale a source image that is natively less than three pixels in either dimension, or has been cropped to that size.
- Fixed an empty response when image overlays are enabled but the overlay pathname or URL is invalid. Instead, images are served without the overlay, and warnings logged.
- Updated Jetty to version 9.4.12, which fixes a potential connection leak in long-running servers when using HttpSource. (Thanks to @giancarlobi)
- Miscellaneous other dependency updates.
- Fixed a regression introduced in 3.4.3 that could cause URIs to appear with the wrong scheme in information responses and
Linkheaders. (Thanks to @mmatela and @jweisman)
- Fixed a bug that caused the minimum tile size in IIIF Image API 2.x information responses to be 512 regardless of the setting of
- Fixed a connection leak in HttpSource.
- Improved the resiliency of the internal JPEG2000 parser used by KakaduDemoProcessor and OpenJpegProcessor.
- Fixed KakaduNativeProcessor's handling of
- Removed an error message that would appear in the log when the delegate script file was not found but the delegate script was disabled.
X-Forwarded-Hostreverse proxy header may contain a port number, which will be used if
X-Forwarded-Portis not supplied.
- A new
X-Forwarded-IDreverse proxy header replaces
X-IIIF-ID, which has been deprecated, and will be removed in a future version.
- Error response representations are in
text/plainformat in the absence of a client preference.
endpoint.iiif.content_dispositionis set to
Content-Dispositionheader value includes a filename-safe version of the image identifier.
- Resolvers have been renamed sources to better reflect their core function.
- AmazonS3Resolver has been renamed S3Source, and it now supports non-AWS endpoints.
- S3Source supports a configurable path prefix and suffix when using
- AzureStorageSource supports shared access signature (SAS) URIs. (Thanks to @ddisciascio)
- Improved the efficiency of source cache content access when
cache.server.resolve_first = false.
- All sources fall back to checking the magic bytes in image data if they cannot infer a format any other way.
- KakaduProcessor has been renamed KakaduDemoProcessor to reflect the fact that it interfaces with the Kakadu demo tool,
kdu_expand, and not the native library.
- Added KakaduNativeProcessor, as well as compiled binaries for Linux, macOS, and Windows, which are free to use with it for non-commercial purposes.
DownloadStrategyas another optional retrieval strategy for stream-based processors, and as an optional fallback strategy. This enables all processors to work with all sources with no extra configuration.
- JPEG2000-compatible JPX images are readable by all processors that support JPEG2000.
- JaiProcessor has been deprecated. See the user manual for more information.
- KakaduDemoProcessor and OpenJpegProcessor work in Windows.
- KakaduDemoProcessor and OpenJpegProcessor read image metadata using custom code, which is more efficient than using the respective
opj_dumptools, and enables them to read the number of decomposition levels, which improves reliability when decoding images with less-common level counts.
- Image I/O plugins can be selected on a per-format basis.
- Improved the efficiency of the Java 2D resample filters.
- When using the Java 2D pipeline to downscale to less than three pixels on a side, an empty image with the correct dimensions is returned, rather than a downscaled 3x3 image, which is the smallest size that the Java 2D resample filters support.
- Java2dProcessor supports animated GIFs.
- Java2dProcessor supports CMYK & YCCK JPEGs.
- Worked around some behavior of the
opj_decompresstool that could cause OpenJpegProcessor to break. (Thanks to @adam-vessey)
- Improved PdfBoxProcessor's validation of requests for multi-page PDFs whose pages have inconsistent dimensions.
processor.limit_to_8_bitsconfiguration option is no longer available. All output is limited to 8 bits.
- Disabled support for GIF source images in JaiProcessor, as it was buggy and other processors can handle GIF better.
- AmazonS3Cache has been renamed S3Cache, and it now supports non-AWS endpoints.
- The time-to-live of the source and derivative caches is independently configurable.
- The cache worker dumps the contents of HeapCache during its shifts, if both are enabled and if HeapCache persistence is also enabled.
- The cache worker's work interval specifies the amount of time between the end of one shift and the beginning of the next, rather between the start of one shift and the next.
- The deprecated
DELETE /cache/:identifierHTTP API method has been removed.
- The delegate script has been redesigned as a class that is instantiated per-request. See the "Delegate Script" section of the user manual for detailed information.
- Java 10 (18.3) is supported.
- Updated JRuby to 220.127.116.11.