FileFit — File Converter & Compressor
Convert documents between the formats upload portals ask for, and shrink them under a size limit (for example 2 MB or 200 KB), all offline on your own PC.
| From | To |
|---|---|
| JPG, JPEG, PNG, WEBP, BMP, GIF, TIFF, HEIC (iPhone photos) | JPG, JPEG, PNG, WEBP, PDF, DOCX |
| JPG / JPEG / PNG / WEBP (one picture per page), DOCX (editable), PDF (compressed) | |
| DOCX | PDF, pictures, DOCX (compressed) |
Extra options: size limit with one-click presets (100 KB to 5 MB), maximum width and height in pixels, combine many files into one PDF (drag to reorder), and save next to the original or into a chosen folder. Originals are never changed.
Install
- Windows: download
FileFit-Setup.exefrom the Releases page or the website and run it. - Android: download
FileFit-Android.apkfrom the Releases page or the website, tap it and choose Install (Google Play later). - Linux:
pipx install filefit, thenfilefit-cli --install-shortcutto add it to your app menu. - Command line (any OS):
filefit-cli photo.jpg --to pdf --max-size 2MB
DOCX → PDF / JPG needs Microsoft Word or the free LibreOffice installed. Every other conversion works with nothing else installed.
Releases are built automatically by GitHub Actions; see PUBLISHING.md. To build the single-file exe yourself on Windows, double-click build_windows.bat.
How size limits work
- JPG / WEBP: finds the highest quality that fits, and only shrinks the pixel size if quality alone is not enough.
- PNG: reduces colours, then pixel size. For photos, JPG reaches small sizes with far better quality.
- PDF: first recompresses the pictures inside the PDF (text stays selectable). If that is still too big, pages are turned into compressed images; the result says so.
- DOCX: recompresses the pictures inside the document.
If a file cannot reach the limit, the result shows ⚠ with its final size.
Contact
Made by Dipanjan Banerjee. Questions, bugs or ideas: dipanjanbanerjee20@gmail.com or open an issue.
Project layout
main.py starts the app
filefit/core/ conversion + compression engine (no GUI code)
filefit/gui/ PySide6 (Qt) desktop window and styling
tests/ pytest suite for the engine
filefit/cli.py command line tool (filefit-cli)
FileFit.spec PyInstaller recipe for the .exe
installer/FileFit.iss Windows installer (Inno Setup)
site/ download website (GitHub Pages)
.github/workflows/ automatic builds, releases, website
build_windows.bat local one-click Windows build
Run the tests: pip install -r requirements-dev.txt then pytest -q tests.
Android app
mobile/ holds the phone app: a Flet (Python + Flutter) screen on top of the same filefit/core engine, with a welcome tour, format and size-limit chips, and Share / Save buttons for the results. GitHub Actions builds FileFit-Android.apk with flet build apk.
Try it on a computer: pip install "flet[all]==1.0.5", then python mobile/main.py. Turning DOCX into PDF or pictures is not available on the phone (it needs Word or LibreOffice).
Fonts: Outfit and DM Sans, SIL Open Font License (see mobile/assets/fonts/).
Metadata
Release files for filefit 1.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 | Provenance | |
|---|---|---|---|---|
| filefit-1.2.0.tar.gz | 64.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| filefit-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 128.2 kB
Release files / filefit-1.2.0.tar.gz
| Download URL | filefit-1.2.0.tar.gz |
|---|---|
| Size | 64.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60574a3ecd38fed45380b9bc1fb804bb1db213b3fd51c682723ef95149467882
|
|
BLAKE2b-256 checksum How to use checksums |
cc49183a02c6d602e1a1b8e36d99d771c1ec0ef4b23b753d1bbe3041a4a09486
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logRelease files / filefit-1.2.0-py3-none-any.whl
| Download URL | filefit-1.2.0-py3-none-any.whl |
|---|---|
| Size | 63.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18836db3bee0da843220d8bc2d63d3599bc4731e5190fd7e51c9b50c114a4fa5
|
|
BLAKE2b-256 checksum How to use checksums |
0e299291a8e068ac0aa90862ed5e1a4cb045a8ffb07d8bb7db0184037e321c4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 23, 2026.
Transparency logSecurity for filefit 1.2.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for filefit-1.2.0.tar.gz
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 Oct 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.