Skip to content

BojanSof/chronnotate-web

Repository files navigation

Chronnotate Icon

Chronnotate Web

Browser-based time-series sensor labeling tool for uploading CSV files, visualizing signals, creating/editing label segments, and exporting updated labels.

Chronnotate App Screenshot

Features

  • Pure frontend app (React + TypeScript + Vite), no backend required.
  • CSV ingestion with configurable Skip Rows and automatic header detection fallback.
  • X-axis mode selection:
    • Time Column
    • Row 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 Y reset control
  • Export:
    • Labeled CSV merged with original rows
    • Segments JSON

Quick Start

Prerequisites

  • Node.js 20+ (Node 22 recommended)
  • npm 10+

Install and Run

npm install
npm run dev

Open the local URL shown by Vite (typically http://localhost:5173).

How To Use

  1. Upload CSV
  • Click Choose File in the top toolbar.
  1. Configure parsing
  • Set Skip Rows if metadata exists before headers.
  • Set X Axis mode:
    • Time Column for timestamp-based x-axis
    • Row Index for sequential index-based x-axis
  • Select Time and Label columns as needed.
  • Click Parse CSV.
  1. Select visible signals
  • Use the left Signals panel to toggle lines.
  • Change signal colors using each signal color picker.
  1. Manage label classes
  • Use bottom Labels panel to:
    • + Add new class
    • Rename existing class
    • Change class color
    • Remove class
  1. Create/edit segments
  • Toggle Label Mode (L) from the toolbar or press L.
  • Draw: click-drag in plot region.
  • Move: drag segment body.
  • Resize: drag segment edges.
  • Delete: right-click segment or select and press Delete.
  1. Navigate chart
  • Wheel: zoom X-axis.
  • Shift + Wheel: zoom Y-axis.
  • Drag-pan to move viewport.
  • Click Fit Y to auto-fit Y to visible data.
  1. Export results
  • Export Labels CSV to download CSV with merged labels.
  • Export Segments JSON to download segment/category state.

Keyboard Shortcuts

  • L: Toggle Label Mode
  • Space (hold in label mode): Temporarily navigate/pan/zoom
  • Delete: Remove selected segment

Development

Scripts

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 ESLint

Project Structure

src/
  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

Tech Stack

  • React 19 + TypeScript
  • Vite
  • Tailwind CSS
  • Apache ECharts (echarts-for-react)
  • PapaParse
  • Zustand

Deployment

The app is static-host friendly (GitHub Pages compatible) and uses hash-based routing-safe setup.

Build for deployment:

npm run build

Deploy the dist/ directory.

About

Time series annotation web application

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors