Data-Juicer Multimodal Curation
A local, B2-backed control plane for multimodal training-data curation built on Data-Juicer. Author recipes — composable operator chains for dedup, length/quality filters, and resolution/aspect checks — then run them on-device: the app streams raw shards from Backblaze B2, cleans them locally, and writes the refined dataset plus per-operator stats back to B2 over the S3-compatible API.
Built for: AI dataset and MLOps engineers who keep multimodal foundation-model corpora (image-text, video, audio, text) in Backblaze B2 and want reproducible, on-device cleaning driven from a local machine.

What it's built with
Each piece of the stack, and the job it does in this project.
- Next.js 16 + React 19
- Web application and curation UI
- Tailwind CSS v4 + shadcn/ui
- Design tokens and interface primitives
- TanStack Query
- Client-side data fetching and cache
- FastAPI + Pydantic v2
- Typed Python API and configuration validation
- Data-Juicer (py-data-juicer)
- The multimodal curation engine, run in an isolated subprocess
- boto3 + Backblaze B2
- S3-compatible object storage for raw, refined, stats, and recipe YAML
- 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.
Curation recipes
Author and manage Data-Juicer operator chains — dedup, length and quality filters, resolution and aspect checks — with full CRUD and a run UI. Each recipe is stored as YAML in B2 configs/.
On-device curation runs
Run a recipe over raw shards streamed from B2: operators apply locally (CPU by default, auto-detecting CUDA then Apple MPS then CPU), and the refined dataset plus per-operator stats are written back to B2 refined/ and stats/.
Runs history and dashboard
Review every curation pass with kept-vs-filtered counts and dedup ratios per operator, and a dashboard that aggregates raw-vs-refined storage, samples processed, and pass rates.
Datasets library
Browse the app's own raw / refined / stats / configs prefixes in a modality-aware view with image previews and object sizes.
Full-stack, agent-ready scaffolding
A full-bucket file explorer, drag-and-drop upload, a layered FastAPI backend, structural tests, and agent-first docs come out of the box, all backed by a single B2 storage layer over the S3-compatible API.
A closer look
More screens from the running project.




Choose it for the right job
Data-Juicer Multimodal Curation is a head start for a specific shape of project, not a supported, general-purpose product.
Use it when
- You keep multimodal foundation-model corpora (image-text, video, audio, text) in Backblaze B2 and want to clean them with reproducible, versioned operator chains.
- You want to run Data-Juicer curation on your own machine — CPU by default — instead of standing up a managed cloud ETL service or a second cloud key.
- You need to review each pass: kept-vs-filtered counts, dedup ratios, and per-operator stats, with refined shards and stats accumulating back in B2.
- You want a full-stack, agent-ready reference (Next.js + FastAPI) to adapt into your own dataset-curation product.
Choose another path when
- You need a hosted, multi-tenant curation SaaS or managed hosting — this runs locally and ships no hosting or SLA.
- You need a distributed cluster job runner — it runs one curation pass at a time on a single machine.
- You need built-in authentication, tenant isolation, or compliance controls — the app ships none, and a deployed API is unauthenticated and bucket-wide.
- You only need generic file upload and browsing without curation — the Vibe Coding Starter Kit is the lighter base this sample is built on.
Project status and support
Report defects through the repository's GitHub Issues; this is an open-source sample maintained by Backblaze with no service-level agreement.