Open-source recognition and action for anything on a display.
Project description
Open Frame
Open-source recognition and action for anything on a display.
Open Frame is a platform for seeing what's on screen, locating targets, interacting with them, and verifying the result — without brittle selectors or vendor lock-in. Built under the Off-Camber identity.
Open Frame is an independent project and is not affiliated with or endorsed by any third-party automation vendor.
Status
Active development. v0.1.0 is live on PyPI as off-camber-open-frame.
MVP goalpost: a declarative flow that automates Outlook → Microsoft 365 → create document → email, repeatably across desktop apps. See docs/MVP_GOALPOST.md.
Documentation
| Doc | Purpose |
|---|---|
| Vision | What we're building and for whom |
| Architecture | System layers, modules, and interfaces |
| Action plan | Phased tasks and checklists |
| Decisions | Record of key design choices |
| Capture manual test | Live macOS validation checklist for Phase 1 capture |
| OCR setup | Install and run the Tesseract recognizer |
| Accessibility setup | Configure macOS Accessibility permission for AX recognition |
| Act setup | Install and safely run click/type actions |
| Act manual test | End-to-end capture → find → click validation steps |
| Verify setup | Configure and use click verification with run artifacts |
| Flow setup | Define and run YAML flows |
| Acceptance runs | Record three consecutive MVP flow runs |
| API | Programmatic Session SDK usage and extension points |
| Contributing | Development workflow and macOS permission setup |
| Publish to PyPI | Trusted publishing setup and release checklist |
| v0.1.1 backlog | Short-term stabilization priorities after first release |
Quick start (capture)
# Lower-level primitive available now
open-frame capture --out screen.png
open-frame capture --out crop.png --x 100 --y 200 --width 800 --height 500
# Capture active or named windows
open-frame capture --out active.png --window-title "Outlook"
open-frame capture --out active.png --window-id 123
# Inspect visible windows (and displays)
open-frame list-windows
open-frame list-windows --json --displays
# OCR find on a frame
open-frame find "Submit" --frame screen.png --json
open-frame find "Submit" --frame screen.png --overlay-out overlay.png --json
# Find and click
open-frame click "Submit" --dry-run --json
open-frame click "Save" --verify 'text-gone:"Save"' --json
# Run a flow file
open-frame run flow.yaml --dry-run --json
# Phase 5 smoke flow
open-frame run examples/flows/outlook-new-email/flow.yaml --dry-run --json
open-frame run examples/flows/outlook-browser-outlook/flow.yaml --dry-run --json
open-frame run examples/flows/outlook-m365-email/flow.yaml --dry-run --json
Planned next commands
# Run the MVP reference flow (prepared desktop: Outlook + browser signed in)
open-frame run examples/flows/outlook-m365-email/flow.yaml
open-frame find "New Email" --click
License
Apache License 2.0 — free to use, modify, and self-host. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file off_camber_open_frame-0.1.1.tar.gz.
File metadata
- Download URL: off_camber_open_frame-0.1.1.tar.gz
- Upload date:
- Size: 33.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
823bf69c62870927f623d09118854ad96416210b00cd4375b726016f2d04d39a
|
|
| MD5 |
2d811c57ae7af086ef61e3774bb07c79
|
|
| BLAKE2b-256 |
605d5ec068882720b4b33d45c4ca1bd21393ed7646998512394905b09dee1e57
|
Provenance
The following attestation bundles were made for off_camber_open_frame-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on Off-Camber/open-frame
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
off_camber_open_frame-0.1.1.tar.gz -
Subject digest:
823bf69c62870927f623d09118854ad96416210b00cd4375b726016f2d04d39a - Sigstore transparency entry: 1866173552
- Sigstore integration time:
-
Permalink:
Off-Camber/open-frame@4783404c82544a101e9af096a8119f07c6497dae -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Off-Camber
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4783404c82544a101e9af096a8119f07c6497dae -
Trigger Event:
release
-
Statement type:
File details
Details for the file off_camber_open_frame-0.1.1-py3-none-any.whl.
File metadata
- Download URL: off_camber_open_frame-0.1.1-py3-none-any.whl
- Upload date:
- Size: 32.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
699c5eb7099e968816b27343c2bc8275999ed9bd8e9a7a8d1bf9258af982c76d
|
|
| MD5 |
97b39b871992dfdc62b29b8ee3cb0735
|
|
| BLAKE2b-256 |
54baefe2942d6e6b3e27170f047c51cf8f66e7f0122a0826a48594c831e38431
|
Provenance
The following attestation bundles were made for off_camber_open_frame-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on Off-Camber/open-frame
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
off_camber_open_frame-0.1.1-py3-none-any.whl -
Subject digest:
699c5eb7099e968816b27343c2bc8275999ed9bd8e9a7a8d1bf9258af982c76d - Sigstore transparency entry: 1866173671
- Sigstore integration time:
-
Permalink:
Off-Camber/open-frame@4783404c82544a101e9af096a8119f07c6497dae -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Off-Camber
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@4783404c82544a101e9af096a8119f07c6497dae -
Trigger Event:
release
-
Statement type: