Skip to content

Find a component

Loading the directory…

↑ ↓ to select · Enter to open · Esc to closeBrowse all →
Contributor login

Transloadit

Upload and media processing

Bijection source
git clone https://github.com/bijectionhq/transloadit.git
cd transloadit
git checkout a26a7c41bee57e8ce8fef983dcf6b488b896766d

Bijection 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.

Available to evaluate

Review the source and its dependencies before adopting this package. Source availability does not establish npm publication or runtime qualification.

Getting started

  1. Get the source at the revision above and read its package documentation.
  2. Check the required Bijection SDK version, dependencies, and external service credentials.
  3. Follow the package setup instructions and the guide to using components.
  4. 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.

agent-prompt.md
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)

  1. Server-only create: a Convex action creates signed assemblyOptions (auth secret stays server-side).
  2. Client upload: use Uppy + @uppy/transloadit with assemblyOptions().
  3. Webhook ingestion: verify the signature and queueWebhook for durable processing.
  4. 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 by assemblyId + stepName (a step can yield multiple rows). Each row includes normalized fields (name/size/mime/url), optional resultId, and the raw Transloadit output object.

Lifecycle:

  1. createAssembly inserts the initial assemblies row.
  2. handleWebhook, queueWebhook, or refreshAssembly upserts the assembly + replaces results.
  3. listResults returns 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.