The official Python library for the computer API
Project description
Tzafon Python SDK
Remote browser and desktop automation. Control browsers and desktops programmatically through a simple Python API.
Installation
pip install tzafon
Quick Start
from tzafon import Computer
client = Computer() # Reads TZAFON_API_KEY from environment
# Create and control a browser instance
with client.create(kind="browser") as computer:
computer.navigate("https://wikipedia.com")
result = computer.screenshot()
url = computer.get_screenshot_url(result)
print(f"Screenshot: {url}")
computer.click(100, 200)
computer.type("Hello, world!")
# Automatically terminates when exiting context
Set your API key:
export TZAFON_API_KEY="your-api-key"
Or use a .env file with python-dotenv.
Features
Session Management
- Context manager support for automatic cleanup
- Manual session control when needed
- Browser, desktop, and code environments
Browser Actions
- Navigation:
navigate(url) - Mouse:
click(),double_click(),right_click(),drag() - Keyboard:
type(),hotkey() - Viewport:
scroll(),set_viewport() - Capture:
screenshot(),html() - Debug: Execute shell commands with
debug()
Type Safety
- Full type annotations for IDE autocomplete
- Pydantic models for responses
- TypedDict for request parameters
- Helper methods for result extraction
Examples
Browser Automation
with client.create(kind="browser") as computer:
# Navigate and interact
computer.navigate("https://github.com/login")
computer.click(300, 400)
computer.type("username")
computer.hotkey("Control", "a") # Select all
# Capture state
html_result = computer.html()
html = computer.get_html_content(html_result)
# Execute commands
debug_result = computer.debug("ls -la")
output = computer.get_debug_response(debug_result)
Manual Session Management
computer = client.create(kind="browser")
try:
computer.navigate("https://example.com")
screenshot = computer.screenshot()
finally:
computer.terminate()
Async Support
from tzafon import AsyncComputer
async with AsyncComputer() as client:
computer = await client.computers.create(kind="browser")
await client.computers.navigate(computer.id, url="https://example.com")
await client.computers.terminate(computer.id)
Advanced Usage
Raw SDK Access
The simplified wrapper uses the generated SDK under the hood. You can access it directly:
# Low-level API
response = client.computers.create(kind="browser")
client.computers.navigate(response.id, url="https://example.com")
result = client.computers.capture_screenshot(response.id)
client.computers.terminate(response.id)
Error Handling
import tzafon
try:
with client.create(kind="browser") as computer:
computer.navigate("https://example.com")
except tzafon.RateLimitError:
print("Rate limit exceeded, back off")
except tzafon.AuthenticationError:
print("Invalid API key")
except tzafon.APIError as e:
print(f"API error: {e}")
Configuration
from tzafon import Computer
client = Computer(
api_key="your-api-key", # Or use TZAFON_API_KEY env var
base_url="https://...", # Optional: custom endpoint
timeout=120.0, # Request timeout in seconds
max_retries=2, # Retry failed requests
)
API Reference
Session Methods
navigate(url)- Navigate to URLclick(x, y)- Click at coordinatesdouble_click(x, y)- Double-clickright_click(x, y)- Right-clickdrag(x1, y1, x2, y2)- Click and dragtype(text)- Type texthotkey(*keys)- Press key combinationscroll(dx, dy, x, y)- Scroll viewport with starting coordinatesscreenshot(base64=False)- Capture screenshothtml(auto_detect_encoding=False)- Get page HTMLdebug(command, timeout_seconds=120, max_output_length=65536)- Run shell commandset_viewport(width, height, scale_factor=1.0)- Set viewport sizeterminate()- End session
Helper Methods
get_screenshot_url(result)- Extract screenshot URL from resultget_html_content(result)- Extract HTML from resultget_debug_response(result)- Extract command output from result
Error Codes
| Status | Error Type |
|---|---|
| 400 | BadRequestError |
| 401 | AuthenticationError |
| 403 | PermissionDeniedError |
| 404 | NotFoundError |
| 422 | UnprocessableEntityError |
| 429 | RateLimitError |
| ≥500 | InternalServerError |
Documentation
- REST API: docs.tzafon.ai
- Full API Reference: api.md
- Contributing: CONTRIBUTING.md
Requirements
Python 3.9+
License
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 tzafon-2.8.0.tar.gz.
File metadata
- Download URL: tzafon-2.8.0.tar.gz
- Upload date:
- Size: 105.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c43dd9e6afbb15aa9765bdbf1f65de7288496d795f767681b04f6a093f97ac0
|
|
| MD5 |
b843acce8f1e351be2abc5619651a205
|
|
| BLAKE2b-256 |
06fc49575d66c8440359b578e2a8441358a3d5bab77fe730767e7dcdb18b8d15
|
File details
Details for the file tzafon-2.8.0-py3-none-any.whl.
File metadata
- Download URL: tzafon-2.8.0-py3-none-any.whl
- Upload date:
- Size: 84.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4db195c1f6a0445795cbbac566a575ecf6c7d56ee7da99c45c9b4a4ca63082bf
|
|
| MD5 |
1395fc7e595401c2347db0a0acfb0389
|
|
| BLAKE2b-256 |
e433e173cd4da812af48b43e7f2940ce75065a2dd513030a4de5a33e5265a886
|