Skill v1.0.1
currentAutomated scan100/100+3 new
name: image version: "1.0" description: Extract text from images using a vision LLM entry: script: scripts/main.py class: ImageSkill triggers: extensions:
- ".png"
- ".jpg"
- ".jpeg"
- ".webp"
- ".gif"
- ".tiff"
intents:
- "image"
- "screenshot"
- "diagram"
- "photo"
requires: [] # no pip packages; a vision LLM provider must be passed at construction time author: axoviq.com license: AGPL-3.0-or-later
Image Skill
Base64-encodes the image and passes it to a vision-capable LLM that extracts all text and key information. Returns the LLM's response as result.text.
Setup
No pip dependency — the skill uses only the Python standard library plus a LLM provider you supply at construction time. The provider can be any object that implements the complete() interface (see below).
Standalone usage
import asynciofrom synthadoc.skills.image.scripts.main import ImageSkill# ImageSkill REQUIRES a vision-capable provider — calling extract() without# one raises ValueError immediately.skill = ImageSkill(provider=my_provider)async def main():result = await skill.extract("/path/to/screenshot.png")print(result.text) # extracted text from the imageprint(result.metadata) # {"tokens_input": N, "tokens_output": N}asyncio.run(main())
Provider interface — any object with this async method:
async def complete(messages: list, # list of Message objects from synthadoc.skills.basesystem: str | None = None,temperature: float = 0.0,max_tokens: int = 4096,) -> object # must have .text (str), .input_tokens (int), .output_tokens (int)
Build the provider with any vision-capable model. Message is importable from synthadoc.skills.base — no dependency on synthadoc.providers:
from synthadoc.skills.base import Message
Supported image formats: .png, .jpg/.jpeg, .webp, .gif, .tiff
When this skill is used
- Source path ends with
.png,.jpg,.jpeg,.webp,.gif, or.tiff - User intent contains:
image,screenshot,diagram,photo