Skip to content

feat(imagor): add imagor provider#196

Open
xsynaptic wants to merge 1 commit into
ascorbic:mainfrom
xsynaptic:feat/imagor-provider
Open

feat(imagor): add imagor provider#196
xsynaptic wants to merge 1 commit into
ascorbic:mainfrom
xsynaptic:feat/imagor-provider

Conversation

@xsynaptic

Copy link
Copy Markdown
Contributor

Adds a provider for imagor, a self-hosted, thumbor-derived image processing server written in Go, wrapping libvips, and trivially hosted via Docker image. Addresses #37 (the thumbor/self-hosted request).

imagor uses a positional URL grammar (typed path segments with a trailing filters: map), so this follows the storyblok provider's shape rather than createOperationsHandlers.

Design notes

  • Explicit-only, no auto-detection. imagor has no fixed domain or path, so there's no data/ entry; it's selected with provider: "imagor", much like directus.
  • generate emits imagor's unsafe form by default. imagor refuses unsigned requests unless the server runs with IMAGOR_UNSAFE, and a secret-less provider can't produce the HMAC signature. The unsafe form is the only complete URL it can emit, so it's the default. As with ipx, signing is left to the operator. Consumers can pass { unsafe: false } to get the bare signable path for their own signing layer.
  • The example is on the E2E ignore list. imagor is Go, so unlike ipx it can't run as a Netlify function in the playground, and there's no public instance. The example URL is included for completeness but skipped in E2E, matching supabase and imageengine.

Known limitations

  • extract strips the unsafe sentinel but not the HMAC signature segment, so re-transforming a signed URL isn't supported (a secret-less provider can't re-sign anyway).
  • meta/, base64 source decoding, and adaptive fit variants aren't modeled; adaptive-* fit tokens are parsed but normalize to their non-adaptive form.
  • Per the image-defaults guidance: imagor defaults to cover, default format is handled server-side rather than in the URL, and upscale protection isn't expressible at the URL level in cover mode, so it's omitted.

@changeset-bot

changeset-bot Bot commented Jun 8, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a52e965

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
unpic Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant