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]
