A modern rewrite of the Interactive Classifier — a tool for interactively classifying chant-manuscript neumes using a k-Nearest Neighbors model.
This project replaces the legacy Rodan job (Django + Celery + Gamera + Backbone.Marionette) at [/Rodan-lite/backend/django/code/jobs/interactive_classifier/] with a non-Django Python service, a React + Vite frontend, and no Gamera dependency.
- Input is a full page image plus a bounding-box annotation file (for example, MOTHRA JSON or YOLO), not page-level GameraXML. Neume crops are derived from those annotations rather than supplied as pre-cropped glyph images.
- Manual split (CCA on a single glyph) is deferred. Reintroduce only if real data shows crops that contain multiple neumes.
- Output stays as GameraXML so downstream MEI pipelines keep working.
| Layer | Path | Status |
|---|---|---|
| Algorithm core | core/ic_core/ |
In progress — scaffolded, partial impl |
| API | api/ |
In progress, open to future change |
| Frontend | frontend/ |
Not started |
ic_new/
├── core/
│ ├── ic_core/ # Phase 1: algorithm core (uv-managed Python package)
│ └── tests/ # Pytest suite + fixtures
├── api/ # Phase 2: FastAPI service (planned)
├── frontend/ # Phase 3: React + Vite UI (planned)
└── docs/
├── CLAUDE.md # Guidance for Claude Code working in this repo
├── migration_plan.md
└── KNN_ALGORITHM.md
The core package uses uv for environment and dependency management.
cd core/ic_core
uv sync # install dependencies
uv run pytest ../tests # run tests
uv run ruff check . # lint- docs/migration_plan.md — full migration strategy, phasing, and risks
- docs/KNN_ALGORITHM.md — algorithm spec and invariants
- docs/CLAUDE.md — architecture notes and conventions for AI-assisted development