---
name: Image
slug: image-2
category: AI Engineering
description: Image extracts text and key information from images with a vision LLM. Use it for screenshots, diagrams, photos, or any .png, .jpg, .webp, .gif, or .tiff input.
github: "https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/image"
language: Python
stars: 1012
forks: 122
install: "npx degit https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/image ~/.claude/skills/image"
installs_to: ~/.claude/skills/image
source_path: synthadoc/skills/image/SKILL.md
collection_size: 10
category_size: 2451
collection_url: "https://dirskills.com/collections/axoviq-ai/synthadoc"
added: 2026-08-21T05:14:31.447Z
last_synced: 2026-08-21T05:14:31.447Z
canonical_url: "https://dirskills.com/skills/image-2"
---

# Image

Image extracts text and key information from images with a vision LLM. Use it for screenshots, diagrams, photos, or any .png, .jpg, .webp, .gif, or .tiff input.

**Install:**

```bash
npx degit https://github.com/axoviq-ai/synthadoc/tree/main/synthadoc/skills/image ~/.claude/skills/image
```

## README

# 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

```python
import asyncio
from 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 image
    print(result.metadata)      # {"tokens_input": N, "tokens_output": N}

asyncio.run(main())
```

**Provider interface** — any object with this async method:

```python
async def complete(
    messages: list,             # list of Message objects from synthadoc.skills.base
    system: 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`:

```python
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`
