Skip to main content

easyconvio

PyPI version Tests Python versions License

Simple file conversion and transformation for Python. Read a file, transform it, export to another format. That's it.

No complex pipelines, no bloated abstractions — just a clean, fluent API to convert and manipulate files across images, audio, video, documents, and more.

Installation

pip install easyconvio

With optional extras:

pip install easyconvio[all]            # everything
pip install easyconvio[images]         # HEIC/HEIF support via pillow-heif
pip install easyconvio[presentations]  # PowerPoint support
pip install easyconvio[spreadsheets]   # XLSX/XLS/ODS/CSV support
pip install easyconvio[vectors]        # SVG conversion via cairosvg
pip install easyconvio[fonts]          # font conversion via fonttools
pip install easyconvio[archives]       # 7z and RAR support
pip install easyconvio[cad]            # DXF support via ezdxf

Usage

Images

import easyconvio as ec

img = ec.read_jpg("photo.jpg")
print(img)       # <ImageFile 'photo.jpg' (jpg)>
print(img.size)  # (1920, 1080)
print(img.mode)  # RGB

# Geometric transforms
img = img.resize(800, 600)
img = img.crop(0, 0, 400, 300)
img = img.rotate(90)
img = img.flip_horizontal()
img = img.thumbnail(200, 200)

# Color adjustments
img = ec.read_jpg("photo.jpg")
img = img.brightness(1.2)
img = img.contrast(1.5)
img = img.sharpness(2.0)
img = img.saturation(0.8)
img = img.grayscale()
img = img.sepia()
img = img.invert()
img = img.auto_contrast()
img = img.equalize()
img = img.opacity(0.5)

# Filters and compositing
img = ec.read_jpg("photo.jpg")
img = img.blur(radius=3)
img = img.add_border(10, color="red")
img = img.paste("overlay.png", 50, 50)

# Convert
img.to_png("photo.png")
img.to_webp("photo.webp", quality=80)
img.to("gif", "photo.gif")  # generic .to() also works

Audio

audio = ec.read_mp3("song.mp3")
print(audio.duration)     # 180.5 (seconds)
print(audio.channels)     # 2
print(audio.sample_rate)  # 44100

# Editing
audio = audio.trim(start=10, end=60)
audio = audio.append("outro.mp3")
audio = audio.overlay("effect.wav", position=5)
audio = audio.repeat(2)
audio = audio.reverse()
audio = audio.silence(3)

# Effects
audio = ec.read_mp3("song.mp3")
audio = audio.volume(6)
audio = audio.normalize()
audio = audio.fade_in(2)
audio = audio.fade_out(3)
audio = audio.low_pass_filter(3000)
audio = audio.high_pass_filter(200)
audio = audio.speed(1.5)

# Format settings
audio = audio.set_channels(1)  # mono
audio = audio.set_frame_rate(22050)

# Convert
audio.to_wav("song.wav")
audio.to_flac("song.flac")
audio.to("ogg", "song.ogg")

Video

video = ec.read_mp4("clip.mp4")
print(video.duration)  # 120.0 (seconds)
print(video.size)      # (1920, 1080)
print(video.fps)       # 30.0

# Editing
video = video.clip(0, 30)
video = video.resize(1280, 720)
video = video.crop(0, 0, 640, 360)
video = video.concatenate("clip2.mp4")
video = video.loop(3)

# Speed and time
video = ec.read_mp4("clip.mp4")
video = video.speed(2.0)
video = video.reverse()
video = video.set_fps(24)

# Visual effects
video = ec.read_mp4("clip.mp4")
video = video.rotate(90)
video = video.flip_horizontal()
video = video.grayscale()
video = video.brightness(1.3)
video = video.fade_in(2)
video = video.fade_out(2)

# Audio
video = ec.read_mp4("clip.mp4")
video = video.mute()
video = video.add_audio("music.mp3")
video = video.volume(0.5)

# Extract
video = ec.read_mp4("clip.mp4")
video.extract_audio("clip_audio.mp3")
video.snapshot(5.0, "frame_5s.png")

# Convert
video = ec.read_mp4("clip.mp4")
video.to_webm("clip.webm")
video.to("avi", "clip.avi")

Documents

doc = ec.read_docx("report.docx")
doc.to_pdf("report.pdf")
doc.to_html("report.html")
doc.to_md("report.md")
doc.to_latex("report.tex")
doc.to_rst("report.rst")
doc.to("odt", "report.odt")

Ebooks

ebook = ec.read_epub("book.epub")
ebook.to_mobi("book.mobi")
ebook.to_pdf("book.pdf")
ebook.to_html("book.html")
ebook.to("docx", "book.docx")

Archives

archive = ec.read_zip("files.zip")
print(archive.file_count)    # 42
print(archive.list_files())  # ['file1.txt', 'dir/file2.txt', ...]

archive.extract("output_dir/")
archive.extract_file("file1.txt", "output_dir/")

# Convert between archive formats
archive.to_tar("files.tar")
archive.to_gz("files.tar.gz")
archive.to_7z("files.7z")
archive.to("bz2", "files.tar.bz2")

Presentations

pres = ec.read_pptx("slides.pptx")
print(pres.slide_count)       # 15
print(pres.extract_text())    # ['Slide 1 text...', 'Slide 2 text...']

pres.extract_images("slides_images/")
pres = pres.remove_slide(0)

pres.to_pdf("slides.pdf")
pres.to_pptx("slides_copy.pptx")
pres.to_ppsx("slides.ppsx")        # PowerPoint Show
pres.to("odp", "slides.odp")

Spreadsheets

sheet = ec.read_xlsx("data.xlsx")
print(sheet.sheet_names)   # ['Sheet1', 'Summary', ...]
print(sheet.sheet_count)   # 3
print(sheet.row_count())   # rows in first sheet

# Access rows of a specific sheet
for row in sheet.iter_rows("Summary"):
    print(row)

# Manipulate sheets
sheet = sheet.add_sheet("Extra", [["a", "b", "c"], [1, 2, 3]])
sheet = sheet.rename_sheet("Sheet1", "Raw")
sheet = sheet.remove_sheet("Extra")

# Convert
sheet.to_csv("data.csv")          # writes first sheet
sheet.to_xlsx("data_copy.xlsx")   # preserves all sheets
sheet.to_ods("data.ods")
sheet.to("tsv", "data.tsv")

Vectors

svg = ec.read_svg("logo.svg")
svg = svg.scale(2.0)

svg.to_png("logo.png")
svg.to_pdf("logo.pdf")
svg.to_eps("logo.eps")
svg.to("emf", "logo.emf")

Fonts

font = ec.read_ttf("font.ttf")
print(font.family_name)   # 'Roboto'
print(font.style)         # 'Regular'
print(font.glyph_count)   # 1294
print(font.info())

font = font.subset("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
font.to_woff2("font_subset.woff2")
font.to_woff("font.woff")
font.to("otf", "font.otf")

CAD

cad = ec.read_dxf("drawing.dxf")
print(cad.layers)          # ['0', 'Walls', 'Doors', ...]
print(cad.entity_count)    # 256

cad.to_png("drawing.png", dpi=300)
cad.to_svg("drawing.svg")
cad.to_pdf("drawing.pdf")

Supported Formats

Category Read Write
Images jpg, png, gif, bmp, tiff, webp, ico, tga, ppm, pcx, dds, heic, heif jpg, png, gif, bmp, tiff, webp, ico, tga, ppm, pcx, dds, heic, heif
Audio mp3, wav, ogg, flac, aac, wma, m4a, aiff, ac3, opus, amr, au mp3, wav, ogg, flac, aac, wma, m4a, aiff, ac3, opus, amr, au
Video mp4, avi, mov, mkv, webm, flv, ogv, wmv, 3gp, ts, mpeg, mpg mp4, avi, mov, mkv, webm, flv, ogv, wmv, 3gp, ts, mpeg, mpg
Documents pdf, docx, doc, odt, rtf, txt, html, md, latex, csv pdf, docx, odt, rtf, txt, html, md, latex, rst, csv, epub
Ebooks epub, mobi, azw3, fb2 epub, mobi, azw3, fb2, pdf, html, txt, docx
Spreadsheets xlsx, xls, ods, csv, tsv xlsx, ods, csv, tsv
Archives zip, jar, tar, gz, tgz, bz2, xz, 7z, rar zip, jar, tar, gz, tgz, bz2, xz, 7z
Presentations pptx, ppt, odp, pps, ppsx pptx, ppt, odp, pps, ppsx, pdf, html
Vectors svg, eps, wmf, emf svg, png, pdf, eps, emf, wmf
Fonts ttf, otf, woff, woff2 ttf, otf, woff, woff2
CAD dxf dxf, png, svg, pdf

RAR can be read and extracted, but cannot be written (no Python writer exists). Conversions from RAR target other archive formats. Proprietary formats (AI, CDR) and dead ebook formats (LRF, PDB, SNB) are intentionally not supported.

Runtime Dependencies

Some conversions shell out to external tools. Install them on the host:

Tool Used for Install (Ubuntu)
ffmpeg All audio and video conversions apt-get install ffmpeg
pandoc All document and ebook conversions apt-get install pandoc
LibreOffice Presentation conversions (pptx ↔ pdf/odp/ppt) and legacy spreadsheets apt-get install libreoffice
Inkscape Vector conversions for non-SVG formats and EMF/WMF/DXF output apt-get install inkscape
Calibre MOBI/AZW3 ebook conversions apt-get install calibre

License

BSD 3-Clause

Metadata

Release files for easyconvio 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for easyconvio 1.0.0
File Size Uploaded
easyconvio-1.0.0.tar.gz 32.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for easyconvio 1.0.0
File Interpreter ABI Platform
easyconvio-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.1 kB

Release files / easyconvio-1.0.0.tar.gz

Download URL easyconvio-1.0.0.tar.gz
Size 32.4 kB
Tags Source
SHA-256 checksum
How to use checksums
6964fe8f706abfb2075c86b4ef1e32e505aca755004eb71df98649c3a700bede
BLAKE2b-256 checksum
How to use checksums
10ef9cbe1fcf8975f8bf50ab1e3e94e721921d5f31b9358d9d25e5d259df830c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 19, 2026.

Transparency log

Release files / easyconvio-1.0.0-py3-none-any.whl

Download URL easyconvio-1.0.0-py3-none-any.whl
Size 25.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2dc8571b35bc5d02cce09aefed814f44506c73a026af7ba9ab92ea545c2fad1c
BLAKE2b-256 checksum
How to use checksums
2321977af6c6e0f8c886dcfa3ee36b1d47182afea8d7ffd3861315a6a388618b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page