All projects
SampleSample · unsupportedUnsupported · no SLA

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.

MIT licensed

Dashboard with curation metrics, B2 storage split, and recent runs
The dashboard shows curation metrics — recipes, runs, pass and dedup ratios — alongside the raw-vs-refined B2 storage split and the most recent 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 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.

Recipes library listing Data-Juicer operator chains stored as YAML in B2
The recipe library — every Data-Juicer operator chain, stored as YAML in B2, ready to run, view, or delete.
Recipe detail showing the YAML operator chain and per-operator run stats
A recipe's full YAML operator chain next to its runs, each broken down to per-operator kept and filtered counts.
Runs history with kept vs filtered counts and per-operator stats
Curation-run history read back from B2 stats/, with samples kept vs filtered, pass rate, dedup ratio, and a per-operator table.
Datasets browser showing raw image-text corpus with previews and sizes
A modality-aware browse of the app's own raw / refined / stats / configs prefixes, with image previews and object sizes.

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.
Sample · unsupported

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.