X Enterprises

fastify-ximagepipeline

Image upload pipeline with EXIF stripping, content moderation, variant generation, and R2 storage.

fastify-ximagepipeline

Complete image upload pipeline: EXIF metadata stripping, AI content moderation, variant generation (thumbnail, medium, original), and Cloudflare R2 storage with async job queue.

Installation

npm install @xenterprises/fastify-ximagepipeline

Quick Start

await fastify.register(xImagePipeline, {
  storage: {
    bucket: process.env.STORAGE_BUCKET,
    endpoint: process.env.STORAGE_ENDPOINT,
    credentials: {
      accessKeyId: process.env.AWS_ACCESS_KEY_ID,
      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    },
  },
  variants: {
    thumbnail: { width: 150, height: 150, fit: 'cover' },
    medium: { width: 800 },
  },
  moderation: { enabled: true, apiKey: process.env.MODERATION_API_KEY },
})

Route Registration

// Upload route
fastify.post('/upload/image', {
  preHandler: fastify.authenticate
}, async (request) => {
  const file = await request.file()
  const result = await fastify.ximagepipeline.process(file)
  return {
    original: result.urls.original,
    thumbnail: result.urls.thumbnail,
    medium: result.urls.medium,
  }
})

AI Context

package: "@xenterprises/fastify-ximagepipeline"
decorates: fastify.ximagepipeline
use-when: User photo uploads, product images, document scans
pipeline: receive file → strip EXIF → moderate → generate variants → upload to R2 → return URLs
variants: configurable (thumbnail, medium, etc.)
async: uses job queue for heavy processing
env-required: [STORAGE_BUCKET, STORAGE_ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY]
Copyright © 2026