Skip to main content

oculix (Python)

Python wrapper for OculiX — visual automation for the real world.

Install

pip install oculix-operix

Requirements: Python 3.8+, Java 11+ on PATH (Eclipse Temurin or Azul Zulu).

The OculiX engine (~200 MB fat JAR) is downloaded on first use into ~/.oculix/lib/.

Quickstart

from oculix import Screen, App, VNCScreen

screen = Screen()
screen.click("login.png")
screen.type("admin")
screen.click("submit.png")
screen.wait("dashboard.png", 10)

# Open a desktop app
calc = App.open("calc")
screen.click("button_7.png")

# Drive a remote VNC display
vnc = VNCScreen.start("10.0.0.42", 5900, "", 1920, 1080)
vnc.click("logo.png")
vnc.stop()

With pytest

import pytest
from oculix import Screen, App

@pytest.fixture
def calc():
    a = App.open("calculator")
    yield a
    a.close()

def test_addition(calc):
    s = Screen()
    s.click("button_7.png")
    s.click("button_plus.png")
    s.click("button_3.png")
    s.click("button_equals.png")
    assert s.exists("result_10.png")

License

MIT

Java API parity

This fork exposes the complete pinned Oculix 4.0.0 public method surface: 211 public types with named Python methods, constructor/field access and every Java overload's arguments. from oculix import Screen, OCR, Pattern stays unchanged. Every class is also available through oculix.java; nested classes keep names such as OCR.Options and OCR.PSM.

from oculix import Screen, Pattern, Match, OCR, Location, JavaCallback, ObserverCallBack

screen = Screen()
match = screen.find(Pattern("button.png").similar(0.8))
assert isinstance(match, Match)
match.click()
screen.type("hello", 0)

options = OCR.Options().language("eng").psm(OCR.PSM.SINGLE_LINE)
text = OCR.readText("button.png", options)

# Ambiguous Java overloads can be selected explicitly.
options.psm.overload("org.sikuli.script.OCR$PSM")("SINGLE_LINE")

exists() returns Match or None, matching Java; truth checks continue to work. Java interface callbacks accept JavaCallback(interface_name, handler) and observer methods accept a Python function directly. Arrays/collections become Python sequences; maps become dictionaries; Java iterators support iteration.

This distribution uses the matching 1.1.1 JVM bridge from ajayrakde/Operix. Do not mix it with the older upstream bridge. It occupies the same oculix import namespace as upstream, so install only one of the two distributions in a virtual environment. See implementation and validation.

Metadata

Release files for oculix-operix 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oculix-operix 1.1.1
File Size Uploaded
oculix_operix-1.1.1.tar.gz 370.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oculix-operix 1.1.1
File Interpreter ABI Platform
oculix_operix-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 735.6 kB

Release files / oculix_operix-1.1.1.tar.gz

Download URL oculix_operix-1.1.1.tar.gz
Size 370.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c71aed94f57a91735057492c85af0a5cc80f354ad14e068a24f6e933f9e1a579
BLAKE2b-256 checksum
How to use checksums
27340a94160eec204aef693384fe0518aecca829d5d7707a1de7271cf838995f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oculix_operix-1.1.1-py3-none-any.whl

Download URL oculix_operix-1.1.1-py3-none-any.whl
Size 365.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
393fce19b5ce7d231270ec01ce86d1fd969f527da772d22049e3ad4f40f32ec7
BLAKE2b-256 checksum
How to use checksums
2dbb2f38d42c4266d44bf5eb0e4f60e62d19930cbf1d35486ffb23b826c703d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page