mediapreview
Generate compact AVIF preview images from images, videos, PDFs and office documents.
mediapreview is a small library of low-level converters. Give it a file path and
it returns AVIF bytes plus a response object telling you which backend handled it
and whether it succeeded.
Install
uv add mediapreview[standard]
[standard] pulls in every backend and the optional worker pool. Use the feature-specific extras to avoid dependencies not needed for your application.
Quick start
from pathlib import Path
from mediapreview import dispatch
avif_bytes, resp = dispatch(
Path("photo.jpg"),
quality=60,
maxsize=512,
maxzoom=2.0,
)
if resp.ok:
Path("preview.avif").write_bytes(avif_bytes)
else:
print(resp.error)
dispatch picks the backend from the file extension or mimetype. You can also
call the backend functions directly:
from mediapreview import process_image, process_pdf, process_video
avif, resp = process_image(Path("photo.jpg"), maxsize=512, quality=60)
avif, resp = process_pdf(Path("doc.pdf"), maxsize=512, quality=60, page_number=0)
avif, resp = process_video(Path("clip.mp4"), maxsize=512, quality=60)
Worker pool (optional)
Heavy native dependencies and crashes stay out of your async loop by running previews in a pool of persistent subprocess workers.
from mediapreview.pool import (
start_preview_workers,
shutdown_preview_workers,
run_preview,
)
await start_preview_workers()
try:
avif, resp = await run_preview(Path("doc.pdf"))
finally:
await shutdown_preview_workers()
Add the worker extra to use the pool.
CLI
mediapreview photo.jpg -o preview.avif
mediapreview doc.pdf -q 70 --maxsize 1024
mediapreview oosetup # build + run the bundled OnlyOffice container
OnlyOffice setup
Office previews need an OnlyOffice Document Server. A patched Docker image ships inside the package and can be started with:
mediapreview oosetup [name] [port]
oosetup logs to stderr and prints one line on stdout:
ONLYOFFICE_JWT_SECRET=<token>
Set ONLYOFFICE_JWT_SECRET yourself to reuse an existing secret; otherwise a
random one is generated.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mediapreview-0.2.2.tar.gz.
File metadata
- Download URL: mediapreview-0.2.2.tar.gz
- Upload date:
- Size: 5.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3938f89f73566299ff09f167aa0a2b2176cb8d0e4fe0231e1195172735c9d322
|
|
| MD5 |
56b17aefc456f456c8421068a7c39c3b
|
|
| BLAKE2b-256 |
5ef51c19b35f00031ea5a218ed97b7c80d62c3bda685f2d1db74967d6559e360
|
File details
Details for the file mediapreview-0.2.2-py3-none-any.whl.
File metadata
- Download URL: mediapreview-0.2.2-py3-none-any.whl
- Upload date:
- Size: 33.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07a5682d49c369a117c9e0478aced84414637b8148ab0445132f8717e7ad4fc2
|
|
| MD5 |
b63f5a4cfe8f709735138ea5f49c875c
|
|
| BLAKE2b-256 |
e557227488bdde9bc330e814c1380326db210b92ba747d5f3b34831f74dcdc49
|