> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openinary.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> New features, improvements, and fixes shipped in Openinary

<Update label="July 11, 2026" description="CLI patch fixes" tags={["Fix"]}>
  **Clearer next steps when Docker isn't running** — `openinary create` now tells you clearly what to do next if Docker isn't available on your machine, instead of leaving you stuck.
</Update>

<Update label="July 11, 2026" description="Weekly update" tags={["Feature", "Fix"]}>
  ## New features

  **Official Openinary CLI** — Spin up a new Openinary instance in seconds with `create-openinary`, or manage an existing one with the `openinary` CLI. This is now the recommended way to get started — see the [quickstart guide](/quickstart).

  **Presigned client-side uploads** — Large files can now be uploaded directly to your storage backend using presigned URLs, taking load off your server and speeding up uploads.

  **Appearance settings** — You can now hide thumbnails in the media grid from the dashboard's appearance settings, handy for large libraries or slower connections.

  **Anonymous usage telemetry** — Openinary now collects anonymous, non-identifying usage data to help us understand how the project is used and prioritize improvements.

  ## Improvements

  **Faster folder browsing** — The dashboard now loads folder contents on demand instead of fetching your entire storage tree at once, making navigation much faster on large libraries.

  **Media grid and bulk actions** — The media grid got a round of polish, including support for selecting and acting on multiple files at once.

  ## Bug fixes

  * **`.DS_Store` files ignored on upload** — Folder uploads from macOS no longer fail or clutter your storage because of stray `.DS_Store` files.
  * **Video worker concurrency** — Video processing now correctly detects available memory in containerized environments, avoiding overloaded workers on small instances.
  * **Video jobs no longer block the API** — Video processing on small containers no longer starves HTTP requests, keeping transformations responsive during heavy video load.
  * **Lower memory usage after jobs** — Memory is now released more reliably after image and video processing, reducing RSS growth over time.
</Update>

