Repository navigation
Releases: xantiagoma/xtandard-image
Release list
v0.1.1
Images (verify with cosign verify, see docs/RELEASE.md):
ghcr.io/xantiagoma/xtandard-image:0.1.1-slim(ghcr.io/xantiagoma/xtandard-image@sha256:39c3418f02a034ccc9906d8b1c68ed704df359d1ce1be1f6bf161e4d5938f565)ghcr.io/xantiagoma/xtandard-image:0.1.1-full(ghcr.io/xantiagoma/xtandard-image@sha256:90cc6f52fa84ac8d7cd15dc42cf642f6d280e71b5c36cfab5e42089f66b0285f)ghcr.io/xantiagoma/xtandard-image:0.1.1-gpl(ghcr.io/xantiagoma/xtandard-image@sha256:d7bb8e649ed36fa772e4dda6f7cf3e88cd087fc2c15992ddfd58f0280341d21f)
ghcr.io/xantiagoma/xtandard-image:0.1.1 is the slim flavor. The gpl flavor contains GPL and AGPL software (see its /opt/xtandard/share/licenses/LICENSE-GPL.md).
What's Changed
- docs: documentation website with Astro Starlight (WP-156) by @xantiagoma in #164
Full Changelog: v0.1.0...v0.1.1
v0.1.0
Images (verify with cosign verify, see docs/RELEASE.md):
ghcr.io/xantiagoma/xtandard-image:0.1.0-slim(ghcr.io/xantiagoma/xtandard-image@sha256:bb60f91a7638ae5d0e2783f416d66d83bf10fc6a81f16f782bf2adcf386e4290)ghcr.io/xantiagoma/xtandard-image:0.1.0-full(ghcr.io/xantiagoma/xtandard-image@sha256:4128695c3f2ef30a82703275d49f8dc58504283166a165fc6f92b5fb5a0d109f)ghcr.io/xantiagoma/xtandard-image:0.1.0-gpl(ghcr.io/xantiagoma/xtandard-image@sha256:4f44a032a3fd19a9e10754419c4a881e8d8c6012b00de714f98f640849ae1d18)
ghcr.io/xantiagoma/xtandard-image:0.1.0 is the slim flavor. The gpl flavor contains GPL and AGPL software (see its /opt/xtandard/share/licenses/LICENSE-GPL.md).
What's Changed
- clients: user-facing READMEs for every registry (WP-154) by @xantiagoma in #162
- ci: edge images from main (main, main-full, main-gpl, sha-*) (WP-155) by @xantiagoma in #163
Full Changelog: v0.1.0-rc.2...v0.1.0
v0.1.0-rc.2
Images (verify with cosign verify, see docs/RELEASE.md):
ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.2-slim(ghcr.io/xantiagoma/xtandard-image@sha256:91dbd99ff5b389dae1b439768316a29dfd57ae02d934347b3ae286057547bc2e)ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.2-full(ghcr.io/xantiagoma/xtandard-image@sha256:faf98f9a5cda314d53e43ea1462a881960fff18e983ce80b8892b2202707b5a4)ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.2-gpl(ghcr.io/xantiagoma/xtandard-image@sha256:e0a19da5068e637d8951414abeaf5d2ed2360bc4b1cddc0d3ab6757a52f6fa5f)
ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.2 is the slim flavor. The gpl flavor contains GPL and AGPL software (see its /opt/xtandard/share/licenses/LICENSE-GPL.md).
v0.1.0-rc.1
First prerelease of xtandard-image, a self-hosted image processing proxy (Go 1.27 + libvips 8.18.6) that speaks the imgproxy, imgix, Cloudinary, ImageKit, thumbor, wsrv, Cloudflare and other URL dialects.
Built locally, not signed. GitHub Actions is unavailable (billing), so these images were built and pushed from macOS arm64 (OrbStack; linux/arm64 native, linux/amd64 emulated with Rosetta) with a
docker-containerbuildx builder, followingrelease.ymlandbase-image.ymlby hand (docs/RELEASE.md, "Local release (no Actions)"). They carry no cosign signature and no SLSA provenance: keyless signing needs the GitHub OIDC identity of the release workflow. When Actions is available again, the CI release workflow will re-publish signed images. Thereleaserun started by pushing this tag fails because of billing; that failure is expected.
Commit: 8c9d16b23b527c201d0e91a2455fa56dd8028cc6.
Highlights (M1 to M4)
- M1, core: the imgproxy dialect end to end, plus the query dialect, over http, S3, GCS, Azure, fs, FTP and SFTP sources. It covers the core geometry, filters, watermark, metadata/ICC handling, every still format encoder, format negotiation, signing and encryption, a mandatory source allowlist, SSRF protection, admission control (429/503), Prometheus metrics, health and readiness. The release image runs read-only as UID 65532.
- M2, breadth: every URL dialect, including the unpic providers. It adds RAW (LibRaw), PDF (PDFium), PSD and HDR inputs, a memory/disk/S3/Redis result cache, best format and auto-quality, chained pipelines, colour adjustments, the imgproxy Pro processing options,
/info, client hints, a config JSON Schema and an OpenAPI document. - M3, intelligence, video and polish: the
fullimage adds FFmpeg (LGPL) and ONNX Runtime. On top of that come face/object detection with detection-based crops and filters, video thumbnails, tiles and animation, GIF to video, the imgix mount, advanced and text watermarks, the playground (off by default), the@xtandard/image-urlTypeScript package (not on npm yet) and the opt-ingplflavour. - M4, playground and long tail: playground v2 with an option builder, translation, an Info panel and watermark recipes. It also brings detection on video frames and through chained pipelines, and long-tail inputs: JPEG XR, PNM, TGA/PCX/DDS/QOI and more, EPS/PS/AI through sandboxed Ghostscript (gpl only, off by default), a LibRaw snapshot with X3F, and GPR/JPEG XL DNG through the Adobe DNG SDK (gpl only). Further inputs are designer containers (XCF, ORA, KRA, Procreate, Sketch), Lab TIFF, CMYK JPEG XL, BC6H DDS, AVIF sequences and gain maps, 12/16-bit JPEG, FITS/DICOM/KTX2/WMF/EMF, password-protected PDFs and the
classifyinfo option (ImageNet, CPU).
Images
Every image is a multi-arch index for linux/amd64 and linux/arm64. Prerelease tags only: latest, slim, full and gpl do not move for a prerelease.
| Flavour | Tags | Index digest | linux/amd64 | linux/arm64 |
|---|---|---|---|---|
| slim | ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1, :0.1.0-rc.1-slim |
sha256:80da57aa0361a8546a1ebb9a429e03a06adeedd1d9d5d1df5189e35ca788e308 |
sha256:e1515b649cc07ac17e3a81b4109c4ce0fef2808d804d1ea110a2aa2778636e87 |
sha256:cf4de95e541fc704ca03c11c8ea515d33d73eb5373b18b934bf2b30684d6f5d8 |
| full | ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1-full |
sha256:ad5fee22d184ea59e0fb3e362477d5d2b9b3f80aa8de120c8ed6ccb2f132de2a |
sha256:8d142fcaa12a5723354b659155fd2178b3fc95af0b53aa586421ce76fd4e4206 |
sha256:a2e7adc94a430de52d5010b92c0a38bc04035dccf3c78d6396445c7b0141a755 |
| gpl | ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1-gpl |
sha256:06f910e9504192583a9932a740f48aea2cbd32dd056db37c3fc52621df7956a7 |
sha256:6bca425c918758e7e88e4ef45c0fecda0416b5d1269b59e0fa68e695d921bfb1 |
sha256:4423fc20b3fe01f785c8333b71b47c04be38e335200c9b17f0311c34d3b3394f |
Compressed sizes (docker save | gzip), amd64 / arm64: slim 78.7 / 75.3 MB, full 148.4 / 144.1 MB, gpl 163.7 / 159.9 MB.
Base images (ghcr.io/xantiagoma/xtandard-image-base, also tagged :slim, :full, :gpl and :<flavour>-builder):
| Tag | Index digest |
|---|---|
8.18.6-r7-slim |
sha256:13c9b60b53f6c38103745517a217efbd7fefce0c4680cb66f8b404486d98b837 |
8.18.6-r7-slim-builder |
sha256:61d961a7adf0eb73730c02a7320bd78534cdf2d8fa633851c6cb9d17171d66ee |
8.18.6-r8-full |
sha256:d60a7e504478e5acf282f69f8c36837dac5a39b4f842f6e93448814132c83db3 |
8.18.6-r8-full-builder |
sha256:a77b9d43fbccb3cc1f417da600aa49df2a42ffdb6d375980043144a1c87bec51 |
8.18.6-r9-gpl |
sha256:c93444f2f6b902bdea3957d7c7625d640633ee40c8595e4f5ea5c27e98318e96 |
8.18.6-r9-gpl-builder |
sha256:e827bd824d492cd141c0de64c486733eec5bb271ab7c4401d7aa60a000448d54 |
The packages are private while the repository is private: docker login ghcr.io first.
Running
# slim: every still format
docker run -d -p 8080:8080 -e XI_DEV_MODE=true ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1
curl -fsS -o thumb.webp 'http://localhost:8080/insecure/rs:fit:640:0/plain/https://images.unsplash.com/photo-1506744038136-46273834b3fb@webp'
# full: + video (FFmpeg LGPL), face/object detection and classification (ONNX Runtime, CPU)
docker run -d -p 8080:8080 -e XI_DEV_MODE=true ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1-full
# gpl: full + H.264/HEVC encoding, EPS/PS/AI (opt in), WMF/EMF, JPEG XL DNG and GoPro GPR
docker run -d -p 8080:8080 -e XI_DEV_MODE=true -e XI_FORMATS_EPS_ENABLED=true \
ghcr.io/xantiagoma/xtandard-image:0.1.0-rc.1-gplFor production, run with --read-only --tmpfs /tmp --cap-drop ALL and configure sources, signing keys and the allowlist. See the README quick start, docs/CONFIG.md and docs/SOURCES.md. The playground is available with -e XI_ADMIN_ADDR=:9090 -e XI_PLAYGROUND_ENABLED=true -p 9090:9090; open http://127.0.0.1:9090/_playground/.
Licences
The xtandard-image code is MIT. slim and full contain no GPL code. The gpl image contains GPL and AGPL software:
- FFmpeg built with
--enable-gpl, with x264 and x265: GPL-2.0-or-later. H.264 and HEVC are covered by patents, and the project grants no patent licence. - Ghostscript
gs: AGPL-3.0-or-later, a separate program run in a sandbox only whenXI_FORMATS_EPS_ENABLED=true. It runs a PostScript interpreter on untrusted input, so read the security note in docs/CONFIG.md first. - libemf2svg: GPL-2.0-only, and libwmf: LGPL-2.0-or-later with GPL fonts. Both sit in the
xi-metafile2svgconverter, also run in a sandbox. - The Adobe DNG SDK, under the Adobe DNG SDK License Agreement (permissive, with an indemnity clause), and the GoPro GPR SDK (Apache-2.0 OR MIT), both linked into LibRaw. They ship in the gpl image only.
If you run or redistribute the gpl image, checking that these licences and the patents fit your use is your responsibility. If you are unsure, use full. Every image carries its licence texts in /opt/xtandard/share/licenses/, and gpl adds LICENSE-GPL.md (ADR 0006, ADR 0011).
Verification done for this build
- Base images:
docker/base/verify-image.sh --flavor slim|full|gplon every per-arch runtime and builder pair, including the licence gate (gpl mode with--allow-gpl). The licence gate self-test (test-check-licenses.sh) also ran. All passed on arm64 (native) and amd64 (emulated). - App images:
scripts/verify-app-image.sh(version, image config, size budget of 110 MB for slim and 170 MB for full/gpl, read-only rootfs and health, smoke test) passed for all 3 flavours on both architectures. - M1 acceptance suite,
scripts/acceptance.sh:- arm64: 133/133 for slim, full and gpl.
- amd64 (emulated): 133/133 for slim and full.
- amd64 gpl (emulated): 132/133.
TestEPSfails, and on some runs the one-workerapp-tinyexits at startup. Both come from Rosetta: it cannot reserve memory under the address-space limit (RLIMIT_AS) that the sandbox puts on the Ghostscript andxi-metafile2svgsubprocesses (rosetta error: mmap_anonymous_rw mmap failed). The same image passes on arm64, and native amd64 is not affected. On Apple Silicon, run the arm64 image: under amd64 emulation, EPS and WMF/EMF input do not work in gpl.
- PGO: every binary reports
-pgo=default.pgo(cmd/xtandard-image/default.pgo). amd64 builds withGOAMD64=v2.
Assets
xtandard-image-0.1.0-rc.1-<flavour>-linux-<arch>.debug: unstripped binaries for crash symbolication.xtandard-image-0.1.0-rc.1-<flavour>-linux-<arch>.spdx.jsonand.cdx.json: syft 1.52.0 SBOMs (SPDX and CycloneDX) of each per-arch app image. They are release assets only and are not attested to the registry.xtandard-image-base-sboms-0.1.0-rc.1.tar.gz: the same SBOMs for the 12 per-arch base images.SHA256SUMS.