EY

Official SDK for EyePop.ai to handle configuration, API authentication, and data retrieval.

Install

mkdir -p .claude/skills/eyepop-sdk && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18252" && unzip -o skill.zip -d .claude/skills/eyepop-sdk && rm skill.zip

Installs to .claude/skills/eyepop-sdk

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

EyePop Python SDK - usage patterns, testing examples, and composable pops
73 charsno explicit “when” trigger
Beginner

Key capabilities

  • Configure EyePop SDK authentication
  • Load staging and production credentials
  • Perform synchronous inference with WorkerEndpoint
  • Perform asynchronous inference with WorkerEndpoint
  • Access DataEndpoint for datasets and VLM
  • Configure inference pipelines with Pop objects

How it works

This skill manages EyePop SDK configuration and authentication using API keys from vault files. It provides entry points for worker and data endpoints to perform inference and data operations.

Inputs & outputs

You give it
Image file, video stream, or VLM prompt
You get back
Inference results, dataset listings, or VLM captions

When to use eyepop-sdk

  • Configure EyePop
  • Authentication setup
  • Data pipeline access

About this skill

EyePop Python SDK

Repo

PathBranchLanguage
~/Code/eyepop/eyepop-sdk-pythonmainPython 3.12+

Package: eyepop on PyPI.

Authentication

The SDK uses EYEPOP_API_KEY for authentication. Keys are stored in vault files:

EnvironmentVault FileAPI Base
Staging~/Code/eyepop/.vault/.env.staginghttps://api.staging.eyepop.xyz
Production~/Code/eyepop/.vault/.env.productionhttps://web-api.eyepop.ai
# Load staging credentials (must also set EYEPOP_URL for staging)
set -a && source ~/Code/eyepop/.vault/.env.staging && set +a
export EYEPOP_URL=https://compute.staging.eyepop.xyz

# Load production credentials (EYEPOP_URL defaults to production, no override needed)
set -a && source ~/Code/eyepop/.vault/.env.production && set +a

Important: The vault files use plain assignments (no export), so use set -a to auto-export all sourced variables.

The SDK reads EYEPOP_API_KEY from the environment automatically. Other env vars:

VariableRequiredDescription
EYEPOP_API_KEYYesAPI key from dashboard.eyepop.ai
EYEPOP_POP_IDNoPop Id from dashboard. Defaults to "transient"
EYEPOP_ACCOUNT_IDFor Data APIAccount UUID for EyePopSdk.dataEndpoint()
EYEPOP_URLFor stagingCompute API URL. Defaults to https://compute.eyepop.ai (production). Set to https://compute.staging.eyepop.xyz for staging.

Important: EYEPOP_SECRET_KEY is deprecated and should NOT be used in any code or documentation.

See eyepop-auth skill for full authentication details.

SDK Entry Points

WorkerEndpoint (inference)

from eyepop import EyePopSdk

# Sync
with EyePopSdk.sync_worker() as endpoint:
    result = endpoint.upload('image.jpg').predict()

# Async
async with EyePopSdk.async_worker() as endpoint:
    job = await endpoint.upload('image.jpg')
    result = await job.predict()

DataEndpoint (datasets, VLM, evaluation)

from eyepop import EyePopSdk

async with EyePopSdk.dataEndpoint(is_async=True) as endpoint:
    datasets = await endpoint.list_datasets()

Composable Pops

Use Pop objects with endpoint.set_pop(pop) to configure inference pipelines at runtime.

Key Types

from eyepop.worker.worker_types import (
    Pop,                      # Top-level pipeline definition
    InferenceComponent,       # ML model component
    TrackingComponent,        # Object tracking
    ContourFinderComponent,   # Segmentation contour extraction
    ComponentFinderComponent, # Connected components
    ForwardComponent,         # Route between stages
    CropForward,              # Crop detections -> sub-components
    FullForward,              # Full image -> sub-components
    ComponentParams,          # Runtime parameters (prompts, ROI)
)

Important: Use ability=, NOT model=

The model= and modelUuid= fields on InferenceComponent are deprecated. Always use:

  • ability='eyepop.<name>:latest' (by alias)
  • abilityUuid='<uuid>' (by UUID)

Common Pop Patterns

# Simple detection
Pop(components=[
    InferenceComponent(ability='eyepop.person:latest', categoryName="person")
])

# Chained: detect -> crop -> sub-model
Pop(components=[
    InferenceComponent(
        ability='eyepop.vehicle:latest',
        forward=CropForward(targets=[
            InferenceComponent(ability='eyepop.vehicle.license-plate:latest')
        ])
    )
])

