GUI based tool to sort and categorize images written in Rust

Overview

Build Crates.io

ImageSieve

GUI based tool to sort out images based on similarity, categorize them according to their creation date and archive them in a target folder.

Screenshot

ImageSieve aims to help in the process of sorting through images taken by several people with several devices and collect the images worth keeping in a folder structure suitable for achiving or to eliminate potential duplicates or irrelevant images from a folder structure. The tool runs on Windows, Linux and macOS.

Features

  • Browse images in jpg, tiff or png format and videos in mp4, avi and mts format from a folder structure in the order of their creation
  • Select which images to keep and which to discard
  • Images which resemble each other and images being taken within a customizable number of seconds are considered similar and are highlighted to support sorting
  • Manage events with a name, a start and an end date for the images to sort to automatically assign the images to an event
  • Discarded images and events are saved so that the sorting process can resume later
  • Sieve the images by either deleting discarded ones, copying or moving kept images to a target folder

Installation

Precompiled Windows binaries are available for every release for download. Linux and macOS users need to install Rust, clone the repository and run

cargo install image_sieve

After the compilation, you can run the tool by typing

image_sieve

Operation

Sorting

To get started, first select a folder containing images in the "Sort" tab using the upper right "Browse" button. ImageSieve will now search for files and order them according to their creation date. Depending on the amount of images, this might take a while. Once the folder has been processed, a list of file names will appear in the box to the right. This list contains the files that have been found in the folder and that will be considered in the sieving process. Each file has a set of icons that indicate its state. The following icons are used (exact rendering depends on platform/font):

  • 📷 : The file is an image
  • 📹 : The file is a video
  • 🗑 : The file is discarded
  • 🔀 : There are similar files to this one
  • 📅 : File is in the date range of an event

To select a file, click it and it will be shown in the image area. Below the image, some details about the file are listed. In order to discard an image, just click it and it will be displayed in a translucent way. As an alternative, you can hit the space bar to toggle between discarded and kept state. To navigate between images, you can use the "Previous" and "Next" buttons or hit the left and right key on your keyboard. If you want to open an image or a video with the default application in your OS, click the "Open" button. If an image belongs to a group of similar images, all these similar images are displayed below the current image. The currently selected one is highlighted in blue. Note that video files are also displayed in the list of images, but cannot be previewed. However, they are also kept or discarded in the sieving process as are the image files.

Events

Per default, the images will be sorted in folders corresponding to the months they were taken, like "09-2021", "10-2021" etc. To be able to find images more quickly in an archive, ImageSieve supports grouping pictures with the help of events in the "Events" tab. Events are named date spans that will provide a target folder name during the sieve process, like "2021-10-07 - 2021-10-10 Cool trip". All images taken in the given period of time will be put into that folder. You can specify an arbitrary number of events, but be aware that in case of overlapping dates, an image is put into the folder of the first matching event. To add an event, fill the start date, end date and name text box and click the "Add" button. Valid date formats are YYYY-MM-DD or DD.MM.YYYY. You can edit existing events by modifying their fields and pressing enter - the updated values will be visible in the event's caption. To remove an event, click the "Remove" button. Be aware that the events are saved in the currently selected folder and belong to the currently displayed images.

Settings

In the settings tab, you can specify the behavior of the similarity detection process. You can turn on and off both the use of the file/capture date as an indicator for similarity and the similarity calculation. Note that the similarity calculation takes some time and will not be available right from the start of the tool, especially if the number of files is huge. The similarity can be tweaked in order to provide better results.

Sieve

When you are done sorting the images, the sieving process can be started. Go to the "Sieve" tab and select a sieving mode. The following modes are supported:

  • Copy to target directory: Copies only the kept items to the target directory creating folders for the items, the source directory will be left untouched.
  • Move to target directory: Moves the kept items to the target directory creating folders for the items, effectively removing them from the source directory. Discarded items will stay in the source directory.
  • Move to target directory and delete in source directory: Moves the kept items to the target directory creating folders for the items and deletes discarded items in the source directory. If the source directory contained only images and videos, it will be empty afterwards (except for subfolders).
  • Delete in source directory: Deletes all discarded items in the source directory.

Depending on the mode, you need to indicate a target directory that is used for the result of the sieving process. Once you are done, click the start button and the sieve process will start.

Known issues and TODOs

  • Overlapping events are not reported
  • The indication of problems during sieving is not implemented
  • Navigation with previous/next through similar items can be improved

Details

This is the first software I've ever written in Rust, so there might be room for improvement. If you want to help, clone and pull-request. The tool uses the sixtyfps GUI framework.

Disclaimer

This tool is free software. The author does not take any responsibility or liability for data lost due to bugs or faulty use of the software. Note that the software is in constant development and may contain bugs. Use at your own risk!

