Browser-based time-series sensor labeling tool for uploading CSV files, visualizing signals, creating/editing label segments, and exporting updated labels.
- Pure frontend app (React + TypeScript + Vite), no backend required.
- CSV ingestion with configurable
Skip Rowsand automatic header detection fallback. - X-axis mode selection:
Time ColumnRow Index (0..N-1)
- Automatic column suggestions for time/timestamp and label/annotation columns.
- Interactive labeling workflow:
- Draw, move, resize, delete segments
- Label classes with custom colors
- Rename label classes
- Signal selection and per-signal color customization.
- Smooth zoom/pan interactions:
- Mouse wheel: X-axis zoom
Shift + Wheel: Y-axis zoom- Drag pan support
Fit Yreset control
- Export:
- Labeled CSV merged with original rows
- Segments JSON
- Node.js 20+ (Node 22 recommended)
- npm 10+
npm install
npm run devOpen the local URL shown by Vite (typically http://localhost:5173).
- Upload CSV
- Click
Choose Filein the top toolbar.
- Configure parsing
- Set
Skip Rowsif metadata exists before headers. - Set
X Axismode:Time Columnfor timestamp-based x-axisRow Indexfor sequential index-based x-axis
- Select
TimeandLabelcolumns as needed. - Click
Parse CSV.
- Select visible signals
- Use the left
Signalspanel to toggle lines. - Change signal colors using each signal color picker.
- Manage label classes
- Use bottom
Labelspanel to:+ Addnew classRenameexisting class- Change class color
- Remove class
- Create/edit segments
- Toggle
Label Mode (L)from the toolbar or pressL. - Draw: click-drag in plot region.
- Move: drag segment body.
- Resize: drag segment edges.
- Delete: right-click segment or select and press
Delete.
- Navigate chart
- Wheel: zoom X-axis.
Shift + Wheel: zoom Y-axis.- Drag-pan to move viewport.
- Click
Fit Yto auto-fit Y to visible data.
- Export results
Export Labels CSVto download CSV with merged labels.Export Segments JSONto download segment/category state.
L: Toggle Label ModeSpace(hold in label mode): Temporarily navigate/pan/zoomDelete: Remove selected segment
npm run dev # Start Vite dev server
npm run build # Type-check and production build
npm run preview # Preview built app locally
npm run lint # Run ESLintsrc/
components/ UI panels and chart interaction
hooks/ chart instance/state hooks
store/ Zustand global app state
types/ strict TypeScript interfaces
utils/ CSV parsing, inference, export helpers
- React 19 + TypeScript
- Vite
- Tailwind CSS
- Apache ECharts (
echarts-for-react) - PapaParse
- Zustand
The app is static-host friendly (GitHub Pages compatible) and uses hash-based routing-safe setup.
Build for deployment:
npm run buildDeploy the dist/ directory.