slide-vision
Enrich markdown slide decks with images — from local folders, DALL-E 3, Pexels, or Unsplash.
Install
pip install slide-vision
# With DALL-E support:
pip install slide-vision[openai]
Quick start
# Create config
slide-vision init
# Enrich a slide deck (uses configured providers)
slide-vision enrich presentation.md
# Skip all APIs — just produce image prompts
slide-vision enrich presentation.md --source none
# Use local images + Pexels fallback
slide-vision enrich presentation.md --source local,pexels --local-dir ./images/
# Also produce a .zip
slide-vision enrich presentation.md --zip
Pre-process local images
Use scan to AI-rename your local images for better keyword matching:
slide-vision scan ./my-images/ --provider openai --dry-run
slide-vision scan ./my-images/ --provider openai
Output structure
presentation-enriched/
├── presentation.md # enriched markdown with image tags
├── images/ # all sourced images
└── prompts.md # AI prompts for slides without images (if any)
API keys
| Provider | Environment variable |
|---|---|
| DALL-E 3 | OPENAI_API_KEY |
| Pexels | PEXELS_API_KEY |
| Unsplash | UNSPLASH_ACCESS_KEY |
Check status: slide-vision providers
Custom providers
Bring your own image source or vision model — no fork required.
Quickest: a module:Attribute import spec. Point --source (or scan --provider)
at any importable object. An image provider just needs a get_image(slide, output_dir)
method; a vision provider is any callable(path) -> str.
# Your own image provider class
slide-vision enrich deck.md --source mypkg.providers:MyProvider
# Mix it with builtins — first hit wins
slide-vision enrich deck.md --source local,mypkg.providers:MyProvider --local-dir ./img
# Your own vision model for scan
slide-vision scan ./img/ --provider mypkg.vision:describe
Image provider contract (implements the ImageProvider protocol):
from slide_vision.providers.base import ImageResult
class MyProvider:
name = "mine"
def is_available(self) -> bool: ...
def get_image(self, slide, output_dir) -> ImageResult | None: ...
Publishable plugins (entry points). Ship a package that registers under
slide_vision.providers (images) or slide_vision.vision_providers (scan); once
installed it's usable by name and shows up in slide-vision providers:
[project.entry-points."slide_vision.providers"]
gemini = "slide_vision_gemini:GeminiProvider"
[project.entry-points."slide_vision.vision_providers"]
claude = "slide_vision_claude:describe"
Programmatic registration (in your own scripts):
from slide_vision.providers.factory import register_provider
from slide_vision.scanner import register_vision_provider
register_provider("mine", lambda ctx: MyProvider())
register_vision_provider("mine", lambda path: "a caption")
Metadata
Release files for slide-vision 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| slide_vision-0.2.0.tar.gz | 87.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| slide_vision-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.1 kB
Release files / slide_vision-0.2.0.tar.gz
| Download URL | slide_vision-0.2.0.tar.gz |
|---|---|
| Size | 87.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6a7c27ab71a79ea91963328856228a29d5ead26bf06651936545c9d53cc4b6c9
|
|
BLAKE2b-256 checksum How to use checksums |
1f82db92261d399bd3d5b31e1d95a639e28553bffc37df6e5295f69cf554aac5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / slide_vision-0.2.0-py3-none-any.whl
| Download URL | slide_vision-0.2.0-py3-none-any.whl |
|---|---|
| Size | 17.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
146e1d127653b3df3ad8b2663ab758f3befd32ed3645c2de3735b1554ae833f0
|
|
BLAKE2b-256 checksum How to use checksums |
c2f7464a9bf045588c335820fd54ede8caadbc8bafe3eb39128f71fc93e8a04e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|