Metadata-Version: 2.4
Name: visynx
Version: 0.1.1
Summary: Run your VisionForge computer-vision models from Python.
Project-URL: Homepage, https://visionforge.evo-ss.com
Project-URL: Documentation, https://visionforge.evo-ss.com/docs/python-quickstart
Project-URL: Source, https://github.com/manasjohri/Labelling_Package
Project-URL: Issues, https://github.com/manasjohri/Labelling_Package/issues
Author: Visynx
License: MIT License
        
        Copyright (c) 2026 VisionForge
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: computer-vision,detectron2,inference,machine-learning,object-detection,rf-detr,segmentation,visionforge,yolo
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: pillow>=9.0
Requires-Dist: requests>=2.25
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Description-Content-Type: text/markdown

# visynx

Run your [VisionForge](https://visionforge.evo-ss.com) computer-vision models from Python.

Train a model in VisionForge, grab an API key, and you are three lines from predictions —
detection, segmentation, pose, classification, and semantic segmentation, all through one call.

```bash
pip install visynx
```

## Quickstart

```python
from visynx import Visynx

vf = Visynx(api_key="vf_...")          # or set VISYNX_API_KEY
model = vf.model("shelf-scanner/3")    # your project name and version

result = model.predict("shelf.jpg", confidence=0.4)

for d in result:
    print(d.class_name, round(d.confidence, 2), d.box)

result.save("annotated.jpg")
```

```
bottle 0.94 [412.0, 118.5, 501.2, 388.0]
bottle 0.91 [502.6, 121.0, 590.4, 390.7]
can    0.78 [604.1, 210.3, 664.9, 372.2]
```

`visynx` pulls in only `requests` and `Pillow`. No OpenCV, no numpy, no torch —
the models run on VisionForge's GPUs, not yours.

## Find your models

```python
for m in vf.models():
    print(m.slug, m.provider, m.display_name)
# shelf-scanner/3   yolo     Shelf Scanner v3
# defect-seg/1      rfdetr   Defect Seg v1
```

`"shelf-scanner/3"` is the model's slug — your project name and its training
version, the same name you see in the app. A raw `"yolo/<job_id>"` also works
and skips the lookup.

## What you get back

`predict()` returns a `Result`: iterate it for detections, or reach for the raw
API payload with `.json()`.

```python
result = model.predict("shelf.jpg")

len(result)              # 3
result.detections[0]     # Detection('bottle', 0.94)
result.json()            # the raw API response, untouched

result.plot()            # a PIL image with boxes drawn on
result.save("out.jpg")   # ...written to disk
```

Each `Detection` carries `class_id`, `class_name`, `confidence`, and `box`
(`[x1, y1, x2, y2]` in absolute pixels). Segmentation models add `polygons`;
pose models add `keypoints`.

## Anything image-shaped works

```python
model.predict("shelf.jpg")                  # a path
model.predict("frames/")                    # a directory -> list of Results
model.predict(open("shelf.jpg", "rb"))      # an open file
model.predict(pil_image)                    # a PIL image
model.predict(numpy_array)                  # a numpy array (from OpenCV, say)
```

## Beyond boxes

Two flags the hosted GPUs do for you, with nothing extra to install. Each runs a
second model, so each costs extra credits:

```python
# Turn every detected box into a precise instance polygon with SAM 2
result = model.predict("shelf.jpg", segment=True)
result.detections[0].polygons

# Add a monocular depth map, and a relative distance per detection
result = model.predict("shelf.jpg", depth=True)
result.detections[0].depth_median      # 0-1, higher is closer
result.depth_image.save("depth.png")
```

Semantic-segmentation models return a dense mask instead of boxes:

```python
result = model.predict("road.jpg")
result.semantic["legend"]     # [{'class_id': 1, 'class_name': 'road', ...}]
result.save("mask.jpg")       # the mask, blended over your image
```

## Get an API key

In VisionForge, go to **Settings → API Keys**, create a key, and copy the secret —
it is shown once. Keys start with `vf_`, never expire, and can be locked to
specific IPs or CIDR ranges. Keep it out of source control:

```python
vf = Visynx()                      # reads VISYNX_API_KEY
```

A plain `predict()` call spends 1 Vision Credit; `segment=True` and `depth=True`
each add a surcharge for the extra model they run. You are charged only after the
inference succeeds — a failed call is free — and a call retried after a `429` is
billed once, not twice.

Some endpoints are deliberately not reachable with an API key: batch prediction
over a whole dataset, live-camera inference, workflow runs, and the AI-labelling
tools (SAM/DINO/box-prompt). Those run from the VisionForge app with a signed-in
session. Calling them with a key returns `PermissionDeniedError`.

## Errors

Every failure is a typed exception, and it quotes the response's `X-Request-ID`
when the server sent one — include it if you contact support. (Authentication
failures are rejected before that header is assigned, so `401`s carry none.)

| Exception | Means | Do |
|---|---|---|
| `AuthenticationError` | key invalid or revoked | create a new key |
| `PermissionDeniedError` | email unverified, or the key's IP allowlist rejected you | verify your email / check the allowlist |
| `InsufficientCreditsError` | out of Vision Credits | top up |
| `ModelNotFoundError` | no such model, or not yours | check `vf.models()` |
| `PayloadTooLargeError` | image over 50 MB | resize before sending |
| `RateLimitError` | rate limited, retries exhausted | back off |
| `MaintenanceError` | platform in maintenance | retry later |

`429`s are retried automatically, honouring the server's `Retry-After`.
All of these subclass `VisynxError`, so one `except VisynxError` catches everything.

## Self-hosting

Point the client at your own deployment:

```python
vf = Visynx(api_key="vf_...", api_url="https://visionforge.internal/api")
```

or set `VISYNX_API_URL`.

## License

MIT