# VLM with prompts
Pop(components=[
    InferenceComponent(
        id=1,
        ability='eyepop.localize-objects:latest',
        params={"prompts": [{"prompt": "person"}]},
    )
])

set_pop() Only Accepts Pop Objects

# CORRECT
await endpoint.set_pop(Pop(components=[...]))

# WRONG - string form is removed
await endpoint.set_pop('ep_infer model=...')  # TypeError

Data API Types

from eyepop.data.data_types import (
    InferRequest,      # VLM inference request
    EvaluateRequest,   # Batch dataset evaluation
    TranscodeMode,     # Image transcode options
    Dataset,           # Dataset model
    Asset,             # Asset model
)

Model Artifact Variants

A model can carry multiple artifact variants per export format, keyed by an open attribute dict (well-known values: Quantization, TargetRuntime enums). Upload:

from eyepop.data.data_types import ModelExportFormat, Quantization, TargetRuntime

# List values expand to the cartesian product: one binary, two variant rows.
variant = {"quantization": Quantization.int8,
           "target_runtime": [TargetRuntime.cuda_cc_86, TargetRuntime.cuda_cc_87]}
endpoint.upload_model_artifact(model_uuid, ModelExportFormat.ONNX, "model.onnx", stream, variant=variant)
# Uploading model.json/ability.json with the IDENTICAL variant dict is the one-shot
# commit that flips all rows of the set to finished. Finished exports are immutable (409).
endpoint.upload_model_artifact(model_uuid, ModelExportFormat.ONNX, "model.json", manifest, variant=variant)

Fetch (exactly one combination; strict equality, falls back to the default variant):

urls = endpoint.export_model_urls([model_uuid], [ModelExportFormat.ONNX],
                                  variant={"quantization": "int8", "target_runtime": "cuda_cc_87"})

device_name on the fetch methods is deprecated — use variant={"qualcomm_device_name": ...}.

Examples Directory

Located at ~/Code/eyepop/eyepop-sdk-python/examples/

Working Examples

FilePurposeRun Command
pop_demo.pyComposable pops (main demo)python pop_demo.py --pop person -l example.jpg -o
caption_demo.pyVLM caption generationpython caption_demo.py -c eyepop.vlm.preview:latest -l example.jpg
pop_demo.py --pop depthMetric depth map (decode with eyepop.DepthMap)python pop_demo.py --pop depth -l example.jpg -o
infer_demo.pyVLM inference via data APIpython infer_demo.py -m qwen3-instruct -p "describe this" -a <uuid>
upload_image_timing.pyUpload benchmarks (4 strategies)python upload_image_timing.py example.jpg 10
upload_streaming.pyStream uploadpython upload_streaming.py example.jpg
upload_video.pyVideo uploadpython upload_video.py video.mp4
load_video_from_http.pyVideo from URLStandalone (hardcoded URL)
live_rtmp_stream.pyRTSP streamStandalone (hardcoded URL)
visualize_on_image.pyMatplotlib visualizationpython visualize_on_image.py example.jpg
visualize_with_webui2.pyDesktop webui2 visualizationpython visualize_with_webui2.py example.jpg
workflow_cli.pyWorkflow management CLIpython workflow_cli.py list-workflows
auth_session.pyOAuth2 device code flowpython auth_session.py -a <account-uuid>
download_video.pyDownload video assetpython download_video.py output.mp4 -a <uuid>
import_dataset.pyDataset import + auto-annotatepython import_dataset.py ./assets/

Test Data

Test images and videos are at ~/Code/eyepop/test_data/:

DirectoryContents
images/161 test images (people, kittens, misc scenes)
video/Test videos
kagel_dataset/Kaggle dataset

Testing an Example

The examples directory has its own venv at .venv/. Use .venv/bin/python directly.

Production (default — SDK defaults to compute.eyepop.ai, no EYEPOP_URL needed):

cd ~/Code/eyepop/eyepop-sdk-python/examples
set -a && source ~/Code/eyepop/.vault/.env.production && set +a
.venv/bin/python pop_demo.py --pop person -l ~/Code/eyepop/test_data/images/Hackers_02.jpg -o

Staging (must set EYEPOP_URL):

cd ~/Code/eyepop/eyepop-sdk-python/examples
set -a && source ~/Code/eyepop/.vault/.env.staging && set +a
export EYEPOP_URL=https://compute.staging.eyepop.xyz
.venv/bin/python pop_demo.py --pop person -l ~/Code/eyepop/test_data/images/Hackers_02.jpg -o

Development

cd ~/Code/eyepop/eyepop-sdk-python

# Install in dev mode
pip install -e ".[dev]"

# Run tests
uv run python -m pytest tests/

# Lint (changed files vs main)
task lint

# Lint all
task lint:all

# Type check
uvx basedpyright

