From f96597a19497b1dc45122696d2726d1cc87eeb9d Mon Sep 17 00:00:00 2001 From: lashman Date: Sun, 8 Mar 2026 14:59:32 +0200 Subject: [PATCH] Add README --- README.md | 260 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..16c7feb --- /dev/null +++ b/README.md @@ -0,0 +1,260 @@ +# Pixstrip + +Batch image processor for Linux. Resize, convert, compress, strip metadata, watermark, rename, and adjust - all in one wizard or one command. + +![Pixstrip workflow screen](data/screenshots/01.png) + +## Download + +Grab the latest AppImage from the [releases page](https://git.lashman.live/lashman/pixstrip/releases), make it executable, and run: + +```bash +chmod +x Pixstrip-x86_64.AppImage +./Pixstrip-x86_64.AppImage +``` + +No dependencies to install. GTK4 and libadwaita are bundled inside. + +## Features + +Pixstrip handles the operations photographers, designers, and web developers repeat on every batch of images. Each operation is a step in a wizard - enable only what you need, skip the rest. + +| Operation | What it does | +|---|---| +| **Resize** | Scale by width, height, exact dimensions, or fit-in-box. Social media presets included. | +| **Adjustments** | Brightness, contrast, saturation, rotation, crop. Grayscale, sepia, sharpen effects. | +| **Convert** | JPEG, PNG, WebP, AVIF, GIF, TIFF, BMP. Per-format mapping for mixed input batches. | +| **Compress** | Optimized encoders: mozjpeg, oxipng, libwebp, ravif. Live before/after quality preview. | +| **Metadata** | Strip all, privacy mode, photographer mode, or pick individual EXIF categories. | +| **Watermark** | Text or image overlays. Position grid, rotation, opacity, tiling, custom fonts. | +| **Rename** | Prefix, suffix, case conversion, sequential counters, regex, EXIF variable templates. | + +Beyond the per-image operations: + +- **8 built-in presets** for common workflows (Blog Photos, Social Media, Web Optimization, and more) +- **Custom presets** - save any workflow and reuse it +- **Watch folders** - monitor directories and auto-process new images +- **Processing history** with undo via system trash +- **File manager integration** for Nautilus, Nemo, Thunar, and Dolphin +- **Full CLI** with complete feature parity + +## Screenshots + +
+Image selection and thumbnail grid + +![Images step](data/screenshots/02.png) + +
+ +
+Resize with live preview + +![Resize step](data/screenshots/03.png) + +
+ +
+Format conversion cards + +![Convert step](data/screenshots/04.png) + +
+ +
+Compression with before/after preview + +![Compress step](data/screenshots/05.png) + +
+ +
+Image adjustments + +![Adjustments step](data/screenshots/06.png) + +
+ +
+Metadata handling with custom categories + +![Metadata step](data/screenshots/07.png) + +
+ +
+Text watermark with live preview + +![Watermark step](data/screenshots/08.png) + +
+ +
+Batch rename with live file preview + +![Rename step](data/screenshots/09.png) + +
+ +
+Output summary and processing + +![Output step](data/screenshots/10.png) +![Processing complete](data/screenshots/11.png) + +
+ +
+Settings and extras + +![Save as preset](data/screenshots/12.png) +![Settings](data/screenshots/13.png) +![Processing history](data/screenshots/14.png) +![Keyboard shortcuts](data/screenshots/15.png) + +
+ +## GUI Usage + +**Preset workflow:** Pick a preset on the first screen. Pixstrip loads recommended settings and jumps to the image selection step. Add images, review the output summary, and hit Process. + +**Custom workflow:** Select Custom, toggle the operations you want, then step through each one. Every step has a help button with guidance specific to that operation. Advanced options are tucked behind expanders to keep the interface clean. + +The step indicator at the top shows your progress. Click any completed step to jump back. Disabled steps are automatically skipped. Navigate with Back/Next buttons or Alt+Left/Alt+Right. + +## CLI Usage + +The CLI mirrors every GUI feature. Process images with flags, presets, or a combination of both. + +```bash +# Resize to 1200px wide +pixstrip process photos/ --resize 1200 + +# Convert to WebP at high quality +pixstrip process *.png --format webp --quality high + +# Fit within 1920x1080, strip metadata, rename to lowercase +pixstrip process photos/ --resize fit:1920x1080 --strip-metadata --rename-case lower + +# Use a saved preset +pixstrip process photos/ --preset "Blog Photos" + +# Override a preset option +pixstrip process photos/ --preset "Blog Photos" --resize 800 + +# Fine-tune compression per format +pixstrip process photos/ --jpeg-quality 90 --webp-quality 85 --avif-quality 70 + +# Add a tiled diagonal watermark +pixstrip process photos/ --watermark "(c) 2026" --watermark-tiled \ + --watermark-rotation 45 --watermark-color ff0000 + +# Combine everything +pixstrip process photos/ -r --resize fit:1920x1080 --format webp \ + --quality high --strip-metadata --rename-case lower -o output/ +``` + +Rename templates support variables: + +| Variable | Value | +|---|---| +| `{name}` | Original filename without extension | +| `{ext}` | File extension | +| `{counter}` | Sequential number | +| `{counter:N}` | Sequential number with N-digit padding | +| `{width}` | Image width in pixels | +| `{height}` | Image height in pixels | +| `{date}` | File modification date (YYYY-MM-DD) | + +```bash +pixstrip process photos/ --rename-template "{name}_{width}x{height}.{ext}" +``` + +## Built-in Presets + +| Preset | Operations | +|---|---| +| Blog Photos | Resize 1200px wide, JPEG high quality, strip all metadata | +| Social Media | Fit 1080x1080, compress medium, strip metadata | +| Web Optimization | Convert to WebP, compress high, sequential rename | +| Email Friendly | Resize 800px wide, JPEG medium quality | +| Privacy Clean | Strip all metadata, no other changes | +| Photographer Export | Resize 2048px, compress high, privacy metadata, rename by date | +| Archive Compress | Lossless compression, preserve metadata | +| Print Ready | Maximum quality, convert to PNG, keep all metadata | + +## Watch Folders + +Monitor directories for new images and process them automatically with a preset. + +```bash +# Add a watch folder +pixstrip watch add ~/incoming --preset "Web Optimization" + +# List active watches +pixstrip watch list + +# Start watching +pixstrip watch start + +# Remove a watch +pixstrip watch remove ~/incoming +``` + +In the GUI, watch folders are configured in Settings. + +## File Manager Integration + +Right-click images in your file manager to process them with Pixstrip. Toggle integration per file manager in Settings. + +| File Manager | Method | +|---|---| +| Nautilus (GNOME Files) | Python extension, dynamic preset submenu | +| Nemo (Cinnamon) | Python extension, dynamic preset submenu | +| Thunar (Xfce) | Custom action, regenerated when presets change | +| Dolphin (KDE) | Service menu, regenerated when presets change | + +## Building from Source + +Requires Rust 1.85+, GTK4 4.16+, and libadwaita 1.6+. + +```bash +# Install GTK4/libadwaita dev packages (Ubuntu/Debian) +sudo apt install libgtk-4-dev libadwaita-1-dev + +# Build +git clone https://git.lashman.live/lashman/pixstrip.git +cd pixstrip +cargo build --release + +# Run +./target/release/pixstrip-gtk # GUI +./target/release/pixstrip-cli # CLI +``` + +
+Build an AppImage + +The included build script bundles all dependencies into a portable AppImage. + +```bash +./build-appimage.sh +``` + +This downloads `linuxdeploy` and its GTK plugin on first run, bundles the GTK4 libraries, and produces `Pixstrip-x86_64.AppImage`. + +
+ +## Project Structure + +``` +pixstrip/ + pixstrip-core/ Shared library - image operations, presets, pipeline, watcher + pixstrip-gtk/ GTK4/libadwaita GUI application + pixstrip-cli/ Command-line interface + data/ Desktop file, metainfo, icons, screenshots +``` + +## License + +CC0 - Public Domain. Do whatever you want with it.