Quick checks
New to your camera? Start here. These are tiny, copy-paste scripts, one per operation, that let you confirm everything works before you wire up a full AI integration. Pick the Local or Cloud tab, grab a snippet, run it, and you should get an image or clip saved right next to it. If these work, you’re ready to build.
http://eyeofthetiger.local. Run curl -fsS http://eyeofthetiger.local/docs to verify it’s reachable.mcp package. Install it with: pip install mcp httpxHTTP API
Call the camera’s HTTP endpoints directly with curl. No dependencies beyond curl itself.
Take a snapshot
Call the HTTP endpoint directly with curl to take a snapshot and save it as image.jpg.
#!/usr/bin/env bash
# Take a snapshot from a local EOT-1, saved as image.jpg.
curl -fsS http://eyeofthetiger.local/v1/snapshot -o image.jpg
echo "Saved image.jpg"Record a clip
Request a fixed-length clip in one call and save the resulting MP4.
#!/usr/bin/env bash
# Record a 10-second clip from a local EOT-1, saved as recording.mp4.
curl -fsS "http://eyeofthetiger.local/v1/clip?duration_s=10" -o recording.mp4
echo "Saved recording.mp4"Set quality
Use the HTTP API to switch the quality preset (one tier drives stills and clips).
#!/usr/bin/env bash
# Switch to low quality.
BASE="http://eyeofthetiger.local/v1"
# Check current status (includes the active quality)
curl -fsS "$BASE/status" | python3 -m json.tool
# Set quality to low
curl -fsS -X POST "$BASE/quality?level=low"
echo "Ready to capture at 854x480"MCP server
Talk to the camera’s built-in MCP server from Python.
Capture image (Python)
Connect to the device's built-in MCP server and call take_snapshot to capture an image.
"""Capture a still image via the local MCP server, saved as image.jpg."""
import asyncio
import base64
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
# Trailing slash matters: /mcp redirects and the client won't follow it.
async with streamablehttp_client("http://eyeofthetiger.local/mcp/") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("take_snapshot", {})
for item in result.content:
if item.type == "image":
with open("image.jpg", "wb") as f:
f.write(base64.b64decode(item.data))
print("Saved image.jpg")
asyncio.run(main())Record a clip (Python)
Use the MCP record_video tool to record a clip, then download it from the URL it returns.
"""Record a clip via the local MCP server, then save it as recording.mp4."""
import asyncio
import json
import httpx
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
DEVICE = "http://eyeofthetiger.local"
async def main():
async with streamablehttp_client(f"{DEVICE}/mcp/") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# record_video returns a download URL, not the video itself.
res = await session.call_tool("record_video", {"duration_s": 10})
url = json.loads(res.content[0].text)["download_url"]
clip = httpx.get(url, timeout=60).content
with open("recording.mp4", "wb") as f:
f.write(clip)
print("Saved recording.mp4")
asyncio.run(main())Set quality (Python)
Use the MCP set_quality tool to switch the preset, then capture.
"""Set quality presets via the local MCP server, then capture a still."""
import asyncio
import base64
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
DEVICE = "http://eyeofthetiger.local"
async def main():
async with streamablehttp_client(f"{DEVICE}/mcp/") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# One preset drives both stills and clips
await session.call_tool("set_quality", {"level": "high"})
status = await session.call_tool("get_status", {})
print(status.content[0].text)
result = await session.call_tool("take_snapshot", {})
for item in result.content:
if item.type == "image":
with open("image.jpg", "wb") as f:
f.write(base64.b64decode(item.data))
print("Saved image.jpg (4608x2592, high still quality)")
asyncio.run(main())