Transloadit
Upload and media processing
git clone https://github.com/bijectionhq/transloadit.git
cd transloadit
git checkout a26a7c41bee57e8ce8fef983dcf6b488b896766dBijection repository access is required. Request access.
Description
Upload and media processing
Explore the package README for API concepts, configuration, and examples. Check the Bijection source for adaptation-specific setup.
Review the source and its dependencies before adopting this package. Source availability does not establish npm publication or runtime qualification.
Getting started
- Get the source at the revision above and read its package documentation.
- Check the required Bijection SDK version, dependencies, and external service credentials.
- Follow the package setup instructions and the guide to using components.
- Exercise the component in your deployment according to your project’s verification rules.
Open source
Maintained source: bijectionhq/transloadit. Based on transloadit/convex. License: Apache-2.0. Consult the repository for license terms, notices, and contributor attribution.
From the upstream publisher
Transloadit component for Convex
Explore the demo ↗Upstream overview
From the upstream package documentation.
This component provides a complete integration between Convex and Transloadit's media processing platform. It handles creating Assemblies with Templates or inline Steps, generates signed upload options for secure client-side uploads with Uppy, and persists Assembly status and results in Convex tables. The component includes webhook ingestion with signature verification and provides typed API wrappers for managing the entire media processing lifecycle.
Use cases
From the upstream package documentation.
- Build media galleries where users upload images/videos that need automatic resizing, format conversion, or thumbnail generation before storage
- Process user-generated content by creating secure upload flows that resize avatars, compress videos, or extract metadata without exposing API secrets to clients
- Handle file transformations in real-time applications where you need to track processing status and display results as they complete
- Implement batch media processing for applications that need to apply consistent transformations across multiple files with webhook-based status updates
- Create secure upload workflows using Uppy where authentication and processing parameters are generated server-side but uploads happen client-side
How it works
From the upstream package documentation.
The component follows a secure server-first pattern where Convex actions create signed assemblyOptions using createAssembly or createAssemblyOptions, keeping your Transloadit auth secret server-side. Clients use these options with Uppy and @uppy/transloadit to upload directly to Transloadit for processing.
Webhooks are handled through handleWebhookRequest which verifies signatures and can either process immediately or queue via queueWebhook for durable processing. The component maintains two tables: assemblies for tracking processing status and metadata, and results for storing individual output files grouped by assemblyId and stepName.
The main API is exposed through makeTransloaditAPI which provides functions like refreshAssembly, getAssemblyStatus, and listResults for building real-time UIs. You configure it by registering the component in convex.config.ts and setting TRANSLOADIT_KEY and TRANSLOADIT_SECRET environment variables.
Use with agents and CLI
Give your coding agent the component’s source identity and setup guidance.
Help me integrate Transloadit with Bijection.
Read: https://bijection.com/components/transloadit/SKILL.md
Check SDK compatibility and dependency availability.
Follow this project's execution and verification rules.Upstream README.md
View repository ↗Documentation from transloadit/convex, recorded October 23, 2026. APIs and setup may differ in the Bijection adaptation.
Transloadit Convex Component
A Convex component for creating Transloadit Assemblies, signing Uppy uploads, and persisting status/results in Convex.
Features
- Create Assemblies with Templates or inline Steps.
- Signed upload options for Uppy +
@uppy/transloadit. - Webhook ingestion with signature verification (direct or queued).
- Persist Assembly status + results in Convex tables.
- Typed API wrappers and helpers.
Requirements
- Node.js 24+
- Yarn 4 (Corepack)
Install
yarn add @transloadit/convex
Setup
1) Register the component
// convex/convex.config.ts
import { defineApp } from "convex/server";
import transloadit from "@transloadit/convex/convex.config";
const app = defineApp();
app.use(transloadit);
export default app;
2) Set environment variables
npx convex env set TRANSLOADIT_KEY <your_auth_key>
npx convex env set TRANSLOADIT_SECRET <your_auth_secret>
Golden path (secure by default)
- Server-only create: a Convex action creates signed
assemblyOptions(auth secret stays server-side). - Client upload: use Uppy +
@uppy/transloaditwithassemblyOptions(). - Webhook ingestion: verify the signature and
queueWebhookfor durable processing. - Realtime UI: query status/results and render the gallery.
Backend API
// convex/transloadit.ts
import { makeTransloaditAPI } from "@transloadit/convex";
import { components } from "./_generated/api";
export const {
createAssembly,
createAssemblyOptions,
handleWebhook,
queueWebhook,
refreshAssembly,
getAssemblyStatus,
listAssemblies,
listResults,
storeAssemblyMetadata,
} = makeTransloaditAPI(components.transloadit);
Note: pass expires in createAssembly when you need a custom expiry; otherwise the component defaults to 1 hour from now.
Data model
The component stores Transloadit metadata in two tables:
assemblies 1 ──── * results
assemblies: one row per Transloadit Assembly (status/ok, notify URL, uploads, raw payload, etc).results: one row per output file, grouped byassemblyId+stepName(a step can yield multiple rows). Each row includes normalized fields (name/size/mime/url), optionalresultId, and the raw Transloadit output object.
Lifecycle:
createAssemblyinserts the initialassembliesrow.handleWebhook,queueWebhook, orrefreshAssemblyupserts the assembly + replaces results.listResultsreturns flattened step outputs for use in UIs.
Webhook route
Transloadit sends webhooks as multipart/form-data with transloadit (JSON) and signature fields.
// convex/http.ts
import { httpRouter } from "convex/server";
import { handleWebhookRequest } from "@transloadit/convex";
import { api } from "./_generated/api";
import { httpAction } from "./_generated/server";
const http = httpRouter();
http.route({
path: "/transloadit/webhook",
method: "POST",
handler: httpAction((ctx, request) =>
handleWebhookRequest(request, {
mode: "queue",
runAction: (args) => ctx.runAction(api.transloadit.queueWebhook, args),
}),
),
});
export default http;
Client wrapper (optional)
Most integrations should use makeTransloaditAPI (above). If you prefer a class-based API
(similar to other Convex components), use Transloadit:
import { Transloadit } from "@transloadit/convex";
import { components } from "./_generated/api";
const transloadit = new Transloadit(components.transloadit, {
authKey: process.env.TRANSLOADIT_KEY!,
authSecret: process.env.TRANSLOADIT_SECRET!,
});
Uppy client (React example)
import Uppy from "@uppy/core";
import Transloadit from "@uppy/transloadit";
import { api } from "../convex/_generated/api";
const uppy = new Uppy().use(Transloadit, {
waitForEncoding: true,
assemblyOptions: async () => {
const { assemblyOptions } = await runAction(
api.wedding.createWeddingAssemblyOptions,
{ fileCount, guestName, uploadCode },
);
return assemblyOptions;
},
});
await uppy.upload();
Note: assemblyOptions() is called once per batch, so pass per-file metadata via Uppy file meta
(e.g. uppy.setFileMeta(fileId, {...})) and use fields for shared values.
Migration note: the @transloadit/convex/react entrypoint has been removed; use Uppy +
@uppy/transloadit directly.
For status parsing and polling helpers, see docs/advanced.md.
Example app (Next.js + Uppy wedding gallery)
The example/ app is a wedding gallery where guests upload photos + short videos. It uses Uppy on
the client and Convex Auth (anonymous sign-in) to create assemblies securely. Uploads are stored via
Transloadit directly into Cloudflare R2.
Live demo: https://convex-demo.transload.it
For setup, deployment, and verification details, see CONTRIBUTING.md.