A daemon-based synchronization tool for uploading media files from a Linux desktop to an Immich server.
Mimick monitors local directories (e.g., ~/Pictures, ~/Videos) for new files and automatically uploads them to your Immich instance. It runs securely as a background service and integrates natively with the GNOME desktop environment via a GTK4 / Libadwaita settings window and a StatusNotifier system tray icon.
Note
This project is in BETA. Core features are stable and tested. Please report any issues or edge cases you encounter.
Status: Beta. Supports Immich v1.118+.
| Settings Window | System Tray Menu |
|---|---|
![]() |
|
| Ping Test Dialog | About Dialog |
![]() |
![]() |
- File Monitoring: Watches selected folders for new files and waits for stable size before uploading.
- SHA-1 Checksumming: Deduplication via checksum before upload — exact same logic as the Immich mobile apps.
- Concurrent Uploads: 10 parallel worker tasks stream files directly from disk, keeping RAM usage constant.
- Offline Reliability: Failed uploads are persisted to
~/.cache/mimick/retries.jsonand replayed automatically on next launch. - Connectivity: Automatically switches between Internal (LAN) and External (WAN) URLs based on availability. At least one must be enabled (enforced by the UI).
- Custom Album Mapping: Select an existing remote album, type a custom name, or let the app create an album from the local folder name (e.g.,
~/Pictures/Vacation 2024→ AlbumVacation 2024). - One-Way Sync: Uploads media without modifying local files.
- Security: API Key stored in the system keyring via
secret-tool(libsecret). - Autostart: Optional login startup with desktop-portal permission inside Flatpak and native autostart integration outside Flatpak.
- Startup Catch-Up: On launch, Mimick scans watched folders for media that has not been synced yet and queues only new, changed, or retargeted files.
- Clear Window Controls:
Closehides the settings window, whileQuitstops the app completely. - Desktop Integration:
- GTK4 / Libadwaita settings UI (dark mode by default).
- StatusNotifierItem system tray icon (requires AppIndicator support on GNOME).
The easiest and official way to install Mimick on any Linux distribution is via our Flatpak repository. This ensures you receive automatic updates whenever a new version is released.
Run these commands in your terminal:
flatpak remote-add --user --if-not-exists mimick-repo [https://nicx17.github.io/mimick/mimick.flatpakrepo](https://nicx17.github.io/mimick/mimick.flatpakrepo)flatpak install --user mimick-repo io.github.nicx17.mimickThe published Flatpak repository embeds this signing-key fingerprint:
04E2 9556 E951 B2EA 15D3 A8EE 632E 1BC5 D956 579C
You can inspect the currently published key with:
curl -fsSL https://nicx17.github.io/mimick/mimick.flatpakrepo \
| sed -n 's/^GPGKey=//p' \
| base64 -d > /tmp/mimick-repo-public.gpg
gpg --show-keys --fingerprint /tmp/mimick-repo-public.gpgCompare the printed fingerprint to the value above. The email address alone is not the trust anchor; the fingerprint is.
Launch Mimick from your Application Launcher. The settings window opens automatically on first launch.
- Internal URL — LAN address (e.g.,
http://192.168.1.50:2283). - External URL — WAN/Public address (e.g.,
https://photos.example.com). At least one must be enabled. - API Key — Generate in Immich Web UI under Account Settings > API Keys. Needs Asset and Album read/create permissions.
- Watch Paths — Add folders to monitor with the built-in folder picker. Each folder can be assigned a target Immich album.
- Run on Startup — Enable this in the Behavior section to start Mimick automatically when you log in.
- Save & Restart — Applies your settings and relaunches Mimick automatically.
- Close / Quit —
Closehides the settings window and leaves Mimick running;Quitfully exits the app.
Use the built-in Run on Startup switch in the settings window.
- Flatpak builds request background/autostart permission through the desktop portal.
- Native builds write an autostart desktop entry to
~/.config/autostart/io.github.nicx17.mimick.desktop.
Mimick now uses selected-folder access instead of full home-directory access in Flatpak.
- Add watch folders from the settings window so the file chooser portal can grant access.
- If you are upgrading from an older build that had full home access, re-add your existing watch folders once so the new permission model can take effect.
- Portal-backed folders may appear by name in the UI and logs instead of showing the raw
/run/user/.../doc/...sandbox path.
Mimick does not only sync files created while it is already running.
- On startup, Mimick rescans watched folders and queues media that has not been synced yet.
- A local sync index is used so unchanged files that are already known to be synced are skipped quickly.
- If you change the target Immich album for a watched folder, unchanged files can be reassociated to the new album on the next startup without forcing a full reupload.
- If a previously targeted album was deleted, Mimick refreshes album resolution and recreates or rebinds the target album as needed.
Mimick is a background app, so closing the settings window does not quit it.
- Use Close in the settings window or the window close button to hide the window and keep Mimick running in the tray.
- Use Quit from the tray menu, the settings window, or the launcher action to stop the app completely.
If you prefer to compile Mimick yourself, you can build it natively or package it as a local Flatpak.
- Rust toolchain (
cargo): https://rustup.rs - GTK4 + Libadwaita development headers
Ubuntu / Debian:
sudo apt install libgtk-4-dev libadwaita-1-dev libglib2.0-dev pkg-config build-essential libsecret-1-dev
Fedora:
sudo dnf install gtk4-devel libadwaita-devel libsecret-devel pkg-config
Arch Linux:
sudo pacman -S gtk4 libadwaita libsecret pkgconf base-devel
git clone [https://github.com/nicx17/mimick.git](https://github.com/nicx17/mimick.git)
cd mimick
cargo build --release
# Copy the desktop file and icons from setup/ to ~/.local/share/applications and ~/.local/share/icons for launcher integration
# Run Directly
cargo run # start in background mode
cargo run -- --settings # open the settings window immediately
Logs written to the terminal and to ~/.cache/mimick/mimick.log now include timestamps.
git clone [https://github.com/nicx17/mimick.git](https://github.com/nicx17/mimick.git)
cd mimick
flatpak-builder --user --install --force-clean build-dir io.github.nicx17.mimick.local.yml
flatpak run io.github.nicx17.mimick
Mimick currently publishes a few concrete trust signals:
- signed Flatpak repository metadata
- GitHub release assets with checksums
- CodeQL analysis in GitHub Actions
- CI checks for formatting, linting, tests, and dependency audits
If you install via Flatpak, verify the published signing fingerprint before trusting the repo:
04E2 9556 E951 B2EA 15D3 A8EE 632E 1BC5 D956 579C
Pull requests are welcome. See CONTRIBUTING.md for commit and style guidelines.
- Application icon illustration by Round Icons on Unsplash.
GNU General Public License v3.0 — see LICENSE.


