Skip to content

Releases: xantiagoma/xtandard-image

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 07:00

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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 06:35

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

v0.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@xantiagoma xantiagoma released this 24 Oct 05:12

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

v0.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@xantiagoma xantiagoma released this 29 Sep 15:17

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-container buildx builder, following release.yml and base-image.yml by 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. The release run 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 full image 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-url TypeScript package (not on npm yet) and the opt-in gpl flavour.
  • 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 classify info 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-gpl

For 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 when XI_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-metafile2svg converter, 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|gpl on 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. TestEPS fails, and on some runs the one-worker app-tiny exits at startup. Both come from Rosetta: it cannot reserve memory under the address-space limit (RLIMIT_AS) that the sandbox puts on the Ghostscript and xi-metafile2svg subprocesses (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 with GOAMD64=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.json and .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.