Formerly known as LabelOps.
Local-first AI-assisted image labeling with active learning, manual box tools, background retraining, and dataset version snapshots.
- Modular app structure (
src/app,src/core,src/features) for cleaner maintenance. - Active learning image prioritization when loading folders (unlabeled images first, sorted by uncertainty).
- Retraining policy engine with multi-signal checks (sample count, time, entropy shift, class balance, confidence drift).
- Dataset versioning from UI with metadata, hash integrity, and manifest tracking.
- Label format selection at folder load time:
COCO JSONorPlain JSON. - Safer persistence:
- autosave per folder (
labels_autosave.json) - internal state store (
.labels_internal.json) - atomic file writes for exports.
- autosave per folder (
- Improved manual labeling UX:
- floating toolbox
- quick class switching (1-9)
- undo/delete shortcuts
- inline floating action toolbar.
- Better training controls in UI:
- force retrain
- live queue/training status
- shadow model promotion with validation warning flow.
- Entropy-aware detection metadata is attached to predictions.
- Folder loading prioritizes unlabeled images for high-value review.
- Replay buffer preserves historical samples for continual learning.
- Background training via Ray shadow trainer.
- Training trigger policy requires minimum sample count plus at least one urgency signal.
- Promotion flow supports validation and explicit override confirmation.
- Create version snapshots from current labels.
- Stores YOLO-style labels, copied images, metadata, and a dataset hash.
- Keeps lineage and latest pointer in
src/datasets/manifest.json.
Plain JSONoutput (labels.json) for direct app consumption.COCO JSONoutput (labels_coco.json) for downstream ML pipelines.
- Draw boxes directly on the canvas.
- Per-box class assignment with deterministic class colors.
- Save-and-next loop without leaving manual mode.
ActiveLabelingSystem/
images/
src/
app/
window.py
dialogs.py
state.py
actions.py
core/
data_manager.py
entropy.py
sample_selector.py
retrain_policy.py
dataset_versioner.py
replay_buffer.py
shadow_trainer.py
training_orchestrator.py
model_manager.py
feedback_validator.py
features/
manual.py
shortcut_manager.py
shortcut_config.py
toolbar_manager.py
toolbar_widget.py
toolbar_styles.py
datasets/
models/
main.py
requirements.txt
run_tests.bat
README.md
GUID.md
git clone https://github.com/sairam-s0/ActiveLabelingSystem.git
cd ActiveLabelingSystem
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
# source .venv/bin/activate
pip install .Users can install it directly with:
pip install Active-Labeling-SystemAfter install, run the bootstrap/setup command first:
alsThis command:
- runs
run_tests.baton Windows - checks Python and runtime dependencies
- installs missing packages automatically
- detects GPU hardware
- installs CUDA-enabled PyTorch automatically for NVIDIA GPUs
- falls back to CPU mode for unsupported GPU setups
After setup completes, start the GUI with:
als --start- Click
Select Folder. - Choose output format:
COCO JSON-> writeslabels_coco.jsonPlain JSON-> writeslabels.json
- The app also keeps internal state in
.labels_internal.jsonand autosave inlabels_autosave.jsoninside the selected folder.
- Click
Select Classes. - Pick one or more classes.
- Add custom classes from the same dialog when needed.
- Click
START. - Review detections and use bottom actions:
Accept (A)Reject (R)Skip (N)Manual (M)
- Draw boxes by click-drag on canvas.
- Save boxes and move next with:
SpaceorEnter-> save and nextEsc-> exit manual modeCtrl+Z-> undo last boxDelete-> delete last box1..9-> switch class index
- Left panel shows:
- entropy of current image
- queue size
- training progress/status.
- Use
Force Retrainif you want to bypass normal policy checks (still requires minimum samples).
Create Versioncreates a dataset snapshot insrc/datasets/v_YYYYMMDD_HHMMSS/.List Versionsshows stored versions and metadata.Promote Shadowpromotes trained candidate model to active model.
For each selected image folder:
labels.jsonorlabels_coco.json(selected format).labels_internal.json(internal metadata store)labels_autosave.json(session recovery)
- If Ray is unavailable, labeling still works; background training features are reduced.
- If class mapping is not available yet, trainer creation waits until first labels are saved.
- Restart app after model promotion for a clean reload of active weights.
Please read CONTRIBUTING.md.
MIT. See LICENSE.






