AnyLearning is an open-source, offline desktop application for labeling data, training machine-learning models, and exporting them for deployment. Your datasets and trained weights stay on your machine.
Website: https://anylearning-oss.nrl.ai
License: Apache License 2.0. Third-party code, models, datasets, and generated notices retain their respective licenses; see LICENSES.md and MODEL_LICENCES.md.
What it does:
- Label images with boxes, polygons, keypoints and whole-image classes. Segment Anything (SAM and SAM2) runs locally to pre-label, so you correct rather than start from scratch.
- Train eight project types on your own hardware: object detection, instance segmentation, image segmentation, image classification, handpose classification, keypoint detection, Tabular AI and Text AI.
- Export datasets to YOLO, COCO, LabelMe and AnyLabeling, and trained models to ONNX.
- Run with no network. Python, PyTorch and the pretrained weights ship inside the installer, so there is no account, no activation key and no upload step.
|
|
| Label precisely | Train and compare locally |
Explore the full walkthroughs in the documentation.
The public AnyLearning Examples repository provides import-ready, license-reviewed recipes for image classification, object detection, semantic segmentation, handpose classification, keypoint detection, tabular AI, text classification, and response evaluation. Its downloader fetches datasets from Hugging Face only when you need them, so large archives do not live in this source tree.
The validated RF-DETR Desert Locust keypoint model is public too, with native and ONNX checkpoints, its exact schema, validation metrics and an application-level held-out inference result.
anylearning/: Python backend and training pipelinesfrontend/: desktop application frontendwebsite/: documentation and public websitetests/: unit, integration, packaging, and training tests
Requirements:
- Node.js v22.7.0 (Installing via nvm).
- Install the dependencies:
cd frontend
corepack enable
pnpm install --frozen-lockfileRequirements:
- Miniconda or Anaconda
- Python 3.13 (recommended). 3.11 is the minimum
setup.pyaccepts, and 3.13 is what CI builds and tests on. On 3.10pip install -e .refuses to install anything. - Install the dependencies:
conda create -n anylearning python=3.13
conda activate anylearning
bash -i install_env.sh
# For Anaconda/Miniconda
conda install libpython-static
# On Ubuntu
sudo apt install patchelf libpango1.0-dev libgif-dev- Run web server for development:
python -m anylearning.app --port 5678 --development- Run the app:
pnpm devThe app will be available at http://localhost:3021/.
- Build frontend - Must be done before running the backend:
bash build_frontend.sh-
Terminate the backend/frontend if it is running from previous steps. The desktop app will use the same port and serve the built frontend itself.
-
Run the app:
python -m anylearning.appA window will pop up and you can start using the app.
- Create a migration file:
alembic revision --autogenerate -m "migration_name"- Rerun the app and the migration will be applied automatically.
Builds on Linux, macOS and Windows; .github/workflows/build.yml produces all
three. Build on Linux locally while developing, then use CI for the other
platforms.
-
Install all dependencies above, plus the packaging-only ones:
patchelfon Linux, andconda install libpython-staticon Anaconda/Miniconda Python, without which Nuitka aborts with "Automatic detection of static libpython failed". -
Install the dependencies for building:
pip install -r requirements.txt- Build the app (~1 hour cold):
bash build_app.sh- Verify it before shipping it. A Nuitka build that compiles and links can still be broken: one produced a 780 MB binary that segfaulted on startup because a module was dropped from the compiled set, and nothing in the build said so.
bash smoke_test_build.sh ./app.dist/app.bin # starts it, checks API, routes, frontend
python smoke_test_training.py ./app.dist/app.bin # every project type, on GPU and CPUOn macOS, a successful build produces AnyLearning.app. Drag it to the Applications folder and run it.
Run app from terminal:
open AnyLearning.app/Contents/MacOS/appFor a release, build the disk image. That is what goes on the website:
bash make_dmg.sh # AnyLearning-macOS-<arch>-<version>.dmgFor a build you are only handing to someone to try, a zip is enough:
ditto -c -k --keepParent AnyLearning.app AnyLearning.zipEither way, read the signing note in docs/release_testing.md before
publishing: unsigned builds are refused by Gatekeeper on every Mac but the one
that built them, and the user is told the app is damaged rather than unsigned.
Fix the damaged app (if needed):
After extracting, reset the quarantine attribute (recommended):
sudo xattr -rd com.apple.quarantine AnyLearning.appIf needed, restore proper permissions:
sudo chmod -R 755 AnyLearning.appIf needed, re-sign the app:
codesign --force --deep --sign - AnyLearning.appbuild_app.sh leaves AnyLearning.App\; Inno Setup turns it into a setup
executable:
"$LOCALAPPDATA/Programs/Inno Setup 6/ISCC.exe" AnyLearning-Windows-Setup.issThe version comes from installer_version.iss, which build_app.sh generates
from anylearning/app_info.py, so build first, and never edit the version in
the .iss files. Compressing a CUDA-enabled build takes around half an hour.
Install the repository hooks once per clone and run the complete quality suite before opening a pull request:
python -m pip install pre-commit==4.6.2
pre-commit install --install-hooks
pre-commit run --all-filesThe hooks format and lint Python, JavaScript, TypeScript, Markdown, YAML, JSON, CSS, and shell scripts. They also validate GitHub Actions and scan staged changes for secrets with Gitleaks. See CONTRIBUTING.md for the full development workflow.
Run everything, with coverage:
./run_tests.shOr just the tests:
pytest tests/The default run is fully offline and needs no dataset download. tests/e2e/
takes every project type through its whole job (data, training, checkpoint,
ONNX export, and inference) once per model variant offered in the UI.
See docs/testing.md for the layout, the generated fixtures, and how to run against the real datasets in anylearning-data.
The standalone AnyLearning examples repository includes generated stick figures and real-world keypoint validation recipes.
Before publishing an installer, work through docs/release_testing.md, the per-OS acceptance checklist. The unit suite says nothing about whether the packaged app works.
Related:
- docs/model_license_policy.md: which models and datasets may be integrated. Read this before adding either; AnyLearning can be redistributed. AGPL and non-commercial model licences require special review before integration.
- docs/dependency_upgrade.md: how the dependency tiers work and what to know before moving torch.
Bug reports and pull requests are welcome. Read CONTRIBUTING.md before proposing a substantial change.
- Step 1: Create a 1024x1024 image.
- Step 2: Add a 224x224 rounded corners mask on the top left.
- Step 3: Add a 10% padding around the image.
A .png file can be provided as the app icon. You can also generate an .icns
file from .png with the following command:
bash make_icns.sh icon.png

