Visual automation for the real world.
From the Latin oculi — eyes.
Because if you can see it, you can automate it.
Desktops · POS terminals · Kiosks · SCO machines · Android devices · VNC remote systems · Legacy apps
SikuliX1 was archived on March 3, 2026. OculiX is its active continuation.
511 files changed. 123,728 insertions. Built for production — not for demos.
Google Vision API?
Tells you what's on screen. Can't click it.
GPT-4o vision?
Describes your UI beautifully. Can't touch it.
Browser Use / Claude Computer Use?
Browser only. Needs a DOM. Fails on native apps.
Appium?
Requires accessibility, XPath, a server… and a PhD.
SikuliX?
Archived. Dead. March 3, 2026.
👁️⚡ OculiX:
- Sees the screen. Clicks it. Types. Swipes. Scrolls.
- Desktop. Android. VNC remote. Kiosk. POS. Legacy 1998 apps.
- No API. No DOM. No selectors. No cloud. No bullshit.
If a human can see it — OculiX can automate it.
💰 Price: €0. Forever.
|
Connect to any remote machine — no local display required. |
|
|
Full ADB integration: |
Find and click on any text visible on screen — desktop or Android. |
|
Run automation scripts in: Jython, JRuby, Python, PowerShell, AppleScript, Robot Framework. |
Windows: |
|
OculiX depends on Apertix, a custom fork of |
Platform-specific |
Prerequisite: Java 11+
→ Eclipse Temurin | Azul Zulu
Build from source:
git clone https://github.com/julienmerconsulting/OculiX.git
cd OculiX
mvn clean install -DskipTestsMaven (local install):
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>oculixapi</artifactId>
<version>3.0.1</version>
</dependency>Required dependency — Apertix (OpenCV 4.10.0):
<dependency>
<groupId>io.github.julienmerconsulting.apertix</groupId>
<artifactId>opencv</artifactId>
<version>4.10.0-0</version>
</dependency>// Connexion directe à une machine distante via VNC
VNCScreen vnc = VNCScreen.start("192.168.1.10", 5900, "", 1920, 1080);
vnc.click("validate_button.png");
vnc.type("1234");
vnc.waitVanish("loading_spinner.png", 10);
vnc.stop();// Tunnel SSH natif — jcraft/jsch embarqué
SSHTunnel tunnel = new SSHTunnel("user", "remote-host", 22, "password");
tunnel.open(5900, "localhost", 5900);
// Puis connexion VNC sur le port local tunnelé
VNCScreen vnc = VNCScreen.start("localhost", 5900, "", 1920, 1080);// Connexion ADB WiFi
ADBScreen android = ADBScreen.start("/path/to/adb");
System.out.println(android.getW() + "x" + android.getH()); // ex: 1080x2400
// Capture écran
ScreenImage img = android.capture();
// Clic sur image
android.click(new Pattern("accept_button.png").similar(0.7f));
// Clic sur texte via OCR PaddleOCR
PaddleOCREngine ocr = new PaddleOCREngine();
String json = ocr.recognize("/tmp/screen.png");
int[] coords = ocr.findTextCoordinates(json, "Validate");
if (coords != null) {
int cx = coords[0] + coords[2] / 2;
int cy = coords[1] + coords[3] / 2;
android.getDevice().tap(cx, cy);
}Works on any Android app — no accessibility API, no XPath, no DOM.
Validated on Android 12+ via WiFi (ADB pairing).
PaddleOCREngine ocr = new PaddleOCREngine(); // localhost:5000 par défaut
String json = ocr.recognize("/path/to/screenshot.png");
// Trouver un texte et obtenir ses coordonnées
int[] coords = ocr.findTextCoordinates(json, "Submit");
// coords = {x, y, width, height}
// Tous les textes détectés avec leur confiance
Map<String, Double> results = ocr.parseTextWithConfidence(json);
// {"Submit" -> 0.9997, "Cancel" -> 0.9981, ...}// Jython
Runner.run("myscript.py", new String[]{});
// PowerShell
Runner.run("myscript.ps1", new String[]{});
// Robot Framework
Runner.run("test.robot", new String[]{});| Component | Status | Details |
|---|---|---|
| Core API — Screen, Region, Pattern, Match | ✅ Active | Extended from SikuliX 2.0.5 |
| VNCScreen + VNCRobot + VNCClient | ✅ Active | 1000+ lines reworked, production-tested |
| VNCFrameBuffer + VNCClipboard + XKeySym | ✅ Active | Full remote control stack |
| SSH tunnel — jcraft/jsch | ✅ Embedded | No external SSH dependency |
| Android ADB — ADBScreen + jadb | ✅ Active | Validated Android 12+ WiFi |
| PaddleOCR — text detection + click | ✅ Active | Full JSON parsing, bbox, confidence |
| Apertix — OpenCV 4.10.0 JNA | ✅ Active | Custom build, no loadLibrary conflict |
| Script runners — Jython, JRuby, Python, PS, Robot | ✅ Active | Multi-language automation |
| Native libs — Windows DLL + macOS + Linux | ✅ Bundled | No manual setup |
| TigerVNC Maven dependency | ✅ Active | Reproducible builds |
| SikuliX IDE | 🔧 Maintained | No new features planned |
| Operix — Python wrapper | 🔬 Coming soon | See roadmap |
- Fat JAR — one file, no manual classpath management
- Maven Central publication
- Operix — Python wrapper for OculiX via py4j
Write your automation scripts in Python, powered by OculiX under the hood.
Same API. No Java knowledge required. - Linux / macOS Apertix binaries — cross-platform OpenCV builds
- OculiX simplified API — single entry point, zero internal knowledge required
- Appium driver — register OculiX as a Selenium Grid node
Issues, bug reports, pull requests — all welcome.
OculiX targets production QA engineers and automation specialists working on environments without API access — desktops, kiosks, POS terminals, legacy software, Android devices.
If you were using SikuliX and looking for a continuation — you found it.
- Bug reports / feature requests → Issues
- Bug fixes → Pull request against
master - Major changes → Open an issue first
Apertix → OpenCV 4.10.0 custom build (fork openpnp/opencv)
↓
OculiX → visual automation engine (fork SikuliX1) — v3.0.1
↓
Operix → Python wrapper via py4j (coming soon)
| Project | Repo | Status |
|---|---|---|
| Apertix | julienmerconsulting/Apertix | ✅ v4.10.0-0 |
| OculiX | julienmerconsulting/OculiX | ✅ v3.0.1 |
| Operix | coming soon | 🔬 In design |
|
|
Julien MER — QA Architect · 20+ years in defense, biotech, aerospace, retail |
MIT — same as the original SikuliX project.
Original project: RaiMan/SikuliX1 (archived March 2026)
Original author: Raimund Hocke — all credits for the foundational work.