Select your Ultralytics NDJSON export, pick an output format, and get a ready-to-train ZIP - everything runs locally, nothing leaves your machine.
- Features
- Supported Formats
- Installation
- NDJSON Input Format
- Roadmap
- Tech Stack
- Releases & Versioning
- Update Security
- Contributing
- Security
- License
YOLO NDJSON Converter is a desktop app that converts Ultralytics YOLO's NDJSON annotation exports into ready-to-use datasets for YOLO, COCO, Pascal VOC, and other ML formats. Select your file, pick a format, and get a ZIP with images, labels, and config files.
- 12 Output Formats - YOLO26 through Darknet, COCO JSON, Pascal VOC, TFRecord, CreateML
- 6 Task Types - Detection, Segmentation, Semantic Segmentation, Pose Estimation, Classification, OBB
- Parallel Downloads - 100 concurrent connections for fast image fetching
- Privacy-First - Everything runs locally; your data never leaves your device
- Cross-Platform - macOS, Windows, and Linux
- ~5 MB Binary - Tauri + Rust keeps the app tiny compared to Electron alternatives
| Format | Status | Compatible Tasks |
|---|---|---|
| YOLO26 | ✅ | Detection, Segmentation, Semantic, Pose, Classification, OBB |
| YOLOv12 | ✅ | Detection, Segmentation, Pose, Classification, OBB |
| YOLO11 | ✅ | Detection, Segmentation, Pose, Classification, OBB |
| YOLOv9 | ✅ | Detection, Segmentation |
| YOLOv8 | ✅ | Detection, Segmentation, Pose, Classification, OBB |
| YOLOv7 | ✅ | Detection |
| YOLOv5 | ✅ | Detection, Segmentation, Classification |
| YOLO Darknet | ✅ | Detection, Classification |
| COCO JSON | ✅ | Detection, Segmentation, Pose |
| Pascal VOC XML | ✅ | Detection, Segmentation, Classification |
| CreateML JSON | 🔜 | Detection, Classification |
| TFRecord | 🔜 | Detection |
Note on Semantic Segmentation: Semantic datasets are exported as polygon segmentation labels (identical in shape to instance-segmentation polygons). Only YOLO26 trains them as semantic (omit
masks_dirso the loader rasterizes polygons → dense masks). Other YOLO versions, COCO, and Pascal VOC can still use the exported polygons as instance-segmentation annotations. Formats that cannot represent polygons (YOLO Darknet, CreateML, TFRecord) are rejected for semantic datasets.
Windows (PowerShell):
irm https://yolondjson.zip/install.ps1 | iexmacOS / Linux:
curl -fsSL https://yolondjson.zip/install.sh | shmacOS (Homebrew):
brew tap amanharshx/tap
brew install --cask yolo-ndjson-converterOr download the latest release directly from GitHub Releases.
Note: The app is not yet code-signed (Apple Developer account costs $99/year, Windows EV certificate ~$300/year). I'm planning to get these when I can afford them. For now, you may see security warnings:
macOS — "App is damaged and can't be opened"
Run this command in Terminal after installing:
xattr -cr "/Applications/YOLO NDJSON Converter.app"Then open the app again.
Windows — "Windows protected your PC" (SmartScreen)
- Click "More info"
- Click "Run anyway"
Or: Right-click the .exe → Properties → Check "Unblock" → Apply
The app supports automatic updates.
When a new version is released:
- Open the app
- Click Updates (top right)
- If a new version is available, click Update
- Restart the app to finish installing
Updates are downloaded securely from GitHub Releases and verified using cryptographic signatures.
Prerequisites: Rust, Bun, Tauri v2 prerequisites
git clone https://github.com/amanharshx/yolo-ndjson-zip.git
cd yolo-ndjson-zip
bun install
bun run tauri dev # development
bun run tauri build # local production buildNote: Local builds are unsigned and intended for development only. Official signed builds are generated automatically via GitHub Releases.
Note: The backend Sentry DSN (if set) is compiled in at build time via
SENTRY_DSN_BACKEND.
# Rust unit tests
cd src-tauri && cargo test
# Frontend unit tests
bun run testThe app expects newline-delimited JSON with this structure:
{"type":"dataset","task":"detect","name":"My Dataset","class_names":{"0":"cat","1":"dog"}}
{"type":"image","file":"img1.jpg","url":"https://...","width":640,"height":480,"split":"train","annotations":{"bboxes":[[0,0.5,0.5,0.2,0.3]]}}
{"type":"image","file":"img2.jpg","url":"https://...","width":640,"height":480,"split":"valid","annotations":{"bboxes":[[1,0.3,0.4,0.1,0.2]]}}Pose rows use [class_id, cx, cy, width, height, keypoints...]. Dataset records may include
"kpt_shape":[number_of_keypoints, 2|3]. Add kpt_shape when a 2D keypoint payload length is divisible
by both 2 and 3, such as hand-21 or dog-18, because its dimensions cannot be inferred safely.
- YOLO (YOLOv5 → YOLO26)
- COCO JSON
- Pascal VOC XML
- CreateML JSON (coming soon)
- TFRecord (coming soon)
- Detection
- Segmentation
- Semantic Segmentation
- Pose Estimation
- Classification
- OBB (Oriented Bounding Box)
- Frontend - React 19 + TypeScript, Tailwind CSS, Vite
- Backend - Rust + Tauri v2
- Package Manager - Bun
This project uses automated releases.
- Versions follow semantic versioning (
MAJOR.MINOR.PATCH) - Merging changes into
mainautomatically prepares the next release - Releases are built and published via GitHub Actions
All official binaries are available on the GitHub Releases page.
All releases are cryptographically signed.
The built-in updater verifies signatures before installing updates to ensure authenticity and prevent tampering.
Contributions are welcome! Whether it's a bug fix, new format, or documentation improvement - every bit helps. Please read the Contributing Guide before opening a pull request.
To report a security vulnerability, please see SECURITY.md.
This project is licensed under the MIT License.
