Back to Nodes

n8n-nodes-remotion-render

v0.5.9
Last updated Jul 9, 2026

n8n community node for rendering videos using your self-hosted Remotion server. Supports Manual timeline and Batch Render (each scene rendered individually, concat with ffmpeg, returns binary). No internal file upload β€” you control the upload strategy.

1,904 Weekly Downloads
1,904 Monthly Downloads

Description

n8n + Qdrant + AI Automation Stack πŸš€

![Docker](https://www.docker.com/)
![License: MIT](LICENSE)

> Production-ready AI automation stack β€” n8n workflows, Qdrant vector search,
> self-hosted file upload, programmatic video rendering with Remotion, and
> text-to-speech. All services in one docker compose up.

πŸ“– Overview

A lightweight, self-hosted stack combining:

  • n8n β€” workflow automation engine (400+ integrations)
  • Qdrant β€” vector database for semantic search, RAG, and AI memory
  • File Upload API β€” self-hosted file storage for images, audio, video, documents
  • Remotion Video Render β€” React-powered programmatic video engine with Ken Burns effects, text overlays, TikTok-style captions, crossfade transitions, multi-track audio, and an n8n community node with 3 input modes (Manual / Input JSON / Auto Collect)
  • Kokoro TTS β€” text-to-speech with 35+ voices (OpenAI-compatible API)
  • πŸ—οΈ Architecture

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  PostgreSQL  │◄────│     n8n      │────►│   Qdrant    β”‚
    β”‚  (metadata)  β”‚     β”‚ (automation) β”‚     β”‚  (vectors)  β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          :5432                 β”‚                   :6333
                                β”‚
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚             β”‚                       β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”
        β”‚ File Upload  β”‚  β”‚   Remotion    β”‚   β”‚   Kokoro TTS   β”‚
        β”‚ (REST, 8010) β”‚  β”‚ (REST, 3000)  β”‚   β”‚  (REST, 8880)  β”‚
        β”‚  file store  β”‚  β”‚   React/SSR   β”‚   β”‚  TTS / Speech  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   Video Gen   β”‚   β”‚   35+ voices   β”‚
                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    πŸš€ Quick Start

    1. Clone

    git clone https://github.com/mimnets/n8n-qdrant-starter.git cd n8n-qdrant-starter

    2. Create .env from the example

    cp .env.example .env

    3. Edit .env β€” add your API keys

    nano .env

    4. Start everything (builds Remotion + file-upload from local source)

    docker compose up -d

    5. Check all services are healthy

    docker compose ps

    | Access | URL |
    |——–|—–|
    | n8n | http://localhost:5678 |
    | Qdrant Dashboard | http://localhost:6333/dashboard |
    | File Upload API | http://localhost:8010 |
    | File Upload Admin | http://localhost:8010/admin |
    | Remotion API | http://localhost:3000 |
    | Remotion API Builder | http://localhost:3000/tools/api-builder |
    | Remotion Health | http://localhost:3000/health |
    | Kokoro TTS | http://localhost:8880 |
    | Kokoro TTS Swagger | http://localhost:8880/docs |
    | Kokoro TTS Web UI | http://localhost:8880/web |

    πŸ—„οΈ Services

    | Service | Image | Port (host) | Health |
    |———|——-|————-|——–|
    | postgres | postgres:16-alpine | 5432 (internal) | βœ… healthcheck |
    | n8n | n8nio/n8n:latest | 5678 | βœ… healthcheck |
    | qdrant | qdrant/qdrant:latest | 6333 | βœ… |
    | file-upload | local build β€” file-upload-server/Dockerfile | 8010 | βœ… healthcheck |
    | remotion | local build β€” remotion/Dockerfile | 3000 | βœ… healthcheck |
    | kokoro-tts | ghcr.io/remsky/kokoro-fastapi-cpu:latest | 8880 | βœ… healthcheck |

    Note: Remotion and file-upload are built from source locally. The first docker compose up -d will build these automatically.

    —

    πŸŽ₯ Remotion β€” Programmatic Video Rendering

    ![Remotion](https://remotion.dev)

    Remotion is a React-powered programmatic video engine. You describe your video as React components β€” Remotion renders each frame to a real MP4 video.

    What You Can Do

    | Feature | Description |
    |———|————-|
    | πŸ–ΌοΈ Multiple images with Ken Burns effects | zoomIn (default), zoomOut, slideLeft, slideRight, slideUp, slideDown |
    | πŸ“ Text overlays | Position at bottom (captions), center, or top. Custom font, color, weight |
    | ✨ Animated text entrances | Fade In, Slide Up, Scale In, Typewriter β€” per text clip |
    | πŸ”‘ TikTok-style captions (default) | Word-by-word gold highlighting with configurable word timing (400ms classic / 1200ms sentence) |
    | 🎡 Multi-track audio | Scene-specific audio clips + background soundtrack β€” full-length playback (no truncation) |
    | πŸ–ΌοΈ Image fit modes | cover (crop to fill), contain (fit inside), fill (stretch) β€” per scene |
    | πŸ”„ Crossfade transitions | Automatic dissolve between overlapping image clips |
    | 🎬 Resolutions | preview, mobile, SD, HD, 1080p, Vertical/Reels, 4K |
    | πŸ“ Aspect ratios | 16:9 (horizontal), 9:16 (vertical/reels) |
    | πŸ–ŒοΈ HTML scenes | Rich HTML with full CSS for text-heavy layouts |

    API Endpoints

    | Method | Path | Description |
    |——–|——|————-|
    | GET | /health | Health check |
    | POST | /edit/v1/render | Submit a render job (returns render ID) |
    | GET | /edit/v1/render/{id} | Get render status β€” "done" when video ready |
    | GET | /serve/v1/assets/{id}/output.mp4 | Download rendered MP4 |
    | GET | /tools/api-builder | Visual JSON builder UI |

    —

    πŸ”Œ n8n Community Node β€” n8n-nodes-remotion-render

    ![npm](https://www.npmjs.com/package/n8n-nodes-remotion-render)
    ![npm](https://www.npmjs.com/package/n8n-nodes-remotion-render)

    This project includes a custom n8n community node that wraps the entire Remotion API into a single drag-and-drop node. No need to manually construct JSON payloads or poll for completion. Five input modes: Manual (drag-and-drop), From Input JSON (structured data), ⭐ Sequence Combiner (each upstream item = one scene, ideal for loops), ⚑ Batch Render (render each scene independently, concat with ffmpeg), and Auto Collect (auto-detect images/audios/texts from any upstream node).

    Install

    In n8n: Settings β†’ Community Nodes β†’ Install β†’ enter n8n-nodes-remotion-render

    Or if running n8n in Docker with this stack, the custom n8n Dockerfile at n8n/Dockerfile extends the official image with ffmpeg pre-installed (required for Batch Render mode). The n8n node is mounted automatically:

    n8n:
      build: ./n8n  # Dockerfile with ffmpeg
      environment:
        - N8NCUSTOMEXTENSIONS=/home/node/custom-nodes
      volumes:
        - ./n8n-nodes-remotion-render:/home/node/custom-nodes/n8n-nodes-remotion-render
    

    Rebuild n8n to pick up ffmpeg:

    docker compose up -d --build n8n
    

    Setup Credential

    1. n8n β†’ Credentials β†’ Add New β†’ Remotion Render API – mimnets
    2. Server URL: http://remotion:3000
    3. Leave API Key blank
    4. Save

    Usage β€” Manual Mode

    After adding the node to your workflow:

    1. Add Images β€” set URL, start time, length, Ken Burns effect, fade in/out
    2. Add Text Overlays β€” enter text, set Vertical Position β†’ Bottom for captions
    3. Choose Animation β†’ Fade In / Slide Up / Scale / Typewriter for text entrance
    4. Set Caption Style β†’ TikTok Style for word-by-word highlighting
    5. Add Audio Clips or fill in Soundtrack for background music
    6. Set Resolution β†’ 1080 or Vertical for TikTok/Reels

    Usage β€” Input JSON Mode (Dynamic Data)

    Connect any upstream node that outputs this structure:

    {
      "images": [
        { "src": "https://...", "start": 0, "length": 8, "effect": "zoomIn" }
      ],
      "texts": [
        { "text": "Hello!", "start": 0, "length": 8, "vertical": "bottom", "captionStyle": "tiktok" }
      ],
      "soundtrack": { "src": "https://...", "volume": 0.15 },
      "resolution": "1080",
      "fps": 25
    }
    

    Usage β€” Auto Collect Mode (β˜… NEW β€” Zero Config)

    The node now has an Auto Collect mode that detects images, audios, and text overlays automatically from any upstream node. No Code node or manual mapping needed.

    How it works:

    1. Select Input Method β†’ Auto Collect
    2. Connect any node that outputs files (image generator, file uploader, AI node, etc.)
    3. The node scans every item and auto-detects:
    – File extensions β€” .png/.jpg/.webp β†’ image, .mp3/.wav β†’ audio
    – Key names β€” url, src, image, photo, caption, text, soundtrack
    – Explicit type field β€” set type: "image", type: "audio", type: "text"
    – content_type/mime β€” image/png, audio/mpeg
    4. Auto-timelines everything: images get sequential duration, audio aligns by index

    Example β€” 5 images β†’ reel (no Code node):

    [Image Generator / Upload API] β†’ outputs { url: "img.png" } Γ— 5
            ↓
    [Remotion Render - Auto Collect]
       β†’ Detects 5 images
       β†’ Auto-timelines: each 4s = 20s video
       β†’ Renders MP4
    

    Adjust defaults under Auto Collect Defaults: image duration, effect, text position, audio alignment, resolution, FPS.

    Output

    {
      "renderId": "abc123",
      "status": "done",
      "videoUrl": "http://remotion:3000/serve/v1/assets/abc123/output.mp4"
    }
    

    —

    🎬 n8n Workflow Examples

    Example 1: Simple Image + Caption Video

    [Manual Trigger] β†’ [Remotion Render Node] β†’ [HTTP Request to download video]
    

    Configure node:

  • Image: URL, start 0, length 10, Effect: zoomIn
  • Text: “My First Video”, start 0, length 10, Vertical: Bottom, Animation: Fade In
  • Soundtrack: background music URL
  • Resolution: 1080
  • Example 2: Multi-image TikTok-style Video

    [Code Node] β†’ [Remotion Render Node] β†’ [HTTP Request Download]
    

    Code node outputs:

    const images = [
      { src: "https://...img1.jpg", start: 0, length: 5, effect: "zoomIn" },
      { src: "https://...img2.jpg", start: 4, length: 5, effect: "slideLeft" },
      { src: "https://...img3.jpg", start: 8, length: 5, effect: "zoomOut" },
    ];
    const texts = [{
      text: "Amazing nature moments",
      start: 0, length: 13,
      vertical: "bottom", captionStyle: "tiktok", combineMs: 400
    }];
    return { images, texts, resolution: "vertical", fps: 25 };
    

    Example 3: Zero-Config Auto Collect (β˜… New)

    [Image Generator / Unsplash / File Upload]
       β†’ 5-10 images, each { url: "img.png" }
            ↓
    [Remotion Render - Auto Collect]
       β†’ Detects images automatically
       β†’ Auto-timelines: each image 4s
       β†’ Renders video
       β†’ Returns download URL
    

    No Code node. No manual config. Works whether upstream sends 3 or 20 images.

    Example 4: AI Pipeline β€” Script β†’ TTS β†’ Video

    [Code Node with script] β†’ [Kokoro TTS] β†’ [Upload Audio]
        β†’ [Generate Image via AI] β†’ [Upload Image]
        β†’ [Remotion Render] β†’ [Download Video] β†’ [Publish]
    

    —

    πŸ—£οΈ Kokoro TTS β€” Text-to-Speech

    ![Kokoro FastAPI](https://github.com/remsky/Kokoro-FastAPI)

    Dockerized FastAPI wrapper for Kokoro-82M. OpenAI-compatible API with 35+ voices.

    From n8n

    POST http://kokoro-tts:8880/v1/audio/speech
    {
      "model": "kokoro",
      "input": "Your text to speak",
      "voice": "af_bella",
      "response_format": "mp3"
    }
    

    Voices: afbella, afsky, afalloy, afjessica, amadam, ammichael, amecho, bfemma, bm_george + Japanese, Chinese, Korean, French, Spanish, Italian, Portuguese, Hindi + voice blends.

    Voice blending: "voice": "afbella(2)+afsky(1)" β†’ 67% Bella, 33% Sky

    —

    πŸ”§ Troubleshooting

    | Issue | Solution |
    |——-|———-|
    | Remotion build fails | First build takes 2-5 min (npm install + Chromium). Check logs: docker compose logs remotion |
    | n8n can’t reach services | Use Docker service names: http://remotion:3000, http://kokoro-tts:8880 |
    | Node shows “no credentials” | Create credential: Server URL = http://remotion:3000 |
    | Text stays in center | Set Vertical Position β†’ Bottom + rebuild remotion: docker compose up -d --build remotion |
    | Broken icon in n8n | Update node to v0.3.0+: npm i n8n-nodes-remotion-render@latest |
    | Auto Collect detects nothing | Check file extensions (.png, .jpg, .mp3), or add "type": "image" to upstream items |
    | TikTok captions not highlighting | Set Caption Style β†’ TikTok Style + Word Timing β†’ 400ms |
    | Port already in use | Change host ports in docker-compose.yml |

    πŸ”’ Security Notes

  • Change all default passwords in .env before production use
  • Set strong N8NENCRYPTIONKEY and N8NUSERMANAGEMENTJWTSECRET
  • Use a reverse proxy (nginx, Caddy) with HTTPS for production
  • Never commit .env (it’s gitignored)
  • Set UPLOADAPIKEY if file-upload port is exposed publicly

πŸ’Ύ Backups

Docker volumes backed up daily at 2:00 AM UTC:

0 2   * /home/ubuntu/backup-volumes.sh >> logs/backup.log 2>&1

Backed up: n8nstorage, postgresstorage, qdrantstorage, fileuploads, remotion_output

Restore

ls /home/ubuntu/backups/*.tar.gz
/home/ubuntu/restore-volume.sh volume-name backup.tar.gz

☁️ Deployment

git clone https://github.com/mimnets/n8n-qdrant-starter.git
cd n8n-qdrant-starter
cp .env.example .env
nano .env
docker compose up -d

Update

git pull
docker compose pull
docker compose up -d --build

Firewall (OCI / AWS / GCP)

| Port | Service |
|——|———|
| 5678 | n8n web UI |
| 8010 | File Upload API + admin |
| 6333 | Qdrant (internal only recommended) |
| 3000 | Remotion video rendering API + builder UI |
| 8880 | Kokoro TTS API |

πŸ“ Project Structure

n8n-qdrant-starter/
β”œβ”€β”€ .env.example              # Environment template
β”œβ”€β”€ docker-compose.yml        # All services in one stack
β”œβ”€β”€ README.md
β”œβ”€β”€ LICENSE
β”œβ”€β”€ scripts/
β”‚   └── n8n-entrypoint.sh
β”œβ”€β”€ n8n/                       # Custom n8n Dockerfile (adds ffmpeg)
β”‚   └── Dockerfile
β”œβ”€β”€ remotion/                 # Remotion video render engine
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ server.ts         # Express API + render route
β”‚   β”‚   β”œβ”€β”€ Root.tsx          # Remotion entry point
β”‚   β”‚   └── compositions/
β”‚   β”‚       └── VideoComposition.tsx  # All rendering logic
β”‚   └── package.json
β”œβ”€β”€ n8n-nodes-remotion-render/        # n8n community node
β”‚   β”œβ”€β”€ nodes/RemotionRender/         # Node source + UI fields
β”‚   └── credentials/                  # Credential type
β”œβ”€β”€ file-upload-server/      # File Upload API
β”œβ”€β”€ tools/
β”‚   β”œβ”€β”€ remotion-render-workflow.json # Sample n8n workflow
β”‚   └── REMOTION-ROADMAP.md          # Feature roadmap
└── ...