{"id":21241105,"url":"https://github.com/strickvl/panlabel","last_synced_at":"2026-03-15T20:14:18.936Z","repository":{"id":259721089,"uuid":"879295606","full_name":"strickvl/panlabel","owner":"strickvl","description":"Universal annotation converter","archived":false,"fork":false,"pushed_at":"2026-02-03T08:32:21.000Z","size":1123,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-21T23:12:59.220Z","etag":null,"topics":["annotation","annotation-conversion","converter","data-annotation","data-labeling"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strickvl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-10-27T14:36:05.000Z","updated_at":"2026-02-03T08:32:24.000Z","dependencies_parsed_at":"2024-10-27T15:32:29.316Z","dependency_job_id":"0e9fb81a-b7e1-41a3-86a7-470bd308b3dd","html_url":"https://github.com/strickvl/panlabel","commit_stats":null,"previous_names":["strickvl/panlabel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/strickvl/panlabel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strickvl%2Fpanlabel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strickvl%2Fpanlabel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strickvl%2Fpanlabel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strickvl%2Fpanlabel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strickvl","download_url":"https://codeload.github.com/strickvl/panlabel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strickvl%2Fpanlabel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29973283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T14:44:57.896Z","status":"ssl_error","status_checked_at":"2026-03-01T14:43:27.662Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotation","annotation-conversion","converter","data-annotation","data-labeling"],"created_at":"2024-11-21T00:54:32.173Z","updated_at":"2026-03-01T15:05:43.651Z","avatar_url":"https://github.com/strickvl.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Panlabel\n\n[![CI](https://github.com/strickvl/panlabel/actions/workflows/ci.yml/badge.svg)](https://github.com/strickvl/panlabel/actions/workflows/ci.yml)\n![Crates.io Version](https://img.shields.io/crates/v/panlabel)\n![GitHub License](https://img.shields.io/github/license/strickvl/panlabel)\n![GitHub Repo stars](https://img.shields.io/github/stars/strickvl/panlabel)\n![Crates.io Total Downloads](https://img.shields.io/crates/d/panlabel)\n![Crates.io Size](https://img.shields.io/crates/size/panlabel)\n\n## The universal annotation converter\n\nIf you've ever written a one-off Python script to wrangle COCO annotations into\nYOLO format (or vice versa), panlabel is here to save you the trouble. It's a\nfast, single-binary CLI that converts between common object detection annotation\nformats — with built-in validation, clear lossiness warnings, and no Python\ndependencies to manage.\n\nPanlabel is also available as a Rust library if you want to integrate format\nconversion into your own tools.\n\n\u003e **Note**: Panlabel is in active development (v0.2.x). The CLI and library APIs\n\u003e may change between versions, so pin to a specific version if you're using it in\n\u003e production.\n\n## Installation\n\n### Homebrew (macOS / Linux)\n\n```sh\nbrew install strickvl/tap/panlabel\n```\n\n### Shell script (macOS / Linux)\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/strickvl/panlabel/releases/latest/download/panlabel-installer.sh | sh\n```\n\n### PowerShell (Windows)\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https://github.com/strickvl/panlabel/releases/latest/download/panlabel-installer.ps1 | iex\"\n```\n\n### Cargo (from source)\n\n```sh\ncargo install panlabel\n```\n\n### Pre-built binaries\n\nDownload from the [latest GitHub Release](https://github.com/strickvl/panlabel/releases/latest). Builds are available for macOS (Intel + Apple Silicon), Linux (x86_64 + ARM64), and Windows.\n\n### As a Rust library\n\n```sh\ncargo add panlabel\n```\n\n## Quick start\n\n```sh\n# Convert COCO annotations to YOLO (auto-detects the input format)\npanlabel convert --from auto --to yolo -i annotations.json -o ./yolo_out --allow-lossy\n\n# Convert a YOLO dataset to COCO JSON\npanlabel convert -f yolo -t coco -i ./my_dataset -o coco_output.json\n\n# Convert a Pascal VOC dataset to COCO JSON\npanlabel convert -f voc -t coco -i ./voc_dataset -o coco_output.json\n\n# Convert Label Studio JSON to COCO JSON\npanlabel convert -f label-studio -t coco -i export.json -o coco_output.json\n\n# Convert CVAT XML to COCO JSON\npanlabel convert -f cvat -t coco -i annotations.xml -o coco_output.json\n\n# Check a dataset for problems before training\npanlabel validate --format coco annotations.json\n\n# Get a quick overview of what's in a dataset\npanlabel stats --format coco annotations.json\n\n# Compare two datasets\npanlabel diff --format-a auto --format-b auto old.json new.json\n\n# Sample a smaller subset for quick experiments\npanlabel sample -i annotations.json -o sample.ir.json --from auto --to ir-json -n 100 --seed 42\n```\n\n## What can panlabel do?\n\n| Command | What it does |\n|---------|-------------|\n| `convert` | Convert between annotation formats, with clear warnings about what (if anything) gets lost |\n| `validate` | Check your dataset for common problems — duplicate IDs, missing references, invalid bounding boxes |\n| `stats` | Show rich dataset statistics in text, JSON, or HTML |\n| `diff` | Compare two datasets semantically (summary or detailed output) |\n| `sample` | Create subset datasets (random or stratified), with optional category filtering |\n| `list-formats` | Show which formats are supported and their read/write/lossiness capabilities |\n\n## Supported formats\n\n| Format | Extension / Layout | Description | Lossiness |\n|--------|--------------------|-------------|-----------|\n| `ir-json` | `.json` | Panlabel's own intermediate representation | Lossless |\n| `coco` | `.json` | COCO object detection format | Conditional |\n| `cvat` | `.xml` / `annotations.xml` export | CVAT for images XML annotation export | Lossy |\n| `label-studio` | `.json` | Label Studio task export JSON (`rectanglelabels`) | Lossy |\n| `tfod` | `.csv` | TensorFlow Object Detection | Lossy |\n| `yolo` | `images/ + labels/` directory | Ultralytics YOLO `.txt` labels | Lossy |\n| `voc` | `Annotations/ + JPEGImages/` directory | Pascal VOC XML | Lossy |\n\nRun `panlabel list-formats` for the full details.\n\n`list-formats` shows canonical names (for example `label-studio`), while commands also accept aliases (for example `ls`, `label-studio-json`).\n\n### More convert examples\n\n```sh\n# COCO to IR JSON (lossless — no data lost)\npanlabel convert -f coco -t ir-json -i input.json -o output.json\n\n# IR JSON to TFOD (lossy — requires explicit opt-in)\npanlabel convert -f ir-json -t tfod -i input.json -o output.csv --allow-lossy\n\n# Auto-detect input format from file extension/content or directory layout\npanlabel convert --from auto -t coco -i input.csv -o output.json\n```\n\n### Getting help\n\n```sh\npanlabel --help              # See all commands\npanlabel convert --help      # Help for a specific command\npanlabel -V                  # Show version\n```\n\n## Documentation\n\nWant to go deeper? The full docs are readable right here on GitHub:\n\n- [Documentation home](https://github.com/strickvl/panlabel/blob/HEAD/docs/README.md) — start here\n- [CLI reference](https://github.com/strickvl/panlabel/blob/HEAD/docs/cli.md) — every flag and option\n- [Format reference](https://github.com/strickvl/panlabel/blob/HEAD/docs/formats.md) — how each format works\n- [Tasks and use cases](https://github.com/strickvl/panlabel/blob/HEAD/docs/tasks.md) — what's supported today\n- [Conversion and lossiness](https://github.com/strickvl/panlabel/blob/HEAD/docs/conversion.md) — understanding what gets lost\n- [Contributing](https://github.com/strickvl/panlabel/blob/HEAD/CONTRIBUTING.md) — we'd love your help\n- [Roadmap](https://github.com/strickvl/panlabel/blob/HEAD/ROADMAP.md) — what's coming next\n\n## Contributing\n\nContributions are welcome! Whether it's a bug report, a new format adapter, or\na documentation fix — we appreciate the help. For major changes, please\n[open an issue](https://github.com/strickvl/panlabel/issues) first so we can\ndiscuss the approach.\n\nSee the [contributing guide](CONTRIBUTING.md) for details on the codebase\nstructure and how to make changes.\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrickvl%2Fpanlabel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrickvl%2Fpanlabel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrickvl%2Fpanlabel/lists"}