<Update label="June 27, 2026" description="Weekly update" tags={["Feature", "Fix", "Improvement"]}>
  ## New features

  **Round corners transformation** — You can now round the corners of any image using the `r` parameter, including full circles and ovals. See the [transform API reference](/api-reference/media/transform#r).

  ## Improvements

  **Parallel video processing** — Video jobs are now processed in parallel up to your configured concurrency limit, speeding up queues with multiple pending videos.

  **Faster image transformations** — Image processing now uses non-blocking file I/O, improving throughput under load.

  **Open source help links** — In-app help links now point to GitHub instead of commercial resources.

  ## Bug fixes

  * **API key Bearer auth bypass** — Fixed an authentication issue where API key validation could be bypassed via the Bearer header.
  * **Crop and resize combined** — Fixed aspect-ratio cropping being ignored when combined with a resize parameter.
  * **Video content type** — Thumbnails and non-MP4 video outputs now report the correct content type.
  * **File extension casing** — Extensions are now lowercased before format matching, fixing edge cases with mixed-case file names.
</Update>

<Update label="April 27, 2026" description="Weekly update" tags={["Fix"]}>
  ## Bug fixes

  * **Uppercase file extensions** — Files with uppercase extensions (such as `.JPG` or `.PNG`) are now correctly recognized and processed instead of being rejected as unsupported. See the [transform API reference](/api-reference/media/transform) for supported formats.
</Update>

<Update label="April 20, 2026" description="April update" tags={["Feature", "Fix"]}>
  ## New features

  **Round corners transformation** — You can now round the corners of any image using the `r` parameter. Apply a uniform radius, set each corner individually, or use `r_max` for a full circle or oval. Pair with `b_rgb:<hex>` to fill the corners with a solid color. See the [transform API reference](/api-reference/media/transform#r) for all syntax options.

  **PSD file support** — Openinary now accepts Adobe Photoshop (`.psd`) files. Upload PSD files through the API or the web dashboard, and apply image transformations just like any other format. PSD sources are automatically converted before processing.

  **HEIC and HEIF upload support** — You can now upload images in HEIC and HEIF formats (common on iOS devices). Files are automatically normalized for compatibility with the transformation pipeline.

  **Configurable upload file size limit** — The maximum upload size is no longer hardcoded. Set the `MAX_FILE_SIZE_MB` environment variable to allow larger files — useful for video uploads on self-hosted instances. Defaults to 50 MB. See [server configuration](/configuration/server#max-file-size-mb).

  **Original file download route** — A new `GET /download/{path}` endpoint lets you retrieve the original uploaded file without any transformations applied. See the [download API reference](/api-reference/files/download).

  **Folder management in the web UI** — You can now create and delete folders directly from the Openinary dashboard, including support for empty folders on S3 and R2 storage backends.

  **Upload prewarming** — When uploading files, you can pass a list of transformations to pre-generate and cache immediately. The first public request for those variants is served instantly instead of triggering on-demand processing. See [upload & cache warming](/media-transformations/upload-and-prewarm).

  **Multi-architecture Docker images** — Docker images now support both AMD64 and ARM64 architectures, so you can run Openinary on Raspberry Pi, Apple Silicon, and AWS Graviton without any extra steps.

  **Cache invalidation endpoint** — A new authenticated endpoint lets you programmatically purge cached transformations. See the [cache invalidation API reference](/api-reference/cache/invalidate).

  **Signed URLs** — Restrict who can request transformations by signing delivery URLs with HMAC-SHA256. Requests with a missing or invalid signature are rejected. See [signed URLs](/media-transformations/signed-urls).

  **Public rate limiting** — Public transformation and download routes are now rate-limited per IP. Configure the window and max requests with `PUBLIC_RATE_LIMIT_MAX` and `PUBLIC_RATE_LIMIT_WINDOW_MS`. See [server configuration](/configuration/server#public-rate-limit-max).

  ## Improvements

  **Folder thumbnails** — Folders in the media grid now display thumbnail previews of their contents.

  **Configurable S3/R2 connection settings** — You can now set socket limits, request timeouts, and connection timeouts for S3-compatible storage backends via environment variables. See [storage configuration](/configuration/storage).

  ## Bug fixes

  * **Transparency preserved with quality parameter** — Applying a `q` (quality) parameter no longer strips the alpha channel from PNG, WebP, or AVIF images.
  * **Folder names with underscores** — Folder names containing underscores are no longer misidentified as transformation segments in the URL path.
  * **Image transformation race condition** — Fixed a concurrency issue that could cause intermittent failures when multiple transformations were requested simultaneously.
  * **Empty folder handling on S3/R2** — Creating and displaying empty folders now works correctly with S3 and R2 storage backends.
</Update>

<Update label="April 12, 2026" description="Weekly update" tags={["Feature", "Fix"]}>
  ## New features

  **Configurable upload file size limit** — Set the `MAX_FILE_SIZE_MB` environment variable to allow larger uploads on self-hosted instances. See [server configuration](/configuration/server#max-file-size-mb).

  ## Improvements

  **Folder thumbnails** — Folders in the media grid now show thumbnail previews of their contents.

  ## Bug fixes

  * **Transparency preserved with quality parameter** — Applying a `q` (quality) parameter no longer strips the alpha channel from PNG, WebP, or AVIF images.
  * **Folder names with underscores** — Folder names containing underscores are no longer misidentified as transformation segments in the URL path.
</Update>

<Update label="April 7, 2026" description="Weekly update" tags={["Feature", "Fix"]}>
  ## New features

  **HEIC and HEIF upload support** — You can now upload images in HEIC and HEIF formats, common on iOS devices. Files are automatically normalized for the transformation pipeline.

  **PSD file support** — Openinary now accepts Adobe Photoshop (`.psd`) files, automatically converted before processing.

  **Folder management in the web UI** — Create and delete folders directly from the dashboard, including empty folders on S3 and R2 storage backends.

  ## Bug fixes

  * **Image transformation race condition** — Fixed a concurrency issue that could cause intermittent failures when multiple transformations were requested simultaneously.
</Update>

<Update label="March 7, 2026" description="Weekly update" tags={["Feature", "Fix"]}>
  ## New features

  **Named file uploads** — Uploads now support custom file names instead of relying only on generated ones.

  **Target folder on upload** — Specify a destination folder directly when uploading a file.

  **Signed URLs** — Restrict who can request transformations by signing delivery URLs with HMAC-SHA256. See [signed URLs](/media-transformations/signed-urls).

  **Multi-architecture Docker images** — Docker images now support both AMD64 and ARM64, so Openinary runs on Raspberry Pi, Apple Silicon, and AWS Graviton without extra steps.

  ## Bug fixes

  * **Docker build reliability** — Fixed a missing OpenSSL dependency and a SQLite race condition during table initialization.
  * **API key auth compatibility** — Fixed the `apiKey` table schema for compatibility with newer Better Auth versions.
  * **Environment template** — Corrected `STORAGE_*` variable names in `env.template`.
</Update>

<Update label="December 27, 2025" description="Weekly update" tags={["Feature"]}>
  ## New features

  **Cache invalidation endpoint** — A new authenticated endpoint lets you programmatically purge cached transformations after replacing a file directly in storage. See the [cache invalidation API reference](/api-reference/cache/invalidate).

  **Configurable S3/R2 connection settings** — Set socket limits, request timeouts, and connection timeouts for S3-compatible storage backends via environment variables. See [storage configuration](/configuration/storage).
</Update>

<Update label="December 23, 2025" description="Weekly update" tags={["Feature", "Fix", "Security"]}>
  ## New features

  **Single admin account enforcement** — Sign-ups are now restricted to a single admin account, enforced at the database level.

  **Version endpoint** — A new public `/api/version` endpoint and UI components let you check the running Openinary version.

  ## Improvements

  **Stricter session validation** — Sessions are now revalidated against the database on every request, so deleted users lose access immediately.

  **Async auth initialization** — Authentication now initializes asynchronously, improving startup performance.

  ## Bug fixes

  * **Loading screen after login** — Fixed a stuck loading screen caused by stale sessions for deleted users.
  * **Setup page 500 error** — Fixed a crash on `/setup` when an admin account already existed.
</Update>

<Update label="December 20, 2025" description="Initial release" tags={["Feature"]}>
  ## Openinary is live

  The first beta release of Openinary: a media transformation API for images and videos, with a web dashboard, API key management, S3-compatible and local storage support, automatic video transcoding via FFmpeg, and Docker support for easy self-hosting.
</Update>
