Back to Trigger

Media processing workflows

docs/guides/use-cases/media-processing.mdx

4.4.55.0 KB
Original Source

import UseCasesCards from "/snippets/use-cases-cards.mdx";

Overview

Build media processing pipelines that handle large files and long-running operations. Process videos, images, audio, and documents with automatic retries, progress tracking, and no timeout limits.

<CardGroup cols={3}> <Card title="FFmpeg video processing" icon="book" href="/guides/examples/ffmpeg-video-processing"> Process videos and upload results to R2 storage using FFmpeg. </Card> <Card title="Product image generator" icon="book" href="/guides/example-projects/product-image-generator" > Transform product photos into professional marketing images using Replicate. </Card> <Card title="LibreOffice PDF conversion" icon="book" href="/guides/examples/libreoffice-pdf-conversion" > Convert documents to PDF using LibreOffice. </Card> </CardGroup>

Benefits of using Trigger.dev for media processing workflows

Process multi-hour videos without timeouts: Transcode videos, extract frames, or run CPU-intensive operations for hours. No execution time limits.

Stream progress to users in real-time: Show processing status updating live in your UI. Users see exactly where encoding is and how long remains.

Parallel processing with resource control: Process hundreds of files simultaneously with configurable concurrency limits. Control resource usage without overwhelming infrastructure.

Example workflow patterns

<Tabs> <Tab title="Video transcode"> Simple video transcoding pipeline. Downloads video from storage, batch triggers parallel transcoding to multiple formats and thumbnail extraction, uploads all results. <div align="center">
mermaid
graph TB
    A[processVideo] --> B[downloadFromStorage]
    B --> C[batchTriggerAndWait]

    C --> D[transcodeToHD]
    C --> E[transcodeToSD]
    C --> F[extractThumbnail]

    D --> G[uploadToStorage]
    E --> G
    F --> G
</div> </Tab> <Tab title="Adaptive video processing"> **Router + Coordinator pattern**. Analyzes video metadata to determine source resolution, routes to appropriate transcoding preset, batch triggers parallel post-processing for thumbnails, preview clips, and chapter detection. <div align="center">
mermaid
graph TB
    A[processVideoUpload] --> B[analyzeMetadata]
    B --> C{Source
Resolution?}

    C -->|4K Source| D[transcode4K]
    C -->|HD Source| E[transcodeHD]
    C -->|SD Source| F[transcodeSD]

    D --> G[coordinatePostProcessing]
    E --> G
    F --> G

    G --> H[batchTriggerAndWait]
    H --> I[extractThumbnails]
    H --> J[generatePreview]
    H --> K[detectChapters]

    I --> L[uploadToStorage]
    J --> L
    K --> L

    L --> M[notifyComplete]
</div> </Tab> <Tab title="Smart image optimization"> **Router + Coordinator pattern**. Analyzes image content to detect type, routes to specialized processing (background removal for products, face detection for portraits, scene analysis for landscapes), upscales with AI, batch triggers parallel variant generation. <div align="center">
mermaid
graph TB
    A[processImageUpload] --> B[analyzeContent]
    B --> C{Content
Type?}

    C -->|Product| D[removeBackground]
    C -->|Portrait| E[detectFaces]
    C -->|Landscape| F[analyzeScene]

    D --> G[upscaleWithAI]
    E --> G
    F --> G

    G --> H[batchTriggerAndWait]
    H --> I[generateWebP]
    H --> J[generateThumbnails]
    H --> K[generateSocialCrops]

    I --> L[uploadToStorage]
    J --> L
    K --> L
</div> </Tab> <Tab title="Podcast production"> **Coordinator pattern**. Pre-processes raw audio with noise reduction and speaker diarization, batch triggers parallel tasks for transcription (Deepgram), audio enhancement, and chapter detection, aggregates results to generate show notes and publish. <div align="center">
mermaid
graph TB
    A[processAudioUpload] --> B[cleanAudio]
    B --> C[coordinateProcessing]

    C --> D[batchTriggerAndWait]
    D --> E[transcribeWithDeepgram]
    D --> F[enhanceAudio]
    D --> G[detectChapters]

    E --> H[generateShowNotes]
    F --> H
    G --> H

    H --> I[publishToPlatforms]
</div> </Tab> <Tab title="Document extraction with approval"> **Router pattern with human-in-the-loop**. Detects file type and routes to appropriate processor, classifies document with AI to determine type (invoice/contract/receipt), extracts structured data fields, optionally pauses with wait.forToken for human approval. <div align="center">
mermaid
graph TB
    A[processDocumentUpload] --> B[detectFileType]

    B -->|PDF| C[extractText]
    B -->|Word/Excel| D[convertToPDF]
    B -->|Image| E[runOCR]

    C --> F[classifyDocument]
    D --> F
    E --> F

    F -->|Invoice| G[extractLineItems]
    F -->|Contract| H[extractClauses]
    F -->|Receipt| I[extractExpenses]

    G --> J{Needs
Review?}
    H --> J
    I --> J

    J -->|Yes| K[wait.forToken approval]
    J -->|No| L[processAndIntegrate]
    K --> L
</div> </Tab> </Tabs> <UseCasesCards />