This release is a pre-release and may not be stable for production use.
acaua
Apache-2.0 PyTorch-native computer vision. One API — predict, train, export — across detection, segmentation, OBB, OCR, VLM, and zero-shot.
One class to learn. One to remember.
import acaua
model = acaua.Model.from_pretrained("CondadosAI/rtdetr_r50vd")
results = model.predict("image.jpg")
print(results.boxes, results.labels, results.scores)
Why this exists
The Python computer-vision stack has three ugly choices today:
- Ultralytics — great DX, but the weights are AGPL. Ship them in anything commercial and you inherit the whole AGPL umbrella. Lawyers say no.
- mmdetection / mmsegmentation — depth, but registries, config DSLs, and
mmengine/mmcvabstractions that feel foreign to anyone who wrote atorch.nn.Modulein the last decade. - PaddleDetection / PaddleOCR — state of the art, but you're shipping Paddle custom ops. Different ecosystem. Different GPU kernels. Different problem.
And then there's Roboflow Supervision — Apache-2.0, pythonic, but intentionally thin. It handles annotation and post-processing, not training and multi-task model serving.
acaua fills the gap: an Apache-2.0, PyTorch-native, pythonic library that unifies detection, segmentation, OCR, VLM, and zero-shot tasks behind a single predict / train / export surface.
Install
pip install acaua
Torch and Transformers come as direct deps. First install is a few hundred MB; get a coffee.
The parity demo
Two tasks, one API:
import acaua
# Object detection
det = acaua.Model.from_pretrained("CondadosAI/rtdetr_r50vd")
det_result = det.predict("http://images.cocodataset.org/val2017/000000039769.jpg")
print(det_result.boxes.shape, det_result.labels.tolist(), det_result.scores.tolist())
# Instance segmentation — same .predict(), different task
seg = acaua.Model.from_pretrained("CondadosAI/mask2former_swin_tiny_coco_instance")
seg_result = seg.predict("http://images.cocodataset.org/val2017/000000039769.jpg")
print(seg_result.masks.shape) # adds masks on top of the common fields
# Plug into Roboflow Supervision for annotation
detections = det_result.to_supervision()
The signature equality is not an accident — tests/test_predict_parity.py is a contract test that fails CI if any adapter drifts.
What's in v0.1
| Task | Backend | Weights |
|---|---|---|
| Object detection | transformers AutoModelForObjectDetection (RT-DETR) |
CondadosAI/rtdetr_r50vd |
| Instance segmentation | transformers AutoModelForUniversalSegmentation (Mask2Former-Swin-Tiny) |
CondadosAI/mask2former_swin_tiny_coco_instance |
Both adapters:
- Share the same
.predict()signature (contract-tested). - Wrap the forward pass in
torch.inference_mode(). - Accept the same input Union:
str(path or http/https URL),pathlib.Path,PIL.Image,np.ndarray(HWC uint8 RGB),torch.Tensor(CHW float32), or a sequence of any of the above. - Batch under the hood with
batch_size=8by default. - Resolve device auto →
cuda>mps>cpu, or take an explicitdevice=kwarg. - Auto-reject BGR-smelling numpy arrays (OpenCV users, you know who you are) with an error that names the exact fix.
What's coming
| v0.1 | v0.2 | v0.3 | |
|---|---|---|---|
predict |
detection + instance segmentation | + OBB, OCR | + VLM, zero-shot |
train |
per-backend idioms (not parity-gated) | signature parity across adapters | — |
export |
(empty extras shipped) | ONNX parity | TensorRT, CoreML |
Tasks arrive as extras to avoid bloating the core install:
pip install acaua[ocr] # doctr / surya family (v0.2+)
pip install acaua[vlm] # Florence-2, Qwen-VL, Moondream (v0.3+)
pip install acaua[zeroshot] # GroundingDINO, SAM2, OWLv2, YOLO-World (v0.3+)
pip install acaua[export] # ONNX, TensorRT, CoreML (v0.2+)
pip install acaua[all]
The extras claim their slots today and ship empty — installing acaua[ocr] right now is a no-op, but when v0.2 lands it transparently picks up the new adapter.
License
Code: Apache-2.0. See LICENSE.
Weights: every weight in the default load path has an audited Apache-2.0 upstream, mirrored under CondadosAI/* at a pinned commit SHA. See LICENSES.md for the full matrix, attribution chains, and policy notes. Non-Apache weights raise LicenseError unless you pass allow_non_apache=True.
How acaua differs from the alternatives
| License | API | PyTorch-native? | Tasks in scope | |
|---|---|---|---|---|
| Ultralytics | AGPL weights | class per task | yes | detection, pose, classification, segmentation |
| mmdetection | Apache-2.0 | registries + config DSLs | yes (but mmengine) | detection, segmentation, OBB |
| PaddleDetection | Apache-2.0 | Paddle-native | no (Paddle) | everything, but in a different ecosystem |
| Supervision | Apache-2.0 | annotation + post-processing | yes | not a model library |
| acaua | Apache-2.0 code + weights | one class, three verbs | yes | detection, segmentation now; OBB/OCR/VLM/zero-shot next |
If Ultralytics' license wasn't AGPL, it would fit this slot. It is, so acaua is here.
Design non-negotiables
These are what acaua is actively not doing, so you can stop us if you see us drift:
- No config-file DSL. No registry system. No "model zoo" registry class.
- No framework fork. PyTorch idioms only. No mmcv / mmengine. No Paddle custom ops.
- No re-implementing. Extend
torchvision.models.detectionandtransformerswhere possible. - Per-adapter LOC budget. Every adapter module stays under 300 logical lines. If we blow that budget, the abstraction is leaking — stop and redesign, don't just raise the limit.
- License-audit every weight. Code license isn't enough; weight license is the actual ship-blocker.
Development
git clone https://github.com/CondadosAI/acaua
cd acaua
uv sync --group dev
uv run pytest tests/ -m "not e2e"
CI (.github/workflows/ci.yml) runs ruff, mypy, the adapter LOC budget script, the unit suite on Python 3.10–3.13 with a 90% coverage floor, plus one E2E job. Nightly runs the full cross-OS matrix.
Contributing
Open an issue before a PR. For new adapters: the 300-line LOC budget is real and CI-enforced. If your adapter needs more than that, the abstraction is probably leaking and we need to design before we code.
Acknowledgements
acaua is a thin layer over work done by the PyTorch team, Hugging Face, torchvision, Roboflow Supervision, and the authors of RT-DETR, Mask2Former, and Swin. See LICENSES.md for the full chain.
The name is acauã — a Brazilian bird of prey (Herpetotheres cachinnans) that hunts snakes. Named for where the library was made.
Metadata
Release files for acaua 0.1.0.dev0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| acaua-0.1.0.dev0.tar.gz | 194.7 kB | With provenance | Details for acaua-0.1.0.dev0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| acaua-0.1.0.dev0-py3-none-any.whl | Python 3 | none | any | Details for acaua-0.1.0.dev0-py3-none-any.whl |
Total release size: 221.5 kB
Release files / acaua-0.1.0.dev0.tar.gz
| Download URL | acaua-0.1.0.dev0.tar.gz |
|---|---|
| Size | 194.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
135fb7ed736254df6699f23a6ab1ee0f0e49cbd42192e031f9d1ed1fe053527f
|
|
BLAKE2b-256 checksum How to use checksums |
32f2ab60c8deee129481c9db291afa5b04ccb70c2bc9939f9bb3772413b15df0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 18, 2026.
Transparency logRelease files / acaua-0.1.0.dev0-py3-none-any.whl
| Download URL | acaua-0.1.0.dev0-py3-none-any.whl |
|---|---|
| Size | 26.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae03ca93c1b61c75f1930ab75730a0f48636241abd794fff58a5866f1c3ce85b
|
|
BLAKE2b-256 checksum How to use checksums |
95bef479b0708141e364facf6e23a2f51e400906a8831b140dcd94a2f7892015
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 18, 2026.
Transparency logSecurity for acaua 0.1.0.dev0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for acaua-0.1.0.dev0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.