BriterWrite. Publish. Own it.

Documentation

Images

Upload pipeline, AVIF/WebP variants, EXIF stripping, and storage budget.

Images

Briter processes every uploaded image through a pipeline before storing it. The goal: small files, no privacy leaks, responsive-ready variants.

Upload flow

  1. Paste or drag an image onto the editor.
  2. Briter validates the file using magic-byte inspection (not just MIME type).
  3. The image is processed: EXIF stripped, resized into variants, encoded as AVIF and WebP.
  4. All variants are stored flat in the upload root (BRITER_UPLOAD_ROOT, default storage/uploads/posts/), named <sha256>-<width>.<avif|webp>.
  5. A manifest JSON records variant paths and dimensions.
  6. The editor inserts a Markdown image tag pointing to the 800px WebP variant (or the largest WebP variant when the image is narrower than 800px), under BRITER_UPLOAD_ROUTE_BASE.
  7. When you save or publish the post, the git-sync job stages every variant and the manifest of each upload the post references, so the images are committed with the post.

Variants

Each upload produces variants at 400, 800, 1200, and 1600 pixels wide, in both AVIF and WebP format. Briter never upscales: an image narrower than 1600px gets the default widths below its own width plus one variant at its full width (a 768px image gets 400 and 768). The original is not stored. Use <picture> or a Next.js <Image> component in your theme to serve the right variant.

Dimension limits: 8000px on either axis, 24 megapixels total. Images exceeding these are rejected.

EXIF stripping

All EXIF metadata is removed before saving, including GPS coordinates, camera make/model, and timestamps. This happens unconditionally — there is no opt-out.

Storage budget

You can set a storage cap in Settings (default 500 MB). When a new upload would cross 95% of the cap — or exceed it outright — Briter rejects it with an UploadLimitError. The setup wizard senses real free disk to propose the cap.

Check current usage on the dashboard — a storage bar shows used vs. cap, alongside physical free disk. See Storage & uploads for the full provisioning model.

To remove old uploads, delete the variant files from storage/uploads/ and the corresponding manifest. Briter does not yet have a media library manager (planned for v1.1).

Supported formats

Input: JPEG, PNG, WebP, AVIF, GIF (GIFs are converted to static).

Output always: AVIF + WebP variants.

Unsupported formats (SVG, TIFF, BMP, etc.) are rejected. Upload them as file attachments through the git-target adapter's upload subpath if needed.