All projects
SampleSample · unsupportedUnsupported · no SLA

MMPose Video Keypoint Extraction

Extract 2D/3D skeleton keypoints from video frames with a local MMPose engine and store per-frame keypoint JSON, skeleton-overlay images, and a keypoints_index.jsonl dataset manifest on Backblaze B2 — a Next.js + FastAPI sample for building pose datasets that training and analytics pipelines read straight from object storage.

Built for: Sports-science teams and fitness-app developers who need pose data at dataset scale to train pose classifiers, rep-counting models, and biomechanical pipelines.

MIT licensed · Updated Aug 20, 2026

Dashboard showing pose metrics, write-amplification, and recent runs
The dashboard leads with the B2 write-amplification headline, pose keypoint metrics, a runs-per-day chart, and recent extraction runs.

What it's built with

Each piece of the stack, and the job it does in this project.

Next.js 16 + React 19
Web UI: dashboard, ingest, runs, library, and full-bucket file browser
Tailwind CSS v4 + shadcn/ui
Design tokens and reusable interface primitives
TanStack Query + Recharts
Client-side data fetching and dashboard charts
FastAPI + Pydantic v2
Typed Python API with a checked OpenAPI contract
MMPose / MMDetection / MMCV
On-device 2D top-down and 3D lifting pose engine (opt-in install)
torch
Model runtime, CPU by default with CUDA auto-detect
boto3 + Backblaze B2
S3-compatible object storage for frames, keypoints, overlays, and the manifest
pnpm workspaces
TypeScript and Python monorepo workflow

Core capabilities

What the project does out of the box, before you write any code of your own.

  • On-device MMPose engine

    A real 2D top-down and 3D lifting pose engine runs per frame and writes back keypoint JSON and skeleton-overlay images. It runs on CPU by default and auto-detects CUDA, natively on macOS arm64 with no container.

  • Extraction runs as B2 manifests

    The Extraction Run entity has a full lifecycle — create, read, edit, delete, and execute — persisted as a Backblaze B2 manifest with no database to operate.

  • The manifest is the dataset index

    Every source frame maps to its derived keypoint JSON and overlay in a keypoints_index.jsonl manifest, so a training job streams the dataset straight from B2.

  • Full-stack UI over object storage

    A Next.js dashboard, ingest, runs, run detail, session library, and a full-bucket file browser cover the whole ingest-to-dataset workflow.

  • Agent-first, contract-checked backend

    A layered FastAPI service with structural tests, a checked OpenAPI contract, and agent-optimized docs so a coding agent can read the repo and extend it safely.

A closer look

More screens from the running project.

Ingest page with a drag-and-drop upload dropzone
Drag-and-drop upload of source frames and clips straight to Backblaze B2, organized by session.
Extraction runs list with status and lifecycle actions
The Extraction Run list shows session, model, frame count, status, and full lifecycle actions.
Run detail showing the skeleton-overlay gallery and per-frame keypoints
Run detail presents a skeleton-overlay gallery, the per-frame keypoint table, and one-click manifest download.
Library view scoped to the sample prefix, grouped into sessions and runs
The Library is a sample-scoped view of every object written to B2, grouped into ingested sessions and extraction runs.

Choose it for the right job

MMPose Video Keypoint Extraction is a head start for a specific shape of project, not a supported, general-purpose product.

Use it when

  • You need to turn a video or frame library into a pose-keypoint dataset on B2 — per-frame keypoint JSON, skeleton-overlay images, and a JSONL manifest.
  • You want to run pose estimation on local open-source models, with your B2 credentials as the only keys required.
  • You want a full-stack Next.js + FastAPI scaffold with the extraction-run lifecycle already wired to object storage.
  • You plan to stream the dataset into a training or analytics pipeline directly from B2 over the S3-compatible API.

Choose another path when

  • You need a hosted SaaS with managed hosting, accounts, authentication, tenant isolation, or an SLA.
  • You need real-time streaming pose tracking or a clinical-grade biomechanics product.
  • You cannot run a machine with CPU or GPU compute for the engine — it does not run on Vercel serverless, so extractions run on a box with the engine installed.
  • You only need generic file uploads and object-storage workflows without pose estimation — the Vibe Coding Starter Kit is a simpler starting point.
Sample · unsupported

Project status and support

Report defects through the repository's GitHub Issues; this is an unsupported Backblaze sample provided as-is with no SLA.