Test PyPI Packages

Every push to a PR automatically publishes a dev package to test.pypi.org. The version is derived from setuptools_scm (e.g., 3.11.1.dev4). You can also trigger a manual publish via workflow_dispatch with a custom version.

The workflow is defined in .github/workflows/test-pypi-publish.yml.

Installing a Test PyPI Package

# Create a fresh venv
uv venv /tmp/eyepop-test-pypi --python 3.12

# Install the test PyPI version (need --index-strategy for uv to find it)
VIRTUAL_ENV=/tmp/eyepop-test-pypi uv pip install \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ \
  --index-strategy unsafe-best-match \
  eyepop==<VERSION>

# Install example dependencies
VIRTUAL_ENV=/tmp/eyepop-test-pypi uv pip install webui2 pybars3 python-dotenv pillow

Running Examples Against Test PyPI Package

# Load staging credentials and run
export $(grep -v '^#' ~/Code/eyepop/.vault/.env.staging | xargs)
export EYEPOP_URL="https://compute.staging.eyepop.xyz"

/tmp/eyepop-test-pypi/bin/python ~/Code/eyepop/eyepop-sdk-python/examples/pop_demo.py \
  -p person \
  -u "https://picsum.photos/id/237/200/300" \
  -o

Finding the Published Version

Check the test-pypi-publish CI job logs for the line: Uploading eyepop-<VERSION>-py3-none-any.whl

Or browse: https://test.pypi.org/project/eyepop/#history

Key Source Files

PurposePath
SDK entry pointeyepop/eyepopsdk.py
Worker endpointeyepop/worker/worker_endpoint.py

Content truncated.

When not to use it

  • When `EYEPOP_API_KEY` is not available
  • When `EYEPOP_SECRET_KEY` is used for authentication
  • When `model=` or `modelUuid=` fields are used for `InferenceComponent`

Limitations

  • `EYEPOP_SECRET_KEY` is deprecated and should NOT be used
  • `model=` and `modelUuid=` fields on `InferenceComponent` are deprecated
  • `set_pop()` only accepts `Pop` objects, not string forms

How it compares

This skill provides a structured way to configure and authenticate the EyePop SDK, enabling composable inference pipelines through `Pop` objects, unlike direct API calls.

Compared to similar skills

eyepop-sdk side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
eyepop-sdk (this skill)03moReviewBeginner
azure-ai-contentunderstanding-py11moReviewIntermediate
llava79moReviewAdvanced
cocoindex610moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

azure-ai-contentunderstanding-py

microsoft

Azure AI Content Understanding SDK for Python. Use for multimodal content extraction from documents, images, audio, and video. Triggers: "azure-ai-contentunderstanding", "ContentUnderstandingClient", "multimodal analysis", "document extraction", "video analysis", "audio transcription".

12

llava

zechenzhangAGI

Large Language and Vision Assistant. Enables visual instruction tuning and image-based conversations. Combines CLIP vision encoder with Vicuna/LLaMA language models. Supports multi-turn image chat, visual question answering, and instruction following. Use for vision-language chatbots or image understanding tasks. Best for conversational image analysis.

7117

cocoindex

cocoindex-io

Comprehensive toolkit for developing with the CocoIndex library. Use when users need to create data transformation pipelines (flows), write custom functions, or operate flows via CLI or API. Covers building ETL workflows for AI data processing, including embedding documents into vector databases, building knowledge graphs, creating search indexes, or processing data streams with incremental updates.

6116

ai-multimodal

mrgoonie

Process and generate multimedia content using Google Gemini API. Capabilities include analyze audio files (transcription with timestamps, summarization, speech understanding, music/sound analysis up to 9.5 hours), understand images (captioning, object detection, OCR, visual Q&A, segmentation), process videos (scene detection, Q&A, temporal analysis, YouTube URLs, up to 6 hours), extract from documents (PDF tables, forms, charts, diagrams, multi-page), generate images (text-to-image, editing, composition, refinement). Use when working with audio/video files, analyzing images or screenshots, processing PDF documents, extracting structured data from media, creating images from text prompts, or implementing multimodal AI features. Supports multiple models (Gemini 2.5/2.0) with context windows up to 2M tokens.

9108

rag-implementation

wshobson

Build Retrieval-Augmented Generation (RAG) systems for LLM applications with vector databases and semantic search. Use when implementing knowledge-grounded AI, building document Q&A systems, or integrating LLMs with external knowledge bases.

10101

langchain-architecture

wshobson

Design LLM applications using the LangChain framework with agents, memory, and tool integration patterns. Use when building LangChain applications, implementing AI agents, or creating complex LLM workflows.

899

Search skills

Search the agent skills registry