Skip to content
Research
Skill

/image

Extract text from images using a vision LLM

BOOST
From plugin
synthadoc
1.6k10 skills1 hook
Install
$ npx -y skills add axoviq-ai/synthadoc --skill image --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/image

Context preview

The summary Claude sees to decide when to auto-load this skill.

Extract text from images using a vision LLM

SKILL.md

image.SKILL.md
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 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:

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

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`
Read more
Ships withsynthadoc

Document version: v1.4.2 Engineered for solo users and enterprises alike, providing a domain-specific knowledge base that scales seamlessly while maintaining accuracy through autonomous self-optimization.

Get the whole plugin
Stats
1,590
Stars
159
Forks
Active
Maintenance
Python
Language
AGPL-3.0
License
20h ago
Last commit
6mo ago
Created
5h ago
Added

Repo: axoviq-ai/synthadoc

Other skills on synthadoc.