Skip to content
Arian Khademi
All projects

Distributed jobs · Motion processing

Rigforge

2026

From source video to a previewable, exportable motion asset

  • Go
  • Python
  • React
  • PostgreSQL
  • Redis Streams
  • MediaPipe
  • Kubernetes

Saved demo · No sign-in needed

Silent repository recording: a mannequin plays the generated power-jump motion beside the source clip. Playback and scrubbing share a timeline. This saved capture does not depend on the hosted service.

A video-to-motion pipeline is only useful if a large upload can survive a dropped connection and a background job can survive a worker crash. I built Rigforge around those failure cases, then connected the result to a browser preview and export workflow.

What I built

A Go/Gin API for multipart uploads and asset management, Python workers for ffmpeg processing, MediaPipe pose extraction and skeleton retargeting, and a React interface for upload, progress, preview and export. PostgreSQL stores job state, Redis Streams distributes work, and S3-compatible storage holds source videos and outputs. The API uses jwkit for token verification.

Technical decisions

  • Object storage is the upload authority. Bytes go directly from the browser to presigned storage URLs. After interruption, reconciliation asks storage which parts actually arrived, including parts the client never reported. Only missing parts are sent again.
  • Test the same upload engine everywhere. The engine accepts file, transport and persistence adapters. The browser and CLI use the same implementation, so the large-file recovery test exercises the upload logic shipped to users.
  • Design for repeated job delivery. Workers heartbeat pending messages; another worker can reclaim abandoned work. Retries use backoff, permanent failures are dead-lettered, and fixed output keys make repeat execution safe to handle.
  • Expose the pipeline. Server-sent events report progress. A shared clock lets a reviewer compare generated motion with its source video before downloading glTF or BVH output.

Quick walkthrough

  1. Watch the saved sample: the source power-jump clip appears beside the motion generated on the mannequin.
  2. Compare the body movement in the two panes as they advance on a shared timeline.
  3. To reproduce upload, processing and export, follow the repository’s local setup with its bundled sample clip. The recording shows the preview stage; it is not a fresh end-to-end test.

The saved preview above shows the final comparison without requiring a live worker. The recorded walkthrough and upload recovery log provide additional evidence. In that recorded local run, the client was killed after 19 of 34 parts; the resumed run sent the remaining 15, and storage confirmed that completed parts were unchanged. This is a documented test result, not a throughput claim.

Scope and limits

Pose extraction targets one person and a 17-joint skeleton. Monocular video cannot reliably recover depth or limb twist; feet can slide, and fingers and facial motion are out of scope. Custom characters must match the Rigforge joint names and hierarchy. The development issuer accepts a supplied name without identity verification; it is intended only for demos and is not a production login system.