Skip to main content

cullet

minimal build 3.10 status minimal build 3.14 status
full build 3.10 status full build 3.14 status
coverage version

Keyboard-driven photo viewer for going through a folder fast: step, zoom, rotate, delete, move into target folders, tag, and review duplicates. Press h in the viewer for the keys, or tap Alt for a menu of everything they do.

Install

Requires python>=3.10

uv tool install cullet

or pip install cullet into an environment of your choice. Rotating JPEGs losslessly needs the jpegtran binary, which comes with libjpeg-turbo on most distributions.

Finding duplicates and fixing rotations need torch, which comes with the full extra:

uv tool install "cullet[full]"

Open with

To get cullet into the "Open with" menu of the file manager for photos and folders, install the desktop file of this repository:

curl -o ~/.local/share/applications/cullet.desktop https://raw.githubusercontent.com/simon-ging/cullet/main/packaging/cullet.desktop
update-desktop-database ~/.local/share/applications
# optional, make it the default for photos
xdg-mime default cullet.desktop image/jpeg image/png

This needs the cullet command on the PATH of the desktop session, uv tool install puts it into ~/.local/bin.

Usage

cullet /path/to/photos
cullet /path/to/photos/IMG_1234.jpg
cullet /path/to/photos -a ../good -a ../maybe -T sun -T portrait
cullet /path/to/photos --dedup

The number keys move the image into the target folders (-a) and toggle the tags (-T), in the order they are given. Deleted files are moved to the system trash, never removed (--trash_dir puts them into a folder of your choice instead), and every file operation can be undone with u. cullet --help lists all options.

Command line tools

They only log what they would do until -w is given. Each has --help.

command does needs
cullet-dedup-images removes duplicate images, into the system trash or a folder with -Q full extra
cullet-dedup-videos the same for videos full extra, ffmpeg
cullet-fix-rotation-images finds photos stored sideways or upside down and rotates them full extra
cullet-fix-rotation-videos the same for videos full extra, ffmpeg
cullet-downscale-images shrinks images, keeping their metadata
cullet-downscale-videos shrinks videos ffmpeg
cullet-rotate-videos rotates the videos you name by a given angle ffmpeg
cullet-dedup-videos /path/to/videos -Q /path/to/quarantine -w
cullet-downscale-images /path/to/photos -s 1080 -w

Install locally and run tests

Clone repository and cd into. Setup python 3.10 or higher.

Dev build: install the clone as the cullet command, with torch, so code changes are live:

uv tool install --editable ".[full]"

Note: The tests that need torch are skipped unless it is installed.

pip install -e .[full,dev]
pylint src

# run tests
python -m pytest --cov
pylint tests

Metadata

Release files for cullet 0.1.1

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

Source distribution (sdist)

Source distribution for cullet 0.1.1
File Size Uploaded
cullet-0.1.1.tar.gz 113.3 kB Details

Built distribution (wheel)

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

Total release size: 219.6 kB

Release files / cullet-0.1.1.tar.gz

Download URL cullet-0.1.1.tar.gz
Size 113.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4b377ddeb279fb8aa597fa2cf681375d3e302bc7c7d7ace94f35a75048caede8
BLAKE2b-256 checksum
How to use checksums
7bfce8fa9f6067f052d89e998119b9b729d5fda87c58c3bcc5c87541d9b3c124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / cullet-0.1.1-py3-none-any.whl

Download URL cullet-0.1.1-py3-none-any.whl
Size 106.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e76bb1b4d6c6ca6ab4f7ea72bcc32d2d45c3a29b4e78284bdae9f7b7ba2de32d
BLAKE2b-256 checksum
How to use checksums
aa05fe9bcc55e77fb09c382c2de72032647e23cba25cad0da92eb2361e38774d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.1

1 release file

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