cullet
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)
| File | Size | Uploaded | |
|---|---|---|---|
| cullet-0.1.1.tar.gz | 113.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|