Comments
  • build failure on x86_64-unknown-linux-gnu

    build failure on x86_64-unknown-linux-gnu

    > cargo install image_sieve
    
    ...
    
    error: failed to run custom build command for `image_sieve v0.5.1`
    
    Caused by:
      process didn't exit successfully: `/tmp/cargo-installzuxyat/release/build/image_sieve-1f86cf25047e6df3/build-script-build` (exit status: 101)
      --- stdout
      slint  build
    
      --- stderr
      error: Unknown property alignment in GroupBox
        --> /home/be/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.1/ui/settings.slint:13:9
         |
      13 |         alignment: start;
         |         ^
      error: Unknown unqualified identifier 'start'
        --> /home/be/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.1/ui/settings.slint:13:20
         |
      13 |         alignment: start;
         |                    ^
    
      thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: CompileError(["/home/be/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.1/ui/settings.slint:13: Unknown property alignment in GroupBox", "/home/be/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.1/ui/settings.slint:13: Unknown unqualified identifier 'start'"])', /home/be/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.1/build.rs:5:50
      note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `image_sieve v0.5.1`, intermediate artifacts can be found at `/tmp/cargo-installzuxyat`
    
    bug 
    opened by Be-ing 5
  • Panicking in item_sort_list/resolver when trying to parse time

    Panicking in item_sort_list/resolver when trying to parse time

    Image Sieve panics when I try to add my image folders in the following line: https://github.com/Futsch1/image-sieve/blob/0fb9d7eaee31b16c2727f0ce94c030fbaedf3345/src/item_sort_list/resolvers.rs#L99-L101

    The time information seems to be stored slightly different than what the parser expects: YYYY:MM:DD HH:MM:SS (2021:09:26 18:22:29)

    The crash message with RUST_BACKTRACE=1:

    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: ParseError(OutOfRange)', /home/caemor/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.2/src/item_sort_list/resolvers.rs:101:34
    stack backtrace:
       0: rust_begin_unwind
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:498:5
       1: core::panicking::panic_fmt
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/panicking.rs:107:14
       2: core::result::unwrap_failed
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/result.rs:1613:5
       3: <image_sieve::item_sort_list::resolvers::ExifResolver as image_sieve::item_sort_list::item_traits::PropertyResolver>::get_timestamp
       4: image_sieve::item_sort_list::file_item::FileItem::new
       5: image_sieve::item_sort_list::item_list::ItemList::check_and_add
       6: image_sieve::synchronize::synchronize_run
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: PoisonError { .. }', /home/caemor/.cargo/registry/src/github.com-1ecc6299db9ec823/image_sieve-0.5.2/src/main_window.rs:145:47
    stack backtrace:
       0: rust_begin_unwind
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:498:5
       1: core::panicking::panic_fmt
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/panicking.rs:107:14
       2: core::result::unwrap_failed
                 at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/result.rs:1613:5
       3: image_sieve::main_window::MainWindow::run
       4: image_sieve::main
    
    bug 
    opened by caemor 3
  • Port to Slint

    Port to Slint

    This is a straight port that consists of the following changes:

    • Handle that fetching data from the models now returns Option<T> (this is more Rust idiomatic)
    • ModelHandle become ModelRc
    • Rename .60 to .slint
    • Generally sixtyfps -> slint
    opened by tronical 2
  • Update fast_image_resize requirement from 1.0 to 2.0

    Update fast_image_resize requirement from 1.0 to 2.0

    Updates the requirements on fast_image_resize to permit the latest version.

    Changelog

    Sourced from fast_image_resize's changelog.

    [2.0.0] - 2022-10-28

    Crate

    • Breaking changes:
      • Struct ImageView replaced by enum DynamicImageView.
      • Struct ImageViewMut replaced by enum DynamicImageViewMut.
      • Trait Pixel renamed into PixelExt and some its internals changed:
        • associated type ComponentsCount renamed into CountOfComponents.
        • associated type ComponentCountOfValues deleted.
        • associated method components_count renamed into count_of_components.
        • associated method component_count_of_values renamed into count_of_component_values.
      • All pixel types (U8, U8x2, ...) replaced by type aliases for new generic structure Pixel. Use method new() to create instance of one pixel.
    • Added structure PixelComponentMapper that holds tables for mapping values of pixel's components in forward and backward directions.
    • Added function create_gamma_22_mapper() to create instance of PixelComponentMapper that converts images with gamma 2.2 to linear colorspace and back.
    • Added function create_srgb_mapper() to create instance of PixelComponentMapper that converts images from SRGB colorspace to linear RGB and back.
    • Added generic structs ImageView and ImageViewMut.
    • Added functions change_type_of_pixel_components and change_type_of_pixel_components_dyn that change type of pixel's components in whole image.
    • Added generic trait IntoPixelComponent<Out: PixelComponent>.
    • Added generic structure Pixel for create all types of pixels.
    • Added full support of optimisation with helps of SSE4.1 for convolution of U8x3 images.
    • Added support of optimisation with helps of NEON SIMD for convolution of U8x4 images.
    • Added optimisation for processing U8x4 images by MulDiv with helps of NEON SIMD instructions.

    Example application

    • Added option --high_precision to use u16 as pixel components for intermediate image representation.
    • Added converting of source image into linear colorspace before it will be resized. Destination image will be returned into original colorspace before it will be saved.

    [1.0.0] - 2022-07-24

    • Added example of command line application "resizer".

    [0.9.7] - 2022-07-14

    • Fixed resizing when the destination image has the same dimensions as the source image (#9).

    [0.9.6] - 2022-06-28

    ... (truncated)

    Commits
    • 97403ad (cargo-release) version 2.0.0
    • 5654716 Fixed doc-string
    • 9e96264 Updated benchmark results.
    • 7b5a123 Static variables SRGB_MAPPER and GAMMA22_MAPPER replaced by functions to crea...
    • ff2837d - Added support of optimisation with help of NEON SIMD for convolution of `...
    • 29f9f1f Added full support of optimisation with help of SSE4.1 for convolution of `...
    • e3b64bf - Trait Pixel renamed into PixelExt and changed.
    • 39f7841 - Breaking changes:
    • c454c3b Added functions for converting image colorspace.
    • See full diff in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update slint requirement from =0.2.5 to =0.3.0

    Update slint requirement from =0.2.5 to =0.3.0

    Updates the requirements on slint to permit the latest version.

    Release notes

    Sourced from slint's releases.

    0.3.0

    Changelog

    Changelog

    Sourced from slint's changelog.

    [0.3.0] - 2022-09-14

    Breaking Changes

    • mod now works on any numeric type, not only integers.
    • Minimum rust version is now 1.60.
    • The "backend-gl-*" Rust crate features for configuring the GL renderer have been changed and split by renderer.
    • VecModel::remove now returns the removed element.
    • slint::invoke_from_event_loop and slint::quit_event_loop now return a Result.

    Added

    • Added the platform module providing API to use slint on bare metal with a software renderer.
    • Added an experimental Skia renderer.
    • Button: Add a checkable property that turns the button into a toggle button. Use the new checked property to query whether the toggle button is pressed down or not.
    • Added support for slint::Window::set_position and slint::Window::position to set and get the placement of the window on the screen.
    • Added slint::Window::scale_factor() as getter to read the system device pixel ratio.
    • Added support for slint::Window::set_size and slint::Window::size to set and get the size of the window on the screen.
    • Added slint::Window::dispatch_event and slint::WindowEvent to be able to manually send a mouse or touch event to a window.
    • Added animation-tick().
    • SharedString implements std::fmt::Write and added slint::format!.
    • Image can now be rotated with the rotation-* properties.
    • Use docking widgets and integration of slint-lsp into the Online Code Editor.

    Fixed

    • Fixed Ctrl+Backspace/Ctrl+Del not deleting words in text input elements.
    • Resizing of live-preview window in the IDE integrations.
    • Preferred size of the TabWidget in the fluent style take in account the size of the tabs (#1363).
    • Fixed cursor behavior when typing the Enter key at the end of a TextEdit (#1318).
    • Fixed a memory leak of images when using the GL backend.
    • Fixed starting and stopping slint::Timer from withing their callback (#1532).

    [0.2.5] - 2022-07-06

    Changed

    • Interpreter: Implement TryFrom<Value> instead of TryInto for Value (#1258)

    Added

    • Added the Model Adapters FilterModel and MapModel.
    • Added @radial-gradient(circle, ...)
    • Added read-only property to TextInput, TextEdit and LineEdit.

    ... (truncated)

    Commits
    • b827108 Fix publishing script
    • 419016a Rename the compat feature again
    • 8556ad0 Refer to the release/0.3 branch instead of release/0.2 for the CMake docs
    • 4733ecc Fix output path to .vsix file that we upload as part of the build job
    • 65ba671 Fix location of the www repo
    • 5b05f1e Prospective fix for cargo doc warning
    • 2583acf Update docs url before release
    • 06665db Update version number in changelog
    • 2ada879 Update version number in the documentation
    • 9cab074 Ensure vtable and vtable-macro have the same version
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update slint-build requirement from =0.2.5 to =0.3.0

    Update slint-build requirement from =0.2.5 to =0.3.0

    Updates the requirements on slint-build to permit the latest version.

    Release notes

    Sourced from slint-build's releases.

    0.3.0

    Changelog

    Changelog

    Sourced from slint-build's changelog.

    [0.3.0] - 2022-09-14

    Breaking Changes

    • mod now works on any numeric type, not only integers.
    • Minimum rust version is now 1.60.
    • The "backend-gl-*" Rust crate features for configuring the GL renderer have been changed and split by renderer.
    • VecModel::remove now returns the removed element.
    • slint::invoke_from_event_loop and slint::quit_event_loop now return a Result.

    Added

    • Added the platform module providing API to use slint on bare metal with a software renderer.
    • Added an experimental Skia renderer.
    • Button: Add a checkable property that turns the button into a toggle button. Use the new checked property to query whether the toggle button is pressed down or not.
    • Added support for slint::Window::set_position and slint::Window::position to set and get the placement of the window on the screen.
    • Added slint::Window::scale_factor() as getter to read the system device pixel ratio.
    • Added support for slint::Window::set_size and slint::Window::size to set and get the size of the window on the screen.
    • Added slint::Window::dispatch_event and slint::WindowEvent to be able to manually send a mouse or touch event to a window.
    • Added animation-tick().
    • SharedString implements std::fmt::Write and added slint::format!.
    • Image can now be rotated with the rotation-* properties.
    • Use docking widgets and integration of slint-lsp into the Online Code Editor.

    Fixed

    • Fixed Ctrl+Backspace/Ctrl+Del not deleting words in text input elements.
    • Resizing of live-preview window in the IDE integrations.
    • Preferred size of the TabWidget in the fluent style take in account the size of the tabs (#1363).
    • Fixed cursor behavior when typing the Enter key at the end of a TextEdit (#1318).
    • Fixed a memory leak of images when using the GL backend.
    • Fixed starting and stopping slint::Timer from withing their callback (#1532).

    [0.2.5] - 2022-07-06

    Changed

    • Interpreter: Implement TryFrom<Value> instead of TryInto for Value (#1258)

    Added

    • Added the Model Adapters FilterModel and MapModel.
    • Added @radial-gradient(circle, ...)
    • Added read-only property to TextInput, TextEdit and LineEdit.

    ... (truncated)

    Commits
    • b827108 Fix publishing script
    • 419016a Rename the compat feature again
    • 8556ad0 Refer to the release/0.3 branch instead of release/0.2 for the CMake docs
    • 4733ecc Fix output path to .vsix file that we upload as part of the build job
    • 65ba671 Fix location of the www repo
    • 5b05f1e Prospective fix for cargo doc warning
    • 2583acf Update docs url before release
    • 06665db Update version number in changelog
    • 2ada879 Update version number in the documentation
    • 9cab074 Ensure vtable and vtable-macro have the same version
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update serde_with requirement from 1.0 to 2.0

    Update serde_with requirement from 1.0 to 2.0

    Updates the requirements on serde_with to permit the latest version.

    Release notes

    Sourced from serde_with's releases.

    serde_with_macros v2.0.0

    No changes compared to v2.0.0-rc.0.

    Changed

    • Make #[serde_as] behave more intuitive on Option<T> fields.

      The #[serde_as] macro now detects if a #[serde_as(as = "Option<S>")] is used on a field of type Option<T> and applies #[serde(default)] to the field. This restores the ability to deserialize with missing fields and fixes a common annoyance (#183, #185, #311, #417). This is a breaking change, since now deserialization will pass where it did not before and this might be undesired.

      The Option field and transformation are detected by directly matching on the type name. These variants are detected as Option.

      • Option
      • std::option::Option, with or without leading ::
      • core::option::Option, with or without leading ::

      If an existing default attribute is detected, the attribute is not applied again. This behavior can be supressed by using #[serde_as(no_default)] or #[serde_as(as = "Option<S>", no_default)].

    Fixed

    • Make the documentation clearer by stating that the #[serde_as] and #[skip_serializing_none] attributes must always be placed before #[derive].
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update slint-build requirement from =0.2.4 to =0.2.5

    Update slint-build requirement from =0.2.4 to =0.2.5

    Updates the requirements on slint-build to permit the latest version.

    Release notes

    Sourced from slint-build's releases.

    0.2.4

    This is the 0.2.4 release published to crates.io, npm and the VS code market place.

    Changelog

    Changelog

    Sourced from slint-build's changelog.

    [0.2.4] - 2022-05-09

    • Fixed crash when opening a native (Qt) ComboBox

    [0.2.3] - 2022-05-09

    Fixed

    • Fixed crashes with the Qt backend in release mode. (#1230)
    • Fixed panic when drop-shadow is used in a ListView (#1233)
    • Fixed combining a brush and a color to always convert to brush, to avoid loosing gradient information (#1235)
    • Fixed properties not having the right default value when set by some states (#1237)
    • Fixed properties with multiples aliases, and default values.
    • Enable fontdb's fontconfig feature to fix finding some fonts (#1240)

    [0.2.2] - 2022-05-04

    Changed

    • On wasm, the input event are handled via a hidden <input> element, allowing the keyboard to show on mobile platform
    • The size of the window is kept when reloading a window in the preview (instead of being reset to the preferred size)
    • Minimum rust version is now 1.59

    Added

    • Support for keyboard focus with the tab key
    • Support more keyboard shortcut in the editing element
    • Added From<&str> and From<SharedString> to StandardListViewItem to make creation and modification of StandardListView's models easier.
    • Added on_close_requested function to Window to register callbacks that are emitted when the user tries to close a window.
    • Added VecModel::set_vec to replace the entire contents with new data.
    • Added a cache-rendering-hint boolean property that can be applied to any element, to hint to the renderer that it should cache the element and its children into a cached layer. This may speed up rendering of complex sub-trees if they rarely change.
    • The brighter and lighter functions also work on values of type brush.
    • Added a reset function to C++'s Model, Rust's ModelNotify and JS's ModelPeer
    • Added a row_data_tracked function to ModelExt (an extension to the Model trait)

    Fixed

    • Fixed application of the opacity property evenly to child elements (#725).
    • Windows: Fixed font lookup of strings including several scripts (eg, containing asian characters)
    • Fixed PopupWindow in a repeater (#1113, #1132)
    • LSP: do not always resize the preview window to its preferred each time the code is modified

    [0.2.1] - 2022-03-10

    Added

    • C++ interpreter API: added a Value::Value(int) constructor
    • Global singletons in .slint files may now refer to other global singletons
    • Added input-type property to TextInput and LineEdit that allows for characters to be replaced in password fields

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update fast_image_resize requirement from 0.9 to 1.0

    Update fast_image_resize requirement from 0.9 to 1.0

    Updates the requirements on fast_image_resize to permit the latest version.

    Changelog

    Sourced from fast_image_resize's changelog.

    [1.0.0] - 2022-07-24

    • Added example of command line application "resizer".

    [0.9.7] - 2022-07-14

    • Fixed resizing when the destination image has the same dimensions as the source image (#9).

    [0.9.6] - 2022-06-28

    • Added support of new type of pixels PixelType::U16x4.
    • Fixed benchmarks for resizing images with alpha channel using the resizer crate.
    • Removed image crate from benchmarks for resizing images with alpha.
    • Added method Image::copy(&self) -> Image<'static>.

    [0.9.5] - 2022-06-22

    • Fixed README.md

    [0.9.4] - 2022-06-22

    • Added support of new type of pixels PixelType::U16x2 (e.g. luma with alpha channel).

    [0.9.3] - 2022-05-31

    • Added support of new type of pixels PixelType::U16.

    [0.9.2] - 2022-05-19

    • Added optimisation for convolution of U8x2 images with helps of SSE4.1.

    [0.9.1] - 2022-05-12

    • Added optimisation for processing U8x2 images by MulDiv with helps of SSE4.1 and AVX2 instructions.
    • Added optimisation for convolution of U16x2 images with helps of AVX2 instructions.

    [0.9.0] - 2022-05-01

    • Added support of new type of pixels PixelType::U8x2.
    • Added into MulDiv support of images with pixel type U8x2.
    • Added method Image::into_vec(self) -> Vec<u8> (#7).

    [0.8.0] - 2022-03-23

    ... (truncated)

    Commits
    • 9b8bba2 (cargo-release) version 1.0.0
    • 3c0ad5d Added example of command line application "resizer".
    • 02f429f (cargo-release) version 0.9.7
    • 6483439 Fixed resizing when the destination image has the same dimensions as the sour...
    • 8a159fc - Renamed NormalizerGuard into Normalizer.
    • c6ce200 (cargo-release) version 0.9.6
    • 5b89090 - Fixed benchmarks for resizing images with alpha channel using the resizer...
    • 891312a Added support of new type of pixels PixelType::U16x4.
    • 091f78f (cargo-release) version 0.9.5
    • 70a3fe6 Fixed README.md
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update slint requirement from =0.2.4 to =0.2.5

    Update slint requirement from =0.2.4 to =0.2.5

    Updates the requirements on slint to permit the latest version.

    Release notes

    Sourced from slint's releases.

    0.2.4

    This is the 0.2.4 release published to crates.io, npm and the VS code market place.

    Changelog

    Changelog

    Sourced from slint's changelog.

    [0.2.4] - 2022-05-09

    • Fixed crash when opening a native (Qt) ComboBox

    [0.2.3] - 2022-05-09

    Fixed

    • Fixed crashes with the Qt backend in release mode. (#1230)
    • Fixed panic when drop-shadow is used in a ListView (#1233)
    • Fixed combining a brush and a color to always convert to brush, to avoid loosing gradient information (#1235)
    • Fixed properties not having the right default value when set by some states (#1237)
    • Fixed properties with multiples aliases, and default values.
    • Enable fontdb's fontconfig feature to fix finding some fonts (#1240)

    [0.2.2] - 2022-05-04

    Changed

    • On wasm, the input event are handled via a hidden <input> element, allowing the keyboard to show on mobile platform
    • The size of the window is kept when reloading a window in the preview (instead of being reset to the preferred size)
    • Minimum rust version is now 1.59

    Added

    • Support for keyboard focus with the tab key
    • Support more keyboard shortcut in the editing element
    • Added From<&str> and From<SharedString> to StandardListViewItem to make creation and modification of StandardListView's models easier.
    • Added on_close_requested function to Window to register callbacks that are emitted when the user tries to close a window.
    • Added VecModel::set_vec to replace the entire contents with new data.
    • Added a cache-rendering-hint boolean property that can be applied to any element, to hint to the renderer that it should cache the element and its children into a cached layer. This may speed up rendering of complex sub-trees if they rarely change.
    • The brighter and lighter functions also work on values of type brush.
    • Added a reset function to C++'s Model, Rust's ModelNotify and JS's ModelPeer
    • Added a row_data_tracked function to ModelExt (an extension to the Model trait)

    Fixed

    • Fixed application of the opacity property evenly to child elements (#725).
    • Windows: Fixed font lookup of strings including several scripts (eg, containing asian characters)
    • Fixed PopupWindow in a repeater (#1113, #1132)
    • LSP: do not always resize the preview window to its preferred each time the code is modified

    [0.2.1] - 2022-03-10

    Added

    • C++ interpreter API: added a Value::Value(int) constructor
    • Global singletons in .slint files may now refer to other global singletons
    • Added input-type property to TextInput and LineEdit that allows for characters to be replaced in password fields

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update imagepipe requirement from 0.4.0 to 0.5.0

    Update imagepipe requirement from 0.4.0 to 0.5.0

    Updates the requirements on imagepipe to permit the latest version.

    Commits
    • 65ca96c Release 0.5.0
    • ba8ddf7 Update blake3 to newest version
    • d28863c Switch to image 0.24 now that PR is upstream
    • 3b40e4c Start implementing rotation itself
    • 58259c5 Reset saved data at start of pipeline
    • e32d692 Start making rotation roundtrip transform sizing
    • 9d8cd5b Implement crops using the transform code
    • 12ee393 Make sure scaling to the same size is a no-op
    • ee4ab7a Make the scaling a generic transform
    • 90cf21e Start generalizing scaling as transform
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update dark-light requirement from 0.2 to 1.0

    Update dark-light requirement from 0.2 to 1.0

    Updates the requirements on dark-light to permit the latest version.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Update base64 requirement from 0.13 to 0.20

    Update base64 requirement from 0.13 to 0.20

    Updates the requirements on base64 to permit the latest version.

    Changelog

    Sourced from base64's changelog.

    0.20.0

    Breaking changes

    • Update MSRV to 1.57.0
    • Decoding can now either ignore padding, require correct padding, or require no padding. The default is to require correct padding.
      • The NO_PAD config now requires that padding be absent when decoding.

    0.20.0-alpha.1

    Breaking changes

    • Extended the Config concept into the Engine abstraction, allowing the user to pick different encoding / decoding implementations.
      • What was formerly the only algorithm is now the FastPortable engine, so named because it's portable (works on any CPU) and relatively fast.
      • This opens the door to a portable constant-time implementation (#153, presumably ConstantTimePortable?) for security-sensitive applications that need side-channel resistance, and CPU-specific SIMD implementations for more speed.
      • Standard base64 per the RFC is available via DEFAULT_ENGINE. To use different alphabets or other settings (padding, etc), create your own engine instance.
    • CharacterSet is now Alphabet (per the RFC), and allows creating custom alphabets. The corresponding tables that were previously code-generated are now built dynamically.
    • Since there are already multiple breaking changes, various functions are renamed to be more consistent and discoverable.
    • MSRV is now 1.47.0 to allow various things to use const fn.
    • DecoderReader now owns its inner reader, and can expose it via into_inner(). For symmetry, EncoderWriter can do the same with its writer.
    • encoded_len is now public so you can size encode buffers precisely.

    0.13.1

    • More precise decode buffer sizing, avoiding unnecessary allocation in decode_config.

    0.13.0

    • Config methods are const
    • Added EncoderStringWriter to allow encoding directly to a String
    • EncoderWriter now owns its delegate writer rather than keeping a reference to it (though refs still work)
      • As a consequence, it is now possible to extract the delegate writer from an EncoderWriter via finish(), which returns Result<W> instead of Result<()>. If you were calling finish() explicitly, you will now need to use let _ = foo.finish() instead of just foo.finish() to avoid a warning about the unused value.
    • When decoding input that has both an invalid length and an invalid symbol as the last byte, InvalidByte will be emitted instead of InvalidLength to make the problem more obvious.

    0.12.2

    • Add BinHex alphabet

    0.12.1

    • Add Bcrypt alphabet

    0.12.0

    • A Read implementation (DecoderReader) to let users transparently decoded data from a b64 input source
    • IMAP's modified b64 alphabet
    • Relaxed type restrictions to just AsRef<[ut8]> for main encode*/decode* functions
    • A minor performance improvement in encoding

    0.11.0

    • Minimum rust version 1.34.0

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Zoom Images

    Zoom Images

    Are there any plans on implementing zooming images to full size? I really like the app. It's great way to quickly get through many images, but sometimes I wish I could zoom in to check focus.

    opened by volksen 1
  • Restore window position and size

    Restore window position and size

    When re-opening ImageSieve, the window position and size should be restored.

    This can be implemented as soon as sixtyfps implements https://github.com/sixtyfpsui/sixtyfps/issues/323.

    enhancement 
    opened by Futsch1 1
  • Icons should look the same on all platforms

    Icons should look the same on all platforms

    Currently, the icons are taken from the system default font. This font does not look the same, especially Windows is looking much less appealing than Ubuntu.

    When https://github.com/sixtyfpsui/sixtyfps/issues/727 is in sixtyfps, a symbol font shall be included.

    enhancement 
    opened by Futsch1 0
Releases(v0.5.11)
  • v0.5.11(Dec 22, 2022)

    Changelog

    All notable changes to this project will be documented in this file.

    [0.5.11] - 2022-12-

    Fixed

    • Similarity calculation was broken for some time, fixed it

    [0.5.10] - 2022-12-21

    Fixed

    • Build automation fixes

    [0.5.9] - 2022-12-21

    Changed

    • Updated to slint 0.3.3, updated further dependencies
    • Removed setting for dark mode, only automatic is working now (restriction from slint)
    • Dark mode has a differnt color set now

    [0.5.8] - 2022-09-10

    Changed

    • Updated to slint 0.2.5
    • Updated snap package
    • Minor GUI tweaks

    [0.5.7] - 2022-07-01

    Fixed

    • When an file name would exist twice in the sieve target directory but the files are different, the files are now automatically renamed instead of not copied.

    [0.5.6] - 2022-05-15

    Changed

    • Updated to slint 0.2.4

    Added

    • Added dark mode

    [0.5.5] - 2022-05-08

    Changed

    • Updated to slint 0.2.2, supporting tab focus

    Added

    • Added a button to speed up creating an event from an image filling the event date to the image date.

    [0.5.4] - 2022-04-03

    Fixed

    • Reverted getting max image size from largest connected monitor - this caused a crash in the Windows build

    [0.5.3] - 2022-04-02

    Changed

    • Max image size for caching now depends on the resolution of the largest connected monitor
    • Updated to ffmpeg 5.0
    • Updated to slint 0.2.1

    Fixed

    • Fixed crash when reading file with invalid EXIF date

    [0.5.2] - 2022-02-14

    Added

    • Support for mpeg video files
    • Option to sort as year and month in subdirectories

    Fixed

    • Always force fluent style to avoid issues with Qt backend

    [0.5.1] - 2022-02-13

    Changed

    • Changed trash icon

    Added

    • Similars icon in similar images list

    Fixed

    • Removed animated gif from README.md due to size constraints of cargo.io

    [0.5.0] - 2022-02-13

    Changed

    • Renamed all sixtyfps instances to slint
    • Reworked UI and replaced next, open and previous button with on-image buttons, added animations

    Added

    • Support for many raw formats
    • Up and down keys navigate in similar images
    • Enter key opens item

    Fixed

    • Key commands are now working properly after switching tabs, also they have no effect on other tabs than the sort tab
    • Several crashes or weird behavior when images list is empty
    • Discarded status is now properly updated in image caption

    [0.4.2] - 2022-02-05

    Changed

    • Resize video preview image internally to save memory
    • Optimized image loading time

    Added

    • Snap support for removable media and network if permissions are set

    Fixed

    • Do not pass default folder to dir picker if it does not exist
    • Fixed crash when selecting folder without images

    [0.4.2] - 2022-01-09

    Changed

    • Now reading EXIF files for all image formats, not only for JPEGs
    • Optimized loading of similar images
    • Events now have an update button to be able to move an event after or before another event

    Added

    • Filters and sort options to the item list
    • Some symbols in the GUI

    [0.4.1] - 2022-01-05

    Changed

    • Target directory input field is now always disabled

    Fixed

    • Fixed layout in events view

    [0.4.0] - 2022-01-03

    Changed

    • Layout of commit result list improved

    Added

    • Preview for video files
    • Get taken date from video files metadata
    • Showing also mov files now

    Fixed

    • Fixed selected image after changing folder

    [0.3.3] - 2021-12-29

    Changed

    • C runtime is now linked statically for Windows

    Added

    • Setting to select the target directory name pattern

    Fixed

    • Only able to commit when the target directory is set

    [0.3.2] - 2021-12-23

    Changed

    • Performance and robustness improvements
    • Improved layout of events tab

    Added

    • About information in settings tab
    • Help tab

    Fixed

    • Added a space between file info and event name

    [0.3.1] - 2021-12-12

    Changed

    • No directory is now the default
    • Performance checking for files significantly improved

    Added

    • Checking for images can now be cancelled
    • Events are now sorted by date
    • Error message is shown when an event was edited

    Fixed

    • When selecting a folder without images, the similar images model is now cleared
    • Fixed a crash when a folder was selected with insufficient rights to access

    [0.3.0] - 2021-12-06

    Changed

    • Settings are now stored in the home directory. As a consequence, settings from previous versions are lost

    Added

    • Sieving operations are now displayed in detail
    • Generate a MSI installer package for Windows
    • Generate a snap package for Linux

    Fixed

    • Console window is hidden in Windows version

    [0.2.4] - 2021-11-27

    Added

    • Events are now checked for overlapping dates

    Fixed

    • Start date of an event must now be before or equal to the end date

    [0.2.3] - 2021-11-21

    Added

    • Showing result of commit operation now

    Fixed

    • Moving files from one mount point to the other was always failing

    [0.2.2] - 2021-11-14

    Changed

    • All images are now loaded in a background threads increasing GUI responsiveness
    • Improved similarity detection by using longer hashes and taking image orientation into account

    Added

    • Application icon

    Fixed

    • File item date is now the minimum of created and modified date and not only created date
    • Display file item date in local timezone
    • No longer crash when an image with either width or height 0 is loaded
    • Images were cropped in the similar images list
    • Similarities where not calculated when an image was not decodeable

    [0.2.1] - 2021-10-31

    Changed

    • Folder selection edit is now disabled, since entering something there had no effect

    Fixed

    • While the image similarity calculation is running, no other folder can be selected

    [0.2.0] - 2021-10-25

    Changed

    • Now using sixtyfps v0.1.4

    Added

    • Image hashing to calculate similarities in image contents
    • Settings tab for tuning the similarity calculation

    Fixed

    • If an image has many similar images, a maximum of six are displayed at the same time since the GUI was blocked otherwise
    • Fixed showing the correct text when one of the similar images was selected
    • Fixed event scrollview

    [0.1.3] - 2021-10-21

    Added

    • Renamed executable to image_sieve instead of image-sieve

    Fixed

    • Fixed crashes that could occur when an item was deleted or renamed while ImageSieve is open

    [0.1.2] - 2021-10-10

    Added

    • Added a button to open the current item in an external viewer
    • Release to crates.io

    Fixed

    • Improved overall code style
    • Combined code into single crate

    [0.1.1] - 2021-10-10

    Added

    • Added a confirmation when sieving with deletion

    Fixed

    • Fixed GitHub action for releasing Windows binary
    • Fixed updating events

    [0.1.0] - 2021-10-09

    Added

    • Initial GitHub release
    Source code(tar.gz)
    Source code(zip)
    ffmpeg-release-full-shared.zip(10.22 MB)
    ImageSieve.msi(14.01 MB)
    ImageSieve.msix(13.39 MB)
    image_sieve_Windows_portable.zip(13.11 MB)
  • v0.5.10(Dec 21, 2022)

    Changelog

    All notable changes to this project will be documented in this file.

    [0.5.10] - 2022-12-21

    Fixed

    • Build automation fixes

    [0.5.9] - 2022-12-21

    Changed

    • Updated to slint 0.3.3, updated further dependencies
    • Removed setting for dark mode, only automatic is working now (restriction from slint)
    • Dark mode has a differnt color set now

    [0.5.8] - 2022-09-10

    Changed

    • Updated to slint 0.2.5
    • Updated snap package
    • Minor GUI tweaks

    [0.5.7] - 2022-07-01

    Fixed

    • When an file name would exist twice in the sieve target directory but the files are different, the files are now automatically renamed instead of not copied.

    [0.5.6] - 2022-05-15

    Changed

    • Updated to slint 0.2.4

    Added

    • Added dark mode

    [0.5.5] - 2022-05-08

    Changed

    • Updated to slint 0.2.2, supporting tab focus

    Added

    • Added a button to speed up creating an event from an image filling the event date to the image date.

    [0.5.4] - 2022-04-03

    Fixed

    • Reverted getting max image size from largest connected monitor - this caused a crash in the Windows build

    [0.5.3] - 2022-04-02

    Changed

    • Max image size for caching now depends on the resolution of the largest connected monitor
    • Updated to ffmpeg 5.0
    • Updated to slint 0.2.1

    Fixed

    • Fixed crash when reading file with invalid EXIF date

    [0.5.2] - 2022-02-14

    Added

    • Support for mpeg video files
    • Option to sort as year and month in subdirectories

    Fixed

    • Always force fluent style to avoid issues with Qt backend

    [0.5.1] - 2022-02-13

    Changed

    • Changed trash icon

    Added

    • Similars icon in similar images list

    Fixed

    • Removed animated gif from README.md due to size constraints of cargo.io

    [0.5.0] - 2022-02-13

    Changed

    • Renamed all sixtyfps instances to slint
    • Reworked UI and replaced next, open and previous button with on-image buttons, added animations

    Added

    • Support for many raw formats
    • Up and down keys navigate in similar images
    • Enter key opens item

    Fixed

    • Key commands are now working properly after switching tabs, also they have no effect on other tabs than the sort tab
    • Several crashes or weird behavior when images list is empty
    • Discarded status is now properly updated in image caption

    [0.4.2] - 2022-02-05

    Changed

    • Resize video preview image internally to save memory
    • Optimized image loading time

    Added

    • Snap support for removable media and network if permissions are set

    Fixed

    • Do not pass default folder to dir picker if it does not exist
    • Fixed crash when selecting folder without images

    [0.4.2] - 2022-01-09

    Changed

    • Now reading EXIF files for all image formats, not only for JPEGs
    • Optimized loading of similar images
    • Events now have an update button to be able to move an event after or before another event

    Added

    • Filters and sort options to the item list
    • Some symbols in the GUI

    [0.4.1] - 2022-01-05

    Changed

    • Target directory input field is now always disabled

    Fixed

    • Fixed layout in events view

    [0.4.0] - 2022-01-03

    Changed

    • Layout of commit result list improved

    Added

    • Preview for video files
    • Get taken date from video files metadata
    • Showing also mov files now

    Fixed

    • Fixed selected image after changing folder

    [0.3.3] - 2021-12-29

    Changed

    • C runtime is now linked statically for Windows

    Added

    • Setting to select the target directory name pattern

    Fixed

    • Only able to commit when the target directory is set

    [0.3.2] - 2021-12-23

    Changed

    • Performance and robustness improvements
    • Improved layout of events tab

    Added

    • About information in settings tab
    • Help tab

    Fixed

    • Added a space between file info and event name

    [0.3.1] - 2021-12-12

    Changed

    • No directory is now the default
    • Performance checking for files significantly improved

    Added

    • Checking for images can now be cancelled
    • Events are now sorted by date
    • Error message is shown when an event was edited

    Fixed

    • When selecting a folder without images, the similar images model is now cleared
    • Fixed a crash when a folder was selected with insufficient rights to access

    [0.3.0] - 2021-12-06

    Changed

    • Settings are now stored in the home directory. As a consequence, settings from previous versions are lost

    Added

    • Sieving operations are now displayed in detail
    • Generate a MSI installer package for Windows
    • Generate a snap package for Linux

    Fixed

    • Console window is hidden in Windows version

    [0.2.4] - 2021-11-27

    Added

    • Events are now checked for overlapping dates

    Fixed

    • Start date of an event must now be before or equal to the end date

    [0.2.3] - 2021-11-21

    Added

    • Showing result of commit operation now

    Fixed

    • Moving files from one mount point to the other was always failing

    [0.2.2] - 2021-11-14

    Changed

    • All images are now loaded in a background threads increasing GUI responsiveness
    • Improved similarity detection by using longer hashes and taking image orientation into account

    Added

    • Application icon

    Fixed

    • File item date is now the minimum of created and modified date and not only created date
    • Display file item date in local timezone
    • No longer crash when an image with either width or height 0 is loaded
    • Images were cropped in the similar images list
    • Similarities where not calculated when an image was not decodeable

    [0.2.1] - 2021-10-31

    Changed

    • Folder selection edit is now disabled, since entering something there had no effect

    Fixed

    • While the image similarity calculation is running, no other folder can be selected

    [0.2.0] - 2021-10-25

    Changed

    • Now using sixtyfps v0.1.4

    Added

    • Image hashing to calculate similarities in image contents
    • Settings tab for tuning the similarity calculation

    Fixed

    • If an image has many similar images, a maximum of six are displayed at the same time since the GUI was blocked otherwise
    • Fixed showing the correct text when one of the similar images was selected
    • Fixed event scrollview

    [0.1.3] - 2021-10-21

    Added

    • Renamed executable to image_sieve instead of image-sieve

    Fixed

    • Fixed crashes that could occur when an item was deleted or renamed while ImageSieve is open

    [0.1.2] - 2021-10-10

    Added

    • Added a button to open the current item in an external viewer
    • Release to crates.io

    Fixed

    • Improved overall code style
    • Combined code into single crate

    [0.1.1] - 2021-10-10

    Added

    • Added a confirmation when sieving with deletion

    Fixed

    • Fixed GitHub action for releasing Windows binary
    • Fixed updating events

    [0.1.0] - 2021-10-09

    Added

    • Initial GitHub release
    Source code(tar.gz)
    Source code(zip)
    ffmpeg-release-full-shared.zip(10.22 MB)
    ImageSieve.msi(13.69 MB)
    ImageSieve.msix(13.08 MB)
    image_sieve_Windows_portable.zip(12.80 MB)
Owner
Florian Fetz
Florian Fetz
A simple GUI version of the pH calibration tool written in egui, based on the eframe template.

caliphui A simple GUI version of the pH calibration tool written in egui, based on the eframe template. Usage Native binaries are provided under relea

Peter Dunne 0 Dec 29, 2021
Idiomatic, GTK+-based, GUI library, inspired by Elm, written in Rust

Relm Asynchronous, GTK+-based, GUI library, inspired by Elm, written in Rust. This library is in beta stage: it has not been thoroughly tested and its

null 2.2k Dec 31, 2022
An idiomatic GUI library inspired by Elm and based on gtk4-rs

An idiomatic GUI library inspired by Elm and based on gtk4-rs. Relm4 is a new version of relm that's built from scratch and is compatible with GTK4 an

Aaron Erhardt 722 Dec 31, 2022
A lightweight cross-platform system-monitoring fltk gui application based on sysinfo

Sysinfo-gui A lightweight cross-platform system-monitoring fltk gui application based on sysinfo. The UI design is inspired by stacer. The svg icons a

Mohammed Alyousef 22 Dec 31, 2022
A GUI for NordVPN on Linux that maintains feature parity with the official clients, written with Rust and GTK.

Viking for NordVPN This project aims to provide a fully usable and feature-complete graphical interface for NordVPN on Linux. While it attempts to clo

Jacob Birkett 2 Oct 23, 2022
Neovim GUI written in Rust, using relm4 and gtk4-rs

Reovim Neovim GUI written in Rust, using relm4 and gtk4-rs. Thanks Neovide Configuration To setup font add next line to init.vim set guifont=Cascadia\

songww 70 Dec 13, 2022
An easy-to-use, 2D GUI library written entirely in Rust.

Conrod An easy-to-use, 2D GUI library written entirely in Rust. Guide What is Conrod? A Brief Summary Screenshots and Videos Feature Overview Availabl

PistonDevelopers 3.3k Jan 1, 2023
Cross-platform GUI toolkit written in Rust

Tuix is a cross-platform GUI toolkit written in Rust. The driving principle behind tuix is to be a self-contained, small-as-possible, but still fast,

George Atkinson 166 Dec 13, 2022
A small dice roller app with GUI written in Rust 🦀🎲

?? Mini Dice A small dice roller written in Rust and using the egui library. Demo ?? A short introduction... I started creating Mini Dice with the goa

Angelica Raborar 4 May 16, 2023
A cross-platform GUI library for Rust focused on simplicity and type-safety

A cross-platform GUI library for Rust, inspired by Elm

Héctor Ramón 17.5k Jan 8, 2023
Vviz - Rapid prototyping GUI, and visual printf-style debugging for computer vision development.

vviz Rapid prototyping GUI, and visual printf-style debugging for computer vision development. Its core dependencies are egui and Miniquad. For a full

Hauke Strasdat 20 Dec 15, 2022
A simple, cross-platform GUI automation module for Rust.

AutoPilot AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information,

null 271 Dec 27, 2022
Rust bindings for the FLTK GUI library.

fltk-rs Rust bindings for the FLTK Graphical User Interface library. The FLTK crate is a crossplatform lightweight gui library which can be statically

Mohammed Alyousef 1.1k Jan 9, 2023
Clear Coat is a Rust wrapper for the IUP GUI library.

Clear Coat Clear Coat is a Rust wrapper for the IUP GUI library. IUP uses native controls and has Windows and GTK backends. A macOS backend has been o

Jordan Miner 18 Feb 13, 2021
A cross-platform GUI library for Rust, inspired by Elm

Iced A cross-platform GUI library for Rust focused on simplicity and type-safety. Inspired by Elm. Features Simple, easy-to-use, batteries-included AP

Héctor Ramón 17.5k Jan 2, 2023
Truly cross platform, truly native. multiple backend GUI for rust

WIP: Sauron-native a rust UI library that conquers all platforms ranging from desktop to mobile devices. An attempt to create a truly native, truly cr

Jovansonlee Cesar 627 Jan 5, 2023
A simple news reading GUI app built in Rust

Headlines [WIP] A native GUI app built with Rust using egui. Uses newsapi.org as the source to fetch news articles. This is a WIP and the current stat

creativcoder 89 Dec 29, 2022
Build GUI applications with minimal dependencies in Rust

winapi-app-windows A crate to build applications' windows in Windows using WinAPI. This would be less confusing if the operating system was called som

Lonami 5 Jul 26, 2022
egui: an easy-to-use immediate mode GUI in pure Rust

?? egui: an easy-to-use GUI in pure Rust egui is a simple, fast, and highly portable immediate mode GUI library for Rust. egui runs on the web, native

Emil Ernerfeldt 12.6k Jan 3, 2023