Compare commits

..

131 Commits

Author SHA1 Message Date
7677e05b20 Fix title case in README headings 2026-03-13 19:32:49 +02:00
e3b391b18a Fix drag-and-drop and file manager integration 2026-03-08 16:53:30 +02:00
bb75a7764f Use fediverse platforms in README examples 2026-03-08 15:06:10 +02:00
834bf5fbb6 Rewrite README with detailed feature documentation 2026-03-08 15:04:06 +02:00
b94626036d Add README 2026-03-08 14:59:32 +02:00
2b1c328c93 Add screenshots, update metainfo, and fix AppImage build script 2026-03-08 14:50:59 +02:00
28253f009d Improve UX, add popover tour, metadata, and hicolor icons 2026-03-08 14:18:15 +02:00
388670964a Clean up minor code quality issues 2026-03-08 00:22:24 +02:00
96f6973d39 Fix bugs across all crates 2026-03-07 23:35:32 +02:00
72c519bebc Fix performance and UX issues 2026-03-07 23:11:00 +02:00
0ef3893bce Fix bugs in CLI, core, and GTK 2026-03-07 23:02:57 +02:00
6392b7952f Fix CLI/GTK history timestamp format mismatch 2026-03-07 22:35:25 +02:00
5ed5f3a1d5 Fix cleanup, template, and watermark bugs 2026-03-07 22:27:37 +02:00
f471d22767 Fix overflow, race condition, and format bugs 2026-03-07 22:14:48 +02:00
150d483fbe Fix path traversal, encoding, and edge case bugs 2026-03-07 20:49:10 +02:00
9e1562c4c4 Fix edge cases and consistency issues 2026-03-07 19:47:23 +02:00
6bf9d60430 Fix step indicator layout warnings on narrow windows 2026-03-06 18:44:41 +02:00
780ac75e7b Add AppImage packaging, app icon, and AppStream metainfo 2026-03-06 18:31:18 +02:00
213e3d1de8 Add EXIF auto-orient and aspect ratio lock toggle 2026-03-06 18:18:04 +02:00
7feb8583cd Implement watermark rotation for text and image watermarks 2026-03-06 18:14:53 +02:00
62ad99d254 Fix pipeline order, add selective metadata stripping, rename case/regex 2026-03-06 18:12:18 +02:00
8edaab0e2b Add EXIF-based rename template variables 2026-03-06 18:03:12 +02:00
3fd602652a Add thumbnail re-render preview to resize step 2026-03-06 17:56:44 +02:00
6cf5a6e80c Integrate watch folder monitoring into GTK app 2026-03-06 17:53:41 +02:00
f301f1a78b Persist advanced options expand/collapse state per section 2026-03-06 17:49:07 +02:00
646a698ac1 Add watermark tiling, rotation types, margin/scale controls 2026-03-06 17:36:07 +02:00
3e6a539749 Add collapsible watch folders panel in main window 2026-03-06 17:29:02 +02:00
3d200fc0a9 Add fixed output folder option in settings 2026-03-06 17:23:57 +02:00
ebf9f2ecfc Add PNG DPI support via pHYs chunk and fix font picker 2026-03-06 17:16:43 +02:00
727056f385 Add font family selector for watermark text 2026-03-06 17:12:23 +02:00
81e244e069 Add overwrite confirmation dialog and preset file drop import 2026-03-06 17:07:53 +02:00
f2b1f0be2e Add drag-and-drop import for .pixstrip-preset files 2026-03-06 17:06:02 +02:00
21e17d0c50 Add preset export/delete buttons and single-instance support 2026-03-06 17:04:18 +02:00
7e54ff1c72 Improve screen reader support for wizard navigation 2026-03-06 17:02:04 +02:00
230410e09e Add single-instance file handling via GIO HANDLES_OPEN 2026-03-06 16:58:23 +02:00
e81698a367 Enhance history dialog with expandable details and DPI support 2026-03-06 16:56:23 +02:00
8b39b1a678 Apply output DPI to JPEG files via mozjpeg pixel density 2026-03-06 16:53:32 +02:00
35b1ae4e59 Add sequential batch queue processing 2026-03-06 16:17:25 +02:00
fd0fbeb385 Add Watch Folders settings page with full CRUD 2026-03-06 16:13:14 +02:00
47d6813d6f Add rename template presets and watermark color picker 2026-03-06 16:10:05 +02:00
f3060479f5 Add URL drag-and-drop support for images from web browsers 2026-03-06 16:02:39 +02:00
84bf287851 Add thumbnail selection for compression and watermark previews 2026-03-06 15:59:44 +02:00
1dc3abf691 Improve output step with individual operation summary rows 2026-03-06 15:57:06 +02:00
5582aa21bd Add batch queue with slide-out side panel 2026-03-06 15:52:18 +02:00
d94ea19a0d Add tutorial overlay tour after welcome wizard 2026-03-06 15:48:06 +02:00
4a328010d7 Enhance save preset dialog with settings summary and update option 2026-03-06 15:43:45 +02:00
d74fd0abc0 Wire DPI setting from resize step through to processing job 2026-03-06 15:41:25 +02:00
322f6440dd Add live watermark preview with position and opacity updates 2026-03-06 15:39:10 +02:00
4409e596d8 Add file manager integration install/uninstall logic 2026-03-06 15:37:25 +02:00
88ee177467 Wire skill level and accessibility settings to UI 2026-03-06 15:28:02 +02:00
135bbe80f8 Initialize overwrite behavior from app settings 2026-03-06 15:24:51 +02:00
245adec076 Add completion sound, preserve directory structure support 2026-03-06 15:24:04 +02:00
acb60e409a Add history pruning with configurable max entries and max days 2026-03-06 15:22:17 +02:00
2ad0538a13 Add --algorithm and --overwrite flags to CLI 2026-03-06 15:19:34 +02:00
e871d47a80 Wire resize algorithm selection, overwrite behavior, and fix rotation/flip scope 2026-03-06 15:17:59 +02:00
0388d3a510 Fix imported presets not persisting, remove duplicate help handler 2026-03-06 15:12:06 +02:00
60c5a45c20 Restore session settings for convert format, quality preset, and metadata mode 2026-03-06 15:10:28 +02:00
cd286a23de Wire progressive JPEG, AVIF speed, and custom per-format quality to encoder 2026-03-06 15:07:54 +02:00
3bc3d89ead Wire help button to show contextual step help dialog 2026-03-06 14:59:29 +02:00
105058d767 Guard output summary adjustments behind adjustments_enabled flag 2026-03-06 14:57:38 +02:00
6838fd3b7e Auto-show What's New dialog on first launch after update 2026-03-06 14:54:43 +02:00
5b47d68d5c Add wizard step-skipping for disabled operations 2026-03-06 14:53:04 +02:00
4eccbb1804 Support per-format conversion mapping in processing pipeline 2026-03-06 14:51:17 +02:00
1feb9805bb Wire missing UI controls to job config 2026-03-06 14:50:12 +02:00
c31b30eed2 Replace custom shortcuts dialog with GtkShortcutsWindow, fix Process More button 2026-03-06 14:46:54 +02:00
d581640d0c Add squoosh-style compression preview with draggable divider 2026-03-06 14:29:01 +02:00
f3dc164018 Add image adjustments pipeline (brightness, contrast, crop, effects) 2026-03-06 14:24:14 +02:00
600b36279e Wire all missing operations into pipeline executor 2026-03-06 14:20:47 +02:00
2b977b833a Add accessible labels to thumbnail grid and toolbar 2026-03-06 14:08:52 +02:00
4a5114e6f9 Add visual size preview to resize step 2026-03-06 14:05:52 +02:00
0b635f6d81 Add CSS provider for thumbnail grid styling 2026-03-06 14:02:49 +02:00
f8a23af851 Replace image list with GtkGridView thumbnail grid 2026-03-06 14:01:52 +02:00
a87a976b6e Implement parallel image processing with rayon thread pool 2026-03-06 13:57:14 +02:00
ce726a7838 Add accessible value updates to processing progress bar 2026-03-06 13:53:32 +02:00
ded1880711 Wire thread count and error behavior settings into executor 2026-03-06 13:52:08 +02:00
b54e0545b0 Add accessible labels to sliders and watermark position grid 2026-03-06 13:51:01 +02:00
f5d55167fb Add per-step contextual help button in header bar 2026-03-06 13:48:13 +02:00
324e121f43 Add Ctrl+V clipboard paste for images 2026-03-06 13:46:20 +02:00
ea596e01fe Add Escape key shortcut and subfolder prompt for folder drops 2026-03-06 13:45:06 +02:00
5428214d6c Add accessible labels to processing progress bar, results icon, drop zone 2026-03-06 13:41:30 +02:00
31b12478b6 Replace watermark position dropdown with visual 3x3 grid 2026-03-06 13:38:12 +02:00
ec81b059b2 Add Ctrl+Z undo last batch and register select/deselect shortcuts 2026-03-06 13:35:45 +02:00
42e3bfcec1 Add Ctrl+A and Ctrl+Shift+A keyboard shortcuts for select/deselect all 2026-03-06 13:33:06 +02:00
543368ee45 Respect excluded files in output step counts and processing validation 2026-03-06 13:31:35 +02:00
81da76310a Add file manager integration toggles and reset button to Settings 2026-03-06 13:29:25 +02:00
9e99012a88 Add per-image checkboxes and wire Select All / Deselect All buttons 2026-03-06 13:24:18 +02:00
9dabd89a55 Add WebP effort, AVIF speed controls, case conversion and regex rename 2026-03-06 13:19:11 +02:00
0c1dd2cd3b Add File Manager Integration page to welcome wizard 2026-03-06 13:16:11 +02:00
dbc215f0ad Add What's New dialog, accessibility labels, focus management 2026-03-06 13:13:39 +02:00
36e291e486 Add format mapping to convert step, orientation controls to resize step 2026-03-06 13:11:00 +02:00
ac6f305bcc Add crop/trim/canvas padding to adjustments, wire all sliders to config 2026-03-06 13:09:45 +02:00
6ef0f14804 Add Photographer metadata preset and improve quality descriptions 2026-03-06 13:05:07 +02:00
7531de5332 Add custom workflow operation toggles, improve output step summary 2026-03-06 13:00:52 +02:00
fde0fbdf9f Add visual format cards, per-image remove, shortcuts dialog, wire threads 2026-03-06 12:58:43 +02:00
0eebeabd42 Enhance rename preview to show 5 files, add watermark advanced expander 2026-03-06 12:54:35 +02:00
08c287843d Enhance adjustments with sliders/effects, add undo toast, compress AVIF/progressive 2026-03-06 12:47:12 +02:00
24459ef9ac Add session memory, resize mode tabs, improved output summary 2026-03-06 12:44:16 +02:00
3d4ee6cac9 Add real pause, desktop notifications, undo, accessibility, CLI watch 2026-03-06 12:38:16 +02:00
d1bc450d7d Add rotate, flip, watermark, and rename CLI flags with helper functions 2026-03-06 12:33:21 +02:00
3e63761b43 Add window persistence, clickable step indicator, file list improvements 2026-03-06 12:27:19 +02:00
283206c411 Improve Images, Compress, Output, Workflow steps 2026-03-06 12:22:15 +02:00
457f132f51 Add ETA calculation, activity log, keyboard shortcuts, expand format options 2026-03-06 12:20:04 +02:00
6235d3d686 Add Adjustments, Watermark, Rename wizard steps; expand to 10-step wizard 2026-03-06 12:15:02 +02:00
662270d7b9 Wire remaining UI elements: presets, drag-drop, import/save, output summary 2026-03-06 12:01:50 +02:00
86480545b7 Wire all wizard step controls to shared JobConfig state 2026-03-06 11:51:01 +02:00
609a682105 Wire settings dialog to persist config via ConfigStore 2026-03-06 11:44:16 +02:00
a1df353521 Wire welcome dialog with navigation and first-run detection 2026-03-06 11:43:25 +02:00
c4bf5cbdda Wire up step buttons: Browse, preset cards, output directory picker 2026-03-06 11:41:46 +02:00
4e03cc389d Wire up all GTK UI actions to real functionality 2026-03-06 11:37:32 +02:00
cfd2660b95 Add welcome wizard, desktop entry, and Nautilus extension 2026-03-06 11:18:28 +02:00
9ad70c960b Add file watcher for watch folder functionality 2026-03-06 11:17:02 +02:00
47e019dbb9 Implement fully functional CLI with process, preset, history, and undo commands 2026-03-06 11:13:33 +02:00
86307aeefc Add processing, results, and settings UI screens 2026-03-06 11:10:38 +02:00
d36f90565e Add all wizard step UIs: workflow, images, resize, convert, compress, metadata, output 2026-03-06 11:08:38 +02:00
9fe680dad5 Add GTK app shell with wizard navigation, step indicator, and actions 2026-03-06 11:03:11 +02:00
0bc39542ee Add storage module for presets, config, session, and history persistence 2026-03-06 02:14:57 +02:00
9b5cfd1212 Add pipeline executor with progress reporting and cancellation 2026-03-06 02:08:11 +02:00
c81e2364af Add metadata stripping, watermark positioning, and rename template modules 2026-03-06 02:06:01 +02:00
56f0a7172e Add metadata, watermark, and rename dependencies: little_exif, imageproc, ab_glyph 2026-03-06 02:03:04 +02:00
90807f5632 Add output encoders (mozjpeg, oxipng, webp, avif) and integration tests 2026-03-06 02:02:27 +02:00
4e34c77d46 Add output encoder dependencies: mozjpeg, oxipng, webp 2026-03-06 01:59:52 +02:00
9a65a034d1 Fix clippy: collapse nested if in discovery module 2026-03-06 01:59:00 +02:00
2747cb9b4a Add CLI skeleton with clap: process, preset, history, and undo subcommands 2026-03-06 01:57:43 +02:00
f10ee90c0a Add minimal GTK4/libadwaita window with header bar and status page 2026-03-06 01:57:03 +02:00
4b354b79c4 Add SIMD-accelerated resize operation using fast_image_resize 2026-03-06 01:54:57 +02:00
1fc958f068 Add ImageLoader and file discovery modules 2026-03-06 01:50:46 +02:00
34cac53eb8 Add image processing dependencies: magick_rust, fast_image_resize, image, rayon, walkdir 2026-03-06 01:49:12 +02:00
0f539875bb Add AppConfig with overwrite behavior, skill level, thread count settings 2026-03-06 01:43:22 +02:00
7967e86a59 Add Preset type with 8 built-in presets and JSON serialization 2026-03-06 01:42:35 +02:00
f503c81df8 Add ProcessingJob type with source management and output path resolution 2026-03-06 01:41:23 +02:00
f6cccda7bf Add operation configuration types: resize, convert, compress, metadata, watermark, rename 2026-03-06 01:40:24 +02:00

