← Back

Kwae render platform

Kwae is a full-stack dynamic video platform that allows users to generate video outputs from structured templates. The system is composed of four main parts: a web frontend, a backend API, a distributed render client, and an Adobe After Effects plugin.

Frontend (Next.js)

The frontend is built with Next.js and serves as the primary user interface. It allows users to:

The UI communicates with the backend through a secured API and handles state management, job polling, and file delivery.

Backend (NestJS)

The backend is implemented in NestJS and acts as the orchestration layer of the system. Its responsibilities include:

The backend exposes REST endpoints and manages render lifecycle state (queued → processing → completed → failed). It also validates inputs and enforces permission boundaries between users and collaborators.

Render Client (Electron)

The render client is a desktop application built with Electron. It functions as a distributed worker node in the system.

Responsibilities:

This architecture allows rendering to occur on dedicated machines rather than in the browser or backend server, enabling heavy processing workloads without overloading the API infrastructure.

Kwae render client

After Effects Plugin (CEP Panel)

Kwae includes a custom Adobe After Effects CEP plugin that integrates directly inside After Effects.

The plugin:

This makes video templates fully programmable and allows non-technical users to generate complex motion graphics through structured inputs.

Kwae After Effects CEP panel

System Architecture Overview

Kwae is built around a distributed, real-time job-processing architecture that separates orchestration from execution. When a user submits a render job through the web application, the backend validates the request, persists the job state, and evaluates whether there are connected workers capable of handling the specific template. Render clients maintain authenticated WebSocket connections to the server, allowing the system to track worker availability in real time.

If an eligible worker is available, the server assigns the job immediately over the open connection. The render client then retrieves the required template data and assets, executes the render locally using the aerender process, and continuously reports progress and state changes back through the same WebSocket channel. Once rendering is complete, the output file is uploaded, verified, and made accessible via a secure delivery link.