Change the date or time of multiple pictures at a time, with visual previews and drag-and-drop reordering.
- Rust (tested on 1.69.0)
- Node.js (tested on 19.4.0)
- Python 3 (tested on 3.10.9)
- Tauri CLI:
cargo install tauri-cli
- UI dependencies:
cd ui && npm install && cd ..
cargo tauri dev
cargo tauri build
The app is split into two parts: the host
and the ui
. The host is the
application entrypoint and is written in Rust, using
rexiv2 for file metadata
editing, Chrono for date/time,
Tokio for async, and
magic-rust (wrapper around
ImageMagick) to preview/thumbnailify
images. It uses the Tauri framework to interact with the
OS and to open a window for the UI WebView. The UI is written in
TypeScript and bundled with
Vite/Rollup. It uses, among other libraries,
React, Tailwind,
MUI, and a
Polyfill for the Ecma
TC39 Temporal proposal.
The host and UI communicate via the Tauri event
system. The specification for
this two-way API is defined in host/src/host_ui_bridge.rs
. On build, the
host/generate_bindings.py
script automatically generates TypeScript
definitions for the UI (saved in
ui/src/host_ui_bridge/generated-bindings.d.ts
).
The UI is purposefully thin and simply reflects the state on the host. This
state is initialized in host/src/main.rs
and updated in response to messages
from the UI in host/src/handle_message_to_host.rs
.
The picdates library (in picdates/
) is a Node.js module
to extract and change the date of a picture. Since switching from electron to
tauri, it is no longer used but kept for reference. See
host/src/media_datetime.rs
for the ported Rust code.
Code copyright 2023 - Pieter Fiers & Tomas Fiers
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License version 3 as published by the Free
Software Foundation. The license is included in the source code in License.txt
or online at https://www.gnu.org/licenses/.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.