View File

@@ -23,7 +23,7 @@ All in one wizard - or one command.
--- ---
## 🧭 What Is Pixstrip ## 🧭 What is Pixstrip
Pixstrip is a batch image processor for Linux built with GTK4 and libadwaita. It exists because preparing images for the web, for clients, for print, or for sharing shouldn't require proprietary software, cloud uploads, or a subscription. Pixstrip is a batch image processor for Linux built with GTK4 and libadwaita. It exists because preparing images for the web, for clients, for print, or for sharing shouldn't require proprietary software, cloud uploads, or a subscription.
@@ -270,7 +270,7 @@ pixstrip watch start
pixstrip watch remove ~/incoming pixstrip watch remove ~/incoming
``` ```
## 📁 File Manager Integration ## 📁 File manager integration
Right-click any image (or selection of images) in your file manager to process them directly with Pixstrip. A submenu lists all your presets for one-click processing, plus an "Open in Pixstrip" option for the full wizard. Right-click any image (or selection of images) in your file manager to process them directly with Pixstrip. A submenu lists all your presets for one-click processing, plus an "Open in Pixstrip" option for the full wizard.
@@ -283,7 +283,7 @@ Right-click any image (or selection of images) in your file manager to process t
Toggle each integration on or off in Settings. The extensions are installed into the standard locations for each file manager. Toggle each integration on or off in Settings. The extensions are installed into the standard locations for each file manager.
## 🏗️ Building from Source ## 🏗️ Building from source
Pixstrip is written in Rust and builds with standard Cargo tooling. Pixstrip is written in Rust and builds with standard Cargo tooling.
@@ -312,7 +312,7 @@ The included script downloads `linuxdeploy` with its GTK plugin, bundles all sha
# Output: Pixstrip-x86_64.AppImage (~39 MB) # Output: Pixstrip-x86_64.AppImage (~39 MB)
``` ```
## 🗂️ Project Structure ## 🗂️ Project structure
Pixstrip is a Cargo workspace with three crates that share a common core. Pixstrip is a Cargo workspace with three crates that share a common core.
@@ -332,7 +332,7 @@ Pixstrip is built in the open and contributions are welcome. The project uses [C
File bugs, suggest features, or submit patches through the [issue tracker](https://git.lashman.live/lashman/pixstrip/issues). The codebase is straightforward Rust with GTK4 bindings - if you can read Rust, you can contribute. File bugs, suggest features, or submit patches through the [issue tracker](https://git.lashman.live/lashman/pixstrip/issues). The codebase is straightforward Rust with GTK4 bindings - if you can read Rust, you can contribute.
## 🔒 Privacy and Trust ## 🔒 Privacy and trust
Pixstrip processes everything on your machine. It never phones home, never uploads your images, never tracks what you do with it. There is no analytics, no crash reporting, no update checker, no account system. The binary does exactly what you tell it to and nothing else. Pixstrip processes everything on your machine. It never phones home, never uploads your images, never tracks what you do with it. There is no analytics, no crash reporting, no update checker, no account system. The binary does exactly what you tell it to and nothing else.
@@ -343,4 +343,3 @@ Your images are yours. Your metadata is yours. Your workflow is yours. The tool
**CC0 1.0 - Public Domain.** No rights reserved. This work is dedicated to the public domain worldwide. You can copy, modify, distribute, and use it for any purpose, commercial or otherwise, without asking permission and without owing anyone anything. **CC0 1.0 - Public Domain.** No rights reserved. This work is dedicated to the public domain worldwide. You can copy, modify, distribute, and use it for any purpose, commercial or otherwise, without asking permission and without owing anyone anything.
Good tools should be freely available to everyone who needs them. Good tools should be freely available to everyone who needs them.
This project is developed with the help of a locally-run LLM via opencode for scaffolding, planning, and routine code tasks. Architecture and design decisions